00001 #include <iostream>
00002 #include "gn/gnSequence.h"
00003 #include <fstream>
00004
00005 #include "gn/gnFilter.h"
00006 #include "gn/gnFASSource.h"
00007
00008 int32 main( int32 argc, char* argv[])
00009 {
00010 argc; argv;
00011 gnSequence gps;
00012
00013 string filename;
00014 cout << "Enter a filename to compute a base composition.\n";
00015 cin >> filename;
00016 cout << "Opening " + filename + "\n";
00017 gps.LoadSource(filename);
00018 cout << "Genome Length: " << gps.length() << " in " << gps.contigListLength() << " contigs\n";
00019
00020 cout << "Give a file name to output composition data: ";
00021 string outfilename;
00022 cin >> outfilename;
00023 ofstream outfile(outfilename.c_str(), ios::out);
00024 outfile << "Contig_Name A_count C_count G_count T_count\n";
00025
00026 ofstream ambig("ambigs.txt", ios::out);
00027
00028 gnSeqI a_total = 0, c_total = 0, g_total = 0, t_total = 0, ambiguities = 0;
00029 for(int contigI=0; contigI < gps.contigListLength(); contigI++){
00030 gnSeqI seqLength = gps.contig(contigI).length();
00031 gnSeqC *bases = new gnSeqC[seqLength];
00032 gps.contig(contigI).ToArray(bases, seqLength);
00033 string contigName = gps.contigName(contigI);
00034
00035 gnSeqI a = 0, c = 0, g = 0, t = 0;
00036 for(int i=0; i < seqLength; i++){
00037 if((bases[i] == 'a')||(bases[i] == 'A'))
00038 a++;
00039 else if((bases[i] == 'c')||(bases[i] == 'C'))
00040 c++;
00041 else if((bases[i] == 'g')||(bases[i] == 'G'))
00042 g++;
00043 else if((bases[i] == 't')||(bases[i] == 'T'))
00044 t++;
00045 else{
00046 ambiguities++;
00047 ambig << bases[i];
00048 }
00049 }
00050 delete[] bases;
00051 outfile << contigName << " " << a << " " << c << " " << g << " " << t << "\n";
00052 a_total += a; c_total += c; g_total += g; t_total += t;
00053 }
00054 outfile.close();
00055 ambig.close();
00056 cout << "Enter a file for me to write to: ";
00057 cin >> outfilename;
00058 gnFASSource::Write(gps, outfilename);
00059 cout << "A: " << a_total << "\nC: " << c_total << "\nG: " << g_total << "\nT: " << t_total << "\n";
00060 cout << "Ambiguities: " << ambiguities << "\n";
00061 cout << "For a total of: " << a_total + c_total + g_total + t_total + ambiguities << "\n";
00062 cout << "Base comp. completed. Results are in " << outfilename << "\n";
00063 char bubba[50];
00064 cin >> bubba;
00065 }