@Override
 @SuppressWarnings(value = "unchecked")
 public RunImportData constructRunImportData() {
   // Instanciate the DOM document
   DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
   docFactory.setIgnoringComments(true);
   docFactory.setIgnoringElementContentWhitespace(true);
   docFactory.setValidating(false);
   DocumentBuilder docBuilder;
   Document xmlDoc = null;
   try {
     docBuilder = docFactory.newDocumentBuilder();
     xmlDoc = docBuilder.parse(new InputSource("./LC480.xml"));
   } catch (Exception ex) {
     Exceptions.printStackTrace(ex);
   }
   // Setup the objects need for the import
   // Setup the Run object
   //            Run run = new RunImpl();
   // Set the run name and date
   Run run = new RunImpl();
   // Retrieve the xml file
   // For development purposes, just use an example xml file
   //        File lcRdmlFile = IOUtilities.openXmlFile("Lightcycler XML Data Import");
   //        if (lcRdmlFile == null) {
   //            return null;
   //        }
   // Setup the profile arraylists
   ArrayList<SampleProfile> sampleProfileList = Lists.newArrayList();
   ArrayList<CalibrationProfile> calbnProfileList = Lists.newArrayList();
   // Determine the strandedness of the majority of the Targets...too bad that this is not provided
   // by the instrument
   TargetStrandedness targetStrandedness = RunImportUtilities.isTheTargetSingleStranded();
   // Get the all of the profile nodes
   NodeList profileNodeList = xmlDoc.getElementsByTagName("series");
   // Cycle through all of the profile nodes
   for (int i = 0; i < profileNodeList.getLength(); i++) {
     // TODO determine whether this profile is sample or calibration
     Profile profile = createProfileType(run);
     Element profileElement = (Element) profileNodeList.item(i);
     String wellLabel = profileElement.getAttribute("title");
     // TODO parse the well label, sample and amplicon name from the wellLabel
     NodeList cycleList = profileElement.getElementsByTagName("point");
     // Collect and set the Fc reading
     profile.setFcReadings(retrieveFcReadings(cycleList));
     if (CalibrationProfile.class.isAssignableFrom(profile.getClass())) {
       CalibrationProfile calProfile = (CalibrationProfile) profile;
       calbnProfileList.add(calProfile);
     } else {
       SampleProfile sampleProfile = (SampleProfile) profile;
       sampleProfileList.add(sampleProfile);
     }
   }
   return null;
 }
 /**
  * This conducts both nonlinear regression-derived Fb subtraction and baseline slope correction.
  *
  * @param profile
  */
 private void conductBaselineCorrection() {
   // Start with correcting for the NR-derived Fb slope
   double[] rawFcReadings = profile.getRawFcReadings();
   double[] processedFcDataset = new double[rawFcReadings.length]; // The new optimized Fc dataset
   // This assumes that nonlinear regression has been conducted AND it was successfully completed
   double nrFb = profile.getNrFb(); // The regression derived Fb
   double nrFbSlope = profile.getNrFbSlope(); // The regression-derived Fb slope
   for (int i = 0; i < processedFcDataset.length; i++) {
     processedFcDataset[i] = rawFcReadings[i] - nrFb - (nrFbSlope * (i + 1));
   }
   profile.setFcReadings(processedFcDataset);
 }