#include "command.hpp"
-#define SFF_MAGIC 0x2e736666 /* ".sff" */
-#define SFF_VERSION "\0\0\0\1"
/**********************************************************/
struct CommonHeader {
unsigned int magicNumber;
- char* version;
- unsigned long int indexOffset;
+ string version;
+ unsigned long long indexOffset;
unsigned int indexLength;
unsigned int numReads;
unsigned short headerLength;
unsigned short keyLength;
unsigned short numFlowsPerRead;
- char flogramFormatCode;
- char* flowChars; //length depends on number flow reads
- char* keySequence; //length depends on key length
+ int flogramFormatCode;
+ string flowChars; //length depends on number flow reads
+ string keySequence; //length depends on key length
- CommonHeader(){ magicNumber=0; version=NULL; indexOffset=0; indexLength=0; numReads=0; headerLength=0; keyLength=0; numFlowsPerRead=0; flogramFormatCode='s'; flowChars=NULL; keySequence=NULL; }
- ~CommonHeader() { if (version != NULL) { delete [] version; } if (flowChars != NULL) { delete [] flowChars; } if (keySequence != NULL) { delete [] keySequence; } }
+ CommonHeader(){ magicNumber=0; indexOffset=0; indexLength=0; numReads=0; headerLength=0; keyLength=0; numFlowsPerRead=0; flogramFormatCode='s'; }
+ ~CommonHeader() { }
};
/**********************************************************/
struct Header {
unsigned short clipQualRight;
unsigned short clipAdapterLeft;
unsigned short clipAdapterRight;
- char* name; //length depends on nameLength
+ string name; //length depends on nameLength
+ string timestamp;
+ string region;
+ string xy;
- Header() { headerLength=0; nameLength=0; numBases=0; clipQualLeft=0; clipQualRight=0; clipAdapterLeft=0; clipAdapterRight=0; name=NULL; }
- ~Header() { if (name != NULL) { delete [] name; } }
+ Header() { headerLength=0; nameLength=0; numBases=0; clipQualLeft=0; clipQualRight=0; clipAdapterLeft=0; clipAdapterRight=0; }
+ ~Header() { }
};
/**********************************************************/
struct seqRead {
vector<unsigned short> flowgram;
vector<unsigned int> flowIndex;
- char* bases;
+ string bases;
vector<unsigned int> qualScores;
- seqRead() { bases=NULL; }
- ~seqRead() { if (bases != NULL) { delete [] bases; } }
+ seqRead() { }
+ ~seqRead() { }
};
/**********************************************************/
public:
SffInfoCommand(string);
- ~SffInfoCommand();
- int execute();
- void help();
+ SffInfoCommand();
+ ~SffInfoCommand(){}
-private:
- string sffFilename, outputDir;
- vector<string> filenames, outputNames;
- bool abort;
+ vector<string> setParameters();
+ string getCommandName() { return "sffinfo"; }
+ string getCommandCategory() { return "Sequence Processing"; }
+
+ string getHelpString();
+ string getOutputPattern(string);
+ string getCitation() { return "http://www.mothur.org/wiki/Sffinfo"; }
+ string getDescription() { return "extract sequences reads from a .sff file"; }
+
+ int execute();
+ void help() { m->mothurOut(getHelpString()); }
- int extractSffInfo(string, string);
- int readCommonHeader(ifstream&, CommonHeader*);
- int readHeader(ifstream&, Header*);
- int readSeqData(ifstream&, seqRead*, int, int);
+private:
+ string sffFilename, sfftxtFilename, outputDir, accnosName, currentFileName, oligosfile, noMatchFile;
+ vector<string> filenames, outputNames, accnosFileNames, oligosFileNames;
+ bool abort, fasta, qual, trim, flow, sfftxt, hasAccnos, hasOligos;
+ int mycount, split, numFPrimers, numLinkers, numSpacers, pdiffs, bdiffs, ldiffs, sdiffs, tdiffs;
+ set<string> seqNames;
+ map<string, int> barcodes;
+ map<string, int> primers;
+ vector<string> linker, spacer, primerNameVector, barcodeNameVector, revPrimer;
+ vector<vector<int> > numSplitReads;
+ vector<vector<string> > filehandles, filehandlesHeaders;
+
+ //extract sff file functions
+ int extractSffInfo(string, string, string);
+ int readCommonHeader(ifstream&, CommonHeader&);
+ //int readHeader(ifstream&, Header&);
+ int readSeqData(ifstream&, seqRead&, int, Header&);
+ int decodeName(string&, string&, string&, string);
+ bool readOligos(string oligosFile);
- int printCommonHeader(ofstream&, CommonHeader*, bool); //bool is debug mode
- int printHeader(ofstream&, Header*, bool);
- int printSeqData(ofstream&, seqRead*, bool);
-
+ int printCommonHeader(ofstream&, CommonHeader&);
+ int printHeader(ofstream&, Header&);
+ int printSffTxtSeqData(ofstream&, seqRead&, Header&);
+ int printFlowSeqData(ofstream&, seqRead&, Header&);
+ int printFastaSeqData(ofstream&, seqRead&, Header&);
+ int printQualSeqData(ofstream&, seqRead&, Header&);
+ int readAccnosFile(string);
+ int parseSffTxt();
+ bool sanityCheck(Header&, seqRead&);
+ int adjustCommonHeader(CommonHeader);
+ int findGroup(Header header, seqRead read, int& barcode, int& primer);
+ string reverseOligo(string oligo);
+
+ //parsesfftxt file functions
+ int parseHeaderLineToInt(ifstream&);
+ vector<unsigned short> parseHeaderLineToFloatVector(ifstream&, int);
+ vector<unsigned int> parseHeaderLineToIntVector(ifstream&, int);
+ string parseHeaderLineToString(ifstream&);
};
/**********************************************************/