uint genomeScanFastaFiles (Parameters *P, char* G, bool flagRun) {//scans fasta files. flagRun=false: check and find full size, flaRun=true: collect all the data uint N=0;//total number of bases in the genome, including chr "spacers" if (!flagRun && P->chrLength.size()>0) {//previous chr records exist P->chrStart.pop_back();//remove last record, it will be recorded again N = P->chrStart.back()+P->chrLength.back(); P->chrLength.pop_back();//remove last record, it will be recorded again }; ifstream fileIn; for (uint ii=0;ii<P->genomeFastaFiles.size();ii++) {//all the input files fileIn.open(P->genomeFastaFiles.at(ii).c_str()); if ( !fileIn.good() ) {// ostringstream errOut; errOut << "EXITING because of INPUT ERROR: could not open genomeFastaFile: " <<P->genomeFastaFiles.at(ii) <<"\n"; exitWithError(errOut.str(),std::cerr, P->inOut->logMain, EXIT_CODE_INPUT_FILES, *P); }; char cc=fileIn.peek(); if ( !fileIn.good() ) {// ostringstream errOut; errOut << "EXITING because of INPUT ERROR: could not read from genomeFastaFile: " <<P->genomeFastaFiles.at(ii) <<"\n"; exitWithError(errOut.str(),std::cerr, P->inOut->logMain, EXIT_CODE_INPUT_FILES, *P); }; if (cc!='>') { ostringstream errOut; errOut << "EXITING because of INPUT ERROR: the file format of the genomeFastaFile: " <<P->genomeFastaFiles.at(ii) << "is not fasta:"; errOut << " the first character is " <<cc<<" , not > .\n"; errOut << " Solution: check formatting of the fasta file. Make sure the file is uncompressed (unzipped).\n"; exitWithError(errOut.str(),std::cerr, P->inOut->logMain, EXIT_CODE_INPUT_FILES, *P); }; while(!fileIn.eof()) {//read each file until eof string lineIn (4096,'.'); getline(fileIn,lineIn); if (lineIn[0]=='>') {//new chromosome if (!flagRun) { istringstream lineInStream (lineIn); lineInStream.ignore(1,' '); string chrName1; lineInStream >> chrName1; P->chrName.push_back(chrName1); }; if (!flagRun && P->chrStart.size()>0) P->chrLength.push_back(N-P->chrStart.at(P->chrStart.size()-1)); //true length of the chr if (N>0) {//pad the chromosomes to bins boudnaries N = ( (N+1)/P->genomeChrBinNbases+1 )*P->genomeChrBinNbases; }; if (!flagRun) { P->chrStart.push_back(N); P->inOut->logMain << P->genomeFastaFiles.at(ii)<<" : chr # " << P->chrStart.size()-1 << " \""<<P->chrName.at(P->chrStart.size()-1)<<"\" chrStart: "<<N<<"\n"<<flush; }; } else {//char lines if (flagRun) lineIn.copy(G+N,lineIn.size(),0); N += lineIn.size(); }; };
void cVehicle::readFrom(std::istream& file) { while(file) { std::string cur; getline(file, cur); std::istringstream lineIn(cur); lineIn >> cur; if(cur == "LOCATION") lineIn >> loc.x >> loc.y; else if(cur == "SECTOR") lineIn >> sector.x >> sector.y; else if(cur == "IN")
uint genomeScanFastaFiles (Parameters *P, char* G, bool flagRun) {//scans fasta files. flagRun=false: check and find full size, flaRun=true: collect all the data uint N=0; //total number of bases in the genome, including chr "spacers" ifstream fileIn; for (uint ii=0;ii<P->genomeFastaFiles.size();ii++) {//all the input files fileIn.open(P->genomeFastaFiles.at(ii).c_str()); if ( !fileIn.good() ) {// ostringstream errOut; errOut << "EXITING because of INPUT ERROR: could not open genomeFastaFile: " <<P->genomeFastaFiles.at(ii) <<"\n"; exitWithError(errOut.str(),std::cerr, P->inOut->logMain, EXIT_CODE_INPUT_FILES, *P); }; while(!fileIn.eof()) {//read each file until eof string lineIn (4096,'.'); getline(fileIn,lineIn); if (lineIn[0]=='>') {//new chromosome if (!flagRun) { istringstream lineInStream (lineIn); lineInStream.ignore(1,' '); string chrName1; lineInStream >> chrName1; P->chrName.push_back(chrName1); }; if (!flagRun && P->chrStart.size()>0) P->chrLength.push_back(N-P->chrStart.at(P->chrStart.size()-1)); //true length of the chr if (N>0) {//pad the chromosomes to bins boudnaries N = ( (N+1)/P->genomeChrBinNbases+1 )*P->genomeChrBinNbases; }; if (!flagRun) { P->chrStart.push_back(N); P->inOut->logMain << P->genomeFastaFiles.at(ii)<<" : chr # " << P->chrStart.size()-1 << " \""<<P->chrName.at(P->chrStart.size()-1)<<"\" chrStart: "<<N<<"\n"<<flush; }; } else {//char lines if (flagRun) lineIn.copy(G+N,lineIn.size(),0); N += lineIn.size(); }; };