sumFile = globaldata->getTreeFile() + ".uwsummary";
openOutputFile(sumFile, outSum);
- setGroups(); //sets users groups to analyze
+ util = new SharedUtil();
+ util->setGroups(globaldata->Groups, tmap->namesOfGroups, allGroups, numGroups, "unweighted"); //sets the groups the user wants to analyze
+ util->getCombos(groupComb, globaldata->Groups, numComp);
+ globaldata->setGroups("");
+
+ //ABC
+ if (numComp != 1) {
+ groupComb.push_back(allGroups);
+ numComp++;
+ }
+
+
convert(globaldata->getIters(), iters); //how many random trees to generate
unweighted = new Unweighted(tmap);
/***********************************************************/
int UnifracUnweightedCommand::execute() {
try {
-
+
userData.resize(numComp,0); //data[0] = unweightedscore
randomData.resize(numComp,0); //data[0] = unweightedscore
//create new tree with same num nodes and leaves as users
-
+
+ outSum << "Tree#" << '\t' << "Groups" << '\t' << "UWScore" <<'\t' << "UWSig" << endl;
+ cout << "Tree#" << '\t' << "Groups" << '\t' << "UWScore" << '\t' << "UWSig" << endl;
+
//get pscores for users trees
for (int i = 0; i < T.size(); i++) {
counter = 0;
unweightedFile = globaldata->getTreeFile() + toString(i+1) + ".unweighted";
unweightedFileout = globaldata->getTreeFile() + "temp." + toString(i+1) + ".unweighted";
- //column headers
- outSum << "Tree# " << i+1 << endl;
- outSum << "Comb" << '\t' << "UWScore" << '\t' << '\t' << "UWSig" << endl;
-
+
+ outSum << i+1 << '\t';
+ cout << i+1 << '\t';
+
//get unweighted for users tree
rscoreFreq.resize(numComp);
rCumul.resize(numComp);
utreeScores.resize(numComp);
UWScoreSig.resize(numComp);
- cout << "Processing tree " << i+1 << endl;
userData = unweighted->getValues(T[i]); //userData[0] = unweightedscore
//output scores for each combination
for(int k = 0; k < numComp; k++) {
//saves users score
utreeScores[k].push_back(userData[k]);
+
}
//get unweighted scores for random trees
randomData = unweighted->getValues(T[i], "", "");
for(int k = 0; k < numComp; k++) {
-//cout << "iter " << j << " comp " << k << " = " << randomData[k] << endl;
//add trees unweighted score to map of scores
it2 = rscoreFreq[k].find(randomData[k]);
if (it2 != rscoreFreq[k].end()) {//already have that score
//add randoms score to validscores
validScores[randomData[k]] = randomData[k];
}
+
}
for(int a = 0; a < numComp; a++) {
UWScoreSig[a].push_back(rCumul[a][userData[a]]);
}
+
+
printUnweightedFile();
printUWSummaryFile();
UWScoreSig.clear();
}
//reset groups parameter
- globaldata->Groups.clear(); globaldata->setGroups("");
+ globaldata->Groups.clear();
outSum.close();
return 0;
//format output
outSum.setf(ios::fixed, ios::floatfield); outSum.setf(ios::showpoint);
-
+
//print each line
+
for(int a = 0; a < numComp; a++) {
- outSum << setprecision(6) << groupComb[a] << '\t' << '\t' << utreeScores[a][0] << '\t' << UWScoreSig[a][0] << endl;
- cout << setprecision(6) << groupComb[a] << '\t' << '\t' << utreeScores[a][0] << '\t' << UWScoreSig[a][0] << endl;
+ if (UWScoreSig[a][0] > (1/(float)iters)) {
+ outSum << setprecision(6) << groupComb[a] << '\t' << utreeScores[a][0] << '\t' << setprecision(globaldata->getIters().length()) << UWScoreSig[a][0] << endl;
+ cout << setprecision(6) << groupComb[a] << '\t' << utreeScores[a][0] << '\t' << setprecision(globaldata->getIters().length()) << UWScoreSig[a][0] << endl;
+ }else {
+ outSum << setprecision(6) << groupComb[a] << '\t' << utreeScores[a][0] << '\t' << setprecision(globaldata->getIters().length()) << "<" << (1/float(iters)) << endl;
+ cout << setprecision(6) << groupComb[a] << '\t' << utreeScores[a][0] << '\t' << setprecision(globaldata->getIters().length()) << "<" << (1/float(iters)) << endl;
+ }
}
}
exit(1);
}
}
-/***********************************************************/
-
-void UnifracUnweightedCommand::setGroups() {
- try {
- string allGroups = "";
- numGroups = 0;
- //if the user has not entered specific groups to analyze then do them all
- if (globaldata->Groups.size() != 0) {
- if (globaldata->Groups[0] != "all") {
- //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;
- for (int i = 0; i < tmap->namesOfGroups.size(); i++) {
- globaldata->Groups.push_back(tmap->namesOfGroups[i]);
- numGroups++;
- allGroups += tmap->namesOfGroups[i];
- }
- }else {
- for (int i = 0; i < globaldata->Groups.size(); i++) {
- allGroups += globaldata->Groups[i];
- numGroups++;
- }
- }
- }else{//user has enter "all" and wants the default groups
- for (int i = 0; i < tmap->namesOfGroups.size(); i++) {
- globaldata->Groups.push_back(tmap->namesOfGroups[i]);
- numGroups++;
- allGroups += tmap->namesOfGroups[i];
- }
- globaldata->setGroups("");
- }
- }else {
- for (int i = 0; i < tmap->namesOfGroups.size(); i++) {
- allGroups += tmap->namesOfGroups[i];
- }
- numGroups = 1;
- }
-
- //calculate number of comparsions
- numComp = 0;
- for (int r=0; r<numGroups; r++) {
- for (int l = r+1; l < numGroups; l++) {
- groupComb.push_back(globaldata->Groups[r]+globaldata->Groups[l]);
- numComp++;
- }
- }
-
- //ABC
- if (numComp != 1) {
- groupComb.push_back(allGroups);
- numComp++;
- }
- }
- catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the UnifracUnweightedCommand class Function setGroups. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the UnifracUnweightedCommand class function setGroups. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
-
-}
/*****************************************************************/
void UnifracUnweightedCommand::initFile(string label){
string inputBuffer;
getline(inFile, inputBuffer);
- out << inputBuffer << '\t' << label + "Score" << '\t' << label + "RandFreq" << '\t' << label + "RandCumul" << endl;
+ out << inputBuffer << '\t' << label + "RandFreq" << '\t' << label + "RandCumul" << endl;
}else{
openOutputFile(unweightedFileout, out);
out << label + "Score" << '\t' << label + "RandFreq" << '\t' << label + "RandCumul" << endl;
if(counter != 0){
string inputBuffer;
getline(inFile, inputBuffer);
+// out << inputBuffer << setprecision(6) << '\t' << data[0] << setprecision(globaldata->getIters().length()) << '\t' << data[1] << '\t' << data[2] << endl;
- out << inputBuffer << setprecision(6) << '\t' << data[0] << '\t' << data[1] << '\t' << data[2] << endl;
+ out << inputBuffer << '\t' << setprecision(6) << data[0] << setprecision(globaldata->getIters().length()) << '\t' << data[1] << '\t' << data[2] << endl;
}
else{
- out << setprecision(6) << data[0] << '\t' << data[1] << '\t' << data[2] << endl;
+ out << setprecision(6) << data[0] << setprecision(globaldata->getIters().length()) << '\t' << data[1] << '\t' << data[2] << endl;
}
}