dta_merge_OMSSA.pl
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. #!/usr/bin/perl -w
  2. use Sys::Hostname;
  3. $host=hostname();
  4. print  "Host Machine name => $hostn";  
  5. print "Operating System => $^On";
  6. print "Perl Version", "=> ", $],"n";
  7. print "perl exe", "=> ", $0,"nn";
  8. #foreach $key (sort keys %ENV)
  9. #{   print $key, '=', $ENV{$key}, "n";}
  10. package OMSSA;
  11. #########################################################################################
  12. #   #
  13. # dta_merge2.pl: merging .dta files for OMSSA batching #
  14. # #
  15. #       $DATE: 07/15/2003 #
  16. # $AUTHOR: Ming Xu #
  17. # $VERSION: 1.0.0 #
  18. #       $usage: perl dta_merge2.pl -i <input path> -o <output path> -s <batching size>  #
  19. #    -n <output file nameROOT> #
  20. #               <output path>: an absolute path to a dir where t oread .dta files #
  21. #          <output path>: an absolute path to a dir where to wrtie concatnated     #
  22. #        dta file(s) for OMSSA batching processing                #                
  23. #         <batching size>: max. No. of .dta files to be concatnated into a file   #
  24. #         <output file nameROOT> : concatnated file's name root #
  25. #         #
  26. # $NOTE: concatenating up to $batch_maxFiles *.dta files                          #
  27. #              formatting: #
  28. #              $inFile => full name of an original dta file #
  29. #              $outFile => full name of batching output file #
  30. #        $iteration => indexing of concatenated dta files in $outFile #
  31. # #
  32. #              <dta id=1 name=$inFile BatchName=$outFile>            #
  33. #        ... #
  34. #              ... #original dta file content goes here  # 
  35. #        ...    #
  36. #        </dta>                         #
  37. #              ...  empty line goes here  ... #
  38. #              <dta id=$iteration name=$inFile BatchName=$outFile>          #
  39. #        ... #
  40. #              ... #original dta file content goes here  # 
  41. #        ...    #
  42. #        </dta>                         #
  43. #              ...  empty line goes here  ... #
  44. #              <dta id=1 name=$inFile BatchName=$outFile>            #
  45. #        ... #
  46. #              ... #original dta file content goes here  # 
  47. #        ...    #
  48. #        </dta>                         #
  49. #              ...  empty line goes here  ... #
  50. #              <dta id=up to <batching size>||100 name=$inFile BatchName=$outFile>      #
  51. #        ... #
  52. #              ... #original dta file content goes here  # 
  53. #        ...    #
  54. #        </dta>                         ##              #
  55. #########################################################################################
  56. use  strict;
  57. use Getopt::Std;
  58. use vars qw ($opt_i $opt_o $opt_s $opt_n);
  59. getopts('i:o:s:n:');
  60. #print "input path => $opt_inoutput path => $opt_onMax. No. of files to be concatnated => $opt_snoutput file nameROOT => $opt_nn";
  61.   my $maxNo_Files = $opt_s ||= 100;     # number of dta files to be concatnated into a batching file, default 100
  62.   my $batch_index=1;       # indexing for batching file(s)
  63.   my $iteration=0;         # loop index for a batching file
  64.   
  65.   my $inputDir = $opt_i ||= "./";   # directory to read dta files, default ./
  66.   my $inputFilter ||="*"; # input file filtering
  67.   my $inputPath="$inputDir"."$inputFilter";  # input file(dta files) full name
  68.   my $outPutDir = $opt_o ||="./";    # batching file dirtectory, default ./
  69.   my $batch_out = $opt_n;
  70.      $batch_out||="dtaBatch";      # batching file name, default dtaBatch + $$No_batchedFile + ".txt"      
  71.   my $outputPath="$outPutDir"."$batch_out";  # output path
  72.   
  73.   my $inFile; # input dta file name holder
  74.   my $No_batchedFile;                   # int
  75. print "input dir => $inputDirnoutput dir => $outPutDirn" ; 
  76. print "Max. No. of files to be concatnated into a file => $maxNo_Filesnoutput file nameROOT => $batch_outnn";
  77.   my $outFile = "$outputPath"."$batch_index".".txt"; # output file full name
  78.   open(FileOut,">$outFile") || die "cannot create output file"."$outFile";
  79.                 
  80.   while(defined($inFile = glob("$inputPath*")))
  81.   {
  82.         if ($inFile =~ /.dta$/i && -s $inFile)
  83. {
  84.              
  85.        if($iteration >= $maxNo_Files)
  86.              {
  87.                 print "$outputPath"."$batch_index".".txt contains  $iteration dta filesn" ;
  88.                 $iteration = 0;
  89.                 $batch_index +=1;
  90.                 close FileOut;
  91.                 $outFile = "$outputPath"."$batch_index".".txt";
  92.                 open(FileOut,">$outFile") || die "cannot create output file"."$outFile";
  93.      }
  94.      $iteration +=1;
  95.              open(FileIn,"<$inFile");      
  96.      print FileOut "<dta id="$iteration" name="$inFile" batchFile="$outFile">n";
  97.      
  98.      # modify the code to allow this program take mascot format files as input 
  99.      # to generated merged dta file --- Wenyao Shi.
  100.      my $pepmass = 0; #initialize the variable for PEPMASS in mascot format file header
  101.      my $charge = ""; #initialize the variable for CHARGE in mascot format file header
  102.      my $first_line_printed = 0; #flag for printing the first line when convert from mascot format file
  103.             while (<FileIn>) 
  104.         {
  105.         if ($_ =~ /^PEPMASS/){
  106.         $pepmass = (split(/=/,$_))[1]; # get pepmass from mascot formated header
  107.         chomp($pepmass);
  108.         $pepmass =~ s/^s+//;         # remove space at beginning of line
  109.      $pepmass =~ s/s+$//;         # remove space at end of line
  110.         }
  111.         if ($_ =~ /^CHARGE/){
  112.         $charge = (split(/=/,$_))[1]; # get charge from mascot formated header
  113.         chomp($charge); 
  114.         $charge =~ s/^s+//;         # remove space at beginning of line
  115.      $charge =~ s/s+$//;         # remove space at end of line
  116.         }
  117.        
  118.         if ($pepmass != 0 && $charge ne "" && $first_line_printed != 1){
  119.         $charge = (split(/+|-/, $charge))[0]; # remove the "+" or "-" sign after the charge number
  120.         print FileOut "$pepmass $chargen"; # print "mass/charge" pair as the first line to make it a regular dta format
  121.         $first_line_printed = 1;
  122.         }
  123.           print FileOut $_ if ($_ =~ /^d+/);
  124.              }
  125.      print FileOut "</dta>nn";
  126.              close FileIn;
  127.       
  128.         }
  129.         
  130.   }
  131.   if( $iteration != 0)
  132.   {   print "$outputPath"."$batch_index".".txt contains $iteration dta filesn" ; }
  133.   else
  134.   {    print "no dta file(s) found in the input directory '$inputDir'n" ;}  
  135.  
  136.   close FileOut;  
  137.  
  138.  
  139. #  ===========================================================================
  140. #  PRODUCTION $Log: dta_merge_OMSSA.pl,v $
  141. #  PRODUCTION Revision 1000.0  2003/12/01 16:50:15  gouriano
  142. #  PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.2
  143. #  PRODUCTION
  144. #  ===========================================================================