PageRenderTime 55ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/code_comm/wanal1.cpp

http://research-code-base-animesh.googlecode.com/
C++ | 1062 lines | 607 code | 357 blank | 98 comment | 85 complexity | 096464cc61c1dd0bb415586e7bd7e21e MD5 | raw file
  1. #include<stdiostream.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<ctype.h>
  5. #include <vector>
  6. #include<complex>
  7. using namespace std;
  8. //begin Power spectrum code
  9. class PowerSpectrum
  10. {
  11. public:
  12. PowerSpectrum();
  13. virtual ~PowerSpectrum();
  14. char * strCRegion;
  15. double *s;
  16. double *x;
  17. int doPowerSpectrumAnalysis(int);
  18. void setSequence(const char * seq);
  19. };
  20. PowerSpectrum::PowerSpectrum()
  21. {
  22. s=NULL;
  23. x=NULL;
  24. strCRegion=NULL;
  25. }
  26. PowerSpectrum::~PowerSpectrum()
  27. {
  28. delete []s;
  29. delete []x;
  30. delete []strCRegion;
  31. }
  32. void PowerSpectrum::setSequence(const char * seq)
  33. {
  34. delete []strCRegion;
  35. strCRegion=new char[ strlen(seq)+1 ];
  36. memset(strCRegion, '\0' , strlen(seq)+1 ) ;
  37. strcpy(strCRegion,seq);
  38. }
  39. int PowerSpectrum::doPowerSpectrumAnalysis(int pc)
  40. {
  41. const double PI = 3.14159274;
  42. complex<double> i1(0.0,1.0);
  43. long lenStr = strlen(strCRegion);
  44. delete []s;
  45. delete []x;
  46. //cout<<"Coding Region Length:"<<lenStr<<endl;
  47. s = new double[lenStr/2 + 1];
  48. x = new double[lenStr/2 + 1];
  49. char nuclt[5]= "ATGC";
  50. int const lenWindow = (lenStr/pc)*pc;
  51. double li=(1.0/lenWindow);
  52. double winsq = li+li*li;
  53. //long wincube = lenWindow*lenWindow*lenWindow;
  54. int countA =0;
  55. int countC =0;
  56. int countG =0;
  57. int countT= 0;
  58. complex<double> s1(0.0,0.0);
  59. double sq=0.0;
  60. double sq1=0.0;
  61. double s2=0.0;
  62. double sbar =0.0;
  63. double p=0.0;
  64. //ofstream out("power");
  65. for(long i =0; i < lenWindow; i++ )
  66. {
  67. if( strCRegion[i] == 'A')
  68. { countA++; continue;}
  69. if( strCRegion[i] == 'G')
  70. { countG++; continue;}
  71. if( strCRegion[i] == 'C')
  72. { countC++; continue;}
  73. if( strCRegion[i] == 'T')
  74. { countT++; continue;}
  75. }
  76. //out<<"Count A :"<<countA <<" countT :"<<countT <<"countG :"<<countG <<"countC :"<<countC <<endl;
  77. sq1 = 0.0+ pow(countA,2)+pow(countG,2) + pow(countT,2) + pow(countC,2);
  78. double f =0.0;
  79. long k;
  80. for(k = 1 ; k <=lenWindow/2 ; k++ )
  81. {
  82. s2 =0.0;
  83. sbar =0.0;
  84. p =0.0;
  85. f= ((1.0)*k)/lenWindow;
  86. // for each Nucleotide. A T G C
  87. for(int i = 0; i <4 ; i ++ )
  88. {
  89. s1= complex<double>(0.0,0.0);
  90. for (int bi=0; bi<lenWindow; bi++)
  91. {
  92. if(strCRegion[bi] == nuclt[i] )
  93. s1= s1+exp(-i1*2.0*PI*f*(bi+1.0));
  94. }
  95. s2 = s2+ (abs(s1)*abs(s1));
  96. }
  97. // to calculater power specturm and code region
  98. sq = sq1*li*li*li;
  99. sbar =(winsq-sq);
  100. sq = sbar * (lenWindow/2.0);
  101. // to calcuater signal to noise ratio
  102. s2 = s2/(sq*lenWindow*lenWindow);
  103. p= (s2/sbar);
  104. s[k-1]=f;
  105. x[k-1]=p;
  106. // out<<"\n Frequency:"<<f <<" Power : "<<p;
  107. } // outer for loop
  108. int numPeaks=0;
  109. int genePeak=0;
  110. //WindowAnalysis wobj;
  111. for( k = 1 ; k <= (lenWindow/2) ; k++ )
  112. {
  113. if( x[k-1] > 4.0)
  114. {
  115. //if( s[k-1] == 1.0/3.0 )] //added by Sreenu on mandars suggestion on 19/04/2002
  116. //if( ( s[k-1]>= 0.32 ) && ( s[k-1] <= 0.34 ))
  117. if(s[k-1]==(1.0/pc))
  118. genePeak=1;
  119. else
  120. numPeaks++;
  121. }
  122. }
  123. //delete []s ;
  124. //delete []x ;
  125. //s =NULL ;
  126. //x =NULL ;
  127. if(genePeak==1)
  128. {
  129. if(numPeaks==0)
  130. return 1;
  131. else
  132. return 2;
  133. }
  134. else
  135. {
  136. return 0;
  137. }
  138. } // end of member function.
  139. //end Power spectrum code
  140. //begin Windowanalysis code
  141. struct structCR
  142. {
  143. long start;
  144. long end;
  145. char type;
  146. };
  147. class WindowAnalysis //__declspec(dllexport)
  148. {
  149. public:
  150. long *s;
  151. double *x;
  152. int pcity;
  153. vector<structCR> vecCRegion;
  154. WindowAnalysis();
  155. WindowAnalysis(int len ,double thold,long intron , long exon);
  156. virtual ~WindowAnalysis();
  157. void setWindowLen(int len);
  158. void settherHold(double thold);
  159. void setIntronExon(long intron , long exon );
  160. int doFt(const char * strSeq , char *logfile);
  161. void setpcity(int pc);
  162. private :
  163. int lenWindow;
  164. double thersHold;
  165. long exonCutOff;
  166. long intronCutOff;
  167. int findexp(int WindowSize);
  168. long framecount;
  169. complex<double> * expval;
  170. WindowAnalysis& operator =(const WindowAnalysis &cwa);
  171. WindowAnalysis(const WindowAnalysis &cwa);
  172. };
  173. WindowAnalysis::WindowAnalysis()
  174. {
  175. expval = NULL;
  176. s = NULL;
  177. x = NULL;
  178. framecount=0;
  179. }
  180. WindowAnalysis::~WindowAnalysis()
  181. {
  182. delete []expval;
  183. delete []s ;
  184. delete []x ;
  185. printf("Destructor of WindowAnalysis ");
  186. fflush(stdout);
  187. //delete []CRegion;
  188. //this->vecCRegion.clear();
  189. }
  190. WindowAnalysis::WindowAnalysis(int len , double thold ,long intron , long exon)
  191. {
  192. lenWindow=len;
  193. thersHold=thold;
  194. exonCutOff=exon;
  195. intronCutOff =intron;
  196. s = NULL;
  197. x = NULL;
  198. framecount=0;
  199. // cout<<"ThresHold Value "<<thersHold;
  200. // cout<<"Intron :"<<intronCutOff<<" Exon :"<<exonCutOff<<endl;
  201. expval=new complex<double>[lenWindow];
  202. }
  203. void WindowAnalysis::settherHold(double thold)
  204. {
  205. thersHold =thold;
  206. // cout<< "ThresHold Value "<<thersHold;
  207. }
  208. void WindowAnalysis::setpcity(int pc)
  209. {
  210. pcity=pc;
  211. }
  212. void WindowAnalysis::setWindowLen(int len)
  213. {
  214. lenWindow=len;
  215. delete [] expval;
  216. expval=new complex<double>[lenWindow];
  217. }
  218. void WindowAnalysis::setIntronExon(long intron , long exon )
  219. {
  220. exonCutOff=exon;
  221. intronCutOff =intron;
  222. }
  223. int WindowAnalysis::doFt(const char * strSeq , char * logfile)
  224. {
  225. const double F3 = 1.000/pcity;
  226. const double PI = 3.14159274;
  227. //ofstream out("output" );
  228. //ofstream out(logfile ,ios::app);
  229. long lenStr = strlen(strSeq);
  230. if(lenStr<lenWindow)
  231. {
  232. //out<<"Sequence length is less than windowlength."<<endl;
  233. return 1;
  234. }
  235. //cout<<"\n Sequence Length :"<<lenStr<<endl;
  236. int result= findexp(lenWindow);
  237. //long *CRegion = new long[lenStr-lenWindow+ 1];
  238. //long *s = new long[lenStr-lenWindow+ 1];
  239. //double *x = new double[lenStr-lenWindow+1];
  240. //delete [] s;
  241. //delete [] x;
  242. s = new long[lenStr-lenWindow+ 1];
  243. x = new double[lenStr-lenWindow+1];
  244. char nuclt[5]= "ATGC";
  245. double li=(1.0/lenWindow);
  246. double winsq = li+ (li*li);
  247. double winsq1 = (1.0/lenWindow)+(1.0/(lenWindow*lenWindow));
  248. double wincube = lenWindow*lenWindow*lenWindow;
  249. int countA =0;
  250. int countC =0;
  251. int countG =0;
  252. int countT= 0;
  253. complex<double> s1(0.0,0.0);
  254. double sq=0.0;
  255. double sq1=0.0;
  256. double s2=0.0;
  257. double sbar =0.0;
  258. double p=0.0;
  259. framecount=0;
  260. for(long k = 0 ; k < lenStr-lenWindow+1 ; k++ )
  261. {
  262. sq =0.0;
  263. s2 =0.0;
  264. sbar =0.0;
  265. p =0.0;
  266. // Frame wise count of A C G T seperately
  267. if(k==0)
  268. {
  269. for(long i =k; i < k+lenWindow; i++ )
  270. {
  271. if( strSeq[i] == 'A')
  272. { countA++; continue;}
  273. if( strSeq[i] == 'G')
  274. { countG++; continue;}
  275. if( strSeq[i] == 'C')
  276. { countC++; continue;}
  277. if( strSeq[i] == 'T')
  278. { countT++; continue;}
  279. } //end of count for look.
  280. }else
  281. {
  282. switch(strSeq[k-1])
  283. {
  284. case 'A' :
  285. { countA--; break; }
  286. case 'T' :
  287. { countT--; break; }
  288. case 'G' :
  289. { countG--; break; }
  290. case 'C' :
  291. { countC--; break; }
  292. }
  293. switch(strSeq[k+lenWindow-1])
  294. {
  295. case 'A' :
  296. { countA++; break; }
  297. case 'T' :
  298. { countT++; break; }
  299. case 'G' :
  300. { countG++; break; }
  301. case 'C' :
  302. { countC++; break; }
  303. }
  304. }
  305. //out<<"Count A :"<<countA <<" Frame count :"<<k<<endl;
  306. //out<<"Count T :"<<countT <<" Frame count :"<<k<<endl;
  307. //out<<"Count G :"<<countG <<" Frame count :"<<k<<endl;
  308. //out<<"Count C :"<<countC <<" Frame count :"<<k<<endl;
  309. sq1 = 0.0+ pow(countA,2)+pow(countG,2) + pow(countT,2) + pow(countC,2);
  310. // for each Nucleotide. A T G C
  311. for(int i = 0; i <4 ; i ++ )
  312. {
  313. s1= complex<double>(0.0,0.0);
  314. for (int bi=0; bi<lenWindow; bi++)
  315. {
  316. if(strSeq[k+bi] == nuclt[i] )
  317. s1= s1+expval[bi];
  318. }
  319. //cout<<s1<<endl;
  320. s2 = s2+ (abs(s1)*abs(s1));
  321. }
  322. // to calculater power peak
  323. sq = sq1*li*li*li;
  324. sbar =(winsq-sq);
  325. sq = sbar * (lenWindow/2.0);
  326. // to calcuater signal to noise ratio
  327. s2 = s2/(sq*lenWindow*lenWindow);
  328. p= s2/sbar;
  329. s[framecount]=k+(lenWindow/2);
  330. x[framecount]=p;
  331. //out<<s[framecount]<<" "<<x[framecount]<<"\n";
  332. framecount++;
  333. } // End of Outer for loop(Frame wise)
  334. //return(0);
  335. //}
  336. // end of Ft function..
  337. //void WindowAnalysis::findCodingRegion(long seqfileId , const char * seqId)
  338. //{
  339. long *CRegion = new long[framecount+1];
  340. int flag=0;
  341. long i =0 , m =0;
  342. for (m =0; m<framecount; m++)
  343. {
  344. if(x[m]>=thersHold)
  345. {
  346. if(flag == 0)
  347. {
  348. CRegion[i] =s[m];
  349. //out<< "\n START :" <<s[m]<<" : "<<x[m];
  350. //i++;
  351. flag =1;
  352. }
  353. }
  354. else
  355. {
  356. if(flag==1)
  357. {
  358. if(x[m]<thersHold)
  359. {
  360. //out<< "\n START :" <<CRegion[i];
  361. //out<<"\t\tEND: "<<s[m-1]<<" : "<<x[m-1];
  362. i++;
  363. CRegion[i]=s[m-1];
  364. i++;
  365. }
  366. flag=0;
  367. }
  368. } // end of if.
  369. }// End Coding region loop.
  370. if (flag==1)
  371. {
  372. //out<< "\n START :" <<CRegion[i];
  373. //out<<"\t\tEND: "<<s[m-1]<<" : "<<x[m-1];
  374. i++;
  375. CRegion[i]=s[m-1];
  376. i++;
  377. }
  378. //delete []CRegion;
  379. // that data is deleted 07/02/02 To inprove performance.
  380. //delete []s ;
  381. //delete []x ;
  382. //s=NULL;
  383. //x=NULL;
  384. //out<<"\n Final Coding Regions :"<<endl;
  385. flag =0;
  386. int code =0;
  387. long sta=0 , stp =0;
  388. structCR obj;
  389. obj.type=' ';
  390. for(int j=0 ; j<i ; j +=2)
  391. {
  392. if(flag ==0)
  393. {
  394. sta = CRegion[j];
  395. stp = CRegion[j+1];
  396. if ( (stp-sta)>= exonCutOff ) code =1; else code =0;
  397. flag = 1 ;
  398. }
  399. else
  400. {
  401. if( (CRegion[j]-CRegion[j-1]) >=intronCutOff )
  402. {
  403. if(code ==1)
  404. {
  405. //out <<"\nStart :"<<sta <<" End :" << stp;
  406. // inset in database start new set.
  407. obj.start=sta;
  408. obj.end=stp;
  409. vecCRegion.push_back(obj);
  410. //insetcodes( sta , stp,seqfileId,seqId);
  411. sta = CRegion[j];
  412. stp = CRegion[j+1];
  413. if ( (stp-sta)>= exonCutOff ) code =1; else code =0;
  414. flag = 1 ;
  415. }
  416. else
  417. {
  418. //cout << forget the old set.
  419. if ((stp-sta)>= exonCutOff )
  420. {
  421. //out <<"\nStart :"<<sta <<" End :" << stp;
  422. obj.start=sta;
  423. obj.end=stp;
  424. vecCRegion.push_back(obj);
  425. //insetcodes( sta , stp,seqfileId,seqId);
  426. }
  427. // may need to be commented later.
  428. sta = CRegion[j];
  429. stp = CRegion[j+1];
  430. if ( (stp-sta)>= exonCutOff ) code =1; else code =0;
  431. flag = 1 ;
  432. }
  433. }
  434. else
  435. {
  436. if( ( CRegion[j+1]-CRegion[j] ) >= exonCutOff ) code =1;
  437. stp = CRegion[j+1];
  438. flag =1;
  439. }
  440. }
  441. }
  442. if ((code == 1) || ((stp-sta) >exonCutOff) )
  443. {
  444. //out <<"\nStart :"<<sta <<" End :" << stp;
  445. obj.start=sta;
  446. obj.end=stp;
  447. vecCRegion.push_back(obj);
  448. //mapCRegion[sta] =stp;
  449. //insetcodes( sta , stp,seqfileId,seqId);
  450. }
  451. //delete []CRegion;
  452. //CRegion=NULL;
  453. vector<structCR>::iterator it;
  454. PowerSpectrum powerObj;
  455. char * strtemp=NULL;
  456. for(it =vecCRegion.begin(); it !=vecCRegion.end(); it++)
  457. {
  458. //long start =it->start;
  459. //long end =it->end;
  460. strtemp = new char[( (it->end - it->start) +1)];
  461. memset(strtemp , '\0' ,(it->end - it->start) +1 );
  462. strncpy( strtemp , &strSeq[it->start] ,(it->end - it->start) );
  463. //strncpy( strtemp , &strSeq[start] , end -start);
  464. //printf("Length : %d \n ", strlen(strtemp));
  465. //printf("start %ld , End %d length %d\n " , it->start ,it->end , (it->end - it->start));
  466. //fflush(stdout);
  467. powerObj.setSequence(strtemp);
  468. int peaks =powerObj.doPowerSpectrumAnalysis(pcity);
  469. if(peaks==0)
  470. {
  471. it=vecCRegion.erase(it);
  472. if( it !=vecCRegion.end() )
  473. --it;
  474. else
  475. break;
  476. }
  477. else if(peaks==1)
  478. {
  479. it->type ='S';
  480. }
  481. else if(peaks==2)
  482. {
  483. it->type ='M';
  484. }
  485. delete []strtemp;
  486. strtemp = NULL;
  487. }
  488. //store the coding regions in an array
  489. //int elsize;
  490. //elsize=vecCRegion.size();
  491. delete []strtemp;
  492. strtemp = NULL;
  493. //delete []CRegion;
  494. //CRegion=NULL;
  495. //delete []s ;
  496. //delete []x ;
  497. return(0);
  498. } // end of Coding region finding.
  499. // to find exponential positional values to window size .
  500. int WindowAnalysis::findexp(int WindowSize)
  501. {
  502. complex<double> i1(0.0,1.0);
  503. const double PI = 3.14159274;
  504. const double F3 = 1.000/3;
  505. for(int k=0; k<WindowSize; k++)
  506. {
  507. expval[k] = exp(-i1*2.0*PI*F3*(k+1.0));
  508. //cout<<cos(-1*2.0*PI*F3*(k+1.0))<<endl;
  509. }
  510. return(0);
  511. }
  512. // end Window Analysis code
  513. class ftcds
  514. {
  515. WindowAnalysis *winobj, *winobj1;
  516. PowerSpectrum pobj;
  517. FILE *fp1,*fp2,*fp3,*fpl,*fpc;
  518. char *seq,*seqs;//store the sequence to find the PNR;
  519. long begpos,endpos;
  520. //ifstream begptr,endptr;
  521. public:
  522. void doGenscan(char *,char*,int,int,int,int,int);
  523. ftcds()
  524. {
  525. //seq = NULL;
  526. winobj = new WindowAnalysis();
  527. winobj1 = new WindowAnalysis();
  528. }
  529. ~ftcds()
  530. {
  531. delete [] seq;
  532. seq = NULL;
  533. cout<<"Destructor of ftcds"<<endl;
  534. delete winobj;
  535. delete winobj1;
  536. }
  537. };
  538. void ftcds::doGenscan(char *inputfile,char *outfile,int winlen,int thold,int pcity,int exoncut,int intcut)
  539. {
  540. //variable where the sequence will be stored
  541. int seqno=1;
  542. //char fname[50];
  543. char ch,ch1;
  544. char *seqname;
  545. int snin;
  546. vector<structCR>::iterator it1;
  547. fp1=fopen(inputfile,"r");
  548. if(fp1==NULL)
  549. {
  550. cout<<"File doesn't exist"<<endl;
  551. exit(1);
  552. }
  553. //create a temporary file to store the sequence without the newline characters
  554. fpc=fopen(outfile,"w");
  555. if(fpc==NULL)
  556. {
  557. cout<<"Could not open output file"<<endl;
  558. exit(1);
  559. }
  560. ch=fgetc(fp1);
  561. while(ch!=EOF)
  562. {
  563. fp2=fopen("tmpseq.tmp","w+");
  564. if(fp2==NULL)
  565. {
  566. cout<<"Could not create temporary file"<<endl;
  567. exit(1);
  568. }
  569. do
  570. {
  571. //check for the initial '>'symbol put the characters after the next line
  572. if(ch=='>')
  573. {
  574. begpos=ftell(fp1);
  575. while(ch!='\n')
  576. {
  577. ch=fgetc(fp1);
  578. }
  579. endpos=ftell(fp1);
  580. seqname=new char[endpos -begpos + 2];
  581. memset(seqname,'\0',endpos-begpos +2);
  582. fseek(fp1,begpos,SEEK_SET);
  583. snin=0;
  584. while(true)
  585. {
  586. ch=fgetc(fp1);
  587. if(!(snin==11 || ch=='\n'))
  588. {
  589. seqname[snin]=ch;
  590. snin++;
  591. }
  592. if(ch=='\n')
  593. {
  594. ch=fgetc(fp1);
  595. break;
  596. }
  597. }//end ofwhile
  598. }//end of if
  599. if(ch!='\n')
  600. fputc(ch,fp2);
  601. ch=fgetc(fp1);
  602. if(ch==EOF)
  603. {
  604. break;
  605. }
  606. }while(ch!='>');//end of while
  607. endpos=ftell(fp2);
  608. //int endpos=begpos;
  609. seq=new char[endpos + 2];
  610. memset(seq,'\0',endpos + 2);
  611. begpos=0;
  612. fseek(fp2,begpos,SEEK_SET);
  613. ch1=fgetc(fp2);
  614. int seqin=0;
  615. while(ch1!=EOF)
  616. {
  617. seq[seqin]=ch1;
  618. seqin++;
  619. ch1=fgetc(fp2);
  620. }
  621. winobj->setWindowLen(winlen);
  622. winobj->setpcity(pcity);
  623. winobj->settherHold(thold*1.0);
  624. winobj->setIntronExon(exoncut,intcut);
  625. cout<<"Length:"<<strlen(seq)<<endl;
  626. winobj->doFt(seq,"log");
  627. //put the coding regions in a separate file
  628. for(it1=winobj->vecCRegion.begin();it1!=winobj->vecCRegion.end();it1++)
  629. {
  630. unsigned long actstartpos=it1->start-((winlen/2)-1);
  631. unsigned long actendpos=it1->end +(winlen/2);
  632. if(actendpos>strlen(seq))
  633. actendpos=strlen(seq);
  634. seqs=new char[actendpos -actstartpos +2];
  635. memset(seqs,'\0',actendpos -actstartpos +2);
  636. int j=0;
  637. for(int i=actstartpos -1;i<actendpos;i++,j++)
  638. seqs[j]=seq[i];
  639. int len=strlen(seqs);
  640. cout<<"Length:"<<len<<endl;
  641. winobj1->setWindowLen(strlen(seqs));
  642. winobj1->setpcity(pcity);
  643. winobj1->settherHold(thold*1.0);
  644. winobj1->doFt(seqs,"log");
  645. fprintf(fpc,">fourier cds%d %s [%d - %d] %d %0.4f\n",seqno,seqname,actstartpos,actendpos,(actendpos-actstartpos)+1,winobj1->x[0]);
  646. fprintf(fpc,"%s\n",seqs);
  647. }//end of for
  648. fclose(fp2);
  649. remove("tmpseq.tmp");
  650. winobj->vecCRegion.clear();
  651. seqno++;
  652. delete []seq;
  653. seq = NULL;
  654. }//end of while
  655. fclose(fpc);
  656. }//end of main function
  657. int main(int argc, char* argv[])
  658. {
  659. ftcds *Ch = new ftcds();
  660. int pcity;
  661. int excut,incut;
  662. cout<<argc<<endl;
  663. //cout<<"Usage:[filename] -w [length] -t [threshold] -p [periodicity] -i [inputfile] -o [outputfile]"<<endl;
  664. int winlen,thold;
  665. char *infile,*outfile;
  666. if(argc!=14)
  667. {
  668. cout<<"Usage:[filename] -w [length] -t [threshold] -p [periodicity] -ei [exoncut] [introncut] -i [inputfile] -o [outputfile]"<<endl;
  669. exit(1);
  670. }
  671. for(int s=1;s<argc;s++)
  672. {
  673. if(strcmp(argv[s],"-w")==0)
  674. winlen=atoi(argv[++s]);
  675. if(strcmp(argv[s],"-t")==0)
  676. thold=atoi(argv[++s]);
  677. if(strcmp(argv[s],"-i")==0)
  678. {
  679. infile=new char[strlen(argv[s +1])+1];
  680. strcpy(infile,argv[++s]);
  681. }
  682. if(strcmp(argv[s],"-o")==0)
  683. {
  684. outfile=new char[strlen(argv[s +1])+1];
  685. strcpy(outfile,argv[++s]);
  686. }
  687. if(strcmp(argv[s],"-p")==0)
  688. pcity=atoi(argv[++s]);
  689. if(strcmp(argv[s],"-ei")==0)
  690. {
  691. excut=atoi(argv[s+1]);
  692. incut=atoi(argv[s +2]);
  693. }
  694. }//end of for
  695. cout<<"lenwindow:"<<winlen<<endl;
  696. cout<<"Pcity:"<<pcity<<endl;
  697. cout<<"Exon intron"<<excut<<" "<<incut<<endl;
  698. cout<<"Thold:"<<thold<<endl;
  699. cout<<"Infile:"<<infile<<endl;
  700. cout<<"Outfile:"<<outfile<<endl;
  701. Ch->doGenscan(infile,outfile,winlen,thold,pcity,excut,incut);
  702. //Ch->doGenscan("c:\\anift\\amrna.txt","c:\\anift\\amrnaout.txt",300,4,3,50,50);
  703. delete Ch;
  704. return 0;
  705. }//end main