X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flowdata.cpp;h=1fe7d7faf1e31ee486890980c4731ddebfdca8fb;hb=601d30778afd12a8dcdd0e2825d54754a3980cf4;hp=f40fdd64b21aa0ad2dc2beae7e01e942ba46dc23;hpb=d635b39347cd81943ea50de7b813a0a5d743b0c0;p=mothur.git diff --git a/flowdata.cpp b/flowdata.cpp index f40fdd6..1fe7d7f 100644 --- a/flowdata.cpp +++ b/flowdata.cpp @@ -15,43 +15,48 @@ FlowData::FlowData(){} //********************************************************************************************************************** -FlowData::FlowData(ifstream& flowFile, float signal, float noise, int maxHomoP){ +FlowData::~FlowData(){ /* do nothing */ } + +//********************************************************************************************************************** + +FlowData::FlowData(int numFlows, float signal, float noise, int maxHomoP, string baseFlow) : + numFlows(numFlows), signalIntensity(signal), noiseIntensity(noise), maxHomoP(maxHomoP), baseFlow(baseFlow){ try { m = MothurOut::getInstance(); - baseFlow = "TACG"; + flowData.assign(numFlows, 0); +// baseFlow = "TACG"; seqName = ""; - numFlows = 0; locationString = ""; - seqLength = 0; - - string lengthString; - string flowString; - - flowFile >> seqName >> locationString >> lengthString >> flowString; + } + catch(exception& e) { + m->errorOut(e, "FlowData", "FlowData"); + exit(1); + } + +} - convert(lengthString.substr(7), seqLength); - convert(flowString.substr(9), numFlows); +//********************************************************************************************************************** - flowData.resize(numFlows); - - if (seqName == "") { - m->mothurOut("Error reading quality file, name blank at position, " + toString(flowFile.tellg())); - m->mothurOutEndLine(); - } - else{ - seqName = seqName.substr(1); - for(int i=0;i> flowData[i]; } - } - - findDeadSpot(signal, noise, maxHomoP); - translateFlow(); - - m->gobble(flowFile); +bool FlowData::getNext(ifstream& flowFile){ + + try { + flowFile >> seqName >> endFlow; + if (seqName.length() != 0) { + //cout << "in Flowdata " + seqName << endl; + for(int i=0;i> flowData[i]; } + //cout << "in Flowdata read " << seqName + " done" << endl; + updateEndFlow(); + translateFlow(); + m->gobble(flowFile); + }else{ m->mothurOut("Error in reading your flowfile, at position " + toString(flowFile.tellg()) + ". Blank name."); m->mothurOutEndLine(); } + + if(flowFile){ return 1; } + else { return 0; } } catch(exception& e) { - m->errorOut(e, "FlowData", "FlowData"); + m->errorOut(e, "FlowData", "getNext"); exit(1); } @@ -59,19 +64,20 @@ FlowData::FlowData(ifstream& flowFile, float signal, float noise, int maxHomoP){ //********************************************************************************************************************** -void FlowData::findDeadSpot(float signalIntensity, float noiseIntensity, int maxHomoP){ +void FlowData::updateEndFlow(){ try{ - int currLength = 0; + //int currLength = 0; float maxIntensity = (float) maxHomoP + 0.49; - deadSpot = 0; - while(currLength < seqLength + 4){ + int deadSpot = 0; + + while(deadSpot < endFlow){ int signal = 0; int noise = 0; for(int i=0;i<4;i++){ - float intensity = flowData[i + 4 * deadSpot]; + float intensity = flowData[i + deadSpot]; if(intensity > signalIntensity){ signal++; @@ -79,18 +85,16 @@ void FlowData::findDeadSpot(float signalIntensity, float noiseIntensity, int max noise++; } } - currLength += (int)(intensity+0.5); } if(noise > 0 || signal == 0){ break; } - deadSpot++; + deadSpot += 4; } - deadSpot *= 4; - seqLength = currLength; - + endFlow = deadSpot; + } catch(exception& e) { m->errorOut(e, "FlowData", "findDeadSpot"); @@ -104,7 +108,7 @@ void FlowData::translateFlow(){ try{ sequence = ""; - for(int i=0;i maxFlows){ deadSpot = maxFlows; } + maxFlows = mF; + if(endFlow > maxFlows){ endFlow = maxFlows; } + translateFlow(); } catch(exception& e) { @@ -148,8 +153,8 @@ bool FlowData::hasMinFlows(int minFlows){ try{ bool pastMin = 0; - - if(deadSpot >= minFlows){ pastMin = 1; } + if(endFlow >= minFlows){ pastMin = 1; } + return pastMin; } catch(exception& e) { @@ -173,25 +178,12 @@ Sequence FlowData::getSequence(){ //********************************************************************************************************************** -int FlowData::getSeqLength(){ - - try{ - return seqLength; - } - catch(exception& e) { - m->errorOut(e, "FlowData", "getSeqLength"); - exit(1); - } -} - -//********************************************************************************************************************** - void FlowData::printFlows(ofstream& outFlowFile){ try{ - // outFlowFile << '>' << seqName << locationString << " length=" << seqLength << " numflows=" << maxFlows << endl; - outFlowFile << seqName << ' ' << deadSpot << ' ' << setprecision(2); +// outFlowFile << '>' << seqName << locationString << " length=" << seqLength << " numflows=" << maxFlows << endl; + outFlowFile << seqName << ' ' << endFlow << ' ' << setprecision(2); - for(int i=0;i' << seqName << locationString << " length=" << seqLength << " numflows=" << maxFlows << endl; - - outFlowFile << seqName << '|' << scrapCode << ' ' << deadSpot << ' ' << setprecision(2); + outFlowFile << seqName << '|' << scrapCode << ' ' << endFlow << ' ' << setprecision(2); for(int i=0;i' << seqName << endl; - outFASTA << sequence << endl; - + return seqName; } catch(exception& e) { - m->errorOut(e, "FlowData", "printFlows"); + m->errorOut(e, "FlowData", "getName"); exit(1); } } - //**********************************************************************************************************************