#include "command.hpp"
-#define SFF_MAGIC 0x2e736666 /* ".sff" */
-#define SFF_VERSION "\0\0\0\1"
/**********************************************************/
struct CommonHeader {
- uint32_t magicNumber;
- char* version;
- uint64_t indexOffset;
- uint32_t indexLength;
- uint32_t numReads;
- uint16_t headerLength;
- uint16_t keyLength;
- uint16_t numFlowsPerRead;
- uint8_t flogramFormatCode;
- char* flowChars; //length depends on number flow reads
- char* keySequence; //length depends on key length
+ unsigned int magicNumber;
+ string version;
+ unsigned long int indexOffset;
+ unsigned int indexLength;
+ unsigned int numReads;
+ unsigned short headerLength;
+ unsigned short keyLength;
+ unsigned short numFlowsPerRead;
+ int flogramFormatCode;
+ string flowChars; //length depends on number flow reads
+ string keySequence; //length depends on key length
- CommonHeader() { magicNumber=0; indexOffset=0; indexLength=0; numReads=0; headerLength=0; keyLength=0; numFlowsPerRead=0; flogramFormatCode='s'; }
+ 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; }
+ ~Header() { }
};
/**********************************************************/
struct seqRead {
vector<unsigned short> flowgram;
vector<unsigned int> flowIndex;
- char* bases;
+ string bases;
vector<unsigned int> qualScores;
+
+ seqRead() { }
+ ~seqRead() { }
};
/**********************************************************/
public:
SffInfoCommand(string);
+ SffInfoCommand();
~SffInfoCommand();
+ vector<string> getRequiredParameters();
+ vector<string> getValidParameters();
+ vector<string> getRequiredFiles();
+ map<string, vector<string> > getOutputFiles() { return outputTypes; }
int execute();
void help();
private:
- string sffFilename, outputDir;
- vector<string> filenames, outputNames;
- bool abort;
+ string sffFilename, outputDir, accnosName;
+ vector<string> filenames, outputNames, accnosFileNames;
+ bool abort, fasta, qual, trim, flow, sfftxt, hasAccnos;
+ set<string> seqNames;
+ map<string, vector<string> > outputTypes;
int extractSffInfo(string, string);
- CommonHeader* readCommonHeader(ifstream&);
- Header* readHeader(ifstream&);
- seqRead* readSeqData(ifstream&, int, int);
+ int readCommonHeader(ifstream&, CommonHeader&);
+ int readHeader(ifstream&, Header&);
+ int readSeqData(ifstream&, seqRead&, int, int);
+ int decodeName(string&, string&, string&, string);
- 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);
};