#!/usr/bin/perl use strict; use warnings; my $usage = "perl mgf_rt.pl [input mgf file] [mascot csv output] [output file]\n"; my $mgfin = shift or die $usage; my $csvin = shift or die $usage; my $output = shift or die $usage; my @IDS; open (CSV, '<', $csvin); while (my $line = ){ chomp $line; my $id = 'initial'; if($line =~ /([^,]*,){30}"([^"]*)/){$id = $2; push (@IDS, $id); } } close CSV; print "Finished collecting spectra names from CSV file\n"; open (MGF, '<', $mgfin); my $A = '0'; my $B = '0'; my $TI = 'initial'; my $RT = 'initial'; my %IDrtPairs; while (my $line = ){ if ($line =~ /TITLE=(.*)/){$TI="$1"; $A = '1'; } if ($line =~ /RTINSECONDS=(.*)/){$RT="$1"; $B = '1'; } if ($A+$B == 2 && grep {$_ eq $TI} @IDS){ $IDrtPairs{"$TI"}="$RT"; $A = '0'; $B = '0'; } } close MGF; print "Finished getting RT information from MGF file\n"; open (CSV, '<', $csvin); open (OUT, '>>', $output); while (my $line = ){ chomp $line; my $id = 'initial'; if($line =~ /([^,]*,){30}"([^"]*)/){$id = $2; my $reten = "$IDrtPairs{$id}"; print OUT "$line,$reten\n"; }else{ print OUT "$line\n"; } } close CSV; close OUT; #### SEARCH=MIS MASS=Monoisotopic BEGIN IONS TITLE=AE.36154.36154.2 (intensity=3533482168.8807) PEPMASS=358.209301553256 CHARGE=2+ SCANS=36154 RTINSECONDS=1697.984 55.05507 86438.71 56.05026 89053.36 60.0452 843930.94 60.05638 100834.36 69.07059 82593.55 70.02967 63427.3 70.0659 1222576