/// <summary> /// Does the logic behind the sequence simulation /// </summary> internal void DoSimulation(SimulatorWindow window, string outputFileName, SimulatorSettings settings) { FileInfo file = new FileInfo(outputFileName); if (!file.Directory.Exists) { throw new ArgumentException("Could not write to the output directory for " + outputFileName); } if (settings.OutputSequenceCount <= 0) { throw new ArgumentException("'Max Output Sequences Per File' should be greater than zero."); } if (settings.SequenceLength <= 0) { throw new ArgumentException("'Mean Output Length' should be greater than zero."); } string filePrefix; if (String.IsNullOrEmpty(file.Extension)) { filePrefix = file.FullName; } else { filePrefix = file.FullName.Substring(0, file.FullName.IndexOf(file.Extension)); } string filePostfix = "_{0}.fa"; int seqCount = (settings.DepthOfCoverage * Sequence.Count) / settings.SequenceLength; int fileCount = seqCount / settings.OutputSequenceCount; if (seqCount % settings.OutputSequenceCount != 0) { fileCount++; } window.UpdateSimulationStats(seqCount, fileCount); if (results == null) { results = new List <ISequence>(); } else { results.Clear(); } int fileIndex = 1; FastaFormatter formatter = new FastaFormatter(); for (int i = 0; i < seqCount; i++) { results.Add(CreateSubsequence(settings, i)); if (results.Count >= settings.OutputSequenceCount) { FileInfo outFile = new FileInfo(filePrefix + string.Format(filePostfix, fileIndex++)); formatter.Format(results, outFile.FullName); results.Clear(); } } if (results.Count > 0) { FileInfo outFile = new FileInfo(filePrefix + string.Format(filePostfix, fileIndex++)); formatter.Format(results, outFile.FullName); } window.NotifySimulationComplete(); }
public void FastaFormatterWithParseValidateFormat() { // Gets the expected sequence from the Xml string filePath = _utilityObj._xmlUtil.GetTextValue(Constants.SimpleFastaNodeName, Constants.FilePathNode); Assert.IsTrue(File.Exists(filePath)); // Logs information to the log file ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "FastA Formatter BVT: File Exists in the Path '{0}'.", filePath)); using (FastaParser parser = new FastaParser()) { FastaFormatter formatter = new FastaFormatter(); // Read the original file IList <ISequence> seqsOriginal = null; seqsOriginal = parser.Parse(filePath); Assert.IsNotNull(seqsOriginal); // Use the formatter to write the original sequences to a temp file ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "FastA Formatter BVT: Creating the Temp file '{0}'.", Constants.FastaTempFileName)); using (TextWriter writer = new StreamWriter(Constants.FastaTempFileName)) { foreach (Sequence s in seqsOriginal) { formatter.Format(s, writer); } } // Read the new file, then compare the sequences IList <ISequence> seqsNew = null; seqsNew = parser.Parse(Constants.FastaTempFileName); Assert.IsNotNull(seqsNew); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "FastA Formatter BVT: New Sequence is '{0}'.", seqsNew[0].ToString())); // Now compare the sequences. int countOriginal = seqsOriginal.Count(); int countNew = seqsNew.Count(); Assert.AreEqual(countOriginal, countNew); ApplicationLog.WriteLine("The Number of sequences are matching."); int i; for (i = 0; i < countOriginal; i++) { Assert.AreEqual(seqsOriginal[i].ID, seqsNew[i].ID); string orgSeq = seqsOriginal[i].ToString(); string newSeq = seqsNew[i].ToString(); Assert.AreEqual(orgSeq, newSeq); Console.WriteLine(string.Format((IFormatProvider)null, "FastA Formatter BVT: The FASTA sequences '{0}' are matching with Format() method and is as expected.", seqsNew[i].ID)); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "FastA Formatter BVT: The FASTA sequences '{0}' are matching with Format() method.", seqsNew[i].ID)); } } // Passed all the tests, delete the tmp file. If we failed an Assert, // the tmp file will still be there in case we need it for debugging. File.Delete(Constants.FastaTempFileName); ApplicationLog.WriteLine("Deleted the temp file created."); }
/// <summary> /// CreateJob() to get job id and control id and Submit job /// using input sequence with job id and control id /// </summary> /// <param name="sequence">input sequences</param> /// <param name="parameters">input params</param> /// <returns>result params with job id and control id</returns> public ServiceParameters SubmitRequest(IList <ISequence> sequence, ClustalWParameters parameters) { ServiceParameters result = new ServiceParameters(); if (null == sequence) { throw new ArgumentNullException("Sequence"); } if (null == parameters) { throw new ArgumentNullException("Parameters"); } // ClusterOption = biosim cbsum1 cbsum2k8 cbsusrv05 cbsum2 or Auto string[] output = _baseClient.CreateJob(tAppId.P_CLUSTALW, "test_BioHPC_Job", "1", parameters.Values[ClustalWParameters.Email].ToString(), string.Empty, parameters.Values[ClustalWParameters.ClusterOption].ToString()); if (!output[0].Contains(ERROR)) { result.JobId = output[1]; result.Parameters.Add(CONTROLID, output[2]); AppInputData inputData = _baseClient.InitializeApplicationParams(tAppId.P_CLUSTALW, "test_BioHPC_Job"); FastaFormatter formatter = new FastaFormatter(); StringBuilder inputSequence = new StringBuilder(); foreach (ISequence seq in sequence) { inputSequence.AppendLine(formatter.FormatString(seq)); } //formatter.Format(sequence, "temp"); //StreamReader reader = new StreamReader("temp"); inputData.clustalw.inputsource = QuerySrcType.paste; inputData.clustalw.inputstring = inputSequence.ToString(); inputData.clustalw.isDNA = false; inputData.clustalw.action = (ClwActions)Enum.Parse(typeof(ClwActions), parameters.Values[ClustalWParameters.ActionAlign].ToString()); inputData.clustalw.email_notify = true; _baseClient.SubmitJob(result.JobId, result.Parameters[CONTROLID].ToString(), inputData); result.Parameters.Add(SUBMISSONRESULT, SUCCESS); // Only if the event is registered, invoke the thread if (null != RequestCompleted) { // Start the BackGroundThread to check the status of job _workerThread = new BackgroundWorker(); _workerThread.WorkerSupportsCancellation = true; _workerThread.DoWork += new DoWorkEventHandler(ProcessRequestThread); _workerThread.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedRequestThread); _workerThread.RunWorkerAsync(result); } } else { result.Parameters.Add(SUBMISSONRESULT, output[0]); } return(result); }
/// <summary> /// Submit the search request with the user supplied configuration parameters /// and sequence. Implementation should make use of the MBF.IO formatters /// to convert the sequence into the web interface compliant sequence format. /// This method performs parameter validation and throw Exception on invalid input. /// </summary> /// <remarks>An exception is thrown if the request does not succeed.</remarks> /// <param name="sequence">The sequence to search with</param> /// <param name="parameters">Blast input parameters</param> /// <returns>Request Identifier</returns> public string SubmitRequest(ISequence sequence, BlastParameters parameters) { if (null != sequence) { FastaFormatter formatter = new FastaFormatter(); parameters.Add("Query", formatter.FormatString(sequence)); } if (null == parameters) { throw new ArgumentNullException("parameters"); } if (!string.IsNullOrEmpty(Configuration.EmailAddress)) { if (!parameters.Settings.ContainsKey(PARAMETEREMAIL)) { parameters.Add(PARAMETEREMAIL, Configuration.EmailAddress); } } string requestIdentifier = string.Empty; // Validate the Parameter ParameterValidationResult valid = ValidateParameters(parameters); if (!valid.IsValid) { throw new Exception(valid.ValidationErrors); } parameters.Add(PARAMETERCOMMAND, COMMANDPUT); WebAccessor accessor = new WebAccessor(); WebAccessorResponse webAccessorResponse; if (Configuration.UseBrowserProxy) { accessor.GetBrowserProxy(); } webAccessorResponse = accessor.SubmitHttpRequest( ServiceUri, true, // do POST parameters.Settings); // request parameters if (!webAccessorResponse.IsSuccessful) { // failed accessor.Close(); throw new Exception(String.Format(CultureInfo.InvariantCulture, Resources.HTTPSUBMITFAILED, webAccessorResponse.StatusDescription)); } string info = ExtractInfoSection(webAccessorResponse.ResponseString); if (!String.IsNullOrEmpty(info)) { int ridStart = info.IndexOf("RID = ", StringComparison.OrdinalIgnoreCase); if (ridStart >= 0) { ridStart += "RID = ".Length; int ridEnd = info.IndexOf('\n', ridStart); if (ridEnd >= 0) { requestIdentifier = info.Substring(ridStart, ridEnd - ridStart); } } } accessor.Close(); if (string.IsNullOrEmpty(requestIdentifier)) { string message = String.Format(CultureInfo.InvariantCulture, Resources.RIDEXTRACTFAILED, ExtractError(webAccessorResponse.ResponseString)); throw new Exception(message); } // Only if the event is registered, invoke the thread if (null != RequestCompleted) { ThreadParameter threadParameter = new ThreadParameter( requestIdentifier, sequence, parameters); // Start the BackGroundThread to check the status of job _workerThread = new BackgroundWorker(); _workerThread.WorkerSupportsCancellation = true; _workerThread.DoWork += new DoWorkEventHandler(ProcessRequestThread); _workerThread.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedRequestThread); _workerThread.RunWorkerAsync(threadParameter); } return(requestIdentifier); }