Commit message:
Init repository with last massbank_ws_searchspectrum master version |
added:
README.md README.txt conf_massbank.cfg lib/conf.pm lib/csv.pm lib/mapper.pm lib/massbank_api.pm lib/massbank_parser.pm lib/threader.pm lib/writter.pm massbank.tmpl massbank_ws_searchspectrum.pl massbank_ws_searchspectrum.xml t/lib/massbank_api_Test.pm t/lib/massbank_main_Test.pm t/lib/massbank_mapper_Test.pm t/massbank_ws_searchspectrum_Test.t test-data/input01_69-pcgroups-mz-relative_int.tabular test-data/input02_2214-mz-int-pcgroups.tabular test-data/input03_1mz-1pcgroup-mz-relative_int.tabular test-data/out_test01.html test-data/out_test01.json test-data/out_test01.tabular test-data/out_test01.txt |
b |
diff -r 000000000000 -r 023c380900ef README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,53 @@ +MassBank spectrum searches - Search by pseudo-spectra on a High Quality Mass Spectral Database. +=============================================================================================== + +[![bioconda-badge](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg?style=flat-square)](http://bioconda.github.io) [![Build Status](https://travis-ci.org/workflow4metabolomics/wrapper-bank-massbank-spectrum_search.svg?branch=master)](https://travis-ci.org/workflow4metabolomics/wrapper-bank-massbank-spectrum_search) + +Our project +----------- +The [Workflow4Metabolomics](http://workflow4metabolomics.org), W4M in short, is a French infrastructure offering software tool processing, analyzing and annotating metabolomics data. It is based on the Galaxy platform. + + +MassBank spectrum searches - Search by pseudo-spectra on a High Quality Mass Spectral Database. +----------------------------------------------------------------------------------------------- + +Tool using the MassBank API Spectrum Search. + + +Galaxy +------ +Galaxy is an open, web-based platform for data intensive biomedical research. Whether on the free public server or your own instance, you can perform, reproduce, and share complete analyses. + +Homepage: [https://galaxyproject.org/](https://galaxyproject.org/) + + +Dependencies using Conda +------------------------ +[![bioconda-badge](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg?style=flat-square)](http://bioconda.github.io) + + +[Conda](http://conda.pydata.org/) is package manager that among many other things can be used to manage Python packages. + +``` +#To install miniconda2 +#http://conda.pydata.org/miniconda.html +#To install the tool dependencies using conda: +conda install perl-lwp-simple perl-lwp-useragent perl-uri-url perl-soap-lite perl-list-moreutils perl-text-csv perl perl-html-template +#To set an environment: +conda create -n wrapper-bank-massbank-spectrum_search perl-soap-lite perl-list-moreutils perl-json perl-html-template` +#To activate the environment: +. activate wrapper-bank-massbank-spectrum_search +``` + + +Travis +------ +[![Build Status](https://travis-ci.org/workflow4metabolomics/wrapper-bank-massbank-spectrum_search.svg?branch=master)](https://travis-ci.org/workflow4metabolomics/wrapper-bank-massbank-spectrum_search) + +Test and Deploy with Confidence. Easily sync your GitHub projects with Travis CI and you'll be testing your code in minutes! + +Historic contributors +--------------------- +- Franck Giacomoni @fgiacomoni - [French Metabolomics and Fluxomics Infrastructure (MetaboHUB)](http://www.metabohub.fr/en) - [La plateforme "Exploration du Métabolisme" (PFEM, Clermont-Ferrand)](http://www6.clermont.inra.fr/plateforme_exploration_metabolisme) +- Marion Landi - [LIFEGRID grant](http://www.lifegrid.fr/fr/home/le-pra-lifegrid.html) - [La plateforme "Exploration du Métabolisme" (PFEM, Clermont-Ferrand)](http://www6.clermont.inra.fr/plateforme_exploration_metabolisme) +- Yann Guitton @yguitton - [LABERCA - Laboratory of Food Contaminants and Residue Analysis](http://www.laberca.org/) - Ecole Nationale Vétérinaire, Agroalimentaire et de l'Alimentation Nantes-Atlantique - France |
b |
diff -r 000000000000 -r 023c380900ef README.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.txt Wed Apr 19 11:31:58 2017 -0400 |
b |
@@ -0,0 +1,74 @@ +## ****** MassBank Searching Spectra environnemnt : ****** ## +# version Janv 2017 F Giacomoni - INRA - METABOHUB - workflow4metabolomics.org core team + +## --- PERL compilator / libraries : --- ## +$ perl -v +This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi + +# libs CORE PERL : +use strict ; +use warnings ; +use Carp qw (cluck croak carp) ; +use Exporter ; +use Data::Dumper ; +use Getopt::Long ; +use FindBin ; +use Encode; +use POSIX ; + + +# libs CPAN PERL : +$ perl -e 'use Text::CSV' +use Text::CSV ; +use JSON ; +use HTML::Template ; +use SOAP::Lite ; +use threads; +use threads::shared; +use Thread::Queue; +use LWP::UserAgent; +use LWP::Simple ; +use File::Basename; + +$ sudo perl -MCPAN -e shell +cpan> install Text::CSV + +# libs pfem PERL : this lib were included in lib dir. +use conf::conf qw( :ALL ) ; +use formats::csv qw( :ALL ) ; +-- + +## --- Conda compliant --- ## +This tool and its PERL dependencies are "Conda compliant". +The requirements section in the Xml file is still commented, waiting for "Conda" deployment improvement in Galaxy project. + +## --- R bin and Packages : --- ## +No interaction with R +-- + +## --- Binary dependencies --- ## +No interaction with binary - use only MassBank (JP or EU server) SOAP method (http://www.massbank.jp/api/services/MassBankAPI?wsdl) +-- + +## --- Config : --- ## +JS and CSS (used in HTML output format) are now hosted on cdn.rawgit.com server - no local config needed + + +PS :If Galaxy can't find the file "massbank.tmpl", perform this command line : perl -pi -e 's/\r//g' conf_massbank.cfg +-- + +## --- XML HELP PART --- ## +one image : +massbank_spectra.png +-- + +## --- DATASETS OR TUTORIAL --- ## +Please find help on W4M: http://workflow4metabolomics.org/howto +-- + +## --- ??? COMMENTS ??? --- ## +If Galaxy can't find the file "massbank.tmpl", perform this command line : " perl -pi -e 's/\r//g' " on the conf file "conf_massbank.cfg". + +To use fully functionalities of HTML output format file : + - check that sanitize_all_html option in universe_wsgi.ini file is uncomment and set to FALSE. +-- \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef conf_massbank.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/conf_massbank.cfg Wed Apr 19 11:31:58 2017 -0400 |
b |
@@ -0,0 +1,19 @@ +## Conf file for massbank_ws_searchspectrum.pl script +# +## Version of +VERSION=2017-01-06 +# +## Threads +THREADING_THRESHOLD=6 + +## Galaxy url for HTML JS and CSS path +JS_GALAXY_PATH=https://cdn.rawgit.com/fgiacomoni/galaxy_utils/master/scripts +CSS_GALAXY_PATH=https://cdn.rawgit.com/fgiacomoni/galaxy_utils/master/style +# +## HTML OUTPUT : +HTML_ENTRIES_PER_PAGE=4 +# +# +# +## MASSBANK FEATURES +URL_MASSBANK=http://www.massbank.jp/jsp/FwdRecord.jsp?id= |
b |
diff -r 000000000000 -r 023c380900ef lib/conf.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/conf.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,259 @@ +package lib::conf ; + +use strict; +use warnings ; +use Exporter ; +use Carp ; +use Data::Dumper ; + +use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); + +our $VERSION = "1.0" ; +our @ISA = qw(Exporter) ; +our @EXPORT = qw( as_conf get_value_from_conf check_path_and_file ) ; +our %EXPORT_TAGS = ( ALL => [qw( as_conf get_value_from_conf )] ) ; + +=head1 NAME + +conf - A module for manage pfem conf file + +=head1 SYNOPSIS + + use conf ; + my $object = conf->new() ; + +=head1 DESCRIPTION + +This module does manage conf file (extract all or selected fields) + +=head1 METHODS + +Methods are : + +=head2 METHOD new + + ## Description : new + ## Input : $self + ## Ouput : bless $self ; + ## Usage : new() ; + +=cut +## START of SUB +sub new { + ## Variables + my $self={}; + bless($self) ; + return $self ; +} +### END of SUB + +=head2 METHOD as_conf + + ## Description : permet de creer l'object conf a partir d'un fichier de conf de type KEY=VALUE + ## Input : $file + ## Ouput : $oConf (a hash) + ## Usage : my ( $oConf ) = as_conf( $file ) ; + +=cut +## START of SUB +sub as_conf { + ## Retrieve Values + my $self = shift ; + my ( $file, $separator ) = @_ ; + +# if (!defined $separator) { $separator = ';' } ## set separator to ; + + if ( !defined $file ) { croak "Can't create object with an none defined file\n" ; } + + my %Conf = () ; ## Hash devant contenir l'ensemble des parametres locaux + + if (-e $file) { + open (CFG, "<$file") or die "Can't open $file\n" ; + while (<CFG>) { + chomp $_ ; + if ( $_ =~ /^#(.*)/) { next ; } + elsif ($_ =~/^(\w+?)=(.*)/) { ## ALPHANUMERIC OR UNDERSCORE ONLY FOR THE KEY AND ANYTHING ELSE FOR VALUE + + my ($key, $value) = ($1, $2) ; + + if (defined $separator) { + if ( $value=~/$separator/ ) { ## is a list to split + my @tmp = split(/$separator/ , $value) ; + $Conf{$key} = \@tmp ; + } + } + else { + $Conf{$key} = $value ; + } + } + } + close(CFG) ; + } + else { + croak "Can't create object with an none existing file\n" ; + } + + return ( \%Conf ) ; +} +## END of SUB + +=head2 METHOD as_conf_list + + ## Description : permet de charger une liste txt en array + ## Input : $file + ## Output : elements + ## Usage : my ( elements ) = as_conf_list( $conf_file ) ; + +=cut +## START of SUB +sub as_conf_list { + ## Retrieve Values + my $self = shift ; + my ( $file ) = @_ ; + + my @elements = () ; + if ( !defined $file ) { croak "Can't create object with an none defined file\n" ; } + + if (-e $file) { + open (CFG, "<$file") or die "Can't open $file\n" ; + while (<CFG>) { + chomp $_ ; + if ( $_ =~ /^#(.*)/) { next ; } + elsif ($_ =~/^(.*)/) { if (defined $1) { push (@elements, $1) ; } } + } + } + else { + croak "Can't create object with an none existing file\n" ; + } + return(\@elements) ; +} +## END of SUB + +=head2 METHOD get_value_from_conf + + ## Description : permet de retourner une valeur du hash de conf a partir d'une key + ## Input : $oConf, $Key + ## Ouput : $Value + ## Usage : my ( $Value ) = get_value_from_conf( $oConf, $Key ) ; + +=cut +## START of SUB +sub get_value_from_conf { + ## Retrieve Values + my $self = shift ; + my ( $oConf, $Key ) = @_ ; + + my $Value = undef ; + + if ( defined $oConf ) { + if ( defined $oConf->{$Key} ) { + $Value = $oConf->{$Key} ; + } + } + else { + croak "Can't manage value with undefined object\n" ; + } + return($Value) ; +} +## END of SUB + +=head2 METHOD get_value_from_conf + + ## Description : permet de retourner une valeur du hash de conf a partir d'une key + ## Input : $oConf, $Key + ## Ouput : $Value + ## Usage : my ( $Value ) = get_value_from_conf( $oConf, $Key ) ; + +=cut +## START of SUB +sub split_value_from_conf { + ## Retrieve Values + my $self = shift ; + my ( $oConf, $Key, $sep ) = @_ ; + + my $value = undef ; + my @values = () ; + + if ( defined $oConf ) { + if ( defined $oConf->{$Key} ) { + $value = $oConf->{$Key} ; + @values = split ( /$sep/, $value) ; + } + } + else { + croak "Can't manage value with undefined object\n" ; + } + return(\@values) ; +} +## END of SUB + + +=head2 METHOD check_path_and_file + + ## Description : permet de verifier les path et la presence des exe decrits dans le file conf. Bloque le script en cas de probleme + ## Input : $oConfs + ## Ouput : NA + ## Usage : &get_value_from_conf( $oConf ) ; + +=cut +## START of SUB +sub check_path_and_file { + + my $self = shift ; + my ( $oConfs ) = @_ ; + + foreach my $conf ( keys %{ $oConfs } ) { + if ( $conf =~ /^FILE/ ) { + if ( -e $oConfs->{$conf} ) { + if ( -s $oConfs->{$conf} ) { next ; } + else { carp "[Warning] : The size of file $oConfs->{$conf} is null\n" ; } + } + else { + carp "[Warning] : The file $oConfs->{$conf} doesn't exist\n" ; + } + } + elsif ( $conf =~ /^PATH/ ) { + if ( -d $oConfs->{$conf} ) { next ; } + else { carp "[Warning] : The dir $oConfs->{$conf} doesn't exist\n" ; } + } + else { next ; } + } + return ; +} +## END of SUB + +1 ; + + +__END__ + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc conf.pm + + +=head1 Exports + +=over 4 + +=item :ALL is as_conf get_value_from_conf + +=back + +=head1 AUTHOR + +Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt> + +=head1 LICENSE + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=head1 VERSION + +version 1 : 10 / 02 / 2013 + +version 2 : ?? + +=cut \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef lib/csv.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/csv.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,285 @@ +package lib::csv ; + +use strict; +use warnings ; +use Exporter ; +use Carp ; + +use Text::CSV ; + +use Data::Dumper ; + +use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); + +our $VERSION = "1.0"; +our @ISA = qw(Exporter); +our @EXPORT = qw( get_csv_object get_value_from_csv get_value_from_csv_multi_header ); +our %EXPORT_TAGS = ( ALL => [qw( get_csv_object get_value_from_csv get_value_from_csv_multi_header )] ); + +=head1 NAME + +My::Module - An example module + +=head1 SYNOPSIS + + use My::Module; + my $object = My::Module->new(); + print $object->as_string; + +=head1 DESCRIPTION + +This module does not really exist, it +was made for the sole purpose of +demonstrating how POD works. + +=head1 METHODS + +Methods are : + +=head2 METHOD new + + ## Description : new + ## Input : $self + ## Ouput : bless $self ; + ## Usage : new() ; + +=cut + +sub new { + ## Variables + my $self={}; + bless($self) ; + return $self ; +} +### END of SUB + +=head2 METHOD get_csv_object + + ## Description : builds a csv object and etablishes format + ## Input : $separator + ## Output : $csv + ## Usage : my ( $csv ) = get_csv_object( $separator ) ; + +=cut +## START of SUB +sub get_csv_object { + ## Retrieve Values + my $self = shift ; + my ( $separator ) = @_ ; + +# my $csv = Text::CSV->new({'sep_char' => "$separator"}); + my $csv = Text::CSV->new ( {'sep_char' => "$separator", binary => 1, } ) # should set binary attribute. + or die "Cannot use CSV: ".Text::CSV->error_diag (); + + return($csv) ; +} +## END of SUB + +=head2 METHOD get_value_from_csv + + ## Description : extract a targeted column in a csv file + ## Input : $csv, $file, $column, $is_header + ## Output : $value + ## Usage : my ( $value ) = get_value_from_csv( $csv, $file, $column, $is_header ) ; + +=cut +## START of SUB +sub get_value_from_csv { + ## Retrieve Values + my $self = shift ; + my ( $csv, $file, $column, $is_header ) = @_ ; + + my @value = () ; + + ## Adapte the number of the colunm : (nb of column to position in array) + $column = $column - 1 ; + + open (CSV, "<", $file) or die $! ; + + my $line = 0 ; + + while (<CSV>) { + $line++ ; + chomp $_ ; + # file has a header + if ( defined $is_header ) { if ($line == 1) { next ; } } + # parsing the targeted column + if ( $csv->parse($_) ) { + my @columns = $csv->fields(); + push ( @value, $columns[$column] ) ; + } + else { + my $err = $csv->error_input; + die "Failed to parse line: $err"; + } + } + close CSV; + return(\@value) ; +} +## END of SUB + +=head2 METHOD get_value_from_csv_multi_header + + ## Description : extract a targeted column in a csv file + ## Input : $csv, $file, $column, $is_header, $nb_header + ## Output : $value + ## Usage : my ( $value ) = get_value_from_csv_multi_header( $csv, $file, $column, $is_header, $nb_header ) ; + +=cut +## START of SUB +sub get_value_from_csv_multi_header { + ## Retrieve Values + my $self = shift ; + my ( $csv, $file, $column, $is_header, $nb_header ) = @_ ; + + my @value = () ; + + ## Adapte the number of the colunm : (nb of column to position in array) + $column = $column - 1 ; + + open (CSV, "<", $file) or die $! ; + + my $line = 0 ; + + while (<CSV>) { + $line++ ; + chomp $_ ; + # file has a header + if ( defined $is_header and $is_header eq 'yes') { if ($line <= $nb_header) { next ; } } + # parsing the targeted column + if ( $csv->parse($_) ) { + my @columns = $csv->fields(); + my $value = $columns[$column] ; + $value =~s/\r|\n// ; + push ( @value, $value ) ; + } + else { + my $err = $csv->error_input; + die "Failed to parse line: $err"; + } + } + close CSV; + return(\@value) ; +} +## END of SUB + +=head2 METHOD parse_csv_object + + ## Description : parse_all csv object and return a array of rows + ## Input : $csv, $file + ## Output : $csv_matrix + ## Usage : my ( $csv_matrix ) = parse_csv_object( $csv, $file ) ; + +=cut +## START of SUB +sub parse_csv_object { + ## Retrieve Values + my $self = shift ; + my ( $csv, $file ) = @_ ; + + my @csv_matrix = () ; + + open my $fh, "<:encoding(utf8)", $$file or die "Can't open csv file $$file: $!"; + + while ( my $row = $csv->getline( $fh ) ) { + push @csv_matrix, $row; + } + $csv->eof or $csv->error_diag(); + close $fh; + + return(\@csv_matrix) ; +} +## END of SUB + +=head2 METHOD parse_allcsv_object + + ## Description : parse_all csv object and return a array of rows with or without header + ## Input : $csv, $file, $keep_header + ## Output : $csv_matrix + ## Usage : my ( $csv_matrix ) = parse_csv_object( $csv, $file, $keep_header ) ; + +=cut +## START of SUB +sub parse_allcsv_object { + ## Retrieve Values + my $self = shift ; + my ( $csv, $file, $keep_header ) = @_ ; + + my @csv_matrix = () ; + my $line = 1 ; + + open my $fh, "<:encoding(utf8)", $$file or die "Can't open csv file $$file: $!"; + + while ( my $row = $csv->getline( $fh ) ) { + if ( ( $keep_header eq 'n' ) and ($line == 1) ) { } + else { push @csv_matrix, $row; } + $line ++ ; + } + my $status = $csv->eof or $csv->error_diag(); + close $fh; + + return(\@csv_matrix, $status) ; +} +## END of SUB + + +=head2 METHOD write_csv_from_arrays + + ## Description : write a csv file from list of rows + ## Input : $csv, $file_name, $rows + ## Output : $csv_file + ## Usage : my ( $csv_file ) = write_csv_from_arrays( $csv, $file_name, $rows ) ; + +=cut +## START of SUB +sub write_csv_from_arrays { + ## Retrieve Values + my $self = shift ; + my ( $csv, $file_name, $rows ) = @_ ; + + my $fh = undef ; + $csv->eol ("\n"); ## end-of-line string to add to rows + $csv->quote_char(undef) ; + open $fh, ">:encoding(utf8)", "$file_name" or die "$file_name: $!"; + + my $status = $csv->print ($fh, $_) for @{$rows}; + close $fh or die "$file_name: $!"; + + return(\$file_name) ; +} +## END of SUB + +1 ; + + +__END__ + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc csv.pm + +=head1 Exports + +=over 4 + +=item :ALL is get_csv_object, get_value_from_csv + +=back + +=head1 AUTHOR + +Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt> + +=head1 LICENSE + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=head1 VERSION + +version 1 : 23 / 10 / 2013 + +version 2 : ?? + +=cut \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef lib/mapper.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/mapper.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,899 @@\n+package lib::mapper ;\r\n+\r\n+use strict;\r\n+use warnings ;\r\n+use Exporter ;\r\n+use Carp ;\r\n+\r\n+use Data::Dumper ;\r\n+\r\n+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);\r\n+\r\n+our $VERSION = "1.0";\r\n+our @ISA = qw(Exporter);\r\n+our @EXPORT = qw( add_min_max_for_pcgroup_res get_massbank_records_by_chunk compute_ids_from_pcgroups_res filter_pcgroup_res get_pcgroup_list get_pcgroups set_massbank_matrix_object add_massbank_matrix_to_input_matrix map_pc_to_generic_json set_html_tbody_object add_mz_to_tbody_object add_entries_to_tbody_object);\r\n+our %EXPORT_TAGS = ( ALL => [qw( add_min_max_for_pcgroup_res get_massbank_records_by_chunk compute_ids_from_pcgroups_res filter_pcgroup_res get_pcgroup_list get_pcgroups set_massbank_matrix_object add_massbank_matrix_to_input_matrix map_pc_to_generic_json set_html_tbody_object add_mz_to_tbody_object add_entries_to_tbody_object)] );\r\n+\r\n+=head1 NAME\r\n+\r\n+My::Module - An example module\r\n+\r\n+=head1 SYNOPSIS\r\n+\r\n+ use My::Module;\r\n+ my $object = My::Module->new();\r\n+ print $object->as_string;\r\n+\r\n+=head1 DESCRIPTION\r\n+\r\n+This module does not really exist, it\r\n+was made for the sole purpose of\r\n+demonstrating how POD works.\r\n+\r\n+=head1 METHODS\r\n+\r\n+Methods are :\r\n+\r\n+=head2 METHOD new\r\n+\r\n+\t## Description : new\r\n+\t## Input : $self\r\n+\t## Ouput : bless $self ;\r\n+\t## Usage : new() ;\r\n+\r\n+=cut\r\n+\r\n+sub new {\r\n+ ## Variables\r\n+ my $self={};\r\n+ bless($self) ;\r\n+ return $self ;\r\n+}\r\n+### END of SUB\r\n+\r\n+=head2 METHOD get_pcgroups\r\n+\r\n+\t## Description : get and prepare pcgroup features (mzs, into, names) from input cvs parser\r\n+\t## Input : $pcs, $mzs, $ints, $names\r\n+\t## Output : $pcgroups\r\n+\t## Usage : my ( $pcgroups ) = get_pcgroups( $pcs, $mzs, $ints, $names ) ;\r\n+\t\r\n+=cut\r\n+## START of SUB\r\n+sub get_pcgroups {\r\n+ my $self = shift;\r\n+ my ( $pcs, $mzs, $ints ) = @_;\r\n+ \r\n+ my %pcgroups = () ;\r\n+ my $i = 0 ;\r\n+ \r\n+ ## Warn diff matrix dimension :\r\n+ my $num_pcs = scalar(@{$pcs}) ;\r\n+ my $num_mzs = scalar(@{$mzs}) ;\r\n+ my $num_ints = scalar(@{$ints}) ;\r\n+ \r\n+ if ( ($num_pcs == $num_mzs ) and ( $num_mzs == $num_ints ) ) {\r\n+\t\tmy @pcs = @{$pcs} ;\r\n+ \t\r\n+ \tforeach my $pc (@{$pcs}) {\r\n+\t \t\r\n+\t \tif ( ! $pcgroups{$pc} ) { $pcgroups{$pc}->{\'id\'} = $pc ;\t$pcgroups{$pc}->{\'annotation\'} = {} ; $pcgroups{$pc}->{\'massbank_ids\'} = [] ; }\r\n+\t \t\r\n+\t \tpush (@{$pcgroups{$pc}->{\'mzmed\'}}, $mzs->[$i]) if ($mzs->[$i]) ; ## map mzs by pcgroup\r\n+\r\n+\t \tif ($ints->[$i] > 0 ) { \tpush (@{$pcgroups{$pc}->{\'into\'}}, $ints->[$i]) ; ## map into by pcgroup\r\n+\t \t}\r\n+\t \telsif ($ints->[$i] == 0) {\r\n+\t \t\tpush (@{$pcgroups{$pc}->{\'into\'}}, $ints->[$i]) ; ## map into by pcgroup even value is 0\r\n+\t \t}\r\n+\t \telse {\r\n+\t \t\twarn "Undefined value found in pcgroups array\\n" ;\r\n+\t \t}\r\n+\t \t$i++ ;\r\n+\t }\r\n+ }\r\n+ else {\r\n+ \twarn "The different ARRAYS (pcs, mzs, ints) doesn\'t have the same size : mapping is not possible \\n!!"\r\n+ }\r\n+ return (\\%pcgroups) ;\r\n+}\r\n+### END of SUB\r\n+\r\n+=head2 METHOD get_pcgroup_list\r\n+\r\n+\t## Description : get and prepare unik pcgroup list from input cvs parsed list\r\n+\t## Input : $pcs\r\n+\t## Output : $list\r\n+\t## Usage : my ( $list ) = get_pcgroup_list( $pcs ) ;\r\n+\t\r\n+=cut\r\n+## START of SUB\r\n+sub get_pcgroup_list {\r\n+\tmy $self = shift;\r\n+ my ( $pcs ) = @_;\r\n+ \r\n+ my @pcgroup_list = () ;\r\n+ my $i = 0 ;\r\n+ \r\n+ my %hash = map { $_, 1 } @{$pcs} ;\r\n+ \t@pcgroup_list = keys %hash;\r\n+ \t@pcgroup_list = sort { $a <=> $b } @pcgroup_list ;\r\n+\t\r\n+\treturn (\\@pcgroup_list) ;\r\n+}\r\n+\r\n+### END of SUB\r\n+\r\n+\r\n+=head2 METHOD filter_pcgroup_res\r\n+\r\n+\t## Description : This method filter the results returned by massbank with a user defined score threshold\r\n+\t## Input : $pcgroups, $threshold\r\n+\t## Output : $pcgroups\r\n+\t## Usage : my ( $pcgroups ) = filter_pcgroup_res ( $pcgroups, $threshold ) ;\r\n+\t\r\n+=cut\r\n+## START of SUB\r\n+sub filter_pcgroup_res {\r\n+ ## Retrieve Values\r\n+ my $self = shift ;\r\n+ '..b"d the entries object (perl array) needed to html template\r\n+\t## Input : $tbody_object, $nb_items_per_page, $mz_list, $entries\r\n+\t## Output : $tbody_object\r\n+\t## Usage : my ( $tbody_object ) = add_entries_to_tbody_object( $tbody_object, $nb_items_per_page, $mz_list, $entries ) ;\r\n+\t\r\n+=cut\r\n+## START of SUB\r\n+sub add_entries_to_tbody_object {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+ my ( $tbody_object, $nb_items_per_page, $mz_list, $JSON ) = @_ ;\r\n+ \r\n+ my $index_page = 0 ;\r\n+ my $index_mz_continous = 0 ;\r\n+ \r\n+ foreach my $page (@{$tbody_object}) {\r\n+ \t\r\n+ \tmy $index_mz = 0 ;\r\n+ \t\r\n+ \tforeach my $mz (@{ $tbody_object->[$index_page]{MASSES} }) {\r\n+ \t\tmy $index_entry = 0 ;\r\n+ \t\tmy $check_noentry = 0 ;\r\n+ \t\tmy @toSort = () ;\r\n+ \t\t\r\n+ \t\tforeach my $record (keys %{ $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS} }) {\r\n+ \t\t\t$check_noentry ++ ;\r\n+\r\n+ \t\t\t\tmy %entry = (\r\n+\t\t \t\t\tENTRY_COLOR => $tbody_object->[$index_page]{MASSES}[$index_mz]{MZ_COLOR},\r\n+\t\t \t\t\tENTRY_ENTRY_NAME => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{name}, \t\r\n+\t\t \t\t\t\tENTRY_ENTRY_ID => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{id}, \r\n+\t\t \t\t\t\tENTRY_ENTRY_ID2 => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{id},\r\n+\t\t\t\t\t\tENTRY_FORMULA => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{formula},\r\n+\t\t\t\t\t\tENTRY_CPD_MZ => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{exact_mz},\r\n+\t\t\t\t\t\tENTRY_MS_TYPE => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{ms_type},\r\n+\t\t\t\t\t\tENTRY_PRECURSOR_TYPE => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{precursor_type},\r\n+\t\t\t\t\t\tENTRY_INSTRUMENT_TYPE => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{instrument_type},\r\n+\t\t\t\t\t\tENTRY_SCORE => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{score},\r\n+\t\t\t\t\t\tENTRY_ENTRY_INCHI => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{inchi},\t\t\t\r\n+\t\t \t\t) ;\r\n+\t \t\t\tpush ( @{ $tbody_object->[$index_page]{MASSES}[$index_mz]{ENTRIES} }, \\%entry) ;\r\n+\r\n+ \t\t\t$index_entry++ ;\t\r\n+ \t\t} ## end foreach record\r\n+ \t\tif ($check_noentry == 0 ) {\r\n+ \t\t\tmy %entry = (\r\n+\t\t \t\t\tENTRY_COLOR => $tbody_object->[$index_page]{MASSES}[$index_mz]{MZ_COLOR},\r\n+\t\t \t\t\tENTRY_ENTRY_NAME => 'UNKNOWN',\r\n+\t\t \t\t\t\tENTRY_ENTRY_ID => 'NONE',\r\n+\t\t \t\t\t\tENTRY_ENTRY_ID2 => '',\r\n+\t\t\t\t\t\tENTRY_FORMULA => 'n/a',\r\n+\t\t\t\t\t\tENTRY_CPD_MZ => 'n/a',\r\n+\t\t\t\t\t\tENTRY_MS_TYPE => 'n/a',\r\n+\t\t\t\t\t\tENTRY_PRECURSOR_TYPE => 'n/a',\r\n+\t\t\t\t\t\tENTRY_INSTRUMENT_TYPE => 'n/a',\r\n+\t\t\t\t\t\tENTRY_SCORE => 0,\r\n+\t\t\t\t\t\tENTRY_ENTRY_INCHI => 'n/a',\r\n+\t\t \t\t) ;\r\n+\t\t \t\tpush ( @{ $tbody_object->[$index_page]{MASSES}[$index_mz]{ENTRIES} }, \\%entry) ;\r\n+ \t\t}\r\n+ \t\t\r\n+ \t\t## sorted by score\r\n+ \t\tmy @sorted = () ;\r\n+ \t\tmy @temp = @{ $tbody_object->[$index_page]{MASSES}[$index_mz]{ENTRIES} } ;\r\n+ \t\tif (scalar (@temp) > 1 ) { ## for mz without record (only one entry with NA or 0 values)\r\n+ \t\t\t@sorted = sort { $b->{ENTRY_SCORE} <=> $a->{ENTRY_SCORE} } @temp;\r\n+ \t\t}\r\n+ \t\telse {\r\n+ \t\t\t@sorted = @temp;\r\n+ \t\t}\r\n+ \t\t\r\n+ \t\t$tbody_object->[$index_page]{MASSES}[$index_mz]{ENTRIES} = \\@sorted ;\r\n+ \t\t\r\n+ \t\t$index_mz ++ ;\r\n+ \t\t$index_mz_continous ++ ;\r\n+\r\n+ \t} ## End foreach mz\r\n+ \t$index_page++ ;\r\n+ \t\r\n+ } ## End foreach page\r\n+# print Dumper $tbody_object ;\r\n+ return($tbody_object) ;\r\n+}\r\n+## END of SUB\r\n+\r\n+\r\n+\r\n+1 ;\r\n+\r\n+\r\n+__END__\r\n+\r\n+=head1 SUPPORT\r\n+\r\n+You can find documentation for this module with the perldoc command.\r\n+\r\n+ perldoc XXX.pm\r\n+\r\n+=head1 Exports\r\n+\r\n+=over 4\r\n+\r\n+=item :ALL is ...\r\n+\r\n+=back\r\n+\r\n+=head1 AUTHOR\r\n+\r\n+Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt>\r\n+\r\n+=head1 LICENSE\r\n+\r\n+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.\r\n+\r\n+=head1 VERSION\r\n+\r\n+version 1 : xx / xx / 201x\r\n+\r\n+version 2 : ??\r\n+\r\n+=cut\n\\ No newline at end of file\n" |
b |
diff -r 000000000000 -r 023c380900ef lib/massbank_api.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/massbank_api.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,699 @@\n+package lib::massbank_api ;\r\n+\r\n+use strict;\r\n+use warnings ;\r\n+use Exporter ;\r\n+use Carp ;\r\n+\r\n+use Data::Dumper ;\r\n+#use SOAP::Lite +trace => [qw (debug)];\r\n+use SOAP::Lite ;\r\n+\r\n+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);\r\n+\r\n+our $VERSION = "1.0";\r\n+our @ISA = qw(Exporter);\r\n+our @EXPORT = qw( connectMassBankJP connectMassBankDE selectMassBank getInstrumentTypes getRecordInfo searchSpectrum getPeak);\r\n+our %EXPORT_TAGS = ( ALL => [qw( connectMassBankJP connectMassBankDE selectMassBank getInstrumentTypes getRecordInfo searchSpectrum getPeak)] );\r\n+\r\n+\r\n+\r\n+\r\n+=head1 NAME\r\n+\r\n+My::Module - An example module\r\n+\r\n+=head1 SYNOPSIS\r\n+\r\n+ use My::Module;\r\n+ my $object = My::Module->new();\r\n+ print $object->as_string;\r\n+\r\n+=head1 DESCRIPTION\r\n+\r\n+This module does not really exist, it\r\n+was made for the sole purpose of\r\n+demonstrating how POD works.\r\n+\r\n+=head1 METHODS\r\n+\r\n+Methods are :\r\n+\r\n+=head2 METHOD new\r\n+\r\n+\t## Description : new\r\n+\t## Input : $self\r\n+\t## Ouput : bless $self ;\r\n+\t## Usage : new() ;\r\n+\r\n+=cut\r\n+\r\n+sub new {\r\n+ ## Variables\r\n+ my $self={};\r\n+ bless($self) ;\r\n+ return $self ;\r\n+}\r\n+### END of SUB\r\n+\r\n+\r\n+=head2 METHOD connectMassBankJP\r\n+\r\n+\t## Description : create a soap object throught the webservice japan massbank.\r\n+\t## Input : $self\r\n+\t## Ouput : $soap ;\r\n+\t## Usage : my $soap = connectMassBankJP() ;\r\n+\r\n+=cut\r\n+sub connectMassBankJP() {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+\tmy $osoap = SOAP::Lite \r\n+\t\t-> uri(\'http://api.massbank\')\r\n+\t\t-> proxy(\'http://www.massbank.jp/api/services/MassBankAPI?wsdl\', timeout => 100 )\r\n+\t\t-> on_fault(sub { my($soap, $res) = @_; \r\n+ eval { die ref $res ? $res->faultstring : $soap->transport->status, "\\n"};\r\n+ return ref $res ? $res : new SOAP::SOM ;\r\n+ });\r\n+\t\r\n+\treturn ($osoap);\r\n+}\r\n+### END of SUB\r\n+\r\n+=head2 METHOD connectMassBankDE\r\n+\r\n+\t## Description : create a soap object throught the webservice UFZ-DE massbank.\r\n+\t## Input : $self\r\n+\t## Ouput : $soap ;\r\n+\t## Usage : my $soap = connectMassBankDE() ;\r\n+\r\n+=cut\r\n+sub connectMassBankDE() {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+\tmy $osoap = SOAP::Lite \r\n+\t\t-> uri(\'http://api.massbank\')\r\n+#\t\t-> proxy(\'http://massbank.ufz.de/MassBank/api/services/MassBankAPI?wsdl\', timeout => 500 )\r\n+\t\t-> proxy(\'http://massbank.normandata.eu/MassBank/api/services/MassBankAPI?wsdl\', timeout => 500 )\r\n+\t\t-> on_fault(sub { my($soap, $res) = @_; \r\n+ eval { die ref $res ? $res->faultstring : $soap->transport->status, "\\n"};\r\n+ return ref $res ? $res : new SOAP::SOM ;\r\n+ });\r\n+ \r\n+\treturn ($osoap);\r\n+}\r\n+### END of SUB\r\n+\r\n+=head2 METHOD selectMassBank\r\n+\r\n+\t## Description : create a soap object throught a choice of servers like UFZ-DE mirror or JP mirror.\r\n+\t## Input : $server\r\n+\t## Ouput : $soap ;\r\n+\t## Usage : my $soap = selectMassBank($server) ;\r\n+\r\n+=cut\r\n+sub selectMassBank() {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+ my ( $server ) = @_ ;\r\n+ \r\n+ my $osoap = undef ;\r\n+ \r\n+ my $ombk = new() ;\r\n+ \r\n+ if ( (defined $server ) and ($server eq \'JP\') ) {\r\n+ \t$osoap = $ombk->connectMassBankJP() ;\r\n+ }\r\n+ elsif ( (defined $server ) and ($server eq \'EU\') ){\r\n+ \t$osoap = $ombk->connectMassBankDE() ;\r\n+ }\r\n+ elsif ( !defined $server ) {\r\n+ \tcroak "Can\'t adress SOAP connexion : undefined MassBank server\\n" ;\r\n+ }\r\n+ else {\r\n+ \tcroak "Can\'t adress SOAP connexion : unknown MassBank server ($server)\\n" ;\r\n+ }\r\n+\treturn ($osoap);\r\n+}\r\n+### END of SUB\r\n+\r\n+\r\n+\r\n+=head2 METHOD getInstrumentTypes\r\n+\r\n+\t## Description : Get a list of the instrument types resistered in MassBank\r\n+\t## Input : $soap\r\n+\t## Ouput : $res ;\r\n+\t## Usage : $res = getInstrumentTypes($soap) ;\r\n+\r\n+=cut\r\n+sub getInstrumentTypes() {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+ my ($osoap) = @_ ;\r\n+ my @records = () ;\r\n+\r\n+\tmy $res = $osoap -> getInstrumentTypes ;\r\n+\t\r\n+\t## DETECTING A SOAP FAUL'..b'elf\r\n+#\t## Ouput : bless $self ;\r\n+#\t## Usage : new() ;\r\n+#\r\n+#=cut\r\n+#\r\n+#sub execBatchJob() { local($soap, $spectra, $ion, $inst, $mail) = @_;\r\n+#\t$ion = \'both\' if ( $ion eq \'\' );\r\n+#\tlocal(@inst) = @$inst;\r\n+#\t@inst = (\'all\') if ( scalar(@inst) == 0 );\r\n+#\tlocal(%spectra) = %$spectra;\r\n+#\tlocal($name);\r\n+#\tlocal(@query) = ();\r\n+#\tforeach $name ( keys %spectra ) {\r\n+#\t\tlocal(@q) = ("Name:$name");\r\n+#\t\tlocal(%peak) = %{$spectra{$name}};\r\n+#\t\tlocal($mz, $inte);\r\n+#\t\tforeach $mz ( keys %peak ) {\r\n+#\t\t\t$inte = $peak{$mz};\r\n+#\t\t\tpush(@q, "$mz,$inte");\r\n+#\t\t}\r\n+#\t\tpush(@query, join(\';\', @q));\r\n+#\t}\r\n+#\tlocal(@dat) = ();\r\n+#\tlocal($q);\r\n+#\tpush(@dat, SOAP::Data -> name(\'type\' => 1));\r\n+#\tpush(@dat, SOAP::Data -> name(\'mailAddress\' => $mail));\r\n+#\tforeach $q ( @query ) {\r\n+#\t\tpush(@dat, SOAP::Data -> name(\'queryStrings\' => $q));\r\n+#\t}\r\n+#\tlocal($ins);\r\n+#\tforeach $ins ( @inst ) {\r\n+#\t\tpush(@dat, SOAP::Data -> name(\'instrumentTypes\' => $ins));\r\n+#\t}\r\n+#\tpush(@dat, SOAP::Data -> name(\'ionMode\' => $ion));\r\n+#\tlocal($data) = SOAP::Data -> value(@dat);\r\n+#\tlocal($som) = $soap -> execBatchJob($data);\r\n+#\tlocal($res) = $som -> valueof(\'/Envelope/Body/[1]\');\r\n+#\treturn ${$res}{\'return\'};\r\n+#}\r\n+#\r\n+#=head2 METHOD new\r\n+#\r\n+#\t## Description : new\r\n+#\t## Input : $self\r\n+#\t## Ouput : bless $self ;\r\n+#\t## Usage : new() ;\r\n+#\r\n+#=cut\r\n+#\r\n+#sub getJobStatus() { local($soap, $job) = @_;\r\n+#\tlocal(@dat) = ();\r\n+#\tpush(@dat, SOAP::Data -> name(\'jobId\' => $job));\r\n+#\tlocal($data) = SOAP::Data -> value(@dat);\r\n+#\tlocal($som) = $soap -> getJobStatus($data);\r\n+#\tlocal($res) = $som -> valueof(\'/Envelope/Body/[1]/[1]\');\r\n+#\tlocal(%res) = %{$res};\r\n+#\tlocal($status) = $res{\'status\'};\r\n+#\tlocal($code) = $res{\'statusCode\'};\r\n+#\tlocal($date) = $res{\'requestDate\'};\r\n+#\treturn ($status, $code, $date);\r\n+#}\r\n+#\r\n+#=head2 METHOD new\r\n+#\r\n+#\t## Description : new\r\n+#\t## Input : $self\r\n+#\t## Ouput : bless $self ;\r\n+#\t## Usage : new() ;\r\n+#\r\n+#=cut\r\n+#\r\n+#sub getJobResult() { local($soap, $job) = @_;\r\n+#\tlocal(@dat) = ();\r\n+#\tpush(@dat, SOAP::Data -> name(\'jobId\' => $job));\r\n+#\tlocal($data) = SOAP::Data -> value(@dat);\r\n+#\tlocal($som) = $soap -> getJobResult($data);\r\n+#\tlocal(@res) = $som -> valueof(\'/Envelope/Body/[1]/[>0]\');\r\n+#\tlocal($n) = scalar(@res);\r\n+#\tlocal(@ret) = ();\r\n+#\tlocal($i);\r\n+#\tfor ( $i = 0; $i < $n; $i ++ ) {\r\n+#\t\tlocal(%res) = %{$res[$i]};\r\n+#\t\tlocal(@res1) = $som -> valueof(\'/Envelope/Body/[1]/[\'.($i+1).\']/results/[>0]\');\r\n+#\t\tlocal(%ret) = ();\r\n+#\t\tlocal($qname) = $res{\'queryName\'};\r\n+#\t\t$ret{\'qname\'} = $qname;\r\n+#\t\tlocal($num) = $res{\'numResults\'};\r\n+#\t\t$ret{\'num\'} = $num;\r\n+#\t\tlocal(@ret1) = ();\r\n+#\t\tlocal($j);\r\n+#\t\tfor ( $j = 0; $j < $num; $j ++ ) {\r\n+#\t\t\tlocal($mw, $form, $id, $score, $title) = @res1[($j * 5) .. ($j * 5 + 4)];\r\n+#\t\t\tlocal(%val) = (\'id\', $id, \'title\', $title, \'formula\', $form, \'exactMass\', $mw, \'score\', $score);\r\n+#\t\t\tpush(@ret1, { %val });\r\n+#\t\t}\r\n+#\t\t$ret{\'list\'} = [ @ret1 ];\r\n+#\t\tpush(@ret, { %ret });\r\n+#\t}\r\n+#\treturn @ret;\r\n+#}\r\n+\r\n+\r\n+1 ;\r\n+\r\n+\r\n+__END__\r\n+\r\n+=head1 SUPPORT\r\n+\r\n+You can find documentation for this module with the perldoc command.\r\n+\r\n+ perldoc massbank_api.pm\r\n+\r\n+=head1 Exports\r\n+\r\n+=over 4\r\n+\r\n+=item :ALL is ...\r\n+\r\n+=back\r\n+\r\n+=head1 AUTHOR\r\n+\r\n+Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt> and marion Landi E<lt>marion.landi@clermont.inra.frE<gt>\r\n+\r\n+=head1 LICENSE\r\n+\r\n+This script is fully inspired by MassBank SOAP API Client Package Ver-2.0 with :\r\n+\tAuthor: Hisayuki Horail (MassBank Group, IAB, Keio U. and JST-BIRD)\r\n+\tHome page: http://www.massbank.jp/\r\n+\tDate: 25 May 2010\r\n+\tThis software is licensed\r\n+\tunder a Creative Commons Attribution License 2.1 Japan License (CC-BY)\r\n+\t(http://creativecommons.org/licensesby/2.1/jp/).\r\n+\t\r\n+This new version of this program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.\t\r\n+\r\n+=head1 VERSION\r\n+\r\n+version 1 : 25 / 05 / 2010\r\n+\r\n+version 2 : 04 / 06 / 2015\r\n+\r\n+=cut\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r 023c380900ef lib/massbank_parser.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/massbank_parser.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,992 @@\n+package lib::massbank_parser ;\n+\n+use strict;\n+use warnings ;\n+use Exporter ;\n+use Carp ;\n+\n+use File::Basename;\n+\n+use Data::Dumper ;\n+\n+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);\n+\n+our $VERSION = "1.0" ;\n+our @ISA = qw(Exporter) ;\n+our @EXPORT = qw( getChemNamesFromString getPeaksFromString ) ;\n+our %EXPORT_TAGS = ( ALL => [qw( getChemNamesFromString getPeaksFromString )] ) ;\n+\n+=head1 NAME\n+\n+parser::chem::massbank - An example module\n+\n+=head1 SYNOPSIS\n+\n+ use parser::chem::massbank ;\n+ my $object = parser::chem::massbank->new();\n+ print $object->as_string;\n+\n+=head1 DESCRIPTION\n+\n+This module does not really exist, it\n+was made for the sole purpose of\n+demonstrating how POD works.\n+\n+=head1 METHODS\n+\n+Methods are :\n+\n+=head2 METHOD new\n+\n+\t## Description : new\n+\t## Input : $self\n+\t## Ouput : bless $self ;\n+\t## Usage : new() ;\n+\n+=cut\n+\n+sub new {\n+ ## Variables\n+ my $self={};\n+ bless($self) ;\n+ return $self ;\n+}\n+### END of SUB\n+\n+=head2 METHOD get_list_of_analysis_intrument_names\n+\n+\t## Description : permt de retourner la liste des nom uniques des instruments utilises\n+\t## Input : $dir, $ms_files (a list of files)\n+\t## Output : $names\n+\t## Usage : my ( $names ) = get_list_of_analysis_intrument_names( $ms_files ) ;\n+\t\n+=cut\n+## START of SUB\n+sub get_list_of_analysis_intrument_names {\n+\t## Retrieve Values\n+ my $self = shift ;\n+ my ( $dir, $ms_files ) = @_ ;\n+ my (%tmp_names, @names) = ( (), () ) ;\n+ foreach my $ms_file (@{$ms_files}) {\n+ \tmy $file = $dir.\'\\\\\'.$ms_file ;\n+ \tif ( ( defined $file ) and ( -e $file )) {\n+\t \topen(MS, "<$file") or die "Cant\' read the file $file\\n" ;\n+\t \twhile ( my $field = <MS> ){\n+\t \t\tchomp $field ;\n+\t \tif ($field =~/AC\\$INSTRUMENT:(.*)/) {\n+\t \t\tif ( $tmp_names{$1} ) { last ; }\n+\t \t\telse { $tmp_names{$1} = 1 ; push (@names, $1) ; }\n+\t \t}\n+\t \t}\n+\t \tclose(MS) ;\n+\t }\n+\t else { \n+\t \tcroak "Can\'t work with a undef / none existing massbank file\\n" ;\n+\t }\n+ }\n+ return(\\@names) ;\n+}\n+## END of SUB\n+\n+=head2 METHOD get_analysis_instruments_data\n+\n+\t## Description : permet de recuperer tous les champs d\'un object massbank\n+\t## Input : $ms_file\n+\t## Output : $features\n+\t## Usage : my ( $features ) = get_analysis_instruments_data( $ms_file ) ;\n+\t\n+=cut\n+## START of SUB\n+sub get_analysis_instruments_data {\n+\t## Retrieve Values\n+ my $self = shift ;\n+ my ( $ms_file ) = @_ ;\n+ \n+ my $control = 0 ;\n+ my %features = (\n+ \t\'name\' => undef,\n+ \t\'type\' => undef,\n+ ) ;\n+ if ( ( defined $ms_file ) and ( -e $ms_file )) {\n+ \topen(MS, "<$ms_file") or die "Cant\' read the file $ms_file\\n" ;\n+ \twhile ( my $field = <MS> ){\n+ \t\tchomp $field ; \t\t\n+ \t\tif ($field =~/AC\\$INSTRUMENT: (.*)/) { $features{\'name\'} = $1 ; $control++; }\n+\t \telsif ($field =~/AC\\$INSTRUMENT_TYPE: (.*)/) { $features{\'type\'} = $1 ; $control++; }\n+\t \telse { next ; }\n+ \t}\n+ \tclose(MS) ;\n+ }\n+ else {\n+ \tcroak "Can\'t work with a undef / none existing massbank file\\n" ;\n+ }\n+ if ($control == 0) { %features = () ; }\n+ return(\\%features) ;\n+}\n+## END of SUB\n+ \n+=head2 METHOD get_ms_methods_data\n+\n+\t## Description : permet de recuperer tous les champs d\'un object massbank\n+\t## Input : $ms_file\n+\t## Output : $features\n+\t## Usage : my ( $features ) = get_ms_methods_data( $ms_file ) ;\n+\t\n+=cut\n+## START of SUB\n+sub get_ms_methods_data {\n+\t## Retrieve Values\n+ my $self = shift ;\n+ my ( $ms_file ) = @_ ;\n+ \n+ my $control = 0 ;\n+ my %features = (\n+ \t\'ion_mode\' => undef,\n+ \t\'ms_type\' => undef,\n+ \t\'collision_energy\' => undef,\n+ \t\'collision_gas\' => undef,\n+ \t\'desolvation_gas_flow\' => undef,\n+ \t\'desolvation_temperature\' => undef,\n+ \t\'ionization_energy\' => undef,\n+ \t\'laser\' => undef,\n+ \t\'matrix\' => undef,\n+ \t\'mass_accuracy\' => undef,\n+ \t\'reagent_gas\' => undef,\n+ \t\'scanning\' => undef\n+ ) ;\n+ if ( ( defined $ms_file ) and ('..b'sub get_annotations_data {\n+\t## Retrieve Values\n+ my $self = shift ;\n+ my ( $ms_file ) = @_ ;\n+ \n+ my @features = () ;\n+ if ( ( defined $ms_file ) and ( -e $ms_file )) {\n+ \topen(MS, "<$ms_file") or die "Cant\' read the file $ms_file\\n" ;\n+ \twhile ( my $field = <MS> ){\n+ \t\tchomp $field ; \t\t\n+ \t\tif ($field =~/PK\\$ANNOTATION:(.*)/) { push( @features, $1) ; }\n+\t \telse { next ; }\n+ \t}\n+ \tclose(MS) ;\n+ \t# for db field\n+ }\n+ else {\n+ \tcroak "Can\'t work with a undef / none existing massbank file\\n" ;\n+ }\n+ return(\\@features) ;\n+}\n+## END of SUB\n+\n+=head2 METHOD get_links_data\n+\n+\t## Description : permet de recuperer tous les champs d\'un object massbank\n+\t## Input : $ms_file\n+\t## Output : $features\n+\t## Usage : my ( $features ) = get_annotations_data( $ms_file ) ;\n+\t\n+=cut\n+## START of SUB\n+sub get_links_data {\n+\t## Retrieve Values\n+ my $self = shift ;\n+ my ( $ms_file ) = @_ ;\n+ \n+ my %features = () ;\n+ my $control = 0 ;\n+ \n+ my ( @CAS, @KEGG, @PUBCHEM ) = ((), (), ()) ;\n+ \n+ if ( ( defined $ms_file ) and ( -e $ms_file )) {\n+ \topen(MS, "<$ms_file") or die "Cant\' read the file $ms_file\\n" ;\n+ \twhile ( my $field = <MS> ){\n+ \t\tchomp $field ; \t\t\n+ \t\tif ($field =~/CH\\$LINK: CAS (.*)/) { push (@CAS, $1) ; $control++; }\n+ \t\telsif ($field =~/CH\\$LINK: KEGG (.*)/) { push (@KEGG, $1) ; $control++; }\n+ \t\telsif ($field =~/CH\\$LINK: PUBCHEM CID (.*)/) { push (@PUBCHEM, $1) ; $control++; }\n+ \t\t## others !!?\n+ \t\t\n+\t \telse { next ; }\n+ \t}\n+ \tclose(MS) ;\n+ \t# for db field\n+ }\n+ else {\n+ \tcroak "Can\'t work with a undef / none existing massbank file\\n" ;\n+ }\n+ \n+ $features{\'CAS\'} = \\@CAS ;\n+ $features{\'KEGG\'} = \\@KEGG ;\n+ $features{\'PUBCHEM\'} = \\@PUBCHEM ;\n+ \n+ return(\\%features) ;\n+}\n+## END of SUB\n+\n+=head2 METHOD get_ms_record_links_data\n+\n+\t## Description : permet de recuperer tous les champs d\'un object massbank\n+\t## Input : $ms_file\n+\t## Output : $features\n+\t## Usage : my ( $features ) = get_ms_record_links_data( $ms_file ) ;\n+\t\n+=cut\n+## START of SUB\n+sub get_ms_record_links_data {\n+\t## Retrieve Values\n+ my $self = shift ;\n+ my ( $ms_file ) = @_ ;\n+ \n+ ## Internal reference for MASSBANK and RESPECT\n+ \n+ my @massbank_id = ( \'TUE\', \'GLS\', \'AU\', \'MSJ\', \'ML\',\'FIO\', \'UF\', \'CO\', \'UO\', \'TT\', \'OUF\', \'MCH\', \'NU\', \'KNA\', \'MT\', \'CE\', \'KO\', \'KZ\', \'JEL\', \'JP\', \'PR\', \'BML\', \'CA\', \'TY\', \'PB\', \'FU\', \'EA\', \'UT\', \'BSU\', \'WA\' ) ;\n+ my @respect_id = ( \'PS\', \'PT\', \'PM\' ) ;\n+ \n+ my $dabase_used = undef ;\n+ my %db = ( \'accession\' => undef, \'name\' => undef ) ;\n+ my $control = 0 ;\n+ \n+ if ( $ms_file ) {\n+ \tmy $filename = basename("$ms_file", ".txt");\n+ \t\n+ \tif ( $filename =~ /(\\w+)$/ ) { # keep only record id (0001-PS0002 => PS0002 or BJ0045 => BJ0045) \n+ \t\t$db{\'accession\'} = $1 ;\n+ \t\t$control++ ;\n+ \t\tif ( ( defined $db{\'accession\'} ) and ( $db{\'accession\'} =~ /(\\D+)(\\d+)/) ) {\n+ \t\t\tmy ($key, $eval) = ($1, 0) ;\n+ \t\t\tforeach (@respect_id) { if ($_ eq $key) { $db{\'name\'} = \'RESPECT\' ; $eval = 1 ; last ; } }\n+ \t\t\tforeach (@massbank_id) { if ($_ eq $key) { $db{\'name\'} = \'MASSBANK\' ; $eval = 1 ; last ; } }\n+ \t\t\tif ( $eval == 0 ){ \tcarp "The following key ($key) for $db{\'accession\'} has an unknown reference (not a Massbank or ReSpect source)\\n" ; }\n+ \t\t}\n+ \t}\n+ }\n+ if ($control == 0) { %db = () ; }\n+\treturn(\\%db) ;\n+}\n+## END of SUB\n+\n+\n+1 ;\n+\n+\n+__END__\n+\n+=head1 SUPPORT\n+\n+You can find documentation for this module with the perldoc command.\n+\n+ perldoc parser::chem::massbank.pm\n+\n+=head1 Exports\n+\n+=over 4\n+\n+=item :ALL is ...\n+\n+=back\n+\n+=head1 AUTHOR\n+\n+Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt>\n+\n+=head1 LICENSE\n+\n+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.\n+\n+=head1 VERSION\n+\n+version 1 : 25 / 06 / 2013\n+\n+version 2 : ??\n+\n+=cut\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r 023c380900ef lib/threader.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/threader.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,264 @@ +package lib::threader ; + +use strict; +use warnings ; +use Exporter ; +use Carp ; +use threads; +use threads::shared; +use Thread::Queue; +use diagnostics ; +use Data::Dumper ; +use Carp qw (cluck croak carp) ; +use LWP::UserAgent; +use LWP::Simple ; ## Lib de protocole HTTP de download +use SOAP::Lite + trace => qw(fault); ## SOAP for web service version 0.67 +import SOAP::Data qw(name); + +use Data::Dumper ; + +use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); + +our $VERSION = "1.0"; +our @ISA = qw(Exporter); +our @EXPORT = qw(threading_getRecordInfo); +our %EXPORT_TAGS = ( ALL => [qw(threading_getRecordInfo )] ); + +=head1 NAME + +My::Module - An example module + +=head1 SYNOPSIS + + use My::Module; + my $object = My::Module->new(); + print $object->as_string; + +=head1 DESCRIPTION + +This module does not really exist, it +was made for the sole purpose of +demonstrating how POD works. + +=head1 METHODS + +Methods are : + +=head2 METHOD new + + ## Description : new + ## Input : $self + ## Ouput : bless $self ; + ## Usage : new() ; + +=cut + +sub new { + ## Variables + my $self={}; + bless($self) ; + return $self ; +} +### END of SUB + +=head2 METHOD searchSpectrumWorker + + ## Description : work with searchSpectrum method in threading mode + ## Input : $Qworks + ## Output : $results + ## Usage : my ( $results ) = searchSpectrumWorker( $Qworks ) ; + +=cut +## START of SUB +sub searchSpectrumWorker { + my $self = shift; + my ($Qworks, $server, $ion_mode, $instruments, $max, $unit, $tol, $cutoff) = @_ ; + my @results = () ; + my @fake = () ; + + my $omassbank = lib::massbank_api->new() ; + my $soap = $omassbank->selectMassBank($server) ; + + while(my $pcgroup = $Qworks->dequeue) { +# print Dumper $pcgroup ; + my $oquery= lib::massbank_api->new() ; + my ($result, $num) = eval{$oquery->searchSpectrum($soap, $pcgroup->{'id'}, $pcgroup->{'mzmed'}, $pcgroup->{'into'}, $ion_mode, $instruments, $max, $unit, $tol, $cutoff) ; } or die; +# print "The query send to massbank return $num entries...\n" ; +# print Dumper $result ; + + if (!defined $num) { $num = 0 ; } + if ($num >= 0 ) { + push @results, $result ; + } + else { + push @fake, $pcgroup ; + } + } + return (@results) ; +} +## END of SUB + + +=head2 METHOD threading_getRecordInfo + + ## Description : prepare parallel threads - DEPRECATED + ## Input : $soap, $list + ## Output : $results + ## Usage : my ( $results ) = threading_getRecordInfo( $soap, $list ) ; + +=cut +## START of SUB +sub threading_getRecordInfo { + ## Retrieve Values + my $self = shift ; + my ( $osoap, $list ) = @_ ; + + my @results = () ; + my $i = 0 ; # position in the ids list + + if ( ( defined $list ) ) { + + my $oquery = lib::massbank_api->new() ; + + for (my $i = 0; $i < (scalar @{$list}); $i++ ) { + my $thr = threads->create( sub { $oquery->getRecordInfo($osoap, $list->[$i]) } ) ; + push ( @results, $thr->join ) if $list->[$i] ; + } + } + else { + warn "Your input list of ids is undefined\n" ; + } + return(\@results) ; +} +## END of SUB + + +=head2 METHOD threading_searchSpectrum + + ## Description : prepare parallel threads - DEPRECATED + ## Input : $soap, + ## Output : $results + ## Usage : my ( $results ) = threading_searchSpectrum( $soap, ) ; + +=cut +## START of SUB +sub threading_searchSpectrum { + + ## http://www.perlmonks.org/?node_id=735923 + ## http://www.nntp.perl.org/group/perl.ithreads/2003/05/msg696.html + ## http://stackoverflow.com/questions/15222480/web-service-using-perl-wsdl-and-multi-threading-does-not-working + ## Retrieve Values + my $self = shift ; + my ( $osoap, $pcgroup_list, $pcgroups, $ion_mode, $instruments, $max, $unit, $tol, $cutoff ) = @_ ; + + my @results = () ; + my $n = 6 ; # position in the ids list + + if ( ( defined $pcgroups ) ) { + + print Dumper $pcgroups ; + + my $oquery = lib::massbank_api->new() ; + + foreach my $pc (@{$pcgroup_list}) { + + print "\t---> Create a thread for pcgroup n-$pc\n" ; + + my $thr = threads->create( + sub { + $oquery->searchSpectrum($osoap, $pcgroups->{$pc}{'mzmed'}, $pcgroups->{$pc}{'into'}, $ion_mode, $instruments, $max, $unit, $tol, $cutoff) ; + } + ) ; + push ( @results, $thr->join ) ; + } ## end foreach + } + else { + warn "Your input list of ids is undefined\n" ; + } + return(\@results) ; +} +## END of SUB + + +=head2 METHOD thread_and_queue_searchSpectrum + + ## Description : prepare parallel and queuing threads - DEPRECATED + ## Input : $soap, + ## Output : $results + ## Usage : my ( $results ) = thread_and_queue_searchSpectrum( $soap, ) ; + +=cut +## START of SUB +sub thread_and_queue_searchSpectrum { +# my $self = shift; +# my ( ) = @_; +# +# our $THREADS = 10; +# my $Qwork = new Thread::Queue; +# my $Qresults = new Thread::Queue; +# +# ## Create the pool of workers +# my @pool = map{ +# threads->create( \&worker, $Qwork, $Qresults ) +# } 1 .. $THREADS; +# +# ## Get the work items (from somewhere) +# ## and queue them up for the workers +# while( my $workItem = getWorkItems() ) { +# $Qwork->enqueue( $workItem ); +# } +# +# ## Tell the workers there are no more work items +# $Qwork->enqueue( (undef) x $THREADS ); +# +# ## Process the results as they become available +# ## until all the workers say they are finished. +# for ( 1 .. $THREADS ) { +# while( my $result = $Qresults->dequeue ) { +# +# ## Do something with the result ## +# print $result; +# } +# } +# +# ## Clean up the threads +# $_->join for @pool; +} +## END of SUB + + + +1 ; + + +__END__ + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc XXX.pm + +=head1 Exports + +=over 4 + +=item :ALL is ... + +=back + +=head1 AUTHOR + +Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt> + +=head1 LICENSE + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=head1 VERSION + +version 1 : xx / xx / 201x + +version 2 : ?? + +=cut \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef lib/writter.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/writter.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,300 @@\n+package lib::writter ;\r\n+\r\n+use strict;\r\n+use warnings ;\r\n+use Exporter ;\r\n+use Carp ;\r\n+\r\n+use Data::Dumper ;\r\n+use JSON ;\r\n+use HTML::Template ;\r\n+\r\n+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);\r\n+\r\n+our $VERSION = "1.0";\r\n+our @ISA = qw(Exporter);\r\n+our @EXPORT = qw( write_csv_skel write_xls_skel write_json_skel write_html_skel );\r\n+our %EXPORT_TAGS = ( ALL => [qw( write_csv_skel write_xls_skel write_json_skel write_html_skel )] );\r\n+\r\n+=head1 NAME\r\n+\r\n+My::Module - An example module\r\n+\r\n+=head1 SYNOPSIS\r\n+\r\n+ use My::Module;\r\n+ my $object = My::Module->new();\r\n+ print $object->as_string;\r\n+\r\n+=head1 DESCRIPTION\r\n+\r\n+This module does not really exist, it\r\n+was made for the sole purpose of\r\n+demonstrating how POD works.\r\n+\r\n+=head1 METHODS\r\n+\r\n+Methods are :\r\n+\r\n+=head2 METHOD new\r\n+\r\n+\t## Description : new\r\n+\t## Input : $self\r\n+\t## Ouput : bless $self ;\r\n+\t## Usage : new() ;\r\n+\r\n+=cut\r\n+\r\n+sub new {\r\n+ ## Variables\r\n+ my $self={};\r\n+ bless($self) ;\r\n+ return $self ;\r\n+}\r\n+### END of SUB\r\n+\r\n+=head2 METHOD write_csv_skel\r\n+\r\n+\t## Description : prepare and write csv output file\r\n+\t## Input : $csv_file, $rows\r\n+\t## Output : $csv_file\r\n+\t## Usage : my ( $csv_file ) = write_csv_skel( $csv_file, $rows ) ;\r\n+\t\r\n+=cut\r\n+## START of SUB\r\n+sub write_csv_skel {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+ my ( $csv_file, $rows ) = @_ ;\r\n+ \r\n+ my $ocsv = lib::csv::new( {is_binary => 1 , quote_binary => 0, quote_char => undef }) ;\r\n+\tmy $csv = $ocsv->get_csv_object("\\t") ;\r\n+\t$ocsv->write_csv_from_arrays($csv, $$csv_file, $rows) ;\r\n+ \r\n+ return($csv_file) ;\r\n+}\r\n+## END of SUB\r\n+\r\n+=head2 METHOD write_xls_skel\r\n+\r\n+\t## Description : prepare and write xls output file\r\n+\t## Input : $xls_file, $rows\r\n+\t## Output : $xls_file\r\n+\t## Usage : my ( $xls_file ) = write_xls_skel( $xls_file, $rows ) ;\r\n+\t\r\n+=cut\r\n+## START of SUB\r\n+sub write_xls_skel {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+ my ( $out_xls, $mzs, $pcs, $pcgroups, $records ) = @_ ;\r\n+ \r\n+ my $results = undef ;\r\n+ my $i = 0 ;\r\n+ \r\n+ open(XLS, \'>:utf8\', "$$out_xls") or die "Cant\' create the file $$out_xls\\n" ;\r\n+ print XLS "ID\\tPCGROUP\\tQuery(Da)\\tScore\\tMetabolite_name\\tCpd_Mw(Da)\\tFormula\\tAdduct\\tMASSBANK_ID\\tInstrument\\tMS_level\\n" ;\r\n+\r\n+ $results = [\'ID\',\'PCGROUP\',\'Query(Da)\',\'Score\',\'Metabolite_name\',\'Cpd_Mw(Da)\',\'Formula\',\'Adduct\',\'MASSBANK_ID\',\'Instrument\',\'MS_level\'] ;\r\n+ \r\n+ foreach my $pc (@{$pcs}) {\r\n+ \t\r\n+ \tif ($pcgroups->{$pc}) {\r\n+# \t\tprint "------>$pc - $pcgroups->{$pc}{annotation}{num_res}\\n" ;\r\n+ \t\t\r\n+ \t\tif ( $pcgroups->{$pc}{\'annotation\'} ) {\r\n+ \t\t\tmy $result = undef ;\r\n+ \t\t\tmy $well_id = "mz_0".sprintf("%04s", $i+1 ) ;\r\n+ \t\t\t\r\n+ \t\t\tif ($pcgroups->{$pc}{\'annotation\'}{\'num_res\'} > 0) {\r\n+\r\n+ \t\t\t\tmy @entries = @{$pcgroups->{$pc}{\'annotation\'}{\'res\'} } ;\r\n+ \t\t\t\tmy $status = undef ;\r\n+ \t\t\t\tforeach my $entry (@entries) {\r\n+ \t\t\t\t\tmy $match = undef ;\r\n+ \t\t\t\t\t## manage if the queried mz is really in the mzs spectrum list...\r\n+ \t\t\t\t\t\r\n+ \t\t\t\t\tif ( $pcgroups->{$pc}{\'enrich_annotation\'}{$mzs->[$i]} ) {\r\n+ \t\t\t\t\t\t\r\n+ \t\t\t\t\t\tmy @matching_ids = @{$pcgroups->{$pc}{\'enrich_annotation\'}{$mzs->[$i]}} ;\r\n+ \t\t\t\t\t\t\r\n+ \t\t\t\t\t\t## \r\n+ \t\t\t\t\t\tif ( scalar @matching_ids == 0 ) {\r\n+ \t\t\t\t\t\t\t$result .= $well_id."\\t".$pc."\\t".$mzs->[$i]."\\t".\'0\'."\\t".\'UNKNOWN\'."\\t".\'NA\'."\\t".\'NA\'."\\t".\'NA\'."\\t".\'NA\'."\\t".\'NA\'."\\t".\'NA\'."\\n" ;\r\n+\t \t\t\t\t\t\tprint XLS "$well_id\\t$pc\\t$mzs->[$i]\\t0\\tNA\\tNA\\tNA\\tNA\\tNA\\tNA\\tNA\\n" ;\r\n+\t \t\t\t\t\t\tlast ;\r\n+ \t\t\t\t\t\t}\r\n+ \t\t\t\t\t\telse {\r\n+ \t\t\t\t\t\t\t# search the massbank matched id\r\n+ \t\t\t\t\t\t\tforeach (@matching_ids) {\r\n+\t \t\t\t\t\t\t\tif ($_ eq $entry->{\'id\'} ) {\r\n+\t \t\t\t\t\t\t\t\t$match = \'TRUE\' ;\r\n+\t \t\t\t\t\t\t\t\tlast ;\r\n+\t \t\t\t\t\t\t\t}\r\n+\t \t\t\t\t\t\t}\r\n+\t \t\t\t\t\t\t\r\n+\t \t\t\t\t\t\tif ( ( defined $match ) and ($match eq \'TRUE\') ) {\r\n+\t \t\t\t\t\t\t\t## sort by [\'ID\',\'PCGROUP\',\'Query(Da)\',\'Score\',\'Metabolite_name\',\'Cpd_Mw'..b'y->{\'id\'}}{precursor_type}."\\t" ; \t}\r\n+\t\t\t\t \t\t\t\telse {\t\t\t\tprint XLS "NA\\t" ; }\r\n+\t\t\t\t \t\t\t\t## print Massbank ID\r\n+\t\t\t\t \t\t\t\tif ($entry->{\'id\'}) { \tprint XLS "$entry->{\'id\'}\\t" ; $result .= $entry->{\'id\'}."\\t" ; \t}\r\n+\t\t\t\t \t\t\t\telse {\t\t\t\tprint XLS "NA\\t" ; }\r\n+\t\t\t\t \t\t\t\t## print Instrument\r\n+\t\t\t\t \t\t\t\tif ($entry->{\'id\'}) { \tprint XLS "$records->{$entry->{\'id\'}}{instrument_type}\\t" ; $result .= $records->{$entry->{\'id\'}}{instrument_type}."\\t" ; \t}\r\n+\t\t\t\t \t\t\t\telse {\t\t\t\tprint XLS "NA\\t" ; }\r\n+\t\t\t\t \t\t\t\t## print MS_Level\r\n+\t\t\t\t\t\t\t\t\tif ($entry->{\'id\'}) { \tprint XLS "$records->{$entry->{\'id\'}}{ms_type}\\n" ; $result .= $records->{$entry->{\'id\'}}{ms_type}."\\n" ; \t}\r\n+\t\t\t\t \t\t\t\telse {\t\t\t\tprint XLS "NA\\n" ; }\r\n+\t\r\n+\t \t\t\t\t\t\t}\r\n+\t \t\t\t\t\t\t## else match is not TRUE\r\n+\t \t\t\t\t\t\telse {\r\n+\t \t\t\t\t\t\t\tnext ;\r\n+\t \t\t\t\t\t\t}\r\n+ \t\t\t\t\t\t}\r\n+ \t\t\t\t\t}\r\n+ \t\t\t\t} ## End foreach entries\r\n+ \t\t\t}\r\n+ \t\t\telse {\r\n+ \t\t\t\t$result .= $well_id."\\t".$pc."\\t".$mzs->[$i]."\\t".\'0\'."\\t".\'UNKNOWN\'."\\t".\'NA\'."\\t".\'NA\'."\\t".\'NA\'."\\t".\'NA\'."\\t".\'NA\'."\\t".\'NA\'."\\n" ;\r\n+ \t\t\t\tprint XLS "$well_id\\t$pc\\t$mzs->[$i]\\t0\\tNA\\tNA\\tNA\\tNA\\tNA\\tNA\\tNA\\n" ;\r\n+ \t\t\t}\r\n+ \t\t}\r\n+ \t\telse{\r\n+ \t\t\twarn "Not possible to get number of found ids on MassBank\\n" ;\r\n+ \t\t}\r\n+ \t}\r\n+ \telse {\r\n+ \t\tcroak "No such pc group exists in your pcgroups object - No xls written\\n" ;\r\n+ \t}\r\n+ \t$i++ ;\r\n+ \t\r\n+ } ## End foreach pcs\r\n+ \r\n+\tclose(XLS) ;\r\n+ return($results) ;\r\n+}\r\n+## END of SUB\r\n+\r\n+=head2 METHOD write_json_skel\r\n+\r\n+\t## Description : prepare and write json output file\r\n+\t## Input : $json_file, $scalar\r\n+\t## Output : $json_file\r\n+\t## Usage : my ( $json_file ) = write_json_skel( $csv_file, $scalar ) ;\r\n+\t\r\n+=cut\r\n+## START of SUB\r\n+sub write_json_skel {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+ my ( $json_file, $scalar ) = @_ ;\r\n+ \r\n+ my $utf8_encoded_json_text = encode_json $scalar ;\r\n+ open(JSON, \'>:utf8\', "$$json_file") or die "Cant\' create the file $$json_file\\n" ;\r\n+ print JSON $utf8_encoded_json_text ;\r\n+ close(JSON) ;\r\n+ \r\n+ return($json_file) ;\r\n+}\r\n+## END of SUB\r\n+\r\n+=head2 METHOD write_html_skel\r\n+\r\n+\t## Description : prepare and write the html output file\r\n+\t## Input : $html_file_name, $html_object, $html_template\r\n+\t## Output : $html_file_name\r\n+\t## Usage : my ( $html_file_name ) = write_html_skel( $html_file_name, $html_object ) ;\r\n+\t\r\n+=cut\r\n+## START of SUB\r\n+sub write_html_skel {\r\n+\t## Retrieve Values\r\n+ my $self = shift ;\r\n+ my ( $html_file_name, $html_object, $pages , $search_condition, $html_template, $js_path, $css_path ) = @_ ;\r\n+ \r\n+ my $html_file = $$html_file_name ;\r\n+ \r\n+ if ( defined $html_file ) {\r\n+\t\topen ( HTML, ">$html_file" ) or die "Can\'t create the output file $html_file " ;\r\n+\t\t\r\n+\t\tif (-e $html_template) {\r\n+\t\t\tmy $ohtml = HTML::Template->new(filename => $html_template);\r\n+\t\t\t$ohtml->param( JS_GALAXY_PATH => $js_path, CSS_GALAXY_PATH => $css_path ) ;\r\n+\t\t\t$ohtml->param( CONDITIONS => $search_condition ) ;\r\n+\t\t\t$ohtml->param( PAGES_NB => $pages ) ;\r\n+\t\t\t$ohtml->param( PAGES => $html_object ) ;\r\n+\t\t\tprint HTML $ohtml->output ;\r\n+\t\t}\r\n+\t\telse {\r\n+\t\t\tcroak "Can\'t fill any html output : No template available ($html_template)\\n" ;\r\n+\t\t}\r\n+\t\t\r\n+\t\tclose (HTML) ;\r\n+ }\r\n+ else {\r\n+ \tcroak "No output file name available to write HTML file\\n" ;\r\n+ }\r\n+ return(\\$html_file) ;\r\n+}\r\n+## END of SUB\r\n+\r\n+1 ;\r\n+\r\n+\r\n+__END__\r\n+\r\n+=head1 SUPPORT\r\n+\r\n+You can find documentation for this module with the perldoc command.\r\n+\r\n+ perldoc writter.pm\r\n+\r\n+=head1 Exports\r\n+\r\n+=over 4\r\n+\r\n+=item :ALL is ...\r\n+\r\n+=back\r\n+\r\n+=head1 AUTHOR\r\n+\r\n+Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt>\r\n+\r\n+=head1 LICENSE\r\n+\r\n+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.\r\n+\r\n+=head1 VERSION\r\n+\r\n+version 1 : 14 / 08 / 2015\r\n+\r\n+version 2 : ??\r\n+\r\n+=cut\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r 023c380900ef massbank.tmpl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/massbank.tmpl Wed Apr 19 11:31:58 2017 -0400 |
b |
@@ -0,0 +1,1 @@ +<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content=""><meta name="author" content="INRA de Clermont-Ferrand"><title>Galaxy MassBank (by spectra) queries - All results</title><link rel="stylesheet" type="text/css" href="css.php" media="all"><link rel="stylesheet" type="text/css" href="<TMPL_VAR NAME=CSS_GALAXY_PATH>/simplePagination.css"/><!-- JavaScript --><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script><script src="<TMPL_VAR NAME=JS_GALAXY_PATH>/jquery.simplePagination.js"></script><style type="text/css">body {padding-top: 70px}div.lm-table-warning { font-size: 1.4em; font-weight: bold; padding-right: 25px; color: #21536a; margin-left: 3px;}tr.green td {background-color: #eaf2d3; color: black;}tr.blank td {background-color: #9999CC; color: black;}table {font-family:'Trebuchet MS',Arial,Helvetica,sans-serif;width:100%;border-collapse:collapse;}table.detail, table.detail tr.parent, table.detail td, table.detail th, table.detail tr.category {border-collapse:collapse;border:1px solid #98bf21;}table.detail th {font-size: 1.2em;text-align: center;padding-top: 5px;padding-bottom: 10px;background-color: #a7c942;color: #ffffff;}td.ca {text-align:center;}footer { margin: 50px 0;}</style><script>function test(pageNumber){ var page="#page-id-"+pageNumber; $('.select').hide() ; $(page).show()}</script></head><body><div class="container"><div class="lm-table-warning">Results of MASSBANK queries - <TMPL_VAR NAME=CONDITIONS></div><div id="detail_table_source" style="display:none"></div><p><div id="choose"></div><p><div id="ms_search_0" class="ms-search-table"></div><!-- HeadRows--><table id="detail_table" class="detail"><col style="width:30px;"><!-- Ids (m/z)--><col style="width:30px;"><!-- Pcgroup --><col style="width:30px;"><!-- Mass (m/z)--><col style="width:120px;"><!-- Met name--><col style="width:50px;"><!-- Cpd ID--><col style="width:40px;"><!-- formula--><col style="width:60px;"><!-- cpd mw--><col style="width:50px;"><!-- MS type --><col style="width:20px;"><!-- ion/prec. type--><col style="width:80px;"><!-- Instrument type--><col style="width:60px;"><!-- score--><col style="width:60px;"><!-- INCHI--><thead><th>ID from input</th><th>PCGroup</th><th>Mass (m/z)</th><th>Metabolite name</th><th>Compound ID</th><th>Formula</th><th>Compound MW (Da)</th><th>MS type</th><th>ion/prec. type</th><th>Instr. type</th><th>Score</th><th>InChI Identifier</th></thead><TMPL_LOOP NAME=PAGES><tbody class="select" id="page-id-<TMPL_VAR NAME=PAGE_NB>"><TMPL_LOOP NAME=MASSES><tr class="<TMPL_VAR NAME=MZ_COLOR>"><td class="ca" ><TMPL_VAR NAME=MASSES_ID_QUERY></td><td id="<TMPL_VAR NAME=MASSES_NB>" class="ca" ><TMPL_VAR NAME=MASSES_PCGROUP_QUERY></td><td class="ca"><TMPL_VAR NAME=MASSES_MZ_QUERY></td><td class="ca" colspan="9"></td></tr><TMPL_LOOP NAME=ENTRIES><tr class="<TMPL_VAR NAME=ENTRY_COLOR>"><td class="ca" colspan="3"></td><td class="ca"><TMPL_VAR NAME=ENTRY_ENTRY_NAME></td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=<TMPL_VAR NAME=ENTRY_ENTRY_ID2>" target="_blank" class="btn"><TMPL_VAR NAME=ENTRY_ENTRY_ID></a></td><td class="ca"><TMPL_VAR NAME=ENTRY_FORMULA></td><td class="ca"><TMPL_VAR NAME=ENTRY_CPD_MZ></td><td class="ca"><TMPL_VAR NAME=ENTRY_MS_TYPE></td><td class="ca"><TMPL_VAR NAME=ENTRY_PRECURSOR_TYPE></td><td class="ca"><TMPL_VAR NAME=ENTRY_INSTRUMENT_TYPE></td><td class="ca"><TMPL_VAR NAME=ENTRY_SCORE></td><td class="ca"><TMPL_VAR NAME=ENTRY_ENTRY_INCHI></td></tr></TMPL_LOOP></TMPL_LOOP></tbody></TMPL_LOOP></table></div><div class="container"><hr><footer><div class="row"> <div class="col-lg-12"><p>Copyright © INRA, N Paulhe, F Giacomoni 2014 </p> </div> </div> </footer></div><script language="javascript">$(function() {$('#choose').pagination({items: <TMPL_VAR NAME=PAGES_NB>,itemsOnPage: 1,currentPage: 1,onInit: function () { test(1); },cssStyle: 'light-theme',onPageClick: function(pageNumber){test(pageNumber)}}).pagination('redraw');});</script></body></html> \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef massbank_ws_searchspectrum.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/massbank_ws_searchspectrum.pl Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,423 @@\n+#!perl\r\n+\r\n+## script : XXX.pl\r\n+\r\n+## Notes :\r\n+#\t-> manage score sorting : Cleaned_pcGroups done but not in outputs !\r\n+\r\n+#=============================================================================\r\n+# Included modules and versions\r\n+#=============================================================================\r\n+## Perl modules\r\n+use strict ;\r\n+use warnings ;\r\n+use Carp qw (cluck croak carp) ;\r\n+\r\n+use threads;\r\n+use threads::shared;\r\n+use Thread::Queue;\r\n+\r\n+use Data::Dumper ;\r\n+use Getopt::Long ;\r\n+use POSIX ;\r\n+use FindBin ; ## Allows you to locate the directory of original perl script\r\n+\r\n+## Specific Perl Modules (PFEM)\r\n+use lib $FindBin::Bin ;\r\n+my $binPath = $FindBin::Bin ;\r\n+use lib::csv qw( :ALL ) ;\r\n+use lib::conf qw( :ALL ) ;\r\n+\r\n+## Dedicate Perl Modules (Home made...)\r\n+use lib::massbank_api qw( :ALL ) ;\r\n+use lib::threader qw(:ALL) ;\r\n+use lib::mapper qw(:ALL) ;\r\n+use lib::writter qw(:ALL) ;\r\n+use lib::massbank_parser qw(:ALL) ;\r\n+\r\n+\r\n+\r\n+## Initialized values\r\n+my ($help, $mzs_file, $col_mz, $col_int, $col_pcgroup, $line_header ) = ( undef, undef, undef, undef, undef,undef, undef ) ;\r\n+my ($server, $ion_mode, $score_threshold, $instruments, $max, $unit, $tol, $cutoff) = ( undef, undef, undef, undef, undef, undef, undef ) ;\r\n+my ($output_json, $output_tabular, $output_xlsx, $output_html ) = ( undef, undef, undef, undef ) ;\r\n+\r\n+## Local values ONLY FOR TEST :\r\n+#my $server = \'JP\' ;\r\n+#my $threading_threshold = 6 ;\r\n+\r\n+#=============================================================================\r\n+# Manage EXCEPTIONS\r\n+#=============================================================================\r\n+&GetOptions ( \t"help|h" \t\t=> \\$help, # HELP\r\n+\t\t\t\t"masses:s"\t\t\t=> \\$mzs_file,\r\n+\t\t\t\t"col_mz:i"\t\t\t=> \\$col_mz,\r\n+\t\t\t\t"col_int:i"\t\t\t=> \\$col_int, ## optionnal\r\n+\t\t\t\t"col_pcgroup:i"\t\t=> \\$col_pcgroup,\r\n+\t\t\t\t"lineheader:i"\t\t=> \\$line_header,\r\n+\t\t\t\t"mode:s"\t\t\t=> \\$ion_mode, \r\n+\t\t\t\t"score_threshold:f"\t=> \\$score_threshold, \r\n+\t\t\t\t"instruments:s"\t\t=> \\$instruments, # advanced -> to transform into string with comma => done !\r\n+\t\t\t\t"max:i"\t\t\t\t=> \\$max, # advanced\r\n+\t\t\t\t"unit:s"\t\t\t=> \\$unit, # advanced\r\n+\t\t\t\t"tolerance:f"\t\t=> \\$tol, \r\n+\t\t\t\t"cutoff:i"\t\t\t=> \\$cutoff, # advanced : intensity cutoff\r\n+\t\t\t\t"server:s"\t\t\t=> \\$server, ## by default JP and # advanced\r\n+\t\t\t\t"output_json:s"\t\t=> \\$output_json,\r\n+\t\t\t\t"output_xlsx:s"\t\t=> \\$output_xlsx,\r\n+\t\t\t\t"output_tabular:s"\t=> \\$output_tabular,\r\n+\t\t\t\t"output_html:s"\t\t=> \\$output_html,\r\n+ ) ;\r\n+ \r\n+## if you put the option -help or -h function help is started\r\n+if ( defined($help) ){ &help ; }\r\n+\r\n+#=============================================================================\r\n+# MAIN SCRIPT\r\n+#=============================================================================\r\n+\r\n+## -------------- Conf file ------------------------ :\r\n+my ( $CONF ) = ( undef ) ;\r\n+foreach my $conf ( <$binPath/*.cfg> ) {\r\n+\tmy $oConf = lib::conf::new() ;\r\n+\t$CONF = $oConf->as_conf($conf) ;\r\n+}\r\n+\r\n+## -------------- HTML template file ------------------------ :\r\n+foreach my $html_template ( <$binPath/*.tmpl> ) { $CONF->{\'HTML_TEMPLATE\'} = $html_template ; }\r\n+\r\n+## Main variables :\r\n+my ($pcs, $mzs, $into, $complete_rows, $pcgroups) = (undef, undef, undef, undef, undef) ;\r\n+\r\n+## manage csv file containing list of masses (every thing is manage in jar)\r\n+if ( ( defined $mzs_file ) and ( $mzs_file ne "" ) and ( -e $mzs_file ) ) {\r\n+\t\r\n+\t## parse csv ids and masses\r\n+\tmy $is_header = undef ;\r\n+\tmy $ocsv = lib::csv->new() ;\r\n+\tmy $csv = $ocsv->get_csv_object( "\\t" ) ;\r\n+\tif ( ( defined $line_header ) and ( $line_header > 0 ) ) { $is_header = \'yes\' ; }\r\n+\t$pcs = $ocsv->get_value_from_csv_multi_header( $csv, $mzs_file, $col_pcgroup, $is_header, $line_header ) ; ## retrieve pc values on csv\r\n+\t$mzs = $ocsv->get_value_from_csv_multi_header( $csv, $mzs_file, $col_mz, $'..b'\r\n+\tmy $owritter = lib::writter->new() ;\r\n+\t$owritter->write_csv_skel(\\$output_tabular, $massbank_matrix) ;\r\n+}\r\n+\r\n+my $json_scalar = undef ;\r\n+## JSON OUTPUT\r\n+if ( (defined $output_json) and (defined $well_annoted_pcGroups) and (defined $mzs) and (defined $pcs) ) {\r\n+\tmy $omapper = lib::mapper->new() ;\r\n+\t$json_scalar = $omapper->map_pc_to_generic_json($pcs, $well_annoted_pcGroups, \\%records) ;\r\n+\tmy $owritter = lib::writter->new() ;\r\n+\t$owritter->write_json_skel(\\$output_json, $json_scalar) ;\r\n+}\r\n+\r\n+## HTML OUTPUT -- TODO\r\n+if ( (defined $output_html) and (defined $json_scalar) ) {\r\n+\t\r\n+#\tprint Dumper $json_scalar ;\r\n+\t\r\n+\t## Uses N mz and theirs entries per page (see config file).\r\n+\t# how many pages you need with your input mz list?\r\n+\tmy $nb_pages_for_html_out = ceil( scalar(@{$mzs} ) / $CONF->{HTML_ENTRIES_PER_PAGE} ) ;\r\n+\t\r\n+\t## Search condition:\r\n+\tmy $search_condition = "Search params : Molecular specie = $ion_mode / delta ($unit) = $tol / Score threshold = $score_threshold and max hit = $max per pcgroup" ;\r\n+\t\r\n+\tmy $oHtml = lib::mapper->new() ;\r\n+\tmy ($tbody_object) = $oHtml->set_html_tbody_object( $nb_pages_for_html_out, $CONF->{HTML_ENTRIES_PER_PAGE} ) ;\r\n+\t($tbody_object) = $oHtml->add_mz_to_tbody_object($tbody_object, $CONF->{HTML_ENTRIES_PER_PAGE}, $mzs, $json_scalar) ;\r\n+\t($tbody_object) = $oHtml->add_entries_to_tbody_object($tbody_object, $CONF->{HTML_ENTRIES_PER_PAGE}, $mzs, $json_scalar) ;\r\n+\t\r\n+\tmy $oWritter = lib::writter->new() ;\r\n+\t$oWritter->write_html_skel(\\$output_html, $tbody_object, $nb_pages_for_html_out, $search_condition, $CONF->{\'HTML_TEMPLATE\'}, $CONF->{\'JS_GALAXY_PATH\'}, $CONF->{\'CSS_GALAXY_PATH\'}) ;\r\n+}\r\n+else {\r\n+\twarn "[WARN] The html output file or the json iss not defined\\n" ;\r\n+}\r\n+\r\n+\r\n+\r\n+\r\n+\r\n+\r\n+\r\n+#====================================================================================\r\n+# Help subroutine called with -h option\r\n+# number of arguments : 0\r\n+# Argument(s) :\r\n+# Return : 1\r\n+#====================================================================================\r\n+sub help {\r\n+\tprint STDERR "\r\n+massbank_ws_searchspectrum.pl\r\n+\r\n+# massbank_ws_searchspectrum.pl is a script to use SOAP massbank webservice and send specific queries about spectra searches. \r\n+# Input : a list of mzs, intensities, pcgroup.\r\n+# Author : Franck Giacomoni\r\n+# Email : franck.giacomoni\\@clermont.inra.fr\r\n+# Version : 1.0\r\n+# Created : 20/01/2017\r\n+USAGE :\t\t \r\n+\t\tmassbank_ws_searchspectrum.pl -help OR\r\n+\t\t\r\n+\t\tmassbank_ws_searchspectrum.pl \r\n+\t\t\t-masses [name of input file] -col_id -col_mz -col_int -col_pcgroup -lineheader\r\n+\t\t\t-mode [ion mode : Positive, Negative or Both ]\r\n+\t\t\t-score_threshold [Ignore Massbank results with a score lower than the defined threshold]\r\n+\t\t\t-instruments [array of string: all or values obtained by getInstrumentTypes method]\r\n+\t\t\t-max [0 is all results or int]\r\n+\t\t\t-unit [unit or ppm]\r\n+\t\t\t-tolerance [Tolerance of values of m/z of peaks: 0.3 unit or 50 ppm]\r\n+\t\t\t-cutoff [Ignore peaks whose intensity is not larger than the value of cutoff. Default: 50)]\r\n+\t\t\t-server [name of the massbank server : EU or JP only]\r\n+\t\t\t-output_json [ouput file for JSON]\r\n+\t\t\t-output_xls [ouput file for XLS]\r\n+\t\t\t-output_tabular [ouput file for TABULAR]\r\n+\t\t\r\n+\t\t";\r\n+\texit(1);\r\n+}\r\n+\r\n+## END of script - F Giacomoni \r\n+\r\n+__END__\r\n+\r\n+=head1 NAME\r\n+\r\n+ XXX.pl -- script for\r\n+\r\n+=head1 USAGE\r\n+\r\n+ XXX.pl -precursors -arg1 [-arg2] \r\n+ or XXX.pl -help\r\n+\r\n+=head1 SYNOPSIS\r\n+\r\n+This script manage ... \r\n+\r\n+=head1 DESCRIPTION\r\n+\r\n+This main program is a ...\r\n+\r\n+=over 4\r\n+\r\n+=item B<function01>\r\n+\r\n+=item B<function02>\r\n+\r\n+=back\r\n+\r\n+=head1 AUTHOR\r\n+\r\n+Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt>\r\n+Yann Guitton \r\n+\r\n+=head1 LICENSE\r\n+\r\n+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.\r\n+\r\n+=head1 VERSION\r\n+\r\n+version 1 : 05 / 01 / 2016\r\n+\r\n+version 2 : ??\r\n+\r\n+=cut\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r 023c380900ef massbank_ws_searchspectrum.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/massbank_ws_searchspectrum.xml Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,268 @@\n+<tool id="massbank_ws_searchspectrum" name="MassBank spectrum searches" version="2017-02-06">\n+ <description>\n+ : Search by pseudo-spectra on a High Quality Mass Spectral Database.\n+ </description>\n+ <requirements>\n+ <requirement type="package" version="1.19">perl-soap-lite</requirement>\n+ <requirement type="package" version="6.15">perl-lwp-simple</requirement>\n+\t<requirement type="package" version="6.15">perl-libwww-perl</requirement>\n+ <requirement type="package" version="2.95">perl-html-template</requirement>\n+ <requirement type="package" version="1.71">perl-uri</requirement>\n+ <requirement type="package" version="1.33">perl-text-csv</requirement>\n+ <requirement type="package" version="2.90">perl-json</requirement>\n+ </requirements>\n+ <stdio>\n+ <exit_code level="fatal" range="1"/>\n+ </stdio>\n+ <command><![CDATA[\n+\tperl $__tool_directory__/massbank_ws_searchspectrum.pl -masses "${variableMetadata_in}" -col_mz "$col_mz" -col_pcgroup "$col_pcgroup" -score_threshold "$score_threshold"\n+\t\t#if str($header.header_choice) == "true":\n+\t\t\t-lineheader "${header.nbheader}"\n+\t\t#end if\n+\t\t\n+\t\t#if str($intensity.colint_choice) == "true":\n+\t\t\t-col_int "${intensity.col_int}"\n+\t\t#end if\n+\t\t\n+\t\t#if str($mode) == "Positive,Negative":\n+\t\t\t-mode "both"\n+\t\t#else:\n+\t\t\t-mode "$mode"\n+\t\t#end if\n+\t\t\n+\t\t#if str($advanced.advanced_settings) == "false":\n+\t\t\t-instruments "all" -max "10" -unit "unit" -tolerance "0.3" -cutoff "50" -server "JP"\n+\t\t#else:\n+\t\t\t-instruments "${advanced.instruments}" -max "${advanced.max}"\n+\t\t\t-unit "${advanced.mz_tolerance.unit}" -tolerance "${advanced.mz_tolerance.tolerance}"\n+\t\t\t-cutoff "${advanced.cutoff}" -server "${advanced.server}"\n+\t\t#end if\n+\t\t\n+\t\t-output_tabular "$variableMetadata_out"\n+\t\t-output_xlsx "$massBankSpectraOutXlsx"\n+\t\t-output_json "$massBankSpectraOutJson"\n+\t\t-output_html "$massBankSpectraOutWeb"\n+\n+ ]]></command>\n+ <inputs>\n+ <param format="tabular" help="Generally variable metadata file" label="File of masses (format: tabular)" name="variableMetadata_in" type="data"/>\n+ <conditional name="header">\n+ <param checked="true" falsevalue="false" help="if \'YES\' is selected then enter your number of header lines" label="Do you have a header?" name="header_choice" truevalue="true" type="boolean"/>\n+ <when value="true">\n+ <param help="number of lines not containing masses" label="Number of header lines" max="10" min="1" name="nbheader" type="integer" value="1"/>\n+ </when>\n+ <when value="false"/>\n+ </conditional>\n+ <param accept_default="true" data_ref="variableMetadata_in" label="Column of masses (MZ)" name="col_mz" type="data_column"/>\n+ <param accept_default="true" data_ref="variableMetadata_in" label="Column of pcgroup" name="col_pcgroup" type="data_column"/>\n+ <conditional name="intensity">\n+ <param checked="true" falsevalue="false" help="if \'No\' is selected, the value of intensity for each mz is set to 10 (MassBank spectrum search require mz-pcgroup-intensity data - please use massbank peak search if needed)" label="Do you have a column of intensity?" name="colint_choice" truevalue="true" type="boolean"/>\n+ <when value="true">\n+ <param accept_default="true" data_ref="variableMetadata_in" label="Column of intensity" name="col_int" type="data_column"/>\n+ </when>\n+ <when value="false"/>\n+ </conditional>\n+ <param display="checkboxes" help="" label="What kind of Ionization Search will be done?" multiple="True" name="mode" type="select">\n+ <option selected="true" value="Positive">Positif Mode</option>\n+ <option selected="true" value="Negative">Negatif Mode</option>\n+ </param>\n+ <param help="Default value is 0.5." label="Score threshold to apply on returned MassBank results" max="1" min="0" name="score_threshold" type="float" value="0.5"/>\n+ <conditional name="advanced">\n+ <param checked="false" falsevalue="false" help="if \'NO\' is selected then defaults values '..b'e" value="Positive"/>\n+ <param name="score_threshold" value="0.5"/>\n+ <param name="advanced_settings" value="true"/>\n+ <param name="instruments" value="all"/>\n+ <param name="max" value="20"/>\n+ <param name="unit" value="unit"/>\n+ <param name="tolerance" value="0.3"/>\n+ <param name="cutoff" value="50"/>\n+ <param name="server" value="JP"/>\n+ <output file="out_test01.tabular" name="variableMetadata_out"/>\n+ <output file="out_test01.html" name="massBankSpectraOutWeb"/>\n+ <output file="out_test01.txt" name="massBankSpectraOutXlsx"/>\n+ <!--<output file="out_test01.json" name="massBankSpectraOutJson"/> The JSON output structure is messy, so it is delete from test-->\n+ </test>\n+ <!--t<test>\n+ \t</test>\n+ <test>\n+ \t</test>-->\n+ </tests>\n+ <help><![CDATA[\n+\n+.. class:: infomark\n+\n+**Wrapping**\n+ | Franck Giacomoni - PFEM ; INRA ; MetaboHUB (for xml interface and perl wrapper and WS client)\n+\n+---------------------------------------------------\n+\n+.. class:: infomark\n+\n+**Please cite** If you use this tool, please cite MassBank (http://www.massbank.jp)\n+\n+\n+==============\n+wsdl_MassBank\n+==============\n+\n+-----------\n+Description\n+-----------\n+\n+Finding information (search spectra method) in the MassBank project via a web service from masses and pcgroups.\n+\n+-----------------\n+Workflow position\n+-----------------\n+\n+\n+.. image:: ./static/images/metabolomics/massbank-ws.png\n+ :width: 800\n+\n+\n+-----------\n+Input files\n+-----------\n+\n++-------------------------+-----------+\n+| Parameter : num + label | Format |\n++=========================+===========+\n+| 1 : variableMetadata | tabular |\n++-------------------------+-----------+\n+\n+File variableMetadata must have at least the 3 following column : \n+\t* Masses : column with all the masses in the tabular input file\n+\t* Intensities : column with all the intensities in the tabular input file (Optionnal but if you haven\'t intensitt values, please use the Massbank peak search tool)\n+\t* PCgroups : column with all the pcgroups in the tabular input file\n+\n+\n+----------\n+Parameters\n+----------\n+\n+Number of header lines\n+\t| Number of lines not containing values \n+\t|\n+\n+Column of masses\n+\t| Specify the column number for the mass in the tabular input file\n+\t|\n+\n+Tolerance of mass (in unit or ppm)\n+\t| Specify a delta (+/-) to the mass to search\n+\t\n+Parameters applied on query\n+\t| cutoff : intensity cutoff (don\'t add to the query, mz with intensity below defined cutoff).\n+\t| max: maximum number of records returned by the MASSBANK server foreach pcgroup of masses (by default max is set to 10).\n+\t| score_threshold: apply a filter on MASSBANK scores (by default threshold is set to 0.5).\n+\t| mode : Ionization search mode: Positive or Negative ou Both\n+\t| Instrument: filter applied on spectra depending of the instrument source. (All is the default value) - - GCMS technologies are available in W4M GCMS tools section.\n+\n+------------\n+Output files\n+------------\n+\n+Two types of files\n+\t| MASSBANK_WEB.html: for viewing result via HTML.\n+\t| MASSBANK.tabular: for linking with others modules.\n+\t| MASSBANK_XLS.txt: an excel-like output to export results under a multi lines format.\n+\t| MASSBANK_JSON.txt: an json output will be available.\n+\t\n+---------------------------------------------------\n+\n+\n+---------------\n+Working example\n+---------------\n+\n+\n+.. class:: warningmark\n+\n+Refer to the corresponding W4M HowTo section: http://workflow4metabolomics.org/howto\n+ | Format Data For Postprocessing\n+ | Perform LCMS Annotations\n+\n+.. class:: warningmark\n+\n+And their "W4M courses 2016":\n+ | Using Galaxy4Metabolomics - W4M table format for Galaxy\n+ | Annotation Banks - Annotation \n+\t\n+\t]]></help>\n+ <!-- [RECOMMANDED] All citations associated to this tool (main citation given above and other references). Can be extracted from the history panel -->\n+ <citations>\n+ <citation type="doi">10.1002/jms.1777</citation>\n+ </citations>\n+</tool>\n' |
b |
diff -r 000000000000 -r 023c380900ef t/lib/massbank_api_Test.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/lib/massbank_api_Test.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,119 @@ +package lib::massbank_api_Test ; + +use diagnostics; # this gives you more debugging information +use warnings; # this warns you of bad practices +use strict; # this prevents silly errors +use Exporter ; +use Carp ; + +use Data::Dumper ; + +our $VERSION = "1.0"; +our @ISA = qw(Exporter); +our @EXPORT = qw( initRecordObjectTest threading_methods_getRecordInfoTest connectMassBankTest connectMassBankJPTest connectMassBankDETest getInstrumentTypesTest getRecordInfoTest searchSpectrumTest searchSpectrumNBTest getPeakTest); +our %EXPORT_TAGS = ( ALL => [qw( initRecordObjectTest threading_methods_getRecordInfoTest connectMassBankTest connectMassBankJPTest connectMassBankDETest getInstrumentTypesTest getRecordInfoTest searchSpectrumTest searchSpectrumNBTest getPeakTest)] ); + +use lib '/Users/fgiacomoni/Inra/labs/perl/galaxy_tools/massbank_ws_searchspectrum' ; +use lib::massbank_api qw( :ALL ) ; +use lib::threader qw( :ALL ) ; +use lib::mapper qw( :ALL ) ; + + +my $server = 'JP' ; + +sub connectMassBankTest { + my ($uri, $proxy) = @_ ; + my $oBih = lib::massbank_api->new() ; + my ($soap) = $oBih->connectMassBank($uri, $proxy) ; + return ($soap) ; +} + +sub connectMassBankJPTest { + my $oBih = lib::massbank_api->new() ; + my ($soap) = $oBih->connectMassBankJP() ; + return ($soap) ; +} + +sub connectMassBankDETest { + my $oBih = lib::massbank_api->new() ; + my ($soap) = $oBih->connectMassBankDE() ; + return ($soap) ; +} + +sub getInstrumentTypesTest { + my ($server) = @_ ; + my $osoap = undef ; + my $oBih = lib::massbank_api->new() ; + + if ($server eq 'JP') { ($osoap) = $oBih->connectMassBankJP() ; } + elsif ($server eq 'EU') { ($osoap) = $oBih->connectMassBankDE() ; } + else { croak "Can't call an unknown server through MassBank API\n" ; } + + my $res = $oBih->getInstrumentTypes($osoap) ; + return ($res) ; +} + +sub getRecordInfoTest { + my ($server, $ids) = @_ ; + + my $oBih = lib::massbank_api->new() ; + my ($osoap) = $oBih->selectMassBank($server) ; + my ($res) = $oBih->getRecordInfo($osoap, $ids) ; + + return($res) ; +} + + +sub searchSpectrumTest { + my ($mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff) = @_ ; + my $pcgroup_id = 1 ; + my $oBih = lib::massbank_api->new() ; + my ($osoap) = $oBih->selectMassBank($server) ; + my ($res, $num) = $oBih->searchSpectrum($osoap, $pcgroup_id, $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff) ; + print Dumper $res ; + return($res) ; +} + +sub searchSpectrumNBTest { + my ($mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff) = @_ ; + my $pcgroup_id = 1 ; + my $oBih = lib::massbank_api->new() ; + my ($osoap) = $oBih->selectMassBank($server) ; + my ($res, $num) = $oBih->searchSpectrum($osoap, $pcgroup_id, $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff) ; + return($num) ; +} + +sub getPeakTest { + my ($ids) = @_ ; + + my $oBih = lib::massbank_api->new() ; + my ($osoap) = $oBih->selectMassBank($server) ; + my ($res) = $oBih->getPeak($osoap, $ids) ; + return($res) ; +} + +sub threading_methods_getRecordInfoTest { + my ($ids) = @_ ; + + my $results = undef ; + my $othreads = lib::threader->new() ; + my $oquery = lib::massbank_api->new() ; + my ($osoap) = $oquery->selectMassBank($server) ; + $results = $othreads->threading_getRecordInfo($osoap, $ids) ; + return($results) ; +} + +## SUB TEST for initRecordObject +sub initRecordObjectTest { + # get values + my ( $string ) = @_; + + my $omassbank = lib::massbank_api->new() ; + my $record = $omassbank->initRecordObject($string) ; +# print Dumper $record ; + return($record) ; +} +## End SUB + + +1 ; \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef t/lib/massbank_main_Test.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/lib/massbank_main_Test.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,45 @@ +package lib::massbank_main_Test ; + +use diagnostics; # this gives you more debugging information +use warnings; # this warns you of bad practices +use strict; # this prevents silly errors +use Exporter ; +use Carp ; + +use Data::Dumper ; + +our $VERSION = "1.0"; +our @ISA = qw(Exporter); +our @EXPORT = qw( run_main_massbank_pl); +our %EXPORT_TAGS = ( ALL => [qw(run_main_massbank_pl)] ); + +#use lib '/Users/fgiacomoni/Inra/labs/perl/galaxy_tools/massbank_ws_searchspectrum' ; +#use lib::mapper qw( :ALL ) ; + +sub run_main_massbank_pl { + + my ($input_file, $col_mz, $col_pcgroup, $col_int, $lineheader, $score_threshold, $mode, $instruments, $max, $unit, $tol, $cutoff, $server, $json, $csv, $xls) = @_ ; + + my $msg = `perl /Users/fgiacomoni/Inra/labs/perl/galaxy_tools/massbank_ws_searchspectrum/massbank_ws_searchspectrum.pl -masses $input_file -col_mz $col_mz -col_pcgroup $col_pcgroup -col_int $col_int -lineheader $lineheader -mode $mode -score_threshold $score_threshold -instruments $instruments -max $max -unit $unit -tolerance $tol -cutoff $cutoff -server $server -json $json -csv $csv -xls $xls`; + print $msg ; +#-masses /Users/fgiacomoni/Inra/labs/tests/massbank_V02/pcgrp_annot.tsv +#-col_mz 1 +#-col_pcgroup 14 +#-col_int 7 +#-lineheader 1 +#-score_threshold 0.5 +#-mode Positive +#-instruments all +#-max 2 +#-unit unit +#-tolerance 0.3 +#-cutoff 5 +#-server JP +#-json /Users/fgiacomoni/Inra/labs/tests/massbank_V02/out.json +#-csv /Users/fgiacomoni/Inra/labs/tests/massbank_V02/out.csv +#-xls /Users/fgiacomoni/Inra/labs/tests/massbank_V02/out.xls + +} + + +1 ; \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef t/lib/massbank_mapper_Test.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/lib/massbank_mapper_Test.pm Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,118 @@ +package lib::massbank_mapper_Test ; + +use diagnostics; # this gives you more debugging information +use warnings; # this warns you of bad practices +use strict; # this prevents silly errors +use Exporter ; +use Carp ; + +use Data::Dumper ; + +our $VERSION = "1.0"; +our @ISA = qw(Exporter); +our @EXPORT = qw( max_from_double_with_deltaTest min_from_double_with_deltaTest get_massbank_records_by_chunkTest compute_ids_from_pcgroups_resTest filter_pcgroup_resTest get_pcgroup_listTest get_pcgroupsTest set_massbank_matrix_objectTest add_massbank_matrix_to_input_matrixTest); +our %EXPORT_TAGS = ( ALL => [qw(max_from_double_with_deltaTest min_from_double_with_deltaTest get_massbank_records_by_chunkTest compute_ids_from_pcgroups_resTest filter_pcgroup_resTest get_pcgroup_listTest get_pcgroupsTest set_massbank_matrix_objectTest add_massbank_matrix_to_input_matrixTest)] ); + +use lib '/Users/fgiacomoni/Inra/labs/perl/galaxy_tools/massbank_ws_searchspectrum' ; +use lib::mapper qw( :ALL ) ; + +sub get_pcgroupsTest { + my ( $pcs, $mzs, $ints ) = @_; + my $omap = lib::mapper->new() ; + my $pcgroups = $omap->get_pcgroups($pcs, $mzs, $ints) ; +# print Dumper $pcgroups ; + return ($pcgroups) ; +} + + +sub get_pcgroup_listTest { + my ($pcs) = @_ ; + my $omap = lib::mapper->new() ; + my $pcgroup_list = $omap->get_pcgroup_list($pcs) ; +# print Dumper $pcgroup_list ; + return ($pcgroup_list) ; +} + +sub set_massbank_matrix_objectTest { + my ($header, $init_pcs, $pcgroups) = @_ ; + my $omap = lib::mapper->new() ; + my $matrix = $omap->set_massbank_matrix_object($header, $init_pcs, $pcgroups) ; +# print Dumper $matrix ; + return ($matrix) ; +} + +sub add_massbank_matrix_to_input_matrixTest { + my ($input_matrix_object, $massbank_matrix_object ) = @_ ; + my $omap = lib::mapper->new() ; + my $matrix = $omap->add_massbank_matrix_to_input_matrix($input_matrix_object, $massbank_matrix_object ) ; +# print Dumper $matrix ; + return ($matrix) ; +} + +## SUB TEST for filter_pcgroup_res +sub filter_pcgroup_resTest { + # get values + my ( $pcgroups, $threshold ) = @_; + my $cleaned_pcgroups = () ; + + + my $omap = lib::mapper->new() ; + $cleaned_pcgroups = $omap->filter_pcgroup_res($pcgroups, $threshold) ; + + return($cleaned_pcgroups) ; +} +## End SUB + +## SUB TEST for +sub compute_ids_from_pcgroups_resTest { + # get values + my ( $pcgroups ) = @_; + my $ids = () ; + + my $var2 = lib::mapper->new() ; + $ids = $var2->compute_ids_from_pcgroups_res($pcgroups) ; + + return($ids) ; +} +## End SUB + +## ## SUB TEST for +sub min_from_double_with_deltaTest { + # get values + my ( $double, $type, $delta ) = @_; + + my $var2 = lib::mapper->new() ; + my ($min, $max) = $var2->min_and_max_from_double_with_delta($double, $type, $delta) ; +# print $min ; + return($min) ; +} +## End SUB + +## ## SUB TEST for +sub max_from_double_with_deltaTest { + # get values + my ( $double, $type, $delta ) = @_; + + my $var2 = lib::mapper->new() ; + my ($min, $max) = $var2->min_and_max_from_double_with_delta($double, $type, $delta) ; +# print $max ; + return($max) ; +} +## End SUB + +## SUB TEST for +sub get_massbank_records_by_chunkTest { + # get values + my ( $server, $ids, $chunk_size ) = @_; + + my $var2 = lib::mapper->new() ; + my $records = $var2->get_massbank_records_by_chunk ($server, $ids, $chunk_size) ; + +# print Dumper $records ; + + return($records) ; +} +## End SUB + + +1 ; \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef t/massbank_ws_searchspectrum_Test.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/massbank_ws_searchspectrum_Test.t Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,1178 @@\n+#! perl\r\n+use diagnostics;\r\n+use warnings;\r\n+no warnings qw/void/;\r\n+use strict;\r\n+no strict "refs" ;\r\n+use Test::More qw( no_plan );\r\n+#use Test::More tests => 8 ; ## with MAPPER SEQUENCE \r\n+use FindBin ;\r\n+use Carp ;\r\n+\r\n+## Specific Modules\r\n+use lib $FindBin::Bin ;\r\n+my $binPath = $FindBin::Bin ;\r\n+use lib::massbank_api_Test qw( :ALL ) ;\r\n+use lib::massbank_mapper_Test qw( :ALL ) ;\r\n+use lib::massbank_main_Test qw( :ALL ) ;\r\n+\r\n+\r\n+## To launch the right sequence : MAIN, API, MAPPER, THREADER, COMPUTE...\r\n+my $sequence = \'COMPUTE\' ;\r\n+my $current_test = 1 ;\r\n+my $server = \'EU\' ;\r\n+\r\n+\r\n+if ($sequence eq "COMPUTE") {\r\n+\tprint "\\n\\t\\t\\t\\t * * * * * * \\n" ;\r\n+\tprint "\\t * * * - - - Test MassBank Main script - - - * * * \\n\\n" ;\r\n+\tsleep 1 ; print "\\n** Test $current_test min_from_double_with_delta with doubles **\\n" ; $current_test++ ; \r\n+\tis_deeply( min_from_double_with_deltaTest (\r\n+\t\t303.0485467, \'Da\', 0.01),\r\n+\t\t303.0385467,\r\n+\t\'Method \\\'min_and_max_from_double_with_delta\\\' works with a double and return the attended min value\');\r\n+\t\r\n+\tsleep 1 ; print "\\n** Test $current_test max_from_double_with_delta with doubles **\\n" ; $current_test++ ; \r\n+\tis_deeply( max_from_double_with_deltaTest (\r\n+\t\t303.0485467, \'Da\', 0.01),\r\n+\t\t303.0585467001,\r\n+\t\'Method \\\'max_from_double_with_delta\\\' works with a double and return the attended max value\');\r\n+\t\r\n+}\r\n+elsif ($sequence eq "MAIN") {\r\n+\tprint "\\n\\t\\t\\t\\t * * * * * * \\n" ;\r\n+\tprint "\\t * * * - - - Test MassBank Main script - - - * * * \\n\\n" ;\r\n+\t\t## Test NORMAL file => OK\r\n+\t ok( run_main_massbank_pl(\r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/pcgrp_annot.tsv\', \r\n+\t \t1, 14, 7, 1, 0.5,\r\n+\t \t\'Positive\', \'all\', 2, \'unit\', 0.3, 5, \'EU\',\r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out1.json\', \r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out1.csv\', \r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out1.xls\'),\r\n+\t \'Main script massbank_ws_searchspectrum.pl with is running and manage normal data (mz, ) \' );\r\n+\t \r\n+\t ## Test BUG file wih relative intensities => OK\r\n+\t ok( run_main_massbank_pl(\r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/261-pcgroups-mz-relative_int.tsv\', \r\n+\t \t\'2\', \'1\', \'3\', \'1\', 0.5,\r\n+\t \t\'Positive\', \'all\', 2, \'unit\', 0.3, 5, \'JP\',\r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out2.json\', \r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out2.csv\', \r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out2.xls\'),\r\n+\t \'Main script massbank_ws_searchspectrum.pl with is running and manage real file (mz, relative int, ...)\' );\r\n+\t \r\n+\t ## Test BUG file wih real intensities (>10000) => OK\r\n+\t ok( run_main_massbank_pl(\r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/2214-mz-int-pcgroups.tsv\', \r\n+\t \t\'1\', \'3\', \'2\', \'1\', 0.5,\r\n+\t \t\'Positive\', \'all\', 2, \'unit\', 0.3, 5, \'JP\',\r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out3.json\', \r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out3.csv\', \r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out3.xls\'),\r\n+\t \'Main script massbank_ws_searchspectrum.pl with is running and manage real file (mz, relative int, ...)\' );\r\n+\t \r\n+\t ## Test BUG file wih relative intensities and ppm / 15 / 5 => OK\r\n+\t ok( run_main_massbank_pl(\r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/261-pcgroups-mz-relative_int.tsv\', \r\n+\t \t\'2\', \'1\', \'3\', \'1\', 0.5,\r\n+\t \t\'Positive\', \'all\', 2, \'ppm\', 15, 5, \'JP\',\r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out4.json\', \r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out4.csv\', \r\n+\t \t\'/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out4.xls\'),\r\n+\t \'Main script massbank_ws_searchspectrum.pl with is running and manage real file (mz, relative int, ...)\' );\r\n+\t \r\n+\t ## Test BUG file wih real intensities (>10000) and ppm / 15 / 5 + long file => OK\r\n+\t ok( run_main_massbank_pl(\r\n+\t \t\'/Users/fgi'..b' be also 50 with unit = ppm\r\n+\t\t50\t\t\t# cutoff\r\n+\t), \r\n+\t2, \r\n+\'Method \\\'searchSpectrum\\\' works with $server server and return the right number of entries from given mzs list and parameters (max)\');\r\n+\r\n+##\t\t- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n+# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff\r\n+print "\\n** Test $current_test searchSpectrum with a list of mzs, but no intensity (in true very low) and max = 2 **\\n" ; $current_test++;\r\n+is_deeply( searchSpectrumNBTest(\r\n+\t\t[\'273.096\', \'289.086\', \'290.118\', \'291.096\', \'292.113\', \'579.169\', \'580.179\'], \r\n+\t\t[10, 10, 10, 10, 10, 10, 10 ],\r\n+\t\t\'Positive\', # mode\r\n+\t\t[\'all\'],\t# instrument\r\n+\t\t\'2\',\t\t# max return / only 2 for test\r\n+\t\t\'unit\',\t\t# unit (unit or ppm)\r\n+\t\t0.3, \t\t# tol with unit = unit / can be also 50 with unit = ppm\r\n+\t\t50\t\t\t# cutoff\r\n+\t), \r\n+\t2, \r\n+\'Method \\\'searchSpectrum\\\' works with $server server and return the right number of entries from given mzs list and no intensity\');\r\n+\r\n+##\t\t- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n+# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff\r\n+print "\\n** Test $current_test searchSpectrum with a list of mzs, intensities and no optionnal parameter like instrument, unit, tolerance and cutoff **\\n" ; $current_test ++;\r\n+is_deeply( searchSpectrumNBTest(\r\n+\t\t[\'273.096\', \'289.086\', \'290.118\', \'291.096\', \'292.113\', \'579.169\', \'580.179\'], \r\n+\t\t[\'300\', \'300\', \'300\', \'300\', \'300\', \'300\', \'300\'],\r\n+\t\t\'Positive\', # mode\r\n+\t\tundef,\t\t# instrument\r\n+\t\t\'2\',\t\t# max return / only 2 for test\r\n+\t\tundef,\t\t# unit (unit or ppm)\r\n+\t\tundef, \t\t# tol with unit = unit / can be also 50 with unit = ppm\r\n+\t\tundef\t\t# cutoff\r\n+\t), \r\n+\t2, \r\n+\'Method \\\'searchSpectrum\\\' works with $server server and return the right number of entries from def parameters (instrument, unit, tolerance, cutoff )\');\r\n+\r\n+##\t\t- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n+# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff, $max\r\n+print "\\n** Test $current_test searchSpectrum with a list of mzs, intensities and no conf parameters for instrument, unit, tolerance and cutoff (value by default) **\\n" ; $current_test++;\r\n+is_deeply( searchSpectrumNBTest(\r\n+\t\t[\'273.096\', \'289.086\', \'290.118\', \'291.096\', \'292.113\', \'579.169\', \'580.179\'], \r\n+\t\t[\'300\', \'300\', \'300\', \'300\', \'300\', \'300\', \'300\'],\r\n+\t\t\'Positive\', # mode\r\n+\t\tundef,\t\t# instrument - [\'all\'] by default\r\n+\t\tundef,\t\t# max return - 0 by default\r\n+\t\tundef,\t\t# unit - unit by default\r\n+\t\tundef, \t\t# tol - 0.3 (by default) with unit = unit / can be also 50 (by default) with unit = ppm\r\n+\t\tundef\t\t# cutoff - 5 by default\r\n+\t), \r\n+\t388, \r\n+\'Method \\\'searchSpectrum\\\' works with $server server and return the right number of entries (363) with undef parameters (instrument, unit, tolerance, cutoff, max )\');\r\n+\r\n+##\t\t- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n+# ARGVTS : $ids\r\n+print "\\n** Test $current_test getPeak with a list ids **\\n" ; $current_test++;\r\n+is_deeply( getPeakTest( [\'PR020003\', \'FU000001\']), \r\n+\t[\r\n+\t\t{\r\n+\t\t\t\'numPeaks\' => \'9\',\r\n+\t\t\t\'mzs\' => [\'207.0897\',\'210.0499\',\'224.5345\',\'225.2768\',\'226.0377\',\'226.9938\',\'227.9228\',\'243.1025\',\'410.0056\'],\r\n+\t\t\t\'intensities\' => [\'8.488e2\',\'9.442e2\',\'1.093e3\',\'5.294e4\',\'2.896e4\',\'7.015e3\',\'7.870e2\',\'4.024e3\',\'5.620e2\'],\r\n+\t\t\t\'id\' => \'PR020003\'\r\n+\t\t},\r\n+\t\t{\r\n+\t\t\t\'id\' => \'FU000001\',\r\n+\t\t\t\'intensities\' => [\'3.277e5\', \'3.036e4\', \'5.812e4\', \'2.982e5\', \'5.196e4\',\'4.564e5\', \'8.939e5\',\'5.537e4\'],\r\n+\t\t\t\'mzs\' => [\'370.8\', \'371.4\', \'532.0\', \'532.6\', \'533.3\', \'694.1\', \'694.8\',\'695.4\'],\r\n+\t\t\t\'numPeaks\' => \'8\'\r\n+\t\t}\r\n+\t],\r\n+\'Method \\\'getPeak\\\' works with $server server and return the peak lists from given ids list\');\r\n+\r\n+\r\n+\r\n+\r\n+print "\\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\\n" ;\r\n+\r\n+}\r\n+else {\r\n+\tcroak "Can\\\'t launch any test : no sequence clearly defined !!!!\\n" ;\r\n+}\r\n+\r\n' |
b |
diff -r 000000000000 -r 023c380900ef test-data/input01_69-pcgroups-mz-relative_int.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input01_69-pcgroups-mz-relative_int.tabular Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,70 @@ +mz mzmin mzmax rt rtmin rtmax into intb maxo sn sample isotopes adduct pcgroup +303.0485467 303.0479126 303.0501709 273.698 270.334 278.072 247182.3356 246032.8821 80132 351 1 [8][M]+ 1 +304.0519266 304.050354 304.0531006 273.362 270.671 278.072 39377.69332 39179.45225 12431 267 1 [8][M+1]+ 1 +305.0552454 305.0523376 305.0632324 274.034 271.007 278.072 6932.447143 6916.875306 2489 149 1 [8][M+2]+ 1 +325.0531081 325.0501099 325.0581665 273.698 271.007 278.744 16589.13717 16498.21541 4449 72 1 [1][M]+ 1 +325.5558227 325.5527039 325.5592346 273.698 270.334 278.744 5385.764 5364.939238 1474 158 1 1 +326.0658445 326.0617065 326.0741272 274.034 271.007 278.408 3192.858682 3180.844071 959 118 1 [1][M+1]+ 1 +334.0589389 334.0574951 334.0603943 273.698 270.334 278.744 54965.0688 54850.32436 13751 389 1 1 +334.5601886 334.5524292 334.5627747 273.362 270.334 279.753 16357.10268 16227.57541 4281 166 1 1 +335.0608018 335.0567017 335.0646362 274.034 270.671 278.072 5194.492773 5184.064091 1421 148 1 1 +465.101281 465.0989685 465.1035461 273.698 270.334 278.408 108485.9646 108377.6304 35620 1343 1 [10][M]+ [M+H-C6H10O4]+ 610.147 1 +466.1044404 466.0985107 466.1070862 273.362 270.334 278.072 26116.08643 26072.63829 8449 532 1 [10][M+1]+ 1 +467.1065989 467.1006775 467.1124573 274.034 270.671 278.072 5576.989909 5560.706107 2070 174 1 [10][M+2]+ 1 +503.0443595 503.0398865 503.0495605 274.034 270.671 278.744 2661.062625 2635.329938 919 62 1 1 +519.0203434 519.0109863 519.03125 273.698 271.007 278.408 3261.486136 3233.291851 1105 74 1 [2][M]+ 1 +520.0216826 520.0151978 520.031189 274.371 271.007 278.072 767.3935714 756.3133696 303 20 1 [2][M+1]+ 1 +611.1574452 611.1509399 611.159729 273.362 270.334 278.072 52749.60957 52698.08698 21130 1529 1 [6][M]+ [M+H]+ 610.147 1 +612.1618463 612.1569824 612.166626 273.362 270.671 277.735 16140.56724 16129.11427 6402 867 1 [6][M+1]+ 1 +613.1621027 613.1480713 613.1749268 273.698 271.007 278.072 3880.703571 3874.311429 1483 291 1 [6][M+2]+ 1 +630.6266888 630.6172485 630.6311646 273.698 271.007 278.072 17110.08429 17103.35571 6626 1590 1 [4][M]2+ 1 +631.1270815 631.1121216 631.1309814 274.034 270.671 278.072 7219.6755 7213.283727 2839 876 1 [4][M+1]2+ 1 +633.1395015 633.1376953 633.1422119 273.698 270.334 278.408 78153.96508 77951.91484 23827 744 1 [9][M]+ [M+Na]+ 610.147 1 +634.1424296 634.1401978 634.1456909 273.698 270.334 278.408 23879.52783 23851.69336 7234 695 1 [9][M+1]+ 1 +635.1427623 635.1370239 635.1464844 273.698 270.334 278.408 7234.640417 7226.23 2120 2119 1 [9][M+2]+ 1 +636.1507892 636.1391602 636.1651001 274.371 271.007 278.744 1583.057478 1561.299402 636 47 1 [9][M+3]+ 1 +649.1057016 649.1015625 649.1113892 273.362 270.671 277.735 5106.935619 5097.414576 1555 240 1 [3][M]2+ [2M+2K]2+ 610.147 1 +649.6002579 649.5925293 649.6157227 273.698 271.343 277.735 972.9296842 967.2105263 351 77 1 [3][M+1]2+ 1 +650.1081035 650.0990601 650.1168213 273.698 271.007 279.417 1549.122 1535.345619 602 64 1 [3][M+2]2+ 1 +655.1225036 655.1105957 655.1422119 273.362 270.671 277.399 1257.1268 1250.7352 412 86 1 [M+2Na-H]+ 610.147 1 +717.0893975 717.0775146 717.1069946 273.698 273.362 278.408 453.1308 447.1303628 171 26 1 [M+K+NaCOOH]+ 610.147 1 +135.0459028 135.0454712 135.0463409 280.426 276.725 285.476 97555.81142 97424.69475 30037 822 1 [14][M]+ [M+H-H2O]+ 152.048 2 +136.0490744 136.0469818 136.0510406 280.426 277.061 284.126 9243.038571 9236.31 2771 477 1 [14][M+1]+ 2 +153.0565924 153.0544586 153.0579376 280.426 276.725 282.78 4206.543056 4165.861024 1470 39 1 [M+H]+ 152.048 2 +175.0362187 175.0328674 175.0382385 280.426 278.072 283.789 7465.729412 7459.72416 2930 310 1 [13][M]+ [M+Na]+ 152.048 2 +176.0376081 176.0342712 176.0409698 280.089 275.716 281.098 410.713875 408.695625 320 108 1 [13][M+1]+ 2 +197.0192355 197.0154266 197.0233002 280.762 277.735 284.126 963.0227895 952.3813158 394 30 1 [M+2Na-H]+ 152.048 2 +403.0711753 403.0660706 403.0734253 279.753 278.408 282.78 399.5335385 396.1704615 260 26 1 2 +117.0358602 117.033165 117.0389862 278.072 275.38 281.098 994.5956471 970.9683282 507 24 1 3 +145.0301952 145.0294189 145.0324097 278.072 274.707 282.107 20533.65455 20181.26777 7200 53 1 [12][M]+ 3 +146.0338015 146.0315704 146.0370331 278.072 276.052 281.098 2337.98 2333.2704 849 848 1 [12][M+1]+ 3 +149.0608613 149.0575104 149.0633545 278.072 275.043 281.098 3561.349167 3549.48464 1285 90 1 [M+H-C2H2O2]+ 194.055 [M+H-NO2]+ 194.055 3 +163.0397626 163.0365295 163.042099 277.735 276.052 279.417 718.091 709.4482632 368 25 1 [M+H-CH4O]+ 194.055 3 +177.0539492 177.0531006 177.05513 278.072 274.034 282.444 31098.8344 30490.44511 11319 57 1 [11][M]+ [M+H-H2O]+ 194.055 3 +178.0578014 178.0528107 178.0614929 278.072 275.043 282.78 3510.916043 3464.439494 1316 54 1 [11][M+1]+ 3 +195.0644538 195.0613861 195.0670013 278.072 275.716 280.762 1925.5536 1901.981571 858 35 1 [M+H]+ 194.055 3 +196.0700972 196.0676727 196.0720062 278.072 277.061 281.435 279.2630769 271.3225846 204 13 1 [M+K]+ 157.103 3 +217.047301 217.044632 217.0532379 277.735 275.38 279.417 1703.950417 1700.249833 886 885 1 [M+Na]+ 194.055 3 +233.0121036 233.0091858 233.0163269 278.072 274.707 282.107 3540.9 3531.509848 1481 132 1 [M+K]+ 194.055 3 +251.0221026 251.0169678 251.0265961 278.072 273.698 281.435 3523.02613 3499.142348 1254 70 1 [M+Na+K]2+ 440.098 3 +269.0328959 269.0281982 269.0385742 278.072 276.052 281.771 2372.712176 2351.730706 1008 67 1 [M+H-CH4O]+ 300.045 3 +279.0200882 279.0171509 279.0247803 278.408 275.043 280.762 740.7787059 734.4572941 454 41 1 [M+K+HCOOH]+ 194.055 3 +297.0306054 297.0255432 297.038147 278.072 275.38 280.426 1108.1016 1103.392 385 384 1 3 +301.0504305 301.0436401 301.0579834 277.735 274.371 281.435 486.0704762 468.779315 240 12 1 [M+H]+ 300.045 [M+H-C7H6O2]+ 422.084 3 +308.0261572 308.0209351 308.034668 278.072 275.716 282.444 751.5176 741.6344 323 27 1 3 +315.0378642 315.0346375 315.0412598 277.735 276.389 279.753 570.8708 568.516 324 323 1 [M+H-H14O7]+ 440.098 3 +371.2623675 371.2585754 371.2679749 277.399 275.38 279.417 1014.632667 1010.932083 456 455 1 [M+H-C3H4]+ 410.275 3 +422.0847921 422.0766602 422.0930786 277.399 275.716 279.081 817.022 813.9935 617 129 1 3 +425.0339018 425.0305176 425.0410461 277.735 276.052 279.417 398.7525 388.7106316 267 13 1 3 +427.0703433 427.0647888 427.0771484 278.072 274.707 282.107 1897.090909 1889.026807 1024 98 1 [7][M]+ [2M+K]+ 194.055 3 +428.071429 428.0612793 428.0791016 278.072 273.362 280.762 553.6545455 544.381348 310 27 1 [7][M+1]+ 3 +443.0411698 443.0319519 443.0491333 278.072 273.362 280.089 842.8931 834.6301017 384 31 1 3 +445.074958 445.0639954 445.0813599 277.735 274.707 281.098 1661.996368 1649.526711 758 53 1 [5][M]+ [M+Na]+ 422.084 3 +446.0817674 446.0753784 446.0857849 277.735 276.725 280.426 352.6043636 348.2589676 238 23 1 [5][M+1]+ 3 +449.2321066 449.2252808 449.2385864 277.735 275.716 282.107 1741.715684 1720.915388 631 37 1 [M+K]+ 410.275 3 +463.0878154 463.078186 463.0952759 278.072 274.707 283.116 819.0366 814.7170295 408 71 1 [M+Na]+ 440.098 3 +472.296343 472.2885132 472.3045959 277.399 275.716 280.089 369.0139231 363.6954096 249 23 1 [3M+H]+ 157.103 3 +480.3076532 480.2977295 480.315033 277.399 276.052 280.762 412.125 404.4284586 208 19 1 3 +607.1399722 607.1333618 607.1530151 278.072 274.034 282.107 284.236875 281.321625 211 34 1 3 +621.1283748 621.1159668 621.1455688 278.072 276.389 279.753 434.6288 431.6012 258 43 1 [3M+K]+ 194.055 3 +21.1283748 21.1159668 21.1455688 78.072 76.389 79.753 34.6288 31.6012 258 43 1 [X]+ 94.055 4 \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef test-data/input02_2214-mz-int-pcgroups.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input02_2214-mz-int-pcgroups.tabular Wed Apr 19 11:31:58 2017 -0400 |
b |
b'@@ -0,0 +1,2215 @@\n+mz\tQC6\tpcgroup\t\t\n+121.5145853\t614328.101\t1\t\t\n+121.6260795\t298110.8522\t1\t\t\n+126.186473\t1372105.065\t1\t\t\n+126.2979602\t799423.8448\t1\t\t\n+126.4094198\t99064.65118\t1\t\t\n+184.0731041\t2342541.316\t1\t\t\n+385.2300024\t153777.6254\t1\t\t\n+502.2922166\t6619648.811\t1\t\t\n+503.2956385\t1681584.125\t1\t\t\n+548.334235\t2507995.364\t1\t\t\n+550.3245293\t829008.4774\t1\t\t\n+551.3248058\t368415.0327\t1\t\t\n+566.2893078\t157486.0653\t1\t\t\n+566.7905764\t48222.51792\t1\t\t\n+568.3390012\t446382177.5\t1\t\t\n+570.3450055\t28876124.32\t1\t\t\n+571.3479121\t2988517.198\t1\t\t\n+572.3505372\t225428.16\t1\t\t\n+579.3233358\t216856.8949\t1\t\t\n+587.3122117\t917520.0619\t1\t\t\n+587.8139534\t690601.2217\t1\t\t\n+588.3154837\t58952.83371\t1\t\t\n+592.3272029\t502690.7187\t1\t\t\n+626.392138\t1395956.985\t1\t\t\n+636.313923\t174562.4613\t1\t\t\n+652.2915266\t967624.7076\t1\t\t\n+653.2949542\t291543.285\t1\t\t\n+666.307255\t243719.0918\t1\t\t\n+112.6288375\t117890.6728\t2\t\t\n+358.2770237\t0\t2\t\t\n+411.3575423\t165856.1927\t2\t\t\n+478.3218145\t545683.9077\t2\t\t\n+479.3251723\t144657.5645\t2\t\t\n+496.3388594\t326649278.1\t2\t\t\n+497.3421007\t86412954.14\t2\t\t\n+498.3448681\t12878117.73\t2\t\t\n+499.3471079\t1028079.683\t2\t\t\n+507.3234575\t167638.1508\t2\t\t\n+515.3122686\t720161.6218\t2\t\t\n+515.8139796\t397175.3526\t2\t\t\n+518.3207866\t13745773.19\t2\t\t\n+519.3241556\t3311868.986\t2\t\t\n+520.3272042\t243489.526\t2\t\t\n+534.2948444\t504710.1168\t2\t\t\n+554.3921216\t1385635.332\t2\t\t\n+555.3954949\t348251.8324\t2\t\t\n+564.313868\t168012.914\t2\t\t\n+580.2914584\t995761.851\t2\t\t\n+581.2947583\t204696.4707\t2\t\t\n+586.3083281\t138599.0003\t2\t\t\n+594.3070945\t92685.13566\t2\t\t\n+596.370224\t615370.5679\t2\t\t\n+597.3736566\t72737.09261\t2\t\t\n+115.9676656\t121776.9211\t3\t\t\n+317.2007344\t2098352.407\t3\t\t\n+318.2040976\t458557.6832\t3\t\t\n+319.2073582\t0\t3\t\t\n+353.3521065\t1658398.883\t3\t\t\n+474.3570859\t360044.8496\t3\t\t\n+482.3597638\t1296382.244\t3\t\t\n+483.3631202\t301426.7483\t3\t\t\n+504.3378034\t238621.0857\t3\t\t\n+522.3543945\t180368757.6\t3\t\t\n+523.3577138\t50377590.4\t3\t\t\n+524.3607156\t7255131.902\t3\t\t\n+525.3630416\t599539.8512\t3\t\t\n+541.3279032\t196068.4889\t3\t\t\n+541.8296488\t69409.55717\t3\t\t\n+544.3364533\t10222073.29\t3\t\t\n+545.3398262\t2790644.602\t3\t\t\n+546.3429472\t184432.5974\t3\t\t\n+560.310504\t309862.3598\t3\t\t\n+580.4077319\t1005043.61\t3\t\t\n+581.4111065\t122900.2556\t3\t\t\n+606.3070159\t494884.5942\t3\t\t\n+612.3239909\t156489.1575\t3\t\t\n+315.16276\t204707.2467\t4\t\t\n+321.1796828\t126724.0327\t4\t\t\n+326.3774822\t115518284.2\t4\t\t\n+327.3808042\t25116955.97\t4\t\t\n+328.3842252\t2615994.772\t4\t\t\n+329.3875872\t0\t4\t\t\n+389.1668823\t0\t4\t\t\n+504.3051591\t202555.2418\t4\t\t\n+676.5461678\t5758573.034\t4\t\t\n+697.5247595\t243020.3285\t4\t\t\n+697.7538842\t239983.8012\t4\t\t\n+698.7572722\t113034.2856\t4\t\t\n+699.7608545\t0\t4\t\t\n+114.6217783\t653938.15\t5\t\t\n+114.7332742\t302321.6519\t5\t\t\n+116.5136396\t1044234.858\t5\t\t\n+116.6251117\t544124.1944\t5\t\t\n+120.2973566\t19775.85284\t5\t\t\n+120.4088554\t19691.44866\t5\t\t\n+328.2377679\t259917.185\t5\t\t\n+462.243275\t533866.1601\t5\t\t\n+462.2664868\t1086115.103\t5\t\t\n+463.2698715\t250396.1727\t5\t\t\n+480.277096\t2065022.357\t5\t\t\n+481.280575\t488031.4981\t5\t\t\n+498.2875864\t5319234.948\t5\t\t\n+499.2910559\t1101477.389\t5\t\t\n+515.3141244\t1986891.781\t5\t\t\n+516.2982049\t9988985.803\t5\t\t\n+517.301694\t2839874.622\t5\t\t\n+518.2947627\t320720.4282\t5\t\t\n+518.3050052\t389610.6434\t5\t\t\n+533.3244307\t267221595.3\t5\t\t\n+534.3277395\t77776421.92\t5\t\t\n+535.3211137\t11295733.1\t5\t\t\n+536.3240385\t2929361.018\t5\t\t\n+537.3269699\t212290.5597\t5\t\t\n+538.2680198\t5824612.09\t5\t\t\n+538.2798766\t7330132.232\t5\t\t\n+539.2832914\t2623326.24\t5\t\t\n+554.2449701\t2660229.58\t5\t\t\n+555.2484984\t451046.4285\t5\t\t\n+555.3065167\t657771.0423\t5\t\t\n+560.2618251\t390998.2675\t5\t\t\n+561.3557977\t6502591.384\t5\t\t\n+562.3592327\t1856206.571\t5\t\t\n+574.3512231\t982454.9197\t5\t\t\n+575.3545263\t91242.72597\t5\t\t\n+100.0754227\t463055.5623\t6\t\t\n+104.052634\t1312590.706\t6\t\t\n+120.0805276\t8972796.407\t6\t\t\n+121.0838857\t689370.0993\t6\t\t\n+123.0549787\t72375006.65\t6\t\t\n+124.0583775\t4254013.967\t6\t\t\n+131.0489038\t334262.8124\t6\t\t\n+132.1015786\t95629449.65\t6\t\t\n+133.0315327\t4235943.439\t6\t\t\n+133.1049622\t5913875.878\t6\t\t\n+134.1058828\t332109.922\t6\t\t\n+136.0754357\t889175.4386\t6\t\t\n+137.0454536\t77094471.44\t6\t\t\n+138.0488322\t3867770.676\t6\t\t\n+149.0593986\t456297.0041\t6\t\t\n+150.0580269\t'..b'2203.39016\t218\t\t\n+330.2819728\t287128.6222\t219\t\t\n+407.4353168\t0\t219\t\t\n+663.4671239\t478077.111\t219\t\t\n+697.5282115\t122469.5267\t219\t\t\n+310.3100363\t427008.8901\t220\t\t\n+302.2143169\t17278.72907\t221\t\t\n+266.1381564\t324657.0482\t222\t\t\n+300.1799891\t82332.33106\t222\t\t\n+170.153565\t369918.6102\t223\t\t\n+307.2737764\t29918.9708\t223\t\t\n+746.3771353\t193301.4576\t223\t\t\n+332.3053903\t158975.8391\t224\t\t\n+386.1989138\t82396.3659\t224\t\t\n+703.5743348\t1184555.801\t225\t\t\n+509.3422062\t106332.1276\t226\t\t\n+741.1570223\t268693.5274\t226\t\t\n+741.4914841\t344147.2886\t226\t\t\n+741.8260314\t198510.4317\t226\t\t\n+562.4306319\t328284.7266\t227\t\t\n+563.4340431\t18872.59119\t227\t\t\n+268.1035363\t534252.4539\t228\t\t\n+385.3054402\t499413.6009\t229\t\t\n+726.4695624\t503286.5471\t229\t\t\n+727.4727658\t188332.8504\t229\t\t\n+378.3471658\t197894.6862\t230\t\t\n+423.2633337\t154138.8896\t230\t\t\n+674.503838\t919157.7664\t230\t\t\n+675.5072181\t324560.9802\t230\t\t\n+720.4309235\t143576.2898\t230\t\t\n+363.2523778\t210978.9906\t231\t\t\n+570.3262845\t375363.896\t231\t\t\n+571.3295928\t149645.2661\t231\t\t\n+740.5219175\t1544626.862\t232\t\t\n+741.5253504\t305067.1262\t232\t\t\n+377.3884264\t20171.93865\t233\t\t\n+437.3618181\t49300.31517\t233\t\t\n+678.5060848\t1321400.042\t233\t\t\n+679.5094571\t215330.6023\t233\t\t\n+736.4904105\t430636.9037\t233\t\t\n+255.2314009\t512723.8957\t234\t\t\n+256.2629749\t888099.3782\t234\t\t\n+298.2735552\t168903.2691\t234\t\t\n+298.2735117\t194692.4532\t235\t\t\n+331.2835901\t280844.0388\t235\t\t\n+552.4016221\t173428.497\t236\t\t\n+628.1940218\t235545.2755\t237\t\t\n+683.1486598\t953476.9982\t237\t\t\n+140.0015248\t1481524.191\t238\t\t\n+318.190497\t99823.94702\t239\t\t\n+125.9859013\t398103.8614\t240\t\t\n+140.001529\t515654.018\t240\t\t\n+354.3360615\t162417.8304\t241\t\t\n+436.2866909\t19798.56509\t241\t\t\n+662.511116\t525647.8204\t241\t\t\n+192.0685326\t204010.2836\t242\t\t\n+404.3153945\t172593.5184\t243\t\t\n+414.3206753\t267993.0298\t244\t\t\n+536.3702259\t337991.5355\t245\t\t\n+395.4352892\t0\t246\t\t\n+660.5454221\t982415.7565\t246\t\t\n+315.1849177\t51050.16753\t247\t\t\n+366.4088767\t305943.203\t248\t\t\n+401.3884867\t366661.2675\t248\t\t\n+567.3793829\t267430.8508\t249\t\t\n+300.2715203\t720705.831\t250\t\t\n+358.2482107\t66718.49533\t251\t\t\n+514.2846879\t429406.7596\t251\t\t\n+515.3258901\t130170.3144\t252\t\t\n+410.325746\t615720.8294\t253\t\t\n+410.2893365\t144975.4363\t254\t\t\n+495.2877678\t20129.07861\t255\t\t\n+745.5931083\t592730.4401\t256\t\t\n+446.2792894\t192580.6632\t257\t\t\n+580.3600032\t624930.1471\t258\t\t\n+391.4040611\t399686.7138\t259\t\t\n+512.284429\t143159.2769\t260\t\t\n+644.4541038\t496178.6893\t261\t\t\n+463.258152\t159530.9721\t262\t\t\n+332.1387163\t295157.0875\t263\t\t\n+366.195784\t252882.1663\t264\t\t\n+513.334647\t141263.2114\t264\t\t\n+396.3829774\t399287.5827\t265\t\t\n+375.2171567\t0\t266\t\t\n+570.3447994\t168316.8779\t266\t\t\n+299.1385621\t90889.18344\t267\t\t\n+379.3677563\t304867.3484\t268\t\t\n+535.3166131\t105152.0583\t269\t\t\n+379.2947774\t82853.65353\t270\t\t\n+609.2884105\t17567.99291\t270\t\t\n+167.1426455\t528168.2992\t271\t\t\n+229.2156985\t1470185.756\t271\t\t\n+258.2503877\t1747023.071\t271\t\t\n+304.2346716\t293927.2153\t271\t\t\n+268.299456\t97516.96626\t272\t\t\n+327.3365798\t489140.8783\t273\t\t\n+710.5113943\t260788.053\t274\t\t\n+748.5846242\t429602.6287\t274\t\t\n+286.3099308\t253226.1009\t275\t\t\n+360.3367435\t374524.0159\t276\t\t\n+533.4303433\t139679.1578\t276\t\t\n+301.1186907\t71381.29913\t277\t\t\n+336.2502204\t283760.9261\t278\t\t\n+420.309974\t107758.5217\t278\t\t\n+300.3367153\t119773.3762\t279\t\t\n+193.1069965\t36354.11507\t280\t\t\n+377.3518862\t137936.1303\t281\t\t\n+392.2787938\t191496.038\t282\t\t\n+408.2220371\t92686.4699\t283\t\t\n+466.1963276\t137678.0055\t284\t\t\n+161.132084\t380636.3981\t285\t\t\n+292.2013976\t41466.78924\t286\t\t\n+316.2112756\t110076.0906\t287\t\t\n+248.2367912\t431074.2413\t288\t\t\n+402.2819963\t109317.5765\t289\t\t\n+444.3465296\t159998.0154\t289\t\t\n+209.0917227\t114977.7277\t290\t\t\n+261.1592734\t35653.53661\t291\t\t\n+163.1477344\t604114.3131\t292\t\t\n+186.0338085\t1292272.028\t293\t\t\n+408.3619586\t324680.3344\t294\t\t\n+154.1586574\t41388.39637\t295\t\t\n+549.4151013\t205451.663\t296\t\t\n+457.1509073\t109797.7946\t297\t\t\n+175.1477518\t639584.5627\t298\t\t\n+204.1227077\t55214.80473\t299\t\t\n+650.438396\t110830.976\t300\t\t\n+179.1268461\t984329.6446\t301\t\t\n+179.2383355\t874487.3156\t301\t\t\n+386.352364\t167882.061\t302\t\t\n+341.1966277\t0\t303\t\t\n+431.3240999\t0\t304\t\t\n' |
b |
diff -r 000000000000 -r 023c380900ef test-data/input03_1mz-1pcgroup-mz-relative_int.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/input03_1mz-1pcgroup-mz-relative_int.tabular Wed Apr 19 11:31:58 2017 -0400 |
[ |
@@ -0,0 +1,9 @@ +mz mzmin mzmax rt rtmin rtmax into intb maxo sn sample isotopes adduct pcgroup +303.0485467 303.0479126 303.0501709 273.698 270.334 278.072 247182.3356 246032.8821 80132 351 1 [8][M]+ 1 +304.0519266 304.050354 304.0531006 273.362 270.671 278.072 39377.69332 39179.45225 12431 267 1 [8][M+1]+ 1 +305.0552454 305.0523376 305.0632324 274.034 271.007 278.072 6932.447143 6916.875306 2489 149 1 [8][M+2]+ 1 +611.1574452 611.1509399 611.159729 273.362 270.334 278.072 52749.60957 52698.08698 21130 1529 1 [6][M]+ [M+H]+ 610.147 2 +503.0443595 503.0398865 503.0495605 274.034 270.671 278.744 2661.062625 2635.329938 919 62 1 1 +297.0306054 297.0255432 297.038147 278.072 275.38 280.426 1108.1016 1103.392 385 384 1 3 +301.0504305 301.0436401 301.0579834 277.735 274.371 281.435 486.0704762 468.779315 240 12 1 [M+H]+ 300.045 [M+H-C7H6O2]+ 422.084 3 +21.1283748 21.1159668 21.1455688 78.072 76.389 79.753 34.6288 31.6012 258 43 1 [X]+ 94.055 4 \ No newline at end of file |
b |
diff -r 000000000000 -r 023c380900ef test-data/out_test01.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/out_test01.html Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,1 @@\n+<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content=""><meta name="author" content="INRA de Clermont-Ferrand"><title>Galaxy MassBank (by spectra) queries - All results</title><link rel="stylesheet" type="text/css" href="css.php" media="all"><link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/fgiacomoni/galaxy_utils/master/style/simplePagination.css"/><!-- JavaScript --><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script><script src="https://cdn.rawgit.com/fgiacomoni/galaxy_utils/master/scripts/jquery.simplePagination.js"></script><style type="text/css">body {padding-top: 70px}div.lm-table-warning { font-size: 1.4em; font-weight: bold; padding-right: 25px; color: #21536a; margin-left: 3px;}tr.green td {background-color: #eaf2d3; color: black;}tr.blank td {background-color: #9999CC; color: black;}table {font-family:\'Trebuchet MS\',Arial,Helvetica,sans-serif;width:100%;border-collapse:collapse;}table.detail, table.detail tr.parent, table.detail td, table.detail th, table.detail tr.category {border-collapse:collapse;border:1px solid #98bf21;}table.detail th {font-size: 1.2em;text-align: center;padding-top: 5px;padding-bottom: 10px;background-color: #a7c942;color: #ffffff;}td.ca {text-align:center;}footer { margin: 50px 0;}</style><script>function test(pageNumber){ var page="#page-id-"+pageNumber; $(\'.select\').hide() ; $(page).show()}</script></head><body><div class="container"><div class="lm-table-warning">Results of MASSBANK queries - Search params : Molecular specie = Positive / delta (unit) = 0.3 / Score threshold = 0.5 and max hit = 20 per pcgroup</div><div id="detail_table_source" style="display:none"></div><p><div id="choose"></div><p><div id="ms_search_0" class="ms-search-table"></div><!-- HeadRows--><table id="detail_table" class="detail"><col style="width:30px;"><!-- Ids (m/z)--><col style="width:30px;"><!-- Pcgroup --><col style="width:30px;"><!-- Mass (m/z)--><col style="width:120px;"><!-- Met name--><col style="width:50px;"><!-- Cpd ID--><col style="width:40px;"><!-- formula--><col style="width:60px;"><!-- cpd mw--><col style="width:50px;"><!-- MS type --><col style="width:20px;"><!-- ion/prec. type--><col style="width:80px;"><!-- Instrument type--><col style="width:60px;"><!-- score--><col style="width:60px;"><!-- INCHI--><thead><th>ID from input</th><th>PCGroup</th><th>Mass (m/z)</th><th>Metabolite name</th><th>Compound ID</th><th>Formula</th><th>Compound MW (Da)</th><th>MS type</th><th>ion/prec. type</th><th>Instr. type</th><th>Score</th><th>InChI Identifier</th></thead><tbody class="select" id="page-id-1"><tr class="white"><td class="ca" >mz_00001</td><td id="1" class="ca" >1</td><td class="ca">303.0485467</td><td class="ca" colspan="9"></td></tr><tr class="white"><td class="ca" colspan="3"></td><td class="ca">Rutin</td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=TY000246" target="_blank" class="btn">TY000246</a></td><td class="ca">C27H30O16</td><td class="ca">610.15338</td><td class="ca">MS</td><td class="ca">[M+H]+</td><td class="ca">LC-ESI-ITTOF</td><td class="ca">0.722183932245</td><td class="ca">InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1</td></tr><tr class="white"><td class="ca" colspan="3"></td><td class="ca">Rutin </td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=PB006201" target="_blank" class="btn">PB006201</a></td><td class="ca">C27H30O16</td><td class="ca">610.15338</td><td class="ca">MS2</td><td class="ca"> [M+H]+</td><td class="ca">LC-ESI-QTOF</td><td class="ca">0.718240688151</td><td class="ca">InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)2'..b'="63" class="ca" >3</td><td class="ca">449.2321066</td><td class="ca" colspan="9"></td></tr><tr class="white"><td class="ca" colspan="3"></td><td class="ca">UNKNOWN</td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=" target="_blank" class="btn">NONE</a></td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">0</td><td class="ca">n/a</td></tr><tr class="green"><td class="ca" >mz_00064</td><td id="64" class="ca" >3</td><td class="ca">463.0878154</td><td class="ca" colspan="9"></td></tr><tr class="green"><td class="ca" colspan="3"></td><td class="ca">UNKNOWN</td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=" target="_blank" class="btn">NONE</a></td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">0</td><td class="ca">n/a</td></tr></tbody><tbody class="select" id="page-id-17"><tr class="white"><td class="ca" >mz_00065</td><td id="65" class="ca" >3</td><td class="ca">472.296343</td><td class="ca" colspan="9"></td></tr><tr class="white"><td class="ca" colspan="3"></td><td class="ca">UNKNOWN</td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=" target="_blank" class="btn">NONE</a></td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">0</td><td class="ca">n/a</td></tr><tr class="green"><td class="ca" >mz_00066</td><td id="66" class="ca" >3</td><td class="ca">480.3076532</td><td class="ca" colspan="9"></td></tr><tr class="green"><td class="ca" colspan="3"></td><td class="ca">UNKNOWN</td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=" target="_blank" class="btn">NONE</a></td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">0</td><td class="ca">n/a</td></tr><tr class="white"><td class="ca" >mz_00067</td><td id="67" class="ca" >3</td><td class="ca">607.1399722</td><td class="ca" colspan="9"></td></tr><tr class="white"><td class="ca" colspan="3"></td><td class="ca">UNKNOWN</td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=" target="_blank" class="btn">NONE</a></td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">0</td><td class="ca">n/a</td></tr><tr class="green"><td class="ca" >mz_00068</td><td id="68" class="ca" >3</td><td class="ca">621.1283748</td><td class="ca" colspan="9"></td></tr><tr class="green"><td class="ca" colspan="3"></td><td class="ca">UNKNOWN</td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=" target="_blank" class="btn">NONE</a></td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">0</td><td class="ca">n/a</td></tr></tbody><tbody class="select" id="page-id-18"><tr class="white"><td class="ca" >mz_00069</td><td id="69" class="ca" >4</td><td class="ca">21.1283748</td><td class="ca" colspan="9"></td></tr><tr class="white"><td class="ca" colspan="3"></td><td class="ca">UNKNOWN</td><td class="ca"><a href="http://www.massbank.jp/jsp/FwdRecord.jsp?id=" target="_blank" class="btn">NONE</a></td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">n/a</td><td class="ca">0</td><td class="ca">n/a</td></tr></tbody></table></div><div class="container"><hr><footer><div class="row"> <div class="col-lg-12"><p>Copyright © INRA, N Paulhe, F Giacomoni 2014 </p> </div> </div> </footer></div><script language="javascript">$(function() {$(\'#choose\').pagination({items: 18,itemsOnPage: 1,currentPage: 1,onInit: function () { test(1); },cssStyle: \'light-theme\',onPageClick: function(pageNumber){test(pageNumber)}}).pagination(\'redraw\');});</script></body></html>\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r 023c380900ef test-data/out_test01.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/out_test01.json Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,1 @@\n+{"TYPE":{},"QUERY":{"480.3076532":{"mzmin":480.0076532,"num_res":0,"into":"412.125","pcgroup":"3","mzmed":"480.3076532","RECORDS":null,"mzmax":480.6076532001},"177.0539492":{"RECORDS":{"PR100005":{"name":"trans-4-Hydroxy-3-methoxycinnamate","ms_type":"MS2","id":"PR100005","precursor_type":" [M+H]+","formula":"C10H10O4","peaks":null,"score":"0.526245917512","inchi":"InChI=1S/C10H10O4/c1-14-9-6-7(2-4-8(9)11)3-5-10(12)13/h2-6,11H,1H3,(H,12,13)/b5-3+","exact_mz":"194.05791","instrument_type":"LC-ESI-QTOF"}},"mzmed":"177.0539492","mzmax":177.3539492001,"pcgroup":"3","into":"31098.8344","num_res":1,"mzmin":176.7539492},"425.0339018":{"num_res":0,"mzmin":424.7339018,"RECORDS":null,"mzmed":"425.0339018","mzmax":425.3339018001,"into":"398.7525","pcgroup":"3"},"611.1574452":{"num_res":8,"mzmin":610.8574452,"mzmed":"611.1574452","RECORDS":{"TY000246":{"precursor_type":"[M+H]+","formula":"C27H30O16","name":"Rutin","id":"TY000246","ms_type":"MS","instrument_type":"LC-ESI-ITTOF","peaks":null,"inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","score":"0.722183932245","exact_mz":"610.15338"},"PR020080":{"ms_type":"MS","id":"PR020080","name":"Quercetin-3-O-rutinoside","formula":"C27H30O16","precursor_type":" [M+H]+","inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","score":"0.593021369395","exact_mz":"610.15338","peaks":null,"instrument_type":"LC-ESI-QTOF"},"FIO00588":{"peaks":null,"score":"0.676089256465","inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","exact_mz":"610.15338","instrument_type":"LC-ESI-QTOF","name":"Rutin","ms_type":"MS2","id":"FIO00588","precursor_type":" [M+H]+","formula":"C27H30O16"},"PR020046":{"precursor_type":" [M+H]+","formula":"C28H34O15","name":"Hesperetin-7-O-rutinoside","id":"PR020046","ms_type":"MS","instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"610.18977","score":"0.503808010925","inchi":"InChI=1S/C28H34O15/c1-10-21(32)23(34)25(36)27(40-10)39-9-19-22(33)24(35)26(37)28(43-19)41-12-6-14(30)20-15(31)8-17(42-18(20)7-12)11-3-4-16(38-2)13(29)5-11/h3-7,10,17,19,21-30,32-37H,8-9H2,1-2H3/t10-,17-,19+,21-,22+,23+,24-,25+,26+,27+,28+/m0/s1"},"PR020045":{"name":"Hesperetin-7-O-neohesperidoside","id":"PR020045","ms_type":"MS","precursor_type":" [M+H]+","formula":"C28H34O15","peaks":null,"exact_mz":"610.18977","score":"0.585927069664","inchi":"InChI=1S/C28H34O15/c1-10-21(33)23(35)25(37)27(39-10)43-26-24(36)22(34)19(9-29)42-28(26)40-12-6-14(31)20-15(32)8-17(41-18(20)7-12)11-3-4-16(38-2)13(30)5-11/h3-7,10,17,19,21-31,33-37H,8-9H2,1-2H3/t10-,17-,19+,21-,22+,23+,24-,25+,26+,27-,28+/m0/s1","instrument_type":"LC-ESI-QTOF"},"PB006201":{"ms_type":"MS2","id":"PB006201","name":"Rutin ","formula":"C27H30O16","precursor_type":" [M+H]+","score":"0.718240688151","inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","exact_mz":"610.15338","peaks":null,"instrument_type":"LC-ESI-QTOF"},"FIO00589":{"instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"610.15338","inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","score":"0.628953'..b'/c1-14-9-6-7(2-4-8(9)11)3-5-10(12)13/h2-6,11H,1H3,(H,12,13)/b5-3+","exact_mz":"194.05791","peaks":null}},"into":"3561.349167","pcgroup":"3"},"445.074958":{"pcgroup":"3","into":"1661.996368","mzmax":445.3749580001,"RECORDS":null,"mzmed":"445.074958","mzmin":444.774958,"num_res":0},"472.296343":{"RECORDS":null,"mzmed":"472.296343","mzmax":472.5963430001,"pcgroup":"3","into":"369.0139231","num_res":0,"mzmin":471.996343},"371.2623675":{"mzmin":370.9623675,"num_res":0,"pcgroup":"3","into":"1014.632667","mzmax":371.5623675001,"mzmed":"371.2623675","RECORDS":null},"613.1621027":{"mzmin":612.8621027,"num_res":7,"pcgroup":"1","into":"3880.703571","mzmax":613.4621027001,"mzmed":"613.1621027","RECORDS":{"TY000246":{"id":"TY000246","ms_type":"MS","name":"Rutin","formula":"C27H30O16","precursor_type":"[M+H]+","exact_mz":"610.15338","inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","score":"0.722183932245","peaks":null,"instrument_type":"LC-ESI-ITTOF"},"FIO00483":{"score":"0.591111986992","inchi":"InChI=1S/C28H34O15/c1-10-21(32)23(34)25(36)27(40-10)39-9-19-22(33)24(35)26(37)28(43-19)41-12-6-14(30)20-15(31)8-17(42-18(20)7-12)11-3-4-16(38-2)13(29)5-11/h3-7,10,17,19,21-30,32-37H,8-9H2,1-2H3/t10-,17-,19+,21-,22+,23+,24-,25+,26+,27+,28+/m0/s1","exact_mz":"610.18977","peaks":null,"instrument_type":"LC-ESI-QTOF","id":"FIO00483","ms_type":"MS2","name":"Hesperidin","formula":"C28H34O15","precursor_type":" [M+H]+"},"PR020045":{"formula":"C28H34O15","precursor_type":" [M+H]+","ms_type":"MS","id":"PR020045","name":"Hesperetin-7-O-neohesperidoside","instrument_type":"LC-ESI-QTOF","exact_mz":"610.18977","inchi":"InChI=1S/C28H34O15/c1-10-21(33)23(35)25(37)27(39-10)43-26-24(36)22(34)19(9-29)42-28(26)40-12-6-14(31)20-15(32)8-17(41-18(20)7-12)11-3-4-16(38-2)13(30)5-11/h3-7,10,17,19,21-31,33-37H,8-9H2,1-2H3/t10-,17-,19+,21-,22+,23+,24-,25+,26+,27-,28+/m0/s1","score":"0.585927069664","peaks":null},"PR020046":{"name":"Hesperetin-7-O-rutinoside","ms_type":"MS","id":"PR020046","precursor_type":" [M+H]+","formula":"C28H34O15","peaks":null,"inchi":"InChI=1S/C28H34O15/c1-10-21(32)23(34)25(36)27(40-10)39-9-19-22(33)24(35)26(37)28(43-19)41-12-6-14(30)20-15(31)8-17(42-18(20)7-12)11-3-4-16(38-2)13(29)5-11/h3-7,10,17,19,21-30,32-37H,8-9H2,1-2H3/t10-,17-,19+,21-,22+,23+,24-,25+,26+,27+,28+/m0/s1","score":"0.503808010925","exact_mz":"610.18977","instrument_type":"LC-ESI-QTOF"},"PB006201":{"id":"PB006201","ms_type":"MS2","name":"Rutin ","formula":"C27H30O16","precursor_type":" [M+H]+","inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","score":"0.718240688151","exact_mz":"610.15338","peaks":null,"instrument_type":"LC-ESI-QTOF"},"PR020080":{"peaks":null,"exact_mz":"610.15338","inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","score":"0.593021369395","instrument_type":"LC-ESI-QTOF","name":"Quercetin-3-O-rutinoside","ms_type":"MS","id":"PR020080","precursor_type":" [M+H]+","formula":"C27H30O16"},"FIO00588":{"precursor_type":" [M+H]+","formula":"C27H30O16","name":"Rutin","id":"FIO00588","ms_type":"MS2","instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"610.15338","inchi":"InChI=1S/C27H30O16/c1-8-17(32)20(35)22(37)26(40-8)39-7-15-18(33)21(36)23(38)27(42-15)43-25-19(34)16-13(31)5-10(28)6-14(16)41-24(25)9-2-3-11(29)12(30)4-9/h2-6,8,15,17-18,20-23,26-33,35-38H,7H2,1H3/t8-,15+,17-,18+,20+,21-,22+,23+,26+,27-/m0/s1","score":"0.676089256465"}}}},"PARAM":{}}\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r 023c380900ef test-data/out_test01.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/out_test01.tabular Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,70 @@\n+mz\tmzmin\tmzmax\trt\trtmin\trtmax\tinto\tintb\tmaxo\tsn\tsample\tisotopes\tadduct\tpcgroup\tmassbank(score::name::mz::formula::adduct::id)\n+303.0485467\t303.0479126\t303.0501709\t273.698\t270.334\t278.072\t247182.3356\t246032.8821\t80132\t351\t1\t[8][M]+\t\t1\t0.722183932245::[Rutin]::610.15338::C27H30O16::[[M+H]+]::TY000246 | 0.718240688151::[Rutin ]::610.15338::C27H30O16::[ [M+H]+]::PB006201 | 0.676089256465::[Rutin]::610.15338::C27H30O16::[ [M+H]+]::FIO00588 | 0.631453810993::[Hyperoside]::464.09548::C21H20O12::[ [M+H]+]::FIO00150 | 0.630268036021::[Isoquercitrin]::464.09548::C21H20O12::[[M+H]+]::TY000218 | 0.629320319716::[Isoquercitrin]::464.09548::C21H20O12::[ [M+H]+]::FIO00160 | 0.628953392993::[Rutin]::610.15338::C27H30O16::[ [M+H]+]::FIO00589 | 0.618103117363::[Quercetin-3-beta-O-galactoside]::464.09548::C21H20O12::[ [M+H]+]::PR020075 | 0.609833904994::[Quercetin-3-O-beta-glucopyranoside]::464.09548::C21H20O12::[ [M+H]+]::PR020078 | 0.593021369395::[Quercetin-3-O-rutinoside]::610.15338::C27H30O16::[ [M+H]+]::PR020080 | 0.591111986992::[Hesperidin]::610.18977::C28H34O15::[ [M+H]+]::FIO00483 | 0.585927069664::[Hesperetin-7-O-neohesperidoside]::610.18977::C28H34O15::[ [M+H]+]::PR020045 | 0.571213973695::[Hirsutrin]::464.09548::C21H20O12::[[M+H]+]::TY000168 | 0.526179514801::[Hesperidin]::610.18977::C28H34O15::[ [M+H]+]::FIO00484 | 0.503808010925::[Hesperetin-7-O-rutinoside]::610.18977::C28H34O15::[ [M+H]+]::PR020046\n+304.0519266\t304.050354\t304.0531006\t273.362\t270.671\t278.072\t39377.69332\t39179.45225\t12431\t267\t1\t[8][M+1]+\t\t1\t0.722183932245::[Rutin]::610.15338::C27H30O16::[[M+H]+]::TY000246 | 0.718240688151::[Rutin ]::610.15338::C27H30O16::[ [M+H]+]::PB006201 | 0.676089256465::[Rutin]::610.15338::C27H30O16::[ [M+H]+]::FIO00588 | 0.631453810993::[Hyperoside]::464.09548::C21H20O12::[ [M+H]+]::FIO00150 | 0.630268036021::[Isoquercitrin]::464.09548::C21H20O12::[[M+H]+]::TY000218 | 0.629320319716::[Isoquercitrin]::464.09548::C21H20O12::[ [M+H]+]::FIO00160 | 0.628953392993::[Rutin]::610.15338::C27H30O16::[ [M+H]+]::FIO00589 | 0.618103117363::[Quercetin-3-beta-O-galactoside]::464.09548::C21H20O12::[ [M+H]+]::PR020075 | 0.609833904994::[Quercetin-3-O-beta-glucopyranoside]::464.09548::C21H20O12::[ [M+H]+]::PR020078 | 0.593021369395::[Quercetin-3-O-rutinoside]::610.15338::C27H30O16::[ [M+H]+]::PR020080 | 0.591111986992::[Hesperidin]::610.18977::C28H34O15::[ [M+H]+]::FIO00483 | 0.585927069664::[Hesperetin-7-O-neohesperidoside]::610.18977::C28H34O15::[ [M+H]+]::PR020045 | 0.571213973695::[Hirsutrin]::464.09548::C21H20O12::[[M+H]+]::TY000168 | 0.526179514801::[Hesperidin]::610.18977::C28H34O15::[ [M+H]+]::FIO00484 | 0.503808010925::[Hesperetin-7-O-rutinoside]::610.18977::C28H34O15::[ [M+H]+]::PR020046\n+305.0552454\t305.0523376\t305.0632324\t274.034\t271.007\t278.072\t6932.447143\t6916.875306\t2489\t149\t1\t[8][M+2]+\t\t1\t0.722183932245::[Rutin]::610.15338::C27H30O16::[[M+H]+]::TY000246 | 0.718240688151::[Rutin ]::610.15338::C27H30O16::[ [M+H]+]::PB006201 | 0.676089256465::[Rutin]::610.15338::C27H30O16::[ [M+H]+]::FIO00588 | 0.631453810993::[Hyperoside]::464.09548::C21H20O12::[ [M+H]+]::FIO00150 | 0.630268036021::[Isoquercitrin]::464.09548::C21H20O12::[[M+H]+]::TY000218 | 0.629320319716::[Isoquercitrin]::464.09548::C21H20O12::[ [M+H]+]::FIO00160 | 0.628953392993::[Rutin]::610.15338::C27H30O16::[ [M+H]+]::FIO00589 | 0.618103117363::[Quercetin-3-beta-O-galactoside]::464.09548::C21H20O12::[ [M+H]+]::PR020075 | 0.609833904994::[Quercetin-3-O-beta-glucopyranoside]::464.09548::C21H20O12::[ [M+H]+]::PR020078 | 0.593021369395::[Quercetin-3-O-rutinoside]::610.15338::C27H30O16::[ [M+H]+]::PR020080 | 0.591111986992::[Hesperidin]::610.18977::C28H34O15::[ [M+H]+]::FIO00483 | 0.585927069664::[Hesperetin-7-O-neohesperidoside]::610.18977::C28H34O15::[ [M+H]+]::PR020045 | 0.571213973695::[Hirsutrin]::464.09548::C21H20O12::[[M+H]+]::TY000168 | 0.526179514801::[Hesperidin]::610.18977::C28H34O15::[ [M+H]+]::FIO00484 | 0.503808010925::[Hesperetin-7-O-rutinoside]::610.18977::C28H3'..b'952\t145.0294189\t145.0324097\t278.072\t274.707\t282.107\t20533.65455\t20181.26777\t7200\t53\t1\t[12][M]+\t\t3\t0.526245917512::[trans-4-Hydroxy-3-methoxycinnamate]::194.05791::C10H10O4::[ [M+H]+]::PR100005\n+146.0338015\t146.0315704\t146.0370331\t278.072\t276.052\t281.098\t2337.98\t2333.2704\t849\t848\t1\t[12][M+1]+\t\t3\tNONE\n+149.0608613\t149.0575104\t149.0633545\t278.072\t275.043\t281.098\t3561.349167\t3549.48464\t1285\t90\t1\t\t[M+H-C2H2O2]+ 194.055 [M+H-NO2]+ 194.055\t3\t0.526245917512::[trans-4-Hydroxy-3-methoxycinnamate]::194.05791::C10H10O4::[ [M+H]+]::PR100005\n+163.0397626\t163.0365295\t163.042099\t277.735\t276.052\t279.417\t718.091\t709.4482632\t368\t25\t1\t\t[M+H-CH4O]+ 194.055\t3\tNONE\n+177.0539492\t177.0531006\t177.05513\t278.072\t274.034\t282.444\t31098.8344\t30490.44511\t11319\t57\t1\t[11][M]+\t[M+H-H2O]+ 194.055\t3\t0.526245917512::[trans-4-Hydroxy-3-methoxycinnamate]::194.05791::C10H10O4::[ [M+H]+]::PR100005\n+178.0578014\t178.0528107\t178.0614929\t278.072\t275.043\t282.78\t3510.916043\t3464.439494\t1316\t54\t1\t[11][M+1]+\t\t3\tNONE\n+195.0644538\t195.0613861\t195.0670013\t278.072\t275.716\t280.762\t1925.5536\t1901.981571\t858\t35\t1\t\t[M+H]+ 194.055\t3\t0.526245917512::[trans-4-Hydroxy-3-methoxycinnamate]::194.05791::C10H10O4::[ [M+H]+]::PR100005\n+196.0700972\t196.0676727\t196.0720062\t278.072\t277.061\t281.435\t279.2630769\t271.3225846\t204\t13\t1\t\t[M+K]+ 157.103\t3\tNONE\n+217.047301\t217.044632\t217.0532379\t277.735\t275.38\t279.417\t1703.950417\t1700.249833\t886\t885\t1\t\t[M+Na]+ 194.055\t3\tNONE\n+233.0121036\t233.0091858\t233.0163269\t278.072\t274.707\t282.107\t3540.9\t3531.509848\t1481\t132\t1\t\t[M+K]+ 194.055\t3\tNONE\n+251.0221026\t251.0169678\t251.0265961\t278.072\t273.698\t281.435\t3523.02613\t3499.142348\t1254\t70\t1\t\t[M+Na+K]2+ 440.098\t3\tNONE\n+269.0328959\t269.0281982\t269.0385742\t278.072\t276.052\t281.771\t2372.712176\t2351.730706\t1008\t67\t1\t\t[M+H-CH4O]+ 300.045\t3\tNONE\n+279.0200882\t279.0171509\t279.0247803\t278.408\t275.043\t280.762\t740.7787059\t734.4572941\t454\t41\t1\t\t[M+K+HCOOH]+ 194.055\t3\tNONE\n+297.0306054\t297.0255432\t297.038147\t278.072\t275.38\t280.426\t1108.1016\t1103.392\t385\t384\t1\t\t\t3\tNONE\n+301.0504305\t301.0436401\t301.0579834\t277.735\t274.371\t281.435\t486.0704762\t468.779315\t240\t12\t1\t\t[M+H]+ 300.045 [M+H-C7H6O2]+ 422.084\t3\tNONE\n+308.0261572\t308.0209351\t308.034668\t278.072\t275.716\t282.444\t751.5176\t741.6344\t323\t27\t1\t\t\t3\tNONE\n+315.0378642\t315.0346375\t315.0412598\t277.735\t276.389\t279.753\t570.8708\t568.516\t324\t323\t1\t\t[M+H-H14O7]+ 440.098\t3\tNONE\n+371.2623675\t371.2585754\t371.2679749\t277.399\t275.38\t279.417\t1014.632667\t1010.932083\t456\t455\t1\t\t[M+H-C3H4]+ 410.275\t3\tNONE\n+422.0847921\t422.0766602\t422.0930786\t277.399\t275.716\t279.081\t817.022\t813.9935\t617\t129\t1\t\t\t3\tNONE\n+425.0339018\t425.0305176\t425.0410461\t277.735\t276.052\t279.417\t398.7525\t388.7106316\t267\t13\t1\t\t\t3\tNONE\n+427.0703433\t427.0647888\t427.0771484\t278.072\t274.707\t282.107\t1897.090909\t1889.026807\t1024\t98\t1\t[7][M]+\t[2M+K]+ 194.055\t3\tNONE\n+428.071429\t428.0612793\t428.0791016\t278.072\t273.362\t280.762\t553.6545455\t544.381348\t310\t27\t1\t[7][M+1]+\t\t3\tNONE\n+443.0411698\t443.0319519\t443.0491333\t278.072\t273.362\t280.089\t842.8931\t834.6301017\t384\t31\t1\t\t\t3\tNONE\n+445.074958\t445.0639954\t445.0813599\t277.735\t274.707\t281.098\t1661.996368\t1649.526711\t758\t53\t1\t[5][M]+\t[M+Na]+ 422.084\t3\tNONE\n+446.0817674\t446.0753784\t446.0857849\t277.735\t276.725\t280.426\t352.6043636\t348.2589676\t238\t23\t1\t[5][M+1]+\t\t3\tNONE\n+449.2321066\t449.2252808\t449.2385864\t277.735\t275.716\t282.107\t1741.715684\t1720.915388\t631\t37\t1\t\t[M+K]+ 410.275\t3\tNONE\n+463.0878154\t463.078186\t463.0952759\t278.072\t274.707\t283.116\t819.0366\t814.7170295\t408\t71\t1\t\t[M+Na]+ 440.098\t3\tNONE\n+472.296343\t472.2885132\t472.3045959\t277.399\t275.716\t280.089\t369.0139231\t363.6954096\t249\t23\t1\t\t[3M+H]+ 157.103\t3\tNONE\n+480.3076532\t480.2977295\t480.315033\t277.399\t276.052\t280.762\t412.125\t404.4284586\t208\t19\t1\t\t\t3\tNONE\n+607.1399722\t607.1333618\t607.1530151\t278.072\t274.034\t282.107\t284.236875\t281.321625\t211\t34\t1\t\t\t3\tNONE\n+621.1283748\t621.1159668\t621.1455688\t278.072\t276.389\t279.753\t434.6288\t431.6012\t258\t43\t1\t\t[3M+K]+ 194.055\t3\tNONE\n+21.1283748\t21.1159668\t21.1455688\t78.072\t76.389\t79.753\t34.6288\t31.6012\t258\t43\t1\t\t[X]+ 94.055\t4\tNONE\n' |
b |
diff -r 000000000000 -r 023c380900ef test-data/out_test01.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/out_test01.txt Wed Apr 19 11:31:58 2017 -0400 |
[ |
b'@@ -0,0 +1,202 @@\n+ID\tPCGROUP\tQuery(Da)\tScore\tMetabolite_name\tCpd_Mw(Da)\tFormula\tAdduct\tMASSBANK_ID\tInstrument\tMS_level\n+mz_00001\t1\t303.0485467\t0.722183932245\tRutin\t610.15338\tC27H30O16\t[M+H]+\tTY000246\tLC-ESI-ITTOF\tMS\n+mz_00001\t1\t303.0485467\t0.718240688151\tRutin \t610.15338\tC27H30O16\t [M+H]+\tPB006201\tLC-ESI-QTOF\tMS2\n+mz_00001\t1\t303.0485467\t0.676089256465\tRutin\t610.15338\tC27H30O16\t [M+H]+\tFIO00588\tLC-ESI-QTOF\tMS2\n+mz_00001\t1\t303.0485467\t0.631453810993\tHyperoside\t464.09548\tC21H20O12\t [M+H]+\tFIO00150\tLC-ESI-QTOF\tMS2\n+mz_00001\t1\t303.0485467\t0.630268036021\tIsoquercitrin\t464.09548\tC21H20O12\t[M+H]+\tTY000218\tLC-ESI-ITTOF\tMS\n+mz_00001\t1\t303.0485467\t0.629320319716\tIsoquercitrin\t464.09548\tC21H20O12\t [M+H]+\tFIO00160\tLC-ESI-QTOF\tMS2\n+mz_00001\t1\t303.0485467\t0.628953392993\tRutin\t610.15338\tC27H30O16\t [M+H]+\tFIO00589\tLC-ESI-QTOF\tMS2\n+mz_00001\t1\t303.0485467\t0.618103117363\tQuercetin-3-beta-O-galactoside\t464.09548\tC21H20O12\t [M+H]+\tPR020075\tLC-ESI-QTOF\tMS\n+mz_00001\t1\t303.0485467\t0.609833904994\tQuercetin-3-O-beta-glucopyranoside\t464.09548\tC21H20O12\t [M+H]+\tPR020078\tLC-ESI-QTOF\tMS\n+mz_00001\t1\t303.0485467\t0.593021369395\tQuercetin-3-O-rutinoside\t610.15338\tC27H30O16\t [M+H]+\tPR020080\tLC-ESI-QTOF\tMS\n+mz_00001\t1\t303.0485467\t0.591111986992\tHesperidin\t610.18977\tC28H34O15\t [M+H]+\tFIO00483\tLC-ESI-QTOF\tMS2\n+mz_00001\t1\t303.0485467\t0.585927069664\tHesperetin-7-O-neohesperidoside\t610.18977\tC28H34O15\t [M+H]+\tPR020045\tLC-ESI-QTOF\tMS\n+mz_00001\t1\t303.0485467\t0.571213973695\tHirsutrin\t464.09548\tC21H20O12\t[M+H]+\tTY000168\tLC-ESI-ITTOF\tMS\n+mz_00001\t1\t303.0485467\t0.526179514801\tHesperidin\t610.18977\tC28H34O15\t [M+H]+\tFIO00484\tLC-ESI-QTOF\tMS2\n+mz_00001\t1\t303.0485467\t0.503808010925\tHesperetin-7-O-rutinoside\t610.18977\tC28H34O15\t [M+H]+\tPR020046\tLC-ESI-QTOF\tMS\n+mz_00002\t1\t304.0519266\t0.722183932245\tRutin\t610.15338\tC27H30O16\t[M+H]+\tTY000246\tLC-ESI-ITTOF\tMS\n+mz_00002\t1\t304.0519266\t0.718240688151\tRutin \t610.15338\tC27H30O16\t [M+H]+\tPB006201\tLC-ESI-QTOF\tMS2\n+mz_00002\t1\t304.0519266\t0.676089256465\tRutin\t610.15338\tC27H30O16\t [M+H]+\tFIO00588\tLC-ESI-QTOF\tMS2\n+mz_00002\t1\t304.0519266\t0.631453810993\tHyperoside\t464.09548\tC21H20O12\t [M+H]+\tFIO00150\tLC-ESI-QTOF\tMS2\n+mz_00002\t1\t304.0519266\t0.630268036021\tIsoquercitrin\t464.09548\tC21H20O12\t[M+H]+\tTY000218\tLC-ESI-ITTOF\tMS\n+mz_00002\t1\t304.0519266\t0.629320319716\tIsoquercitrin\t464.09548\tC21H20O12\t [M+H]+\tFIO00160\tLC-ESI-QTOF\tMS2\n+mz_00002\t1\t304.0519266\t0.628953392993\tRutin\t610.15338\tC27H30O16\t [M+H]+\tFIO00589\tLC-ESI-QTOF\tMS2\n+mz_00002\t1\t304.0519266\t0.618103117363\tQuercetin-3-beta-O-galactoside\t464.09548\tC21H20O12\t [M+H]+\tPR020075\tLC-ESI-QTOF\tMS\n+mz_00002\t1\t304.0519266\t0.609833904994\tQuercetin-3-O-beta-glucopyranoside\t464.09548\tC21H20O12\t [M+H]+\tPR020078\tLC-ESI-QTOF\tMS\n+mz_00002\t1\t304.0519266\t0.593021369395\tQuercetin-3-O-rutinoside\t610.15338\tC27H30O16\t [M+H]+\tPR020080\tLC-ESI-QTOF\tMS\n+mz_00002\t1\t304.0519266\t0.591111986992\tHesperidin\t610.18977\tC28H34O15\t [M+H]+\tFIO00483\tLC-ESI-QTOF\tMS2\n+mz_00002\t1\t304.0519266\t0.585927069664\tHesperetin-7-O-neohesperidoside\t610.18977\tC28H34O15\t [M+H]+\tPR020045\tLC-ESI-QTOF\tMS\n+mz_00002\t1\t304.0519266\t0.571213973695\tHirsutrin\t464.09548\tC21H20O12\t[M+H]+\tTY000168\tLC-ESI-ITTOF\tMS\n+mz_00002\t1\t304.0519266\t0.526179514801\tHesperidin\t610.18977\tC28H34O15\t [M+H]+\tFIO00484\tLC-ESI-QTOF\tMS2\n+mz_00002\t1\t304.0519266\t0.503808010925\tHesperetin-7-O-rutinoside\t610.18977\tC28H34O15\t [M+H]+\tPR020046\tLC-ESI-QTOF\tMS\n+mz_00003\t1\t305.0552454\t0.722183932245\tRutin\t610.15338\tC27H30O16\t[M+H]+\tTY000246\tLC-ESI-ITTOF\tMS\n+mz_00003\t1\t305.0552454\t0.718240688151\tRutin \t610.15338\tC27H30O16\t [M+H]+\tPB006201\tLC-ESI-QTOF\tMS2\n+mz_00003\t1\t305.0552454\t0.676089256465\tRutin\t610.15338\tC27H30O16\t [M+H]+\tFIO00588\tLC-ESI-QTOF\tMS2\n+mz_00003\t1\t305.0552454\t0.631453810993\tHyperoside\t464.09548\tC21H20O12\t [M+H]+\tFIO00150\tLC-ESI-QTOF\tMS2\n+mz_00003\t1\t305.0552454\t0.630268036021\tIsoquercitrin\t464.09548\tC21H20O12\t[M+H]+\tTY000218\tLC-ESI-ITTOF\tMS\n+mz_00003\t1\t305.0552454\t0.629320319716\tIsoquercitrin\t464.09548\tC21H20O12\t [M+H]+\tFIO00160\tLC-ESI-QTOF\tMS2\n+mz_00003\t1\t305.0552454\t0.62895339299'..b'\tCI-B\tMS\n+mz_00031\t2\t136.0490744\t0.793494288532\t2-METHYL-1-PROPYLBENZENE\t134.10955\tC10H14\tMS\tJP012267\tCI-B\tMS\n+mz_00031\t2\t136.0490744\t0.771842678731\t3-METHYL-1-PROPYLBENZENE\t134.10955\tC10H14\tMS\tJP012268\tCI-B\tMS\n+mz_00031\t2\t136.0490744\t0.766089270107\t4-METHYL-1-PROPYLBENZENE\t134.10955\tC10H14\tMS\tJP012269\tCI-B\tMS\n+mz_00031\t2\t136.0490744\t0.721608041747\tBUTYLBENZENE\t134.10955\tC10H14\tMS\tJP012263\tCI-B\tMS\n+mz_00031\t2\t136.0490744\t0.502725943227\t5-METHYL-1,3-DIISOPROPYLBENZENE\t176.1565\tC13H20\tMS\tJP012297\tCI-B\tMS\n+mz_00032\t2\t153.0565924\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00033\t2\t175.0362187\t0.842444634941\t1-ETHYL-2,3-DIMETHYLBENZENE\t134.10955\tC10H14\tMS\tJP012276\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.834834020699\t1,2-DIETHYLBENZENE\t134.10955\tC10H14\tMS\tJP012273\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.825082890799\t1,3-DIETHYLBENZENE\t134.10955\tC10H14\tMS\tJP012274\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.822346316415\t1-ETHYL-3,5-DIMETHYLBENZENE\t134.10955\tC10H14\tMS\tJP012279\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.812855498092\t1,4-DIETHYLBENZENE\t134.10955\tC10H14\tMS\tJP012275\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.809347489341\t1-ETHYL-3,4-DIMETHYLBENZENE\t134.10955\tC10H14\tMS\tJP012277\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.793494288532\t2-METHYL-1-PROPYLBENZENE\t134.10955\tC10H14\tMS\tJP012267\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.771842678731\t3-METHYL-1-PROPYLBENZENE\t134.10955\tC10H14\tMS\tJP012268\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.766089270107\t4-METHYL-1-PROPYLBENZENE\t134.10955\tC10H14\tMS\tJP012269\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.721608041747\tBUTYLBENZENE\t134.10955\tC10H14\tMS\tJP012263\tCI-B\tMS\n+mz_00033\t2\t175.0362187\t0.502725943227\t5-METHYL-1,3-DIISOPROPYLBENZENE\t176.1565\tC13H20\tMS\tJP012297\tCI-B\tMS\n+mz_00034\t2\t176.0376081\t0.834834020699\t1,2-DIETHYLBENZENE\t134.10955\tC10H14\tMS\tJP012273\tCI-B\tMS\n+mz_00034\t2\t176.0376081\t0.771842678731\t3-METHYL-1-PROPYLBENZENE\t134.10955\tC10H14\tMS\tJP012268\tCI-B\tMS\n+mz_00034\t2\t176.0376081\t0.721608041747\tBUTYLBENZENE\t134.10955\tC10H14\tMS\tJP012263\tCI-B\tMS\n+mz_00034\t2\t176.0376081\t0.502725943227\t5-METHYL-1,3-DIISOPROPYLBENZENE\t176.1565\tC13H20\tMS\tJP012297\tCI-B\tMS\n+mz_00035\t2\t197.0192355\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00036\t2\t403.0711753\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00037\t3\t117.0358602\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00038\t3\t145.0301952\t0.526245917512\ttrans-4-Hydroxy-3-methoxycinnamate\t194.05791\tC10H10O4\t [M+H]+\tPR100005\tLC-ESI-QTOF\tMS2\n+mz_00039\t3\t146.0338015\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00040\t3\t149.0608613\t0.526245917512\ttrans-4-Hydroxy-3-methoxycinnamate\t194.05791\tC10H10O4\t [M+H]+\tPR100005\tLC-ESI-QTOF\tMS2\n+mz_00041\t3\t163.0397626\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00042\t3\t177.0539492\t0.526245917512\ttrans-4-Hydroxy-3-methoxycinnamate\t194.05791\tC10H10O4\t [M+H]+\tPR100005\tLC-ESI-QTOF\tMS2\n+mz_00043\t3\t178.0578014\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00044\t3\t195.0644538\t0.526245917512\ttrans-4-Hydroxy-3-methoxycinnamate\t194.05791\tC10H10O4\t [M+H]+\tPR100005\tLC-ESI-QTOF\tMS2\n+mz_00045\t3\t196.0700972\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00046\t3\t217.047301\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00047\t3\t233.0121036\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00048\t3\t251.0221026\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00049\t3\t269.0328959\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00050\t3\t279.0200882\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00051\t3\t297.0306054\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00052\t3\t301.0504305\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00053\t3\t308.0261572\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00054\t3\t315.0378642\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00055\t3\t371.2623675\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00056\t3\t422.0847921\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00057\t3\t425.0339018\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00058\t3\t427.0703433\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00059\t3\t428.071429\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00060\t3\t443.0411698\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00061\t3\t445.074958\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00062\t3\t446.0817674\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00063\t3\t449.2321066\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00064\t3\t463.0878154\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00065\t3\t472.296343\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00066\t3\t480.3076532\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00067\t3\t607.1399722\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00068\t3\t621.1283748\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n+mz_00069\t4\t21.1283748\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n' |