X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=unifracunweightedcommand.cpp;h=77069443c2fd26a0cebbabf4dd661e1d37288030;hb=b2dca66a02f8f82aa5528e531eace60fbbd2967b;hp=8adff2d896f811d46e80b806acf45261d759c69b;hpb=d037597badc8d18e235c59f0c1114180edb7f98f;p=mothur.git diff --git a/unifracunweightedcommand.cpp b/unifracunweightedcommand.cpp index 8adff2d..7706944 100644 --- a/unifracunweightedcommand.cpp +++ b/unifracunweightedcommand.cpp @@ -23,6 +23,23 @@ UnifracUnweightedCommand::UnifracUnweightedCommand() { distFile = globaldata->getTreeFile() + ".uwdistrib"; openOutputFile(distFile, outDist); + //if the user has not entered specific groups to analyze then do them all + if (globaldata->Groups.size() != 0) { + //check that groups are valid + for (int i = 0; i < globaldata->Groups.size(); i++) { + if (tmap->isValidGroup(globaldata->Groups[i]) != true) { + cout << globaldata->Groups[i] << " is not a valid group, and will be disregarded." << endl; + // erase the invalid group from globaldata->Groups + globaldata->Groups.erase (globaldata->Groups.begin()+i); + } + } + + //if the user only entered invalid groups + if (globaldata->Groups.size() == 0) { + cout << "When using the groups parameter you must have at least 1 valid group. I will run the command using all the groups in your groupfile." << endl; + } + } + convert(globaldata->getIters(), iters); //how many random trees to generate unweighted = new Unweighted(tmap); @@ -93,6 +110,8 @@ int UnifracUnweightedCommand::execute() { outDist << i+1 << '\t' << '\t'<< j+1 << '\t' << '\t' << randomData[0] << endl; } + saveRandomScores(); //save all random scores for unweighted file + //find the signifigance of the score float rcumul = 0.0000; for (it = rscoreFreq.begin(); it != rscoreFreq.end(); it++) { @@ -105,8 +124,7 @@ int UnifracUnweightedCommand::execute() { //save the signifigance of the users score for printing later UWScoreSig.push_back(rCumul[userData[0]]); - saveRandomScores(); //save all random scores for unweighted file - + //clear random data rscoreFreq.clear(); //you clear this because in the summary file you want the unweighted signifinance to be relative to these 1000 trees. rCumul.clear(); @@ -207,15 +225,14 @@ void UnifracUnweightedCommand::printUWSummaryFile() { /***********************************************************/ void UnifracUnweightedCommand::saveRandomScores() { try { - //update total map with new random scores for (it = rscoreFreq.begin(); it != rscoreFreq.end(); it++) { //does this score already exist in the total map it2 = totalrscoreFreq.find(it->first); //if yes then add them if (it2 != totalrscoreFreq.end()) { - it2->second += it->second; + totalrscoreFreq[it->first] += rscoreFreq[it->first]; }else{ //its a new score - totalrscoreFreq[it->first] = 1; + totalrscoreFreq[it->first] = rscoreFreq[it->first]; } } }