public new void InitializeWorkflow()
        {
            _resultsFolder = string.IsNullOrEmpty(ExecutorParameters.OutputFolderBase) ? RunUtilities.GetDatasetParentFolder(DatasetPath) : GetResultsFolder(ExecutorParameters.OutputFolderBase);

            MassTagsForTargetedAlignment = GetMassTagTargets(GetTargetFilePathForIqAlignment());

            var targetsFilePathIsEmpty = (String.IsNullOrEmpty(ExecutorParameters.TargetsFilePath));

            var currentTargetsFilePath = targetsFilePathIsEmpty ? TryFindTargetsForCurrentDataset() : ExecutorParameters.TargetsFilePath;

            Targets = CreateTargets(ExecutorParameters.TargetType, currentTargetsFilePath);

            if (ExecutorParameters.TargetType == Globals.TargetType.LcmsFeature)
            {
                UpdateTargetMissingInfo();
            }

            if (_workflowParameters == null)
            {
                _workflowParameters = WorkflowParameters.CreateParameters(ExecutorParameters.WorkflowParameterFile);
                _workflowParameters.LoadParameters(ExecutorParameters.WorkflowParameterFile);
            }

            if (ExecutorParameters.TargetedAlignmentIsPerformed)
            {
                if (string.IsNullOrEmpty(ExecutorParameters.TargetedAlignmentWorkflowParameterFile))
                {
                    throw new FileNotFoundException(
                              "Cannot initialize workflow. TargetedAlignment is requested but TargetedAlignmentWorkflowParameter file is not found. Check path for the 'TargetedAlignmentWorkflowParameterFile' ");
                }


                TargetedAlignmentWorkflowParameters = new TargetedAlignerWorkflowParameters();
                TargetedAlignmentWorkflowParameters.LoadParameters(ExecutorParameters.TargetedAlignmentWorkflowParameterFile);
            }

            TargetedWorkflow = TargetedWorkflow.CreateWorkflow(_workflowParameters);
        }
        public void InitializeWorkflow()
        {
            if (string.IsNullOrEmpty(ExecutorParameters.OutputFolderBase))
            {
                _resultsFolder = RunUtilities.GetDatasetParentFolder(DatasetPath);
            }
            else
            {
                _resultsFolder = GetResultsFolder(ExecutorParameters.OutputFolderBase);
            }

            if (ExecutorParameters.TargetedAlignmentIsPerformed)
            {
                MassTagsForTargetedAlignment = GetMassTagTargets(GetTargetFilePathForIqAlignment());
            }


            var targetsFilePathIsEmpty = (String.IsNullOrEmpty(ExecutorParameters.TargetsFilePath));

            string currentTargetsFilePath;

            if (targetsFilePathIsEmpty)
            {
                currentTargetsFilePath = TryFindTargetsForCurrentDataset();   //check for a _targets file specifically associated with dataset
            }
            else
            {
                currentTargetsFilePath = ExecutorParameters.TargetsFilePath;
            }

            Targets = CreateTargets(ExecutorParameters.TargetType, currentTargetsFilePath);

            Check.Ensure(Targets != null && Targets.TargetList.Count > 0,
                         "Target massTags is empty (or all peptides contain unknown modifications). Check the path to the massTag data file.");

            IqLogger.Log.Info("Total targets loaded= " + Targets.TargetList.Count);


            if (ExecutorParameters.TargetType == Globals.TargetType.LcmsFeature)
            {
                UpdateTargetMissingInfo();
            }

            if (TargetedWorkflow == null)
            {
                if (_workflowParameters == null)
                {
                    _workflowParameters = WorkflowParameters.CreateParameters(ExecutorParameters.WorkflowParameterFile);
                    _workflowParameters.LoadParameters(ExecutorParameters.WorkflowParameterFile);
                }
                TargetedWorkflow = TargetedWorkflow.CreateWorkflow(_workflowParameters);
            }
            else
            {
                _workflowParameters = TargetedWorkflow.WorkflowParameters;
            }

            if (ExecutorParameters.TargetedAlignmentIsPerformed)
            {
                if (string.IsNullOrEmpty(ExecutorParameters.TargetedAlignmentWorkflowParameterFile))
                {
                    throw new FileNotFoundException(
                              "Cannot initialize workflow. TargetedAlignment is requested but TargetedAlignmentWorkflowParameter file is not found. Check path for the 'TargetedAlignmentWorkflowParameterFile' ");
                }


                TargetedAlignmentWorkflowParameters = new TargetedAlignerWorkflowParameters();
                TargetedAlignmentWorkflowParameters.LoadParameters(ExecutorParameters.TargetedAlignmentWorkflowParameterFile);
            }
        }
        /// <summary>
        /// A factory method for creating the WorkflowParameters class. Based on the 'WorkflowType' parameter of the xml file.
        /// </summary>
        /// <param name="xmlFilepath"></param>
        /// <returns></returns>
        public static WorkflowParameters CreateParameters(string xmlFilepath)
        {
            Check.Require(File.Exists(xmlFilepath), "Workflow parameter file could not be loaded. File not found: " + xmlFilepath);
            var doc      = XDocument.Load(xmlFilepath);
            var xElement = doc.Element("WorkflowParameters");

            if (xElement == null)
            {
                throw new Exception("WorkflowParameters element not found in " + xmlFilepath);
            }

            var query = xElement.Elements();

            var parameterTableFromXML = new Dictionary <string, string>();

            foreach (var item in query)
            {
                var paramName  = item.Name.ToString();
                var paramValue = item.Value;

                if (!parameterTableFromXML.ContainsKey(paramName))
                {
                    parameterTableFromXML.Add(paramName, paramValue);
                }
            }

            Globals.TargetedWorkflowTypes workflowType;

            var successfulEnum = Enum.TryParse(parameterTableFromXML["WorkflowType"], out workflowType);

            WorkflowParameters workflowParameters;

            if (successfulEnum)
            {
                switch (workflowType)
                {
                case Globals.TargetedWorkflowTypes.Undefined:
                    workflowParameters = new BasicTargetedWorkflowParameters();
                    break;

                case Globals.TargetedWorkflowTypes.UnlabelledTargeted1:
                    workflowParameters = new BasicTargetedWorkflowParameters();
                    break;

                case Globals.TargetedWorkflowTypes.O16O18Targeted1:
                    workflowParameters = new O16O18WorkflowParameters();
                    break;

                case Globals.TargetedWorkflowTypes.N14N15Targeted1:
                    workflowParameters = new N14N15Workflow2Parameters();
                    break;

                case Globals.TargetedWorkflowTypes.SipperTargeted1:
                    workflowParameters = new SipperTargetedWorkflowParameters();
                    break;

                case Globals.TargetedWorkflowTypes.TargetedAlignerWorkflow1:
                    workflowParameters = new TargetedAlignerWorkflowParameters();
                    break;

                case Globals.TargetedWorkflowTypes.BasicTargetedWorkflowExecutor1:
                    workflowParameters = new BasicTargetedWorkflowExecutorParameters();
                    break;

                case Globals.TargetedWorkflowTypes.LcmsFeatureTargetedWorkflowExecutor1:
                    workflowParameters = new LcmsFeatureTargetedWorkflowExecutorParameters();
                    break;

                case Globals.TargetedWorkflowTypes.SipperWorkflowExecutor1:
                    workflowParameters = new SipperWorkflowExecutorParameters();
                    break;

                case Globals.TargetedWorkflowTypes.TopDownTargeted1:
                    workflowParameters = new TopDownTargetedWorkflowParameters();
                    break;

                case Globals.TargetedWorkflowTypes.TopDownTargetedWorkflowExecutor1:
                    workflowParameters = new TopDownTargetedWorkflowExecutorParameters();
                    break;

                case Globals.TargetedWorkflowTypes.UIMFTargetedMSMSWorkflowCollapseIMS:
                    workflowParameters = new UIMFTargetedMSMSWorkflowCollapseIMSParameters();
                    break;

                default:
                    workflowParameters = new BasicTargetedWorkflowParameters();
                    break;
                }
            }
            else
            {
                throw new ArgumentOutOfRangeException(
                          "Tried to create WorkflowParameter object. But WorkflowType is unknown.");
            }

            workflowParameters.LoadParameters(xmlFilepath);

            return(workflowParameters);
        }