}
}
/**************************************************************************************************/
+vector<double> MothurOut::getAverages(vector< vector<double> >& dists) {
+ try{
+ vector<double> averages; //averages.resize(numComp, 0.0);
+ for (int i = 0; i < dists[0].size(); i++) { averages.push_back(0.0); }
+
+ for (int thisIter = 0; thisIter < dists.size(); thisIter++) {
+ for (int i = 0; i < dists[thisIter].size(); i++) {
+ averages[i] += dists[thisIter][i];
+ }
+ }
+
+ //finds average.
+ for (int i = 0; i < averages.size(); i++) { averages[i] /= (double) dists.size(); }
+
+ return averages;
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "getAverages");
+ exit(1);
+ }
+}
+/**************************************************************************************************/
+vector<double> MothurOut::getStandardDeviation(vector< vector<double> >& dists) {
+ try{
+
+ vector<double> averages = getAverages(dists);
+
+ //find standard deviation
+ vector<double> stdDev; //stdDev.resize(numComp, 0.0);
+ for (int i = 0; i < dists[0].size(); i++) { stdDev.push_back(0.0); }
+
+ for (int thisIter = 0; thisIter < dists.size(); thisIter++) { //compute the difference of each dist from the mean, and square the result of each
+ for (int j = 0; j < dists[thisIter].size(); j++) {
+ stdDev[j] += ((dists[thisIter][j] - averages[j]) * (dists[thisIter][j] - averages[j]));
+ }
+ }
+ for (int i = 0; i < stdDev.size(); i++) {
+ stdDev[i] /= (double) dists.size();
+ stdDev[i] = sqrt(stdDev[i]);
+ }
+
+ return stdDev;
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "getAverages");
+ exit(1);
+ }
+}
+/**************************************************************************************************/
+vector<double> MothurOut::getStandardDeviation(vector< vector<double> >& dists, vector<double>& averages) {
+ try{
+ //find standard deviation
+ vector<double> stdDev; //stdDev.resize(numComp, 0.0);
+ for (int i = 0; i < dists[0].size(); i++) { stdDev.push_back(0.0); }
+
+ for (int thisIter = 0; thisIter < dists.size(); thisIter++) { //compute the difference of each dist from the mean, and square the result of each
+ for (int j = 0; j < dists[thisIter].size(); j++) {
+ stdDev[j] += ((dists[thisIter][j] - averages[j]) * (dists[thisIter][j] - averages[j]));
+ }
+ }
+ for (int i = 0; i < stdDev.size(); i++) {
+ stdDev[i] /= (double) dists.size();
+ stdDev[i] = sqrt(stdDev[i]);
+ }
+
+ return stdDev;
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "getAverages");
+ exit(1);
+ }
+}
+/**************************************************************************************************/
bool MothurOut::isContainingOnlyDigits(string input) {
try{
unsigned int fromBase36(string);
int getRandomIndex(int); //highest
double getStandardDeviation(vector<int>&);
+ vector<double> getStandardDeviation(vector< vector<double> >&);
+ vector<double> getStandardDeviation(vector< vector<double> >&, vector<double>&);
+ vector<double> getAverages(vector< vector<double> >&);
int control_pressed;
bool executing, runParse, jumble, gui, mothurCalling, debug;
referenceSeqs.resize(numRefSeqs);
referenceNames.resize(numRefSeqs);
for(int i=0;i<numRefSeqs;i++){
- referenceSeqs[i] = refs[i].getAligned();
+ if (aligned) { referenceSeqs[i] = refs[i].getAligned(); }
+ else { referenceSeqs[i] = refs[i].getUnaligned(); }
referenceNames[i] = refs[i].getName();
}
}
else{
if(reportFileName != ""){
- m->mothurOut("we are ignoring the report file if your sequences are not aligned. we will check that the sequences in your fasta and and qual fileare the same length.");
+ m->mothurOut("we are ignoring the report file if your sequences are not aligned. we will check that the sequences in your fasta and and qual file are the same length.");
m->mothurOutEndLine();
}
}
int numParentSeqs = -1;
int closestRefIndex = -1;
- numParentSeqs = chimeraTest.analyzeQuery(query.getName(), query.getAligned(), outChimeraReport);
+ string querySeq = query.getAligned();
+ if (!aligned) { querySeq = query.getUnaligned(); }
+
+ numParentSeqs = chimeraTest.analyzeQuery(query.getName(), querySeq, outChimeraReport);
closestRefIndex = chimeraTest.getClosestRefIndex();
int UnifracUnweightedCommand::getAverageSTDMatrices(vector< vector<double> >& dists, int treeNum) {
try {
//we need to find the average distance and standard deviation for each groups distance
-
//finds sum
- vector<double> averages; averages.resize(numComp, 0);
+ vector<double> averages; //averages.resize(numComp, 0.0);
+ for (int i = 0; i < numComp; i++) { averages.push_back(0.0); }
+
+ if (m->debug) { m->mothurOut("[DEBUG]: numcomparisons = " + toString(numComp) + ", subsampleIters = " + toString(subsampleIters) + "\n"); }
+
for (int thisIter = 0; thisIter < subsampleIters; thisIter++) {
for (int i = 0; i < dists[thisIter].size(); i++) {
averages[i] += dists[thisIter][i];
}
}
+ if (m->debug) { m->mothurOut("[DEBUG]: numcomparisons = " + toString(numComp) + ", subsampleIters = " + toString(subsampleIters) + "\n"); }
+
//finds average.
- for (int i = 0; i < averages.size(); i++) { averages[i] /= (float) subsampleIters; }
+ for (int i = 0; i < averages.size(); i++) {
+ averages[i] /= (float) subsampleIters;
+ if (m->debug) { m->mothurOut("[DEBUG]: i = " + toString(i) + ", averages[i] = " + toString(averages[i]) + "\n"); }
+ }
//find standard deviation
- vector<double> stdDev; stdDev.resize(numComp, 0);
+ vector<double> stdDev; //stdDev.resize(numComp, 0.0);
+ for (int i = 0; i < numComp; i++) { stdDev.push_back(0.0); }
for (int thisIter = 0; thisIter < subsampleIters; thisIter++) { //compute the difference of each dist from the mean, and square the result of each
for (int j = 0; j < dists[thisIter].size(); j++) {
for (int i = 0; i < stdDev.size(); i++) {
stdDev[i] /= (float) subsampleIters;
stdDev[i] = sqrt(stdDev[i]);
+ if (m->debug) { m->mothurOut("[DEBUG]: i = " + toString(i) + ", stdDev[i] = " + toString(stdDev[i]) + "\n"); }
}
//make matrix with scores in it
- vector< vector<double> > avedists; avedists.resize(m->getNumGroups());
+ vector< vector<double> > avedists; //avedists.resize(m->getNumGroups());
for (int i = 0; i < m->getNumGroups(); i++) {
- avedists[i].resize(m->getNumGroups(), 0.0);
+ vector<double> temp;
+ for (int j = 0; j < m->getNumGroups(); j++) { temp.push_back(0.0); }
+ avedists.push_back(temp);
}
//make matrix with scores in it
- vector< vector<double> > stddists; stddists.resize(m->getNumGroups());
+ vector< vector<double> > stddists; //stddists.resize(m->getNumGroups());
for (int i = 0; i < m->getNumGroups(); i++) {
- stddists[i].resize(m->getNumGroups(), 0.0);
+ vector<double> temp;
+ for (int j = 0; j < m->getNumGroups(); j++) { temp.push_back(0.0); }
+ //stddists[i].resize(m->getNumGroups(), 0.0);
+ stddists.push_back(temp);
}
+ if (m->debug) { m->mothurOut("[DEBUG]: about to fill matrix.\n"); }
+
//flip it so you can print it
int count = 0;
for (int r=0; r<m->getNumGroups(); r++) {
}
}
+ if (m->debug) { m->mothurOut("[DEBUG]: done filling matrix.\n"); }
+
map<string, string> variables;
variables["[filename]"] = outputDir + m->getRootName(m->getSimpleName(treefile));
variables["[tag]"] = toString(treeNum+1);