X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=makegroupcommand.cpp;h=f567fbda600cecf76338c9081e10d51a872ecbc3;hp=24c2de2e5de0499bae2ef1366987090fefa5de5f;hb=0319c36f068f092c766e1bff34b3554c1858255a;hpb=e21aedb9ffeabff18207d53e9cc5420d2e30a5b2 diff --git a/makegroupcommand.cpp b/makegroupcommand.cpp index 24c2de2..f567fbd 100644 --- a/makegroupcommand.cpp +++ b/makegroupcommand.cpp @@ -8,6 +8,7 @@ */ #include "makegroupcommand.h" +#include "sequence.hpp" //********************************************************************************************************************** @@ -44,6 +45,7 @@ MakeGroupCommand::MakeGroupCommand(string option) { string inputDir = validParameter.validFile(parameters, "inputdir", false); if (inputDir == "not found"){ inputDir = ""; } + filename = outputDir; fastaFileName = validParameter.validFile(parameters, "fasta", false); if (fastaFileName == "not found") { m->mothurOut("fasta is a required parameter for the make.group command."); m->mothurOutEndLine(); abort = true; } @@ -65,18 +67,24 @@ MakeGroupCommand::MakeGroupCommand(string option) { in.close(); if (ableToOpen == 1) { - m->mothurOut(fastaFileNames[i] + " will be disregarded."); m->mothurOutEndLine(); //erase from file list fastaFileNames.erase(fastaFileNames.begin()+i); i--; - } + }else{ filename += getRootName(getSimpleName(fastaFileNames[i])); } } + filename += "groups"; + //make sure there is at least one valid file left if (fastaFileNames.size() == 0) { m->mothurOut("no valid files."); m->mothurOutEndLine(); abort = true; } } - + + groups = validParameter.validFile(parameters, "groups", false); + if (groups == "not found") { m->mothurOut("groups is a required parameter for the make.group command."); m->mothurOutEndLine(); abort = true; } + else { splitAtDash(groups, groupsNames); } + + if (groupsNames.size() != fastaFileNames.size()) { m->mothurOut("You do not have the same number of valid fastfile files as groups. This could be because we could not open a fastafile."); m->mothurOutEndLine(); abort = true; } } } @@ -94,24 +102,12 @@ MakeGroupCommand::~MakeGroupCommand(){ } void MakeGroupCommand::help(){ try { - m->mothurOut("The align.seqs command reads a file containing sequences and creates an alignment file and a report file.\n"); - m->mothurOut("The align.seqs command parameters are template, candidate, search, ksize, align, match, mismatch, gapopen and gapextend.\n"); - m->mothurOut("The template and candidate parameters are required. You may enter multiple fasta files by separating their names with dashes. ie. fasta=abrecovery.fasta-amzon.fasta \n"); - m->mothurOut("The search parameter allows you to specify the method to find most similar template. Your options are: suffix, kmer and blast. The default is kmer.\n"); - m->mothurOut("The align parameter allows you to specify the alignment method to use. Your options are: gotoh, needleman, blast and noalign. The default is needleman.\n"); - m->mothurOut("The ksize parameter allows you to specify the kmer size for finding most similar template to candidate. The default is 8.\n"); - m->mothurOut("The match parameter allows you to specify the bonus for having the same base. The default is 1.0.\n"); - m->mothurOut("The mistmatch parameter allows you to specify the penalty for having different bases. The default is -1.0.\n"); - m->mothurOut("The gapopen parameter allows you to specify the penalty for opening a gap in an alignment. The default is -2.0.\n"); - m->mothurOut("The gapextend parameter allows you to specify the penalty for extending a gap in an alignment. The default is -1.0.\n"); - m->mothurOut("The flip parameter is used to specify whether or not you want mothur to try the reverse complement if a sequence falls below the threshold. The default is false.\n"); - m->mothurOut("The threshold is used to specify a cutoff at which an alignment is deemed 'bad' and the reverse complement may be tried. The default threshold is 0.50, meaning 50% of the bases are removed in the alignment.\n"); - m->mothurOut("If the flip parameter is set to true the reverse complement of the sequence is aligned and the better alignment is reported.\n"); - m->mothurOut("The default for the threshold parameter is 0.50, meaning at least 50% of the bases must remain or the sequence is reported as potentially reversed.\n"); - m->mothurOut("The align.seqs command should be in the following format: \n"); - m->mothurOut("align.seqs(template=yourTemplateFile, candidate=yourCandidateFile, align=yourAlignmentMethod, search=yourSearchmethod, ksize=yourKmerSize, match=yourMatchBonus, mismatch=yourMismatchpenalty, gapopen=yourGapopenPenalty, gapextend=yourGapExtendPenalty) \n"); - m->mothurOut("Example align.seqs(candidate=candidate.fasta, template=core.filtered, align=kmer, search=gotoh, ksize=8, match=2.0, mismatch=3.0, gapopen=-2.0, gapextend=-1.0)\n"); - m->mothurOut("Note: No spaces between parameter labels (i.e. candidate), '=' and parameters (i.e.yourFastaFile).\n\n"); + m->mothurOut("The make.group command reads a fasta file or series of fasta files and creates a groupfile.\n"); + m->mothurOut("The make.group command parameters are fasta and groups, both are required.\n"); + m->mothurOut("The make.group command should be in the following format: \n"); + m->mothurOut("make.group(fasta=yourFastaFiles, groups=yourGroups. \n"); + m->mothurOut("Example make.group(fasta=seqs1.fasta-seq2.fasta-seqs3.fasta, groups=A-B-C)\n"); + m->mothurOut("Note: No spaces between parameter labels (i.e. fasta), '=' and parameters (i.e.yourFastaFiles).\n\n"); } catch(exception& e) { m->errorOut(e, "MakeGroupCommand", "help"); @@ -126,10 +122,27 @@ int MakeGroupCommand::execute(){ try { if (abort == true) { return 0; } + ofstream out; + openOutputFile(filename, out); + + for (int i = 0; i < fastaFileNames.size(); i++) { + + ifstream in; + openInputFile(fastaFileNames[i], in); + + while (!in.eof()) { + + Sequence seq(in); gobble(in); + + if (seq.getName() != "") { out << seq.getName() << '\t' << groupsNames[i] << endl; } + } + in.close(); + } + + out.close(); m->mothurOutEndLine(); - m->mothurOut("Output File Names: "); m->mothurOutEndLine(); - //for (int i = 0; i < outputNames.size(); i++) { m->mothurOut(outputNames[i]); m->mothurOutEndLine(); } + m->mothurOut("Output File Name: " + filename); m->mothurOutEndLine(); m->mothurOutEndLine(); return 0; @@ -139,4 +152,6 @@ int MakeGroupCommand::execute(){ exit(1); } } +//********************************************************************************************************************** +