# HG changeset patch # User fgiacomoni # Date 1492615918 14400 # Node ID 023c380900eff6cf2f0b2a3f47ab6eb2fe752efb Init repository with last massbank_ws_searchspectrum master version 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 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 @@ -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 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 @@ -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= 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 () { + 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 () { + 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 Efranck.giacomoni@clermont.inra.frE + +=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 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 () { + $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 () { + $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 Efranck.giacomoni@clermont.inra.frE + +=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 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 @@ -0,0 +1,899 @@ +package lib::mapper ; + +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( 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); +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)] ); + +=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_pcgroups + + ## Description : get and prepare pcgroup features (mzs, into, names) from input cvs parser + ## Input : $pcs, $mzs, $ints, $names + ## Output : $pcgroups + ## Usage : my ( $pcgroups ) = get_pcgroups( $pcs, $mzs, $ints, $names ) ; + +=cut +## START of SUB +sub get_pcgroups { + my $self = shift; + my ( $pcs, $mzs, $ints ) = @_; + + my %pcgroups = () ; + my $i = 0 ; + + ## Warn diff matrix dimension : + my $num_pcs = scalar(@{$pcs}) ; + my $num_mzs = scalar(@{$mzs}) ; + my $num_ints = scalar(@{$ints}) ; + + if ( ($num_pcs == $num_mzs ) and ( $num_mzs == $num_ints ) ) { + my @pcs = @{$pcs} ; + + foreach my $pc (@{$pcs}) { + + if ( ! $pcgroups{$pc} ) { $pcgroups{$pc}->{'id'} = $pc ; $pcgroups{$pc}->{'annotation'} = {} ; $pcgroups{$pc}->{'massbank_ids'} = [] ; } + + push (@{$pcgroups{$pc}->{'mzmed'}}, $mzs->[$i]) if ($mzs->[$i]) ; ## map mzs by pcgroup + + if ($ints->[$i] > 0 ) { push (@{$pcgroups{$pc}->{'into'}}, $ints->[$i]) ; ## map into by pcgroup + } + elsif ($ints->[$i] == 0) { + push (@{$pcgroups{$pc}->{'into'}}, $ints->[$i]) ; ## map into by pcgroup even value is 0 + } + else { + warn "Undefined value found in pcgroups array\n" ; + } + $i++ ; + } + } + else { + warn "The different ARRAYS (pcs, mzs, ints) doesn't have the same size : mapping is not possible \n!!" + } + return (\%pcgroups) ; +} +### END of SUB + +=head2 METHOD get_pcgroup_list + + ## Description : get and prepare unik pcgroup list from input cvs parsed list + ## Input : $pcs + ## Output : $list + ## Usage : my ( $list ) = get_pcgroup_list( $pcs ) ; + +=cut +## START of SUB +sub get_pcgroup_list { + my $self = shift; + my ( $pcs ) = @_; + + my @pcgroup_list = () ; + my $i = 0 ; + + my %hash = map { $_, 1 } @{$pcs} ; + @pcgroup_list = keys %hash; + @pcgroup_list = sort { $a <=> $b } @pcgroup_list ; + + return (\@pcgroup_list) ; +} + +### END of SUB + + +=head2 METHOD filter_pcgroup_res + + ## Description : This method filter the results returned by massbank with a user defined score threshold + ## Input : $pcgroups, $threshold + ## Output : $pcgroups + ## Usage : my ( $pcgroups ) = filter_pcgroup_res ( $pcgroups, $threshold ) ; + +=cut +## START of SUB +sub filter_pcgroup_res { + ## Retrieve Values + my $self = shift ; + my ( $pcgroups, $threshold ) = @_ ; + + my %temp = () ; + + if (!defined $threshold) { + $threshold = 0.5 ; ## default value + } + + if ( (defined $pcgroups) and (defined $threshold) ) { + %temp = %{$pcgroups} ; + + foreach my $pc (keys %temp) { + + if ( $temp{$pc}{'annotation'}{'num_res'} > 0 ) { + my @filtered_annot = reverse(grep { $_->{'score'} >= $threshold if ($_->{'score'}) } @{$temp{$pc}{'annotation'}{'res'}}) ; + my $new_num_res = scalar (@filtered_annot) ; + my @ids = () ; + foreach (@filtered_annot) { push (@ids, $_->{'id'} ) } + $temp{$pc}{'annotation'}{'res'} =\@filtered_annot ; + $temp{$pc}{'annotation'}{'num_res'} = $new_num_res ; + $temp{$pc}{'massbank_ids'} = \@ids ; + } + else { + warn "No result found for this pcgroup $pc\n" ; + } + } + } ## End IF + else { + warn "No pcgroup and threshold defined\n" ; + } + return (\%temp) ; +} +### END of SUB + +=head2 METHOD add_min_max_for_pcgroup_res + + ## Description : This method add min / max value for each mzmed contained in pcgroup + ## Input : $pcgroups + ## Output : $pcgroups + ## Usage : my ( $pcgroups ) = add_min_max_for_pcgroup_res ( $pcgroups ) ; + +=cut +## START of SUB +sub add_min_max_for_pcgroup_res { + ## Retrieve Values + my $self = shift ; + my ( $pcgroups, $delta ) = @_ ; + + my %temp = () ; + + if (!defined $delta) { + $delta = 0.01 ; ## default value + } + + if ( defined $pcgroups) { + %temp = %{$pcgroups} ; + + foreach my $pc (keys %temp) { + my %mz_intervales = () ; + if ( $temp{$pc}{'mzmed'} ) { + my @temp = @{$temp{$pc}{'mzmed'}} ; + foreach my $mz (@temp) { + my ($min, $max) = lib::mapper::new->min_and_max_from_double_with_delta($mz, 'Da', $delta); + $mz_intervales{$mz} = {'min' => $min, 'max' => $max } ; + } + } + else { + warn "No mzmed found for this pcgroup\n" ; + } + $temp{$pc}{'intervales'} = \%mz_intervales ; + + } + } ## End IF + else { + warn "No pcgroup and threshold defined\n" ; + } + return (\%temp) ; +} +### END of SUB + + + +=head2 METHOD min_and_max_from_double_with_delta + + ## Description : returns the minimum and maximum double according to the delta + ## Input : \$double, \$delta_type, \$delta + ## Output : \$min, \$max + ## Usage : ($min, $max)= min_and_max_from_double_with_delta($double, $delta_type, $mz_delta) ; + +=cut +## START of SUB +sub min_and_max_from_double_with_delta { + ## Retrieve Values + my $self = shift ; + my ( $double, $delta_type, $delta ) = @_ ; + my ( $min, $max ) = ( undef, undef ) ; + + if ($delta_type eq 'ppm'){ + $min = $double - ($delta * 10**-6 * $double); + $max = $double + ($delta * 10**-6 * $double) + 0.0000000001; ## it's to included the maximum value in the search + } + elsif ($delta_type eq 'Da'){ + $min = $double - $delta; + $max = $double + $delta + 0.0000000001; ## it's to included the maximum value in the search + } + else { croak "The double delta type '$delta_type' isn't a valid type !\n" ; } + + return($min, $max) ; +} +## END of SUB + + +=head2 METHOD compute_ids_from_pcgroups_res + + ## Description : get all ids returned by massbank with sent queries and keep only unique ones. + ## Input : $pcgroups + ## Output : $unique_ids + ## Usage : my ( $unique_ids ) = compute_ids_from_pcgroups_res ( $pcgroups ) ; + +=cut +## START of SUB +sub compute_ids_from_pcgroups_res { + ## Retrieve Values + my $self = shift ; + my ( $pcgroups ) = @_; + my ( @ids, @unique ) = ( (), () ) ; + + if ( defined $pcgroups ) { + + foreach my $pc ( keys %{$pcgroups} ) { + if ( $pcgroups->{$pc}{'massbank_ids'} ) { + push (@ids , @{ $pcgroups->{$pc}{'massbank_ids'} } ) ; + } + } + + if ( ( scalar (@ids) ) > 0 ) { +# print Dumper @ids ; + @unique = do { my %seen; grep { !$seen{$_}++ if (defined $_) } @ids }; + @unique = sort { $a cmp $b } @unique; + } + else { + @unique = () ; + } + + + } + return (\@unique) ; +} +### END of SUB + + +=head2 METHOD get_massbank_records_by_chunk + + ## Description : get massbank records from a complete list but send queries chunk by chunk. + ## Input : $ids, $chunk_size + ## Output : $records + ## Usage : my ( $records ) = get_massbank_records_by_chunk ( $ids, $chunk_size ) ; + +=cut +## START of SUB +sub get_massbank_records_by_chunk { + ## Retrieve Values + my $self = shift ; + my ( $server, $ids, $chunk_size ) = @_; + my ( @records, @sent_ids ) = ( (), () ) ; + + my $current = 0 ; + my $pos = 1 ; + my @temp_ids = () ; + + my $num_ids = scalar(@{$ids}) ; +# print "The number of given massbank ids is: $num_ids\n" ; + + foreach my $id (@{$ids}) { + $current++ ; +# print "$id - - $current/$num_ids) - - $pos \n" ; + + if ( ($current == $num_ids) or ($pos == $chunk_size) ) { +# print "Querying Massbank with...\n" ; + push (@temp_ids, $id) ; + ## send query + my $omassbank = lib::massbank_api->new() ; + my ($osoap) = $omassbank->selectMassBank($server) ; + my ($records) = $omassbank->getRecordInfo($osoap, \@temp_ids) ; + push (@records, @{$records}) ; + + @temp_ids = () ; + $pos = 0 ; + } + elsif ($pos < $chunk_size) { +# print "store...\n"; + push (@temp_ids, $id) ; + $pos ++ ; + } + else { + warn "Something goes wrong : out of range\n" + } + + + } + my $num_records = scalar(@records) ; +# print "The number of received massbank records is: $num_records\n" ; + return (\@records) ; +} +### END of SUB + +=head2 METHOD set_massbank_matrix_object + + ## Description : build the massbank_row under its ref form + ## Input : $header, $init_pcs, $init_mzs, $pcgroups, $records + ## Output : $massbank_matrix + ## Usage : my ( $massbank_matrix ) = set_lm_matrix_object( $header, $init_pcs, $init_mzs, $pcgroups, $records ) ; + +=cut +## START of SUB +sub set_massbank_matrix_object { + ## Retrieve Values + my $self = shift ; + my ( $header, $init_pcs, $init_mzs, $pcgroups, $records ) = @_ ; + my @massbank_matrix = () ; + + my $current_pos = 0 ; + + ## format massbank(score::name::mz::formula::adduct::id) + if ( defined $header ) { + $header .= '(score::name::mz::formula::adduct::id)' ; + my @headers = () ; + push @headers, $header ; + push @massbank_matrix, \@headers ; + } + + ## foreach mz of the input file + foreach my $mz (@{$init_mzs}) { + + my $nb_ids = 0 ; + my @ids = () ; + + my $pc = $init_pcs->[$current_pos] ; ## get the rigth pcgroup with maz postion in list +# print "---> Current PCGROUP is $pc\n" ; + if ( $pcgroups->{$pc}{'enrich_annotation'}{$mz} ) { + ## get record_ids + my @massbank_ids = @{ $pcgroups->{$pc}{'enrich_annotation'}{$mz} } ; ## get validated ids relative to one mz + $nb_ids = scalar (@massbank_ids) ; +# print "- - - NB RECORDS FOR MZ $mz = $nb_ids - - STATUS => \t" ; + my $massbank_ids_string = undef ; + ## manage empty array + if (!defined $nb_ids) { carp "The number of massbank ids is not defined\n" ; } + elsif ( $nb_ids > 0 ) { + ## get data from records and init_annotation + my $index_entries = 0 ; + foreach my $record_id (@massbank_ids) { + my $massbank_name = $records->{$record_id}{names}[0] ; + my $massbank_id = $record_id ; + my $massbank_formula = $records->{$record_id}{formula} ; + my $massbank_cpd_mz = $records->{$record_id}{exact_mz} ; + my $massbank_adduct = $records->{$record_id}{precursor_type} ; + my $massbank_score = 0 ; + + ## getting the score + my @filtered_records= @{ $pcgroups->{$pc}{'annotation'}{res} } ; + foreach my $record (@filtered_records) { + if ($record->{id} eq $massbank_id ) { + $massbank_score = $record->{score} ; + last ; + } + else { + next ; + } + } + + ## METLIN data display model + ## entry1= ENTRY_DELTA::ENTRY_ENTRY_NAME::ENTRY_CPD_MZ::ENTRY_FORMULA::ENTRY_ADDUCT::ENTRY_ENTRY_ID | entry2=VAR1::VAR2::VAR3::VAR4|... + my $massbank_id_string = $massbank_score.'::['."$massbank_name".']::'.$massbank_cpd_mz.'::'.$massbank_formula.'::['.$massbank_adduct.']::'.$massbank_id ; + + # manage final pipe + if ($index_entries < $nb_ids-1 ) { $massbank_ids_string .= $massbank_id_string.' | ' ; } + else { $massbank_ids_string .= $massbank_id_string ; } + $index_entries++; + } + } + elsif ( $nb_ids == 0 ) { $massbank_ids_string = 'NONE' ; } + else { + $massbank_ids_string = 'NONE' ; + } +# print "$massbank_ids_string\n" ; + push (@ids, $massbank_ids_string) ; + } ## End if + else { + next; + } + $current_pos++ ; + + push (@massbank_matrix, \@ids) ; + } ## End foreach mz +# print "* * * * Start of the MATRIX: * * * *\n" ; +# print Dumper @massbank_matrix ; +# print "* * * * END of the MATRIX * * * *\n" ; + return(\@massbank_matrix) ; +} +## END of SUB + +=head2 METHOD add_massbank_matrix_to_input_matrix + + ## Description : build a full matrix (input + lm column) + ## Input : $input_matrix_object, $massbank_matrix_object + ## Output : $output_matrix_object + ## Usage : my ( $output_matrix_object ) = add_massbank_matrix_to_input_matrix( $input_matrix_object, $massbank_matrix_object ) ; + +=cut +## START of SUB +sub add_massbank_matrix_to_input_matrix { + ## Retrieve Values + my $self = shift ; + my ( $input_matrix_object, $massbank_matrix_object ) = @_ ; + + my @output_matrix_object = () ; + my $index_row = 0 ; + + foreach my $row ( @{$input_matrix_object} ) { + my @init_row = @{$row} ; + + if ( $massbank_matrix_object->[$index_row] ) { + my $dim = scalar(@{$massbank_matrix_object->[$index_row]}) ; + + if ($dim > 1) { warn "the add method can't manage more than one column\n" ;} + my $lm_col = $massbank_matrix_object->[$index_row][$dim-1] ; + + push (@init_row, $lm_col) ; + $index_row++ ; + } + push (@output_matrix_object, \@init_row) ; + } + return(\@output_matrix_object) ; +} +## END of SUB + +=head2 METHOD map_res_to_generic_json + + ## Description : build json structure with all massbank results + ## Input : $mzs, $pcs, $pcgroups_results + ## Output : $json_scalar + ## Usage : my ( $json_scalar ) = add_massbank_matrix_to_input_matrix( $mzs, $pcs, $pcgroups_results ) ; + +=cut +## START of SUB +sub map_pc_to_generic_json { + my $self = shift; + my ( $pcs, $pcgroups, $records ) = @_ ; + +# print Dumper $pcgroups ; +# print Dumper $records ; + + ## JSON DESIGN + my %JSON = ( + QUERY => {}, + PARAM => {}, + TYPE => {} + ) ; + + my %oEntry = ( + mzmed => undef, + into => undef, + mzmin => undef, + mzmax => undef, + pcgroup => undef, + num_res => undef, + RECORDS => undef, + ) ; + + + my %oRecord = ( + id => undef, + exact_mz => undef, + score => undef, + formula => undef, + inchi => undef, + ms_type => undef, + precursor_type => undef, + instrument_type => undef, + name => undef, + peaks => undef, + ) ; + + + + foreach my $pc (@{$pcs}) { + + my $pc_res = {} ; + my $num_res = undef ; + + if ($pcgroups->{$pc}) { + my $pos = 0 ; + ## foreach mz of the pcgroup + foreach my $mz (@{ $pcgroups->{$pc}{mzmed} } ) { + + my %entry = %oEntry ; + ## + if ( defined $mz ) { $entry{mzmed} = $mz ; } + if ( $pcgroups->{$pc}{intervales}{$mz} ) { $entry{mzmin} = $pcgroups->{$pc}{intervales}{$mz}{min} ; } + if ( $pcgroups->{$pc}{intervales}{$mz} ) { $entry{mzmax} = $pcgroups->{$pc}{intervales}{$mz}{max} ; } + if ( $pcgroups->{$pc}{into}[$pos] ) { $entry{into} = $pcgroups->{$pc}{into}[$pos] ; } + if ( defined $pc ) { $entry{pcgroup} = $pc ; } + ## get RECORDS + if ( $pcgroups->{$pc}{enrich_annotation}{$mz} ) { + + my @recs = @{ $pcgroups->{$pc}{enrich_annotation}{$mz} } ; + $entry{num_res} = scalar(@recs) ; + + foreach my $recId (@recs) { + + my %record = %oRecord ; + if ( $records->{$recId} ) { $record{id} = $recId ; } + if ( $records->{$recId}{exact_mz} ) { $record{exact_mz} = $records->{$recId}{exact_mz} ; } + if ( $records->{$recId}{formula} ) { $record{formula} = $records->{$recId}{formula} ; } + if ( $records->{$recId}{ms_type} ) { $record{ms_type} = $records->{$recId}{ms_type} ; } + if ( $records->{$recId}{precursor_type} ) { $record{precursor_type} = $records->{$recId}{precursor_type} ; } + if ( $records->{$recId}{instrument_type} ) { $record{instrument_type} = $records->{$recId}{instrument_type} ; } + if ( $records->{$recId}{names} ) { $record{name} = $records->{$recId}{names}[0] ; } + if ( $records->{$recId}{inchi} ) { $record{inchi} = $records->{$recId}{inchi} ; } + ## peaks TODO... + + ## Score / BIG SHIT / + foreach my $record (@{ $pcgroups->{$pc}{'annotation'}{res} }) { + if ($record->{id} eq $recId ) { + $record{score} = $record->{score} ; + last ; + } + else { + next ; + } + } ## foreach record - - - for score + $entry{RECORDS}{$recId} = \%record ; + } ## foreach recId + } ## end IF + + $JSON{QUERY}{$mz} = \%entry ; + $pos ++ ; + } ## End FOREACH MZ + } + else { + warn "The pc group $pc doesn't exist in results !" ; + } + } +# print Dumper %JSON ; + return(\%JSON) ; +} +## END of SUB + + +=head2 METHOD mapGroupsWithRecords + + ## Description : map records with pcgroups mz to adjust massbank id annotations + ## Input : $pcgroups, $records + ## Output : $pcgroups + ## Usage : my ( $var4 ) = mapGroupsWithRecords ( $$pcgroups, $records ) ; + +=cut +## START of SUB +sub mapGroupsWithRecords { + ## Retrieve Values + my $self = shift ; + my ( $pcgroups, $records ) = @_; + + my %temp = () ; + my (%intervales, @annotation_ids) = ( (), () ) ; + + if ( ( defined $pcgroups ) and ( defined $records ) ) { + + %temp = %{$pcgroups} ; + my %unik_real_ids = () ; + my @real_ids = () ; + + foreach my $pc (keys %temp) { + + if ( $temp{$pc}{'intervales'} ) { %intervales = %{$temp{$pc}{'intervales'}} ; } + else { warn "Cant't find any intervale values\n" ; } + if ( $temp{$pc}{'massbank_ids'} ) { @annotation_ids = @{$temp{$pc}{'massbank_ids'}} ; } + else { warn "Cant't find any massbank id values\n" ; } + +# print Dumper %intervales; +# print Dumper @annotation_ids ; + + ## map with intervales + foreach my $mz (keys %intervales) { + my @filteredIds = () ; + my ( $min, $max ) = ( $intervales{$mz}{'min'}, $intervales{$mz}{'max'} ) ; + + foreach my $id (@annotation_ids) { +# print "Analyse mzs of id: $id...\n" ; + if ( (defined $id) and ( $records->{$id}) ) { + + my %currentRecord = %{$records->{$id}} ; + + if (scalar @{$currentRecord{'peaks'} } > 0 ) { + ## + foreach my $peak_mz (@{ $currentRecord{'peaks'} } ) { + if ($peak_mz) { + my $record_mz = $peak_mz->{'mz'} ; + if ( ($record_mz > $min ) and ($record_mz < $max) ){ + + if (!exists $unik_real_ids{$id}) { + $unik_real_ids{$id} = 1 ; + push (@filteredIds, $id) ; + # print "$mz - - $id\n" ; + } + + + } + else { + next ; + } + } + else { + warn "The mz field is not defined\n" ; + } + } ## foreach + } + else { + warn "The record ($id) has no peak\n" ; + } + } + else { + if (defined $id) { + warn "The id $id seems to be not present in getting records\n" ; + } + else { + warn "This catched id seems to be undef in getting records\n" ; + } + + next ; + } + } ## end foreach + ## to avoid multiple ids +# foreach my $id (keys %unik_real_ids) { +# push(@real_ids, $id) ; +# } + %unik_real_ids = () ; +# my @temp = @real_ids ; + my @temp = @filteredIds ; + $temp{$pc}{'enrich_annotation'}{$mz} = \@temp ; + @real_ids = () ; + @filteredIds = () ; + } ## End foreach mz + @annotation_ids = () ; + } ## End foreach pc + } + else { + warn"Can't find record or pcgroup data\n" ; + } + + return (\%temp) ; +} +### END of SUB + +=head2 METHOD set_html_tbody_object + + ## Description : initializes and build the tbody object (perl array) needed to html template + ## Input : $nb_pages, $nb_items_per_page + ## Output : $tbody_object + ## Usage : my ( $tbody_object ) = set_html_tbody_object($nb_pages, $nb_items_per_page) ; + +=cut +## START of SUB +sub set_html_tbody_object { + my $self = shift ; + my ( $nb_pages, $nb_items_per_page ) = @_ ; + + my ( @tbody_object ) = ( ) ; + + for ( my $i = 1 ; $i <= $nb_pages ; $i++ ) { + + my %pages = ( + # tbody feature + PAGE_NB => $i, + MASSES => [], ## end MASSES + ) ; ## end TBODY N + push (@tbody_object, \%pages) ; + } + return(\@tbody_object) ; +} +## END of SUB + +=head2 METHOD add_mz_to_tbody_object + + ## Description : initializes and build the mz object (perl array) needed to html template + ## Input : $tbody_object, $nb_items_per_page, $mz_list + ## Output : $tbody_object + ## Usage : my ( $tbody_object ) = add_mz_to_tbody_object( $tbody_object, $nb_items_per_page, $mz_list ) ; + +=cut +## START of SUB +sub add_mz_to_tbody_object { + my $self = shift ; + my ( $tbody_object, $nb_items_per_page, $mz_list, $json ) = @_ ; + + my ( $current_page, $mz_index ) = ( 0, 0 ) ; + + foreach my $page ( @{$tbody_object} ) { + + my @colors = ('white', 'green') ; + my ( $current_index, , $icolor ) = ( 0, 0 ) ; + + for ( my $i = 1 ; $i <= $nb_items_per_page ; $i++ ) { + # + if ( $current_index > $nb_items_per_page ) { ## manage exact mz per html page + $current_index = 0 ; + last ; ## + } + else { + $current_index++ ; + if ( $icolor > 1 ) { $icolor = 0 ; } + + if ( exists $mz_list->[$mz_index] ) { + + my %mz = ( + # mass feature + MASSES_ID_QUERY => "mz_0".sprintf("%04s", $mz_index+1 ) , + MASSES_MZ_QUERY => $mz_list->[$mz_index], + MASSES_PCGROUP_QUERY => $json->{QUERY}{ $mz_list->[$mz_index] }{pcgroup} , + MZ_COLOR => $colors[$icolor], + MASSES_NB => $mz_index+1, + ENTRIES => [] , + ) ; + push ( @{ $tbody_object->[$current_page]{MASSES} }, \%mz ) ; + # Html attr for mass + $icolor++ ; + } + } + $mz_index++ ; + } ## foreach mz + + $current_page++ ; + } + return($tbody_object) ; +} +## END of SUB + +=head2 METHOD add_entries_to_tbody_object + + ## Description : initializes and build the entries object (perl array) needed to html template + ## Input : $tbody_object, $nb_items_per_page, $mz_list, $entries + ## Output : $tbody_object + ## Usage : my ( $tbody_object ) = add_entries_to_tbody_object( $tbody_object, $nb_items_per_page, $mz_list, $entries ) ; + +=cut +## START of SUB +sub add_entries_to_tbody_object { + ## Retrieve Values + my $self = shift ; + my ( $tbody_object, $nb_items_per_page, $mz_list, $JSON ) = @_ ; + + my $index_page = 0 ; + my $index_mz_continous = 0 ; + + foreach my $page (@{$tbody_object}) { + + my $index_mz = 0 ; + + foreach my $mz (@{ $tbody_object->[$index_page]{MASSES} }) { + my $index_entry = 0 ; + my $check_noentry = 0 ; + my @toSort = () ; + + foreach my $record (keys %{ $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS} }) { + $check_noentry ++ ; + + my %entry = ( + ENTRY_COLOR => $tbody_object->[$index_page]{MASSES}[$index_mz]{MZ_COLOR}, + ENTRY_ENTRY_NAME => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{name}, + ENTRY_ENTRY_ID => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{id}, + ENTRY_ENTRY_ID2 => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{id}, + ENTRY_FORMULA => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{formula}, + ENTRY_CPD_MZ => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{exact_mz}, + ENTRY_MS_TYPE => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{ms_type}, + ENTRY_PRECURSOR_TYPE => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{precursor_type}, + ENTRY_INSTRUMENT_TYPE => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{instrument_type}, + ENTRY_SCORE => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{score}, + ENTRY_ENTRY_INCHI => $JSON->{QUERY}{$mz->{MASSES_MZ_QUERY}}{RECORDS}{$record}{inchi}, + ) ; + push ( @{ $tbody_object->[$index_page]{MASSES}[$index_mz]{ENTRIES} }, \%entry) ; + + $index_entry++ ; + } ## end foreach record + if ($check_noentry == 0 ) { + my %entry = ( + ENTRY_COLOR => $tbody_object->[$index_page]{MASSES}[$index_mz]{MZ_COLOR}, + ENTRY_ENTRY_NAME => 'UNKNOWN', + ENTRY_ENTRY_ID => 'NONE', + ENTRY_ENTRY_ID2 => '', + ENTRY_FORMULA => 'n/a', + ENTRY_CPD_MZ => 'n/a', + ENTRY_MS_TYPE => 'n/a', + ENTRY_PRECURSOR_TYPE => 'n/a', + ENTRY_INSTRUMENT_TYPE => 'n/a', + ENTRY_SCORE => 0, + ENTRY_ENTRY_INCHI => 'n/a', + ) ; + push ( @{ $tbody_object->[$index_page]{MASSES}[$index_mz]{ENTRIES} }, \%entry) ; + } + + ## sorted by score + my @sorted = () ; + my @temp = @{ $tbody_object->[$index_page]{MASSES}[$index_mz]{ENTRIES} } ; + if (scalar (@temp) > 1 ) { ## for mz without record (only one entry with NA or 0 values) + @sorted = sort { $b->{ENTRY_SCORE} <=> $a->{ENTRY_SCORE} } @temp; + } + else { + @sorted = @temp; + } + + $tbody_object->[$index_page]{MASSES}[$index_mz]{ENTRIES} = \@sorted ; + + $index_mz ++ ; + $index_mz_continous ++ ; + + } ## End foreach mz + $index_page++ ; + + } ## End foreach page +# print Dumper $tbody_object ; + return($tbody_object) ; +} +## 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 Efranck.giacomoni@clermont.inra.frE + +=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 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 @@ -0,0 +1,699 @@ +package lib::massbank_api ; + +use strict; +use warnings ; +use Exporter ; +use Carp ; + +use Data::Dumper ; +#use SOAP::Lite +trace => [qw (debug)]; +use SOAP::Lite ; + +use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); + +our $VERSION = "1.0"; +our @ISA = qw(Exporter); +our @EXPORT = qw( connectMassBankJP connectMassBankDE selectMassBank getInstrumentTypes getRecordInfo searchSpectrum getPeak); +our %EXPORT_TAGS = ( ALL => [qw( connectMassBankJP connectMassBankDE selectMassBank getInstrumentTypes getRecordInfo searchSpectrum getPeak)] ); + + + + +=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 connectMassBankJP + + ## Description : create a soap object throught the webservice japan massbank. + ## Input : $self + ## Ouput : $soap ; + ## Usage : my $soap = connectMassBankJP() ; + +=cut +sub connectMassBankJP() { + ## Retrieve Values + my $self = shift ; + my $osoap = SOAP::Lite + -> uri('http://api.massbank') + -> proxy('http://www.massbank.jp/api/services/MassBankAPI?wsdl', timeout => 100 ) + -> on_fault(sub { my($soap, $res) = @_; + eval { die ref $res ? $res->faultstring : $soap->transport->status, "\n"}; + return ref $res ? $res : new SOAP::SOM ; + }); + + return ($osoap); +} +### END of SUB + +=head2 METHOD connectMassBankDE + + ## Description : create a soap object throught the webservice UFZ-DE massbank. + ## Input : $self + ## Ouput : $soap ; + ## Usage : my $soap = connectMassBankDE() ; + +=cut +sub connectMassBankDE() { + ## Retrieve Values + my $self = shift ; + my $osoap = SOAP::Lite + -> uri('http://api.massbank') +# -> proxy('http://massbank.ufz.de/MassBank/api/services/MassBankAPI?wsdl', timeout => 500 ) + -> proxy('http://massbank.normandata.eu/MassBank/api/services/MassBankAPI?wsdl', timeout => 500 ) + -> on_fault(sub { my($soap, $res) = @_; + eval { die ref $res ? $res->faultstring : $soap->transport->status, "\n"}; + return ref $res ? $res : new SOAP::SOM ; + }); + + return ($osoap); +} +### END of SUB + +=head2 METHOD selectMassBank + + ## Description : create a soap object throught a choice of servers like UFZ-DE mirror or JP mirror. + ## Input : $server + ## Ouput : $soap ; + ## Usage : my $soap = selectMassBank($server) ; + +=cut +sub selectMassBank() { + ## Retrieve Values + my $self = shift ; + my ( $server ) = @_ ; + + my $osoap = undef ; + + my $ombk = new() ; + + if ( (defined $server ) and ($server eq 'JP') ) { + $osoap = $ombk->connectMassBankJP() ; + } + elsif ( (defined $server ) and ($server eq 'EU') ){ + $osoap = $ombk->connectMassBankDE() ; + } + elsif ( !defined $server ) { + croak "Can't adress SOAP connexion : undefined MassBank server\n" ; + } + else { + croak "Can't adress SOAP connexion : unknown MassBank server ($server)\n" ; + } + return ($osoap); +} +### END of SUB + + + +=head2 METHOD getInstrumentTypes + + ## Description : Get a list of the instrument types resistered in MassBank + ## Input : $soap + ## Ouput : $res ; + ## Usage : $res = getInstrumentTypes($soap) ; + +=cut +sub getInstrumentTypes() { + ## Retrieve Values + my $self = shift ; + my ($osoap) = @_ ; + my @records = () ; + + my $res = $osoap -> getInstrumentTypes ; + + ## DETECTING A SOAP FAULT + if ($res->fault) { @records = $res->faultdetail; } + else { @records = $res->valueof('//return'); } + + return(\@records) ; +} +### END of SUB + +=head2 METHOD getRecordInfo + + ## Description : Get the data of MassBank records specified by Record IDs. A MassBank record includes peak data, analytical conditions and so on). + ## Input : $osoap, $ids + ## Ouput : $dats + ## Usage : $dats = getRecordInfo($osoap, $ids) ; + +=cut + +sub getRecordInfo() { + ## Retrieve Values + my $self = shift ; + my ($osoap, $ids) = @_ ; + + # init in case : + my @dats = () ; + my $numdats = 0 ; + + if ( defined $ids ) { + my $nb_ids = scalar (@{$ids}) ; + + if ( $nb_ids > 0 ) { + + my @ids = @{$ids} ; + + my @params = ( SOAP::Data->name('ids' => @ids ) ); + + my $data = SOAP::Data -> value(@params); + my $som = $osoap -> getRecordInfo($data); + + ## DETECTING A SOAP FAULT OR NOT + if ( $som ) { + if ($som->fault) { + carp "\t\t WARN: The query Id is false, MassBank don't find any record\n" ; + push( @dats, undef ) ; + } + else { + if (!defined $som->valueof('//info')) { + carp "\t\t WARN: The query Id is undef, and MassBank won't find any record\n" ; + } + elsif ($som->valueof('//info') ne '') { # avoid to fill array with false id returning '' value + @dats = $som->valueof('//info'); + } + else { + carp "\t\t WARN: The query Id is false, MassBank don't find any record\n" ; + } + } + } + else { + carp "The som return (from the getRecordInfo method) isn't defined\n" ; } + } + else { carp "Query MZs list is empty, MassBank soap will stop\n" ; } + } + else { carp "Query MZs list is undef, MassBank soap will stop\n" ; } + + return(\@dats) ; +} + + + + +### END of SUB + +=head2 METHOD initRecordObject + + ## Description : init a massbank record object from a string + ## Input : $string + ## Output : $orecord + ## Usage : my ( $orecord ) = initRecordObject ( $string ) ; + +=cut +## START of SUB +sub initRecordObject { + ## Retrieve Values + my $self = shift ; + my ( $string ) = @_; + my ( %orecord ) = ( () ) ; + + if (defined $string) { + my $pkcheck = 0 ; + my (@mzs, @int, @relint) = ( (), (), () ) ; + my @features = split(/\n/, $string) ; + + foreach (@features) { + ## for all key:value + ## todo : known issue with "COMMENT" part (wrong split) + if ($_ =~ /(.+):(.+)/) { + my ($key, $string) = ($1, $2 ); + $string =~ s/^\s+|\s+$//g; + $orecord{$key} = $string ; + if ($key =~/^PK\$PEAK/) { + $pkcheck = 1 ; + (@mzs, @int, @relint) = ( (), (), () ) ; + } + } + elsif ($pkcheck == 1) { + ## case 01 : m/z int. rel.int. + if ($_ =~ /\s+(.+)\s+(.+)\s+(.+)/) { + push (@mzs, $1) ; push (@int, $2) ; push (@relint, $3) ; + } + } + } + ## init mzs, int and relint + my %tmp = () ; + $tmp{'mz'} = \@mzs ; + $tmp{'int'} = \@int ; + $tmp{'relint'} = \@relint ; + $orecord{'PK$PEAK'} = \%tmp ; + } + else { + warn "The given massbank string is undef\n" ; + } + + return (\%orecord) ; +} +### END of SUB + +=head2 METHOD getRecordInfoId + + ## Description : get the Id value in the massbank info string + ## Input : $orecord + ## Output : $orecord + ## Usage : my ( $orecord ) = getRecordInfoId ( $record ) ; + +=cut +## START of SUB +sub getRecordInfoId { + ## Retrieve Values + my $self = shift ; + my ( $orecord ) = @_; + + my $id = undef ; + if ($orecord->{'ACCESSION'}) { $id = $orecord->{'ACCESSION'} ; } + else { $id = 'NA' ; } + return (\$id) ; +} +### END of SUB + + + + + +=head2 METHOD getPeakFromId + + ## Description : Get the peak data of MassBank records specified by Record IDs. + ## Input : $ids + ## Ouput : + ## Usage : my ($pks) = getPeak($soap, $ids) ; + +=cut + +sub getPeak() { + ## Retrieve Values + my $self = shift ; + my ($osoap, $ids) = @_; + my (@dat, @ids, @dats) = ( (), () ); + @ids = @{$ids} ; + + foreach my $id ( @ids ) { + push(@dat, SOAP::Data -> name('ids' => $id)); + } + + my $data = SOAP::Data -> value(@dat); + my $som = $osoap -> getPeak($data) ; + + ## DETECTING A SOAP FAULT OR NOT + if ($som->fault) { @dats = $som->faultdetail ; } + else { @dats = $som->valueof('//return') ; } + +# print Dumper $som->valueof('//return') ; + return(\@dats) ; +} + +=head2 METHOD searchSpectrum + + ## Description : Get the response equivalent to the "Spectrum Search" results. + ## Input : $osoap, $pcgroup_id, $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff + ## Ouput : $spectra, $numspectra + ## Usage : ($spectra, $numspectra) = searchSpectrum($osoap, $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff) ; + +=cut + +sub searchSpectrum() { + ## Retrieve Values + my $self = shift ; + my ($osoap, $pcgroup_id , $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff) = @_; + + # init in case : + $ion = 'both' if ( !defined $ion ) ; + $instruments = ['all'] if ( !defined $instruments ) ; + $max = 0 if ( !defined $max ) ; + $unit = 'unit' if ( !defined $unit ) ; + $cutoff = 5 if ( !defined $cutoff ) ; + if ( !defined $tol ) { + if ( $unit eq 'unit' ) { $tol = 0.3 ; } + else { $tol = 50 ; } + } + + my @dats = () ; + my %ret = (); # %ret = {'res' => [], 'num_res' => int, 'pcgroup_id'=> int } + my $numdats = 0 ; + + if ( defined $mzs ) { + my $nb_mzs = scalar (@{$mzs}) ; + + if ( $nb_mzs > 0 ) { + + my @mzs = @{$mzs} ; + my @ints = @{$intensities} ; + my ( @dat1, @dat2 ) = ( (), () ) ; + my $i = 0 ; + + foreach my $mz (@mzs) { + push(@dat1, SOAP::Data -> name('mzs' => $mz) ); + push(@dat2, SOAP::Data -> name('intensities' => $ints[$i]) ); + $i++ ; + } + + push(@dat2, SOAP::Data -> name('unit' => $unit) ) ; + push(@dat2, SOAP::Data -> name('tolerance' => $tol) ) ; + push(@dat2, SOAP::Data -> name('cutoff' => $cutoff) ) ; + + foreach my $ins ( @{$instruments} ) { + push(@dat2, SOAP::Data -> name('instrumentTypes' => $ins)); + } + push(@dat2, SOAP::Data -> name('ionMode' => $ion)); + push(@dat2, SOAP::Data -> name('maxNumResults' => $max)); + + my $data = SOAP::Data -> value(@dat1, @dat2); + my $som = $osoap -> searchSpectrum($data); + + ## DETECTING A SOAP FAULT OR NOT + if ( $som ) { + if ($som->fault) { + $ret{'fault'} = $som->faultstring; $ret{'num_res'} = -1 ; + } + else { +# print Dumper $som ; + @dats = $som->valueof('//results/[>0]'); + $numdats = $som->valueof('//numResults') ; + my $i ; + my @res = () ; + + if (!defined $numdats) { $numdats = 0 ; } + ## For results + if ($numdats > 0) { + ## insert nb of res + $ret{ 'num_res'} = $numdats ; + $ret{ 'pcgroup_id'} = $pcgroup_id ; + + ## manage mapping for spectral features + +# print Dumper @dats ; ## Bug with order depending of spectra source : + + for ( $i = 0; $i < $numdats; $i ++ ) { + my ($exactMass, $formula, $id, $score, $title) = @dats[($i * 5) .. ($i * 5 + 4)]; + + ## manage issue from massbank like ID MSJ00002 and formula == 1 FROM WS + if ($formula eq '1') { +# print "-------> WS sent mixed value for $id (EM:$exactMass, F:$formula, ID:$id, SC:$score, TI:$title)\n" ; + my (%val) = ('id', $title, 'title', $id, 'formula', $exactMass, 'exactMass', 'NA', 'score', $score); + push(@res, { %val }); + } + else { + my (%val) = ('id', $id, 'title', $title, 'formula', $formula, 'exactMass', $exactMass, 'score', $score); + push(@res, { %val }); + } + } + + ## order res by score + my @sorted = sort { $a->{score} <=> $b->{score} } @res; + + $ret{'res'} = \@sorted; + } + ## for no results for the query + else { + $ret{ 'num_res'} = $numdats ; + $ret{ 'pcgroup_id'} = $pcgroup_id ; + my (%val) = ('id', undef, 'title', undef, 'formula', undef, 'exactMass', undef, 'score', undef); + push(@res, { %val }); + $ret{'res'} = \@res; + } + } + } + else { + carp "The som return (from the searchSpectrum method) isn't defined\n" ; } + } + else { carp "Query MZs list is empty, MassBank soap will stop\n" ; } + } + else { carp "Query MZs list is undef, MassBank soap will stop\n" ; } +# print Dumper @ret ; + return(\%ret, $numdats) ; +} +### END of SUB + + + + +#=head2 METHOD new +# +# ## Description : new +# ## Input : $self +# ## Ouput : bless $self ; +# ## Usage : new() ; +# +#=cut +# +#sub searchPeak() { local($soap, $mz, $max, $ion, $rel, $inst, $tol) = @_; +# $ion = 'both' if ( $ion eq '' ); +# $rel += 0; +# $max += 0; +# local(@inst) = @$inst; +# @inst = ('all') if ( scalar(@inst) == 0 ); +# $tol = 0.3 if ( $tol eq '' ); +# local(@mz) = @$mz; +# local(@dat) = (); +# local($mzv); +# foreach $mzv ( @mz ) { +# push(@dat, SOAP::Data -> name('mzs' => $mzv)); +# } +# push(@dat, SOAP::Data -> name('relativeIntensity' => $rel)); +# push(@dat, SOAP::Data -> name('tolerance' => $tol)); +# local($ins); +# foreach $ins ( @inst ) { +# push(@dat, SOAP::Data -> name('instrumentTypes' => $ins)); +# } +# push(@dat, SOAP::Data -> name('ionMode' => $ion)); +# push(@dat, SOAP::Data -> name('maxNumResults' => $max)); +# local($data) = SOAP::Data -> value(@dat); +# local($som) = $soap -> searchPeak($data); +# local($num) = $som -> valueof('/Envelope/Body/[1]/[>0]/numResults'); +# local(@res) = $som -> valueof('/Envelope/Body/[1]/[>0]/results/[>0]'); +# local($i); +# local(@ret) = (); +# for ( $i = 0; $i < $num; $i ++ ) { +# local($mw, $form, $id, $score, $title) = @res[($i * 5) .. ($i * 5 + 4)]; +# local(%val) = ('id', $id, 'title', $title, 'formula', $form, 'exactMass', $mw); +# push(@ret, { %val }); +# } +# return @ret; +#} +# +#=head2 METHOD new +# +# ## Description : new +# ## Input : $self +# ## Ouput : bless $self ; +# ## Usage : new() ; +# +#=cut +# +#sub searchPeakDiff() { local($soap, $mz, $max, $ion, $rel, $inst, $tol) = @_; +# $ion = 'both' if ( $ion eq '' ); +# $rel += 0; +# $max += 0; +# local(@inst) = @$inst; +# @inst = ('all') if ( scalar(@inst) == 0 ); +# $tol = 0.3 if ( $tol eq '' ); +# local(@mz) = @$mz; +# local(@dat) = (); +# local($mzv); +# foreach $mzv ( @mz ) { +# push(@dat, SOAP::Data -> name('mzs' => $mzv)); +# } +# push(@dat, SOAP::Data -> name('relativeIntensity' => $rel)); +# push(@dat, SOAP::Data -> name('tolerance' => $tol)); +# local($ins); +# foreach $ins ( @inst ) { +# push(@dat, SOAP::Data -> name('instrumentTypes' => $ins)); +# } +# push(@dat, SOAP::Data -> name('ionMode' => $ion)); +# push(@dat, SOAP::Data -> name('maxNumResults' => $max)); +# local($data) = SOAP::Data -> value(@dat); +# local($som) = $soap -> searchPeakDiff($data); +# local($num) = $som -> valueof('/Envelope/Body/[1]/[>0]/numResults'); +# local(@res) = $som -> valueof('/Envelope/Body/[1]/[>0]/results/[>0]'); +# local($i); +# local(@ret) = (); +# for ( $i = 0; $i < $num; $i ++ ) { +# local($mw, $form, $id, $score, $title) = @res[($i * 5) .. ($i * 5 + 4)]; +# local(%val) = ('id', $id, 'title', $title, 'formula', $form, 'exactMass', $mw); +# push(@ret, { %val }); +# } +# return @ret; +#} +# +#=head2 METHOD new +# +# ## Description : new +# ## Input : $self +# ## Ouput : bless $self ; +# ## Usage : new() ; +# +#=cut +# +#sub execBatchJob() { local($soap, $spectra, $ion, $inst, $mail) = @_; +# $ion = 'both' if ( $ion eq '' ); +# local(@inst) = @$inst; +# @inst = ('all') if ( scalar(@inst) == 0 ); +# local(%spectra) = %$spectra; +# local($name); +# local(@query) = (); +# foreach $name ( keys %spectra ) { +# local(@q) = ("Name:$name"); +# local(%peak) = %{$spectra{$name}}; +# local($mz, $inte); +# foreach $mz ( keys %peak ) { +# $inte = $peak{$mz}; +# push(@q, "$mz,$inte"); +# } +# push(@query, join(';', @q)); +# } +# local(@dat) = (); +# local($q); +# push(@dat, SOAP::Data -> name('type' => 1)); +# push(@dat, SOAP::Data -> name('mailAddress' => $mail)); +# foreach $q ( @query ) { +# push(@dat, SOAP::Data -> name('queryStrings' => $q)); +# } +# local($ins); +# foreach $ins ( @inst ) { +# push(@dat, SOAP::Data -> name('instrumentTypes' => $ins)); +# } +# push(@dat, SOAP::Data -> name('ionMode' => $ion)); +# local($data) = SOAP::Data -> value(@dat); +# local($som) = $soap -> execBatchJob($data); +# local($res) = $som -> valueof('/Envelope/Body/[1]'); +# return ${$res}{'return'}; +#} +# +#=head2 METHOD new +# +# ## Description : new +# ## Input : $self +# ## Ouput : bless $self ; +# ## Usage : new() ; +# +#=cut +# +#sub getJobStatus() { local($soap, $job) = @_; +# local(@dat) = (); +# push(@dat, SOAP::Data -> name('jobId' => $job)); +# local($data) = SOAP::Data -> value(@dat); +# local($som) = $soap -> getJobStatus($data); +# local($res) = $som -> valueof('/Envelope/Body/[1]/[1]'); +# local(%res) = %{$res}; +# local($status) = $res{'status'}; +# local($code) = $res{'statusCode'}; +# local($date) = $res{'requestDate'}; +# return ($status, $code, $date); +#} +# +#=head2 METHOD new +# +# ## Description : new +# ## Input : $self +# ## Ouput : bless $self ; +# ## Usage : new() ; +# +#=cut +# +#sub getJobResult() { local($soap, $job) = @_; +# local(@dat) = (); +# push(@dat, SOAP::Data -> name('jobId' => $job)); +# local($data) = SOAP::Data -> value(@dat); +# local($som) = $soap -> getJobResult($data); +# local(@res) = $som -> valueof('/Envelope/Body/[1]/[>0]'); +# local($n) = scalar(@res); +# local(@ret) = (); +# local($i); +# for ( $i = 0; $i < $n; $i ++ ) { +# local(%res) = %{$res[$i]}; +# local(@res1) = $som -> valueof('/Envelope/Body/[1]/['.($i+1).']/results/[>0]'); +# local(%ret) = (); +# local($qname) = $res{'queryName'}; +# $ret{'qname'} = $qname; +# local($num) = $res{'numResults'}; +# $ret{'num'} = $num; +# local(@ret1) = (); +# local($j); +# for ( $j = 0; $j < $num; $j ++ ) { +# local($mw, $form, $id, $score, $title) = @res1[($j * 5) .. ($j * 5 + 4)]; +# local(%val) = ('id', $id, 'title', $title, 'formula', $form, 'exactMass', $mw, 'score', $score); +# push(@ret1, { %val }); +# } +# $ret{'list'} = [ @ret1 ]; +# push(@ret, { %ret }); +# } +# return @ret; +#} + + +1 ; + + +__END__ + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc massbank_api.pm + +=head1 Exports + +=over 4 + +=item :ALL is ... + +=back + +=head1 AUTHOR + +Franck Giacomoni Efranck.giacomoni@clermont.inra.frE and marion Landi Emarion.landi@clermont.inra.frE + +=head1 LICENSE + +This script is fully inspired by MassBank SOAP API Client Package Ver-2.0 with : + Author: Hisayuki Horail (MassBank Group, IAB, Keio U. and JST-BIRD) + Home page: http://www.massbank.jp/ + Date: 25 May 2010 + This software is licensed + under a Creative Commons Attribution License 2.1 Japan License (CC-BY) + (http://creativecommons.org/licensesby/2.1/jp/). + +This new version of this program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=head1 VERSION + +version 1 : 25 / 05 / 2010 + +version 2 : 04 / 06 / 2015 + +=cut \ No newline at end of file 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 @@ -0,0 +1,992 @@ +package lib::massbank_parser ; + +use strict; +use warnings ; +use Exporter ; +use Carp ; + +use File::Basename; + +use Data::Dumper ; + +use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); + +our $VERSION = "1.0" ; +our @ISA = qw(Exporter) ; +our @EXPORT = qw( getChemNamesFromString getPeaksFromString ) ; +our %EXPORT_TAGS = ( ALL => [qw( getChemNamesFromString getPeaksFromString )] ) ; + +=head1 NAME + +parser::chem::massbank - An example module + +=head1 SYNOPSIS + + use parser::chem::massbank ; + my $object = parser::chem::massbank->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_list_of_analysis_intrument_names + + ## Description : permt de retourner la liste des nom uniques des instruments utilises + ## Input : $dir, $ms_files (a list of files) + ## Output : $names + ## Usage : my ( $names ) = get_list_of_analysis_intrument_names( $ms_files ) ; + +=cut +## START of SUB +sub get_list_of_analysis_intrument_names { + ## Retrieve Values + my $self = shift ; + my ( $dir, $ms_files ) = @_ ; + my (%tmp_names, @names) = ( (), () ) ; + foreach my $ms_file (@{$ms_files}) { + my $file = $dir.'\\'.$ms_file ; + if ( ( defined $file ) and ( -e $file )) { + open(MS, "<$file") or die "Cant' read the file $file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/AC\$INSTRUMENT:(.*)/) { + if ( $tmp_names{$1} ) { last ; } + else { $tmp_names{$1} = 1 ; push (@names, $1) ; } + } + } + close(MS) ; + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + } + return(\@names) ; +} +## END of SUB + +=head2 METHOD get_analysis_instruments_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_analysis_instruments_data( $ms_file ) ; + +=cut +## START of SUB +sub get_analysis_instruments_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + my $control = 0 ; + my %features = ( + 'name' => undef, + 'type' => undef, + ) ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/AC\$INSTRUMENT: (.*)/) { $features{'name'} = $1 ; $control++; } + elsif ($field =~/AC\$INSTRUMENT_TYPE: (.*)/) { $features{'type'} = $1 ; $control++; } + else { next ; } + } + close(MS) ; + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + if ($control == 0) { %features = () ; } + return(\%features) ; +} +## END of SUB + +=head2 METHOD get_ms_methods_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_ms_methods_data( $ms_file ) ; + +=cut +## START of SUB +sub get_ms_methods_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + my $control = 0 ; + my %features = ( + 'ion_mode' => undef, + 'ms_type' => undef, + 'collision_energy' => undef, + 'collision_gas' => undef, + 'desolvation_gas_flow' => undef, + 'desolvation_temperature' => undef, + 'ionization_energy' => undef, + 'laser' => undef, + 'matrix' => undef, + 'mass_accuracy' => undef, + 'reagent_gas' => undef, + 'scanning' => undef + ) ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/AC\$MASS_SPECTROMETRY: ION_MODE:(.*)/) { $features{'ion_mode'} = $1 ; $control++; } # mandatory + elsif ($field =~/AC\$MASS_SPECTROMETRY: MS_TYPE:(.*)/) { $features{'ms_type'} = $1 ; $control++; } # mandatory + elsif ($field =~/AC\$MASS_SPECTROMETRY: COLLISION_ENERGY(.*)/) { $features{'collision_energy'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: COLLISION_GAS(.*)/) { $features{'collision_gas'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: DESOLVATION_GAS_FLOW(.*)/) { $features{'desolvation_gas_flow'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: DESOLVATION_TEMPERATURE(.*)/) { $features{'desolvation_temperature'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: IONIZATION_ENERGY(.*)/) { $features{'ionization_energy'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: LASER(.*)/) { $features{'laser'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: MATRIX(.*)/) { $features{'matrix'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: MASS_ACCURACY(.*)/) { $features{'mass_accuracy'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: REAGENT_GAS(.*)/) { $features{'reagent_gas'} = $1 ; $control++; } # optionnal + elsif ($field =~/AC\$MASS_SPECTROMETRY: SCANNING(.*)/) { $features{'scanning'} = $1 ; $control++; } # optionnal + else { next ; } + } + close(MS) ; + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + ## vide l'object si undef + if ($control == 0) { %features = () ; } + return(\%features) ; +} +## END of SUB + +=head2 METHOD get_solvents_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_solvents_data( $ms_file ) ; + +=cut +## START of SUB +sub get_solvents_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + my @features = () ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/AC\$CHROMATOGRAPHY: SOLVENT(.*)/) { push(@features, 'Solvent '.$1 ) ; } + else { next ; } + } + close(MS) ; + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + return(\@features) ; +} +## END of SUB + +=head2 METHOD get_sample_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_sample_data( $ms_file ) ; + +=cut +## START of SUB +sub get_sample_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + my $control = 0; + my %features = ( + 'sample_type' => undef, + ) ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/SP\$SAMPLE(.*)/) { $features{'sample_type'} = $1 ; $control++ ; } + else { next ; } + } + close(MS) ; + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + if ($control == 0) { %features = () ; } + return(\%features) ; +} +## END of SUB + +=head2 METHOD get_chromato_methods_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_chromato_methods_data( $ms_file ) ; + +=cut +## START of SUB +sub get_chromato_methods_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + my $control = 0 ; + my %features = ( + 'capillary_voltage' => undef, + 'column_name' => undef, + 'column_temperature' => undef, + 'flow_gradient' => undef, + 'flow_rate' => undef, + 'retention_time' => undef, + ) ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/AC\$CHROMATOGRAPHY: CAPILLARY_VOLTAGE (.*)/) { $features{'capillary_voltage'} = $1 ; $control++ ; } + elsif ($field =~/AC\$CHROMATOGRAPHY: COLUMN_NAME (.*)/) { $features{'column_name'} = $1 ; $control++ ; } + elsif ($field =~/AC\$CHROMATOGRAPHY: COLUMN_TEMPERATURE (.*)/) { $features{'column_temperature'} = $1 ; $control++ ; } + elsif ($field =~/AC\$CHROMATOGRAPHY: FLOW_GRADIENT (.*)/) { $features{'flow_gradient'} = $1 ; $control++ ; } + elsif ($field =~/AC\$CHROMATOGRAPHY: FLOW_RATE (.*)/) { $features{'flow_rate'} = $1 ; $control++ ; } + elsif ($field =~/AC\$CHROMATOGRAPHY: RETENTION_TIME (.*)/) { $features{'retention_time'} = $1 ; $control++ ; } + else { next ; } + } + close(MS) ; + # for db field + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + if ($control == 0) { %features = () ; } + return(\%features) ; +} +## END of SUB + +=head2 METHOD get_analytical_conditions_data + + ## Description : permet de recuperer tous les champs d'un object massbank .. for massbank version < 2.0 + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_analytical_conditions_data( $ms_file ) ; + +=cut +## START of SUB +sub get_analytical_conditions_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + my $control_ms = 0 ; + my %features_ms = ( + 'ion_mode' => undef, + 'ms_type' => undef, + 'collision_energy' => undef, + 'collision_gas' => undef, + 'desolvation_gas_flow' => undef, + 'desolvation_temperature' => undef, + 'ionization_energy' => undef, + 'laser' => undef, + 'matrix' => undef, + 'mass_accuracy' => undef, + 'reagent_gas' => undef, + 'scanning' => undef + ) ; + my $control_chrom = 0 ; + my %features_chrom = ( + 'capillary_voltage' => undef, + 'column_name' => undef, + 'column_temperature' => undef, + 'flow_gradient' => undef, + 'flow_rate' => undef, + 'retention_time' => undef + ) ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + ## new = chromato_method + if ($field =~/AC\$ANALYTICAL_CONDITION: CAPILLARY_VOLTAGE (.*)/) { $features_chrom{'capillary_voltage'} = $1 ; $control_chrom++ ; } + elsif ($field =~/AC\$ANALYTICAL_CONDITION: COLUMN_NAME (.*)/) { $features_chrom{'column_name'} = $1 ; $control_chrom++ ; } + elsif ($field =~/AC\$ANALYTICAL_CONDITION: COLUMN_TEMPERATURE( .*)/) { $features_chrom{'column_temperature'} = $1 ; $control_chrom++ ; } + elsif ($field =~/AC\$ANALYTICAL_CONDITION: FLOW_GRADIENT (.*)/) { $features_chrom{'flow_gradient'} = $1 ; $control_chrom++ ; } + elsif ($field =~/AC\$ANALYTICAL_CONDITION: FLOW_RATE (.*)/) { $features_chrom{'flow_rate'} = $1 ; $control_chrom++ ; } + elsif ($field =~/AC\$ANALYTICAL_CONDITION: RETENTION_TIME (.*)/) { $features_chrom{'retention_time'} = $1 ; $control_chrom++ ; } + ## new = ms_method + elsif ($field =~/AC\$ANALYTICAL_CONDITION: ION_MODE (.*)/) { $features_ms{'ion_mode'} = $1 ; $control_ms++ ; } # mandatory + elsif ($field =~/AC\$ANALYTICAL_CONDITION: MS_TYPE (.*)/) { $features_ms{'ms_type'} = $1 ; $control_ms++ ; } # mandatory + elsif ($field =~/AC\$ANALYTICAL_CONDITION: COLLISION_ENERGY (.*)/) { $features_ms{'collision_energy'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: COLLISION_GAS (.*)/) { $features_ms{'collision_gas'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: DESOLVATION_GAS_FLOW (.*)/) { $features_ms{'desolvation_gas_flow'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: DESOLVATION_TEMPERATURE (.*)/) { $features_ms{'desolvation_temperature'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: IONIZATION_ENERGY (.*)/) { $features_ms{'ionization_energy'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: LASER (.*)/) { $features_ms{'laser'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: MATRIX (.*)/) { $features_ms{'matrix'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: MASS_ACCURACY (.*)/) { $features_ms{'mass_accuracy'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: REAGENT_GAS (.*)/) { $features_ms{'reagent_gas'} = $1 ; $control_ms++ ; } # optionnal + elsif ($field =~/AC\$ANALYTICAL_CONDITION: SCANNING (.*)/) { $features_ms{'scanning'} = $1 ; $control_ms++ ; } # optionnal + else { next ; } + } + close(MS) ; + # for db field + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + if ($control_ms == 0) { %features_ms = () ; } + if ($control_chrom == 0) { %features_chrom = () ; } + return(\%features_chrom, \%features_ms) ; +} +## END of SUB + +=head2 METHOD get_spectrums_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_spectrums_data( $ms_file ) ; + +=cut +## START of SUB +sub get_spectrums_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + my $control = 0 ; + my %features = ( + 'ion_type' => undef, + 'precursor_mz' => undef, + 'precursor_type' => undef, + 'num_peaks' => undef, + ) ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/MS\$FOCUSED_ION: ION_TYPE(.*)/) { $features{'ion_type'} = $1 ; $control++ ; } + elsif ($field =~/MS\$FOCUSED_ION: PRECURSOR_M\/Z(.*)/) { $features{'precursor_mz'} = $1 ; $control++ ; } + elsif ($field =~/MS\$FOCUSED_ION: PRECURSOR_TYPE(.*)/) { $features{'precursor_type'} = $1 ; $control++ ; } + elsif ($field =~/PK\$NUM_PEAK: (.*)/) { $features{'num_peaks'} = $1 ; $control++ ; } + else { next ; } + } + close(MS) ; + # for db field + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + if ($control == 0) { %features = () ; } + return(\%features) ; +} +## END of SUB + +=head2 METHOD get_peaks_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_peaks_data( $ms_file ) ; + +=cut +## START of SUB +sub get_peaks_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + my @features = () ; + my $peaks = 0 ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/PK\$PEAK: m\/z int\. rel\.int\./) { $peaks = 1 ; } + elsif ( $peaks == 1 ) { ## detected peak area + if ($field =~/\s+(\d+)\s+(\d+)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => $2, 'relative_intensity' => $3 ) ; + push (@features, \%tmp) ; + } + ## for int = xx.xxx and mz = xxx.xxx + elsif ($field =~/\s+(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => $2, 'relative_intensity' => $3 ) ; + push (@features, \%tmp) ; + } + ## for int = xx and mz = xxx.xxx + elsif ($field =~/\s+(\d+\.\d+)\s+(\d+)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => $2, 'relative_intensity' => $3 ) ; + push (@features, \%tmp) ; + } + ## for int = xxxxx.xxx and mz = xxx + elsif ($field =~/\s+(\d+)\s+(\d+\.\d+)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => $2, 'relative_intensity' => $3 ) ; + push (@features, \%tmp) ; + } + } + else { next ; } + } + close(MS) ; + # for db field + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + return(\@features) ; +} +## END of SUB + +=head2 METHOD getPeaksFromString + + ## Description : permet de recuperer la data peaks d'un record handler massbank + ## Input : $record + ## Output : $features + ## Usage : my ( $features ) = getPeaksFromString( $record ) ; + +=cut +## START of SUB +sub getPeaksFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_ ; + + my @features = () ; + my $peaks = 0 ; + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/PK\$PEAK: m\/z int\. rel\.int\./) { $peaks = 1 ; } + elsif ( $peaks == 1 ) { ## detected peak area + if ($field =~/\s+(\d+)\s+(\d+)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => $2, 'relative_intensity' => $3 ) ; + push (@features, \%tmp) ; + } + ## for int = xx.xxx and mz = xxx.xxx + elsif ($field =~/\s+(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => $2, 'relative_intensity' => $3 ) ; + push (@features, \%tmp) ; + } + ## for int = xx and mz = xxx.xxx + elsif ($field =~/\s+(\d+\.\d+)\s+(\d+)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => $2, 'relative_intensity' => $3 ) ; + push (@features, \%tmp) ; + } + ## for int = xxxxx.xxx and mz = xxx + elsif ($field =~/\s+(\d+)\s+(\d+\.\d+)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => $2, 'relative_intensity' => $3 ) ; + push (@features, \%tmp) ; + } + ## for int = x.xxxex and m/z = xxx.xxx (int with exposant) + elsif ($field =~/\s+(\d+\.\d+)\s+(\d+\.\d+)e(\d)\s+(\d+)/) { + my %tmp = ( 'mz' => $1, 'intensity' => ($2*(10*$3)), 'relative_intensity' => $4 ) ; + push (@features, \%tmp) ; + } + } + else { next ; } + } + # for db field + } + else { + croak "Can't work with a undef / none existing massbank handler\n" ; + } + return(\@features) ; +} +## END of SUB + +=head2 METHOD getIdFromString + + ## Description : get the accesion id of massbank record + ## Input : $record + ## Output : $id + ## Usage : my ( $id ) = getIdFromString ( $record ) ; + +=cut +## START of SUB +sub getIdFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_; + my ( $id ) = ( undef ) ; + + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/ACCESSION:\s+(.+)/) { + $id = $1; + } + } + # for db field + } + else { + croak "Can't work with a undef / none existing massbank handler\n" ; + } + + return ($id) ; +} +### END of SUB + + + +=head2 METHOD getInstrumentTypeFromString + + ## Description : get the instrument type of massbank record + ## Input : $record + ## Output : $instrumentType + ## Usage : my ( $instrumentType ) = getInstrumentTypeFromString ( $record ) ; + +=cut +## START of SUB +sub getInstrumentTypeFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_; + my ( $instrumentType ) = ( undef ) ; + + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/INSTRUMENT_TYPE:\s+(.+)/) { + $instrumentType = $1; + } + } + # for db field + } + else { + croak "Can't work with a undef / none existing massbank handler\n" ; + } + + return ($instrumentType) ; +} +### END of SUB + +=head2 METHOD getFormulaFromString + + ## Description : get the elementar formula of massbank record + ## Input : $record + ## Output : $formula + ## Usage : my ( $formula ) = getFormulaFromString ( $record ) ; + +=cut +## START of SUB +sub getFormulaFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_; + my ( $formula ) = ( undef ) ; + + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/CH\$FORMULA:\s+(.+)/) { + $formula = $1; + } + } + # for db field + } + else { + croak "Can't work with a undef / none existing massbank handler\n" ; + } + + return ($formula) ; +} +### END of SUB + +=head2 METHOD getInchiFromString + + ## Description : get the IUPAC InCHi of massbank record + ## Input : $record + ## Output : $inchi + ## Usage : my ( $inchi ) = getInchiFromString ( $record ) ; + +=cut +## START of SUB +sub getInchiFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_; + my ( $inchi ) = ( undef ) ; + + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/CH\$IUPAC:\s+(.+)/) { + $inchi = $1; + } + } + # for db field + } + else { + croak "Can't work with a undef / none existing massbank handler\n" ; + } + + return ($inchi) ; +} +### END of SUB + +=head2 METHOD getExactMzFromString + + ## Description : get the exact mass of massbank record + ## Input : $record + ## Output : $exactMass + ## Usage : my ( $exactMass ) = getExactMzFromString ( $record ) ; + +=cut +## START of SUB +sub getExactMzFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_; + my ( $exactMass ) = ( undef ) ; + + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/CH\$EXACT_MASS:\s+(.+)/) { + $exactMass = $1; + } + } + # for db field + } + else { + croak "Can't work with a undef / none existing massbank handler\n" ; + } + + return ($exactMass) ; +} +### END of SUB + + +=head2 METHOD getPrecursorTypeFromString + + ## Description : get the precursor type of massbank record + ## Input : $record + ## Output : $precursorType + ## Usage : my ( $precursorType ) = getPrecursorTypeFromString ( $record ) ; + +=cut +## START of SUB +sub getPrecursorTypeFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_; + my $id = undef ; + my $precursorType = undef ; + my $precursorType_first = undef ; + my $ionType_first = undef ; + my $precursorType_optionnal = undef ; + + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/ACCESSION:\s+(.+)/) { + $id = $1; + } + if ($field =~/RECORD_TITLE:\s+(.+)/) { + my @title = split(/;/, $1) ; + $precursorType_optionnal = $title[-1] ; + $precursorType_optionnal =~ s/\s//g ; + } + if ($field =~/PRECURSOR_TYPE(.+)/) { + $precursorType_first = $1; + last; + } + if ($field =~/ION_TYPE(.+)/) { + $ionType_first = $1; + last; + } + } + # for db field + } + else { + croak "Can't work with a undef / none existing massbank handler\n" ; + } + + ## manage undef precursor/ion type field +# print "ID:$id-//-$precursorType_first-//-$ionType_first-//-$precursorType_optionnal\n" ; + if (defined $precursorType_first) { + $precursorType = $precursorType_first ; + } + elsif ( (!defined $precursorType_first) and (defined $ionType_first) ) { + $precursorType = $ionType_first ; + } + elsif ( (!defined $precursorType_first) and (!defined $ionType_first) and (defined $precursorType_optionnal) ) { + $precursorType = $precursorType_optionnal ; + } + else { + $precursorType = 'NA' ; + } + + return ($precursorType) ; +} +### END of SUB + +=head2 METHOD getMsTypeFromString + + ## Description : get the MS type of massbank record + ## Input : $record + ## Output : $msType + ## Usage : my ( $msType ) = getMsTypeFromString ( $record ) ; + +=cut +## START of SUB +sub getMsTypeFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_; + my ( $msType ) = ( undef ) ; + + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/AC\$MASS_SPECTROMETRY:\s+MS_TYPE\s+(.+)/) { + $msType = $1; + } + } + # for db field + } + else { + croak "Can't work with a undef / none existing massbank handler\n" ; + } + + return ($msType) ; +} +### END of SUB + +=head2 METHOD getChemNamesFromString + + ## Description : get lits of names of a massbank record + ## Input : $record + ## Output : $names + ## Usage : my ( $names ) = getChemNamesFromString( $record ) ; + +=cut +## START of SUB +sub getChemNamesFromString { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_ ; + + my @names = () ; + if ( defined $record ) { + my @tmp = split(/\n/, $record) ; + foreach my $field (@tmp) { + if ($field =~/CH\$NAME: (.*)/) { + push(@names, $1 ) ; } + else { next ; } + } + } + else { + croak "Can't work with a undef / none existing massbank record (string)\n" ; + } + return(\@names) ; +} +## END of SUB + + + + + +=head2 METHOD getMassBankHandler + + ## Description : get a massbank handler from a file + ## Input : $record + ## Output : $massbankHandler + ## Usage : my ( $massbankHandler ) = getMassBankHandler ( $record ) ; + +=cut +## START of SUB +sub getMassBankHandler { + ## Retrieve Values + my $self = shift ; + my ( $record ) = @_; + my ( $massbankHandler ) = ( undef ) ; + + ## TODO... + + return ($massbankHandler) ; +} +### END of SUB + +=head2 METHOD get_annotations_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_annotations_data( $ms_file ) ; + +=cut +## START of SUB +sub get_annotations_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + my @features = () ; + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/PK\$ANNOTATION:(.*)/) { push( @features, $1) ; } + else { next ; } + } + close(MS) ; + # for db field + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + return(\@features) ; +} +## END of SUB + +=head2 METHOD get_links_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_annotations_data( $ms_file ) ; + +=cut +## START of SUB +sub get_links_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + my %features = () ; + my $control = 0 ; + + my ( @CAS, @KEGG, @PUBCHEM ) = ((), (), ()) ; + + if ( ( defined $ms_file ) and ( -e $ms_file )) { + open(MS, "<$ms_file") or die "Cant' read the file $ms_file\n" ; + while ( my $field = ){ + chomp $field ; + if ($field =~/CH\$LINK: CAS (.*)/) { push (@CAS, $1) ; $control++; } + elsif ($field =~/CH\$LINK: KEGG (.*)/) { push (@KEGG, $1) ; $control++; } + elsif ($field =~/CH\$LINK: PUBCHEM CID (.*)/) { push (@PUBCHEM, $1) ; $control++; } + ## others !!? + + else { next ; } + } + close(MS) ; + # for db field + } + else { + croak "Can't work with a undef / none existing massbank file\n" ; + } + + $features{'CAS'} = \@CAS ; + $features{'KEGG'} = \@KEGG ; + $features{'PUBCHEM'} = \@PUBCHEM ; + + return(\%features) ; +} +## END of SUB + +=head2 METHOD get_ms_record_links_data + + ## Description : permet de recuperer tous les champs d'un object massbank + ## Input : $ms_file + ## Output : $features + ## Usage : my ( $features ) = get_ms_record_links_data( $ms_file ) ; + +=cut +## START of SUB +sub get_ms_record_links_data { + ## Retrieve Values + my $self = shift ; + my ( $ms_file ) = @_ ; + + ## Internal reference for MASSBANK and RESPECT + + 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' ) ; + my @respect_id = ( 'PS', 'PT', 'PM' ) ; + + my $dabase_used = undef ; + my %db = ( 'accession' => undef, 'name' => undef ) ; + my $control = 0 ; + + if ( $ms_file ) { + my $filename = basename("$ms_file", ".txt"); + + if ( $filename =~ /(\w+)$/ ) { # keep only record id (0001-PS0002 => PS0002 or BJ0045 => BJ0045) + $db{'accession'} = $1 ; + $control++ ; + if ( ( defined $db{'accession'} ) and ( $db{'accession'} =~ /(\D+)(\d+)/) ) { + my ($key, $eval) = ($1, 0) ; + foreach (@respect_id) { if ($_ eq $key) { $db{'name'} = 'RESPECT' ; $eval = 1 ; last ; } } + foreach (@massbank_id) { if ($_ eq $key) { $db{'name'} = 'MASSBANK' ; $eval = 1 ; last ; } } + if ( $eval == 0 ){ carp "The following key ($key) for $db{'accession'} has an unknown reference (not a Massbank or ReSpect source)\n" ; } + } + } + } + if ($control == 0) { %db = () ; } + return(\%db) ; +} +## END of SUB + + +1 ; + + +__END__ + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc parser::chem::massbank.pm + +=head1 Exports + +=over 4 + +=item :ALL is ... + +=back + +=head1 AUTHOR + +Franck Giacomoni Efranck.giacomoni@clermont.inra.frE + +=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 : 25 / 06 / 2013 + +version 2 : ?? + +=cut \ No newline at end of file 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 Efranck.giacomoni@clermont.inra.frE + +=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 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 @@ -0,0 +1,300 @@ +package lib::writter ; + +use strict; +use warnings ; +use Exporter ; +use Carp ; + +use Data::Dumper ; +use JSON ; +use HTML::Template ; + +use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); + +our $VERSION = "1.0"; +our @ISA = qw(Exporter); +our @EXPORT = qw( write_csv_skel write_xls_skel write_json_skel write_html_skel ); +our %EXPORT_TAGS = ( ALL => [qw( write_csv_skel write_xls_skel write_json_skel write_html_skel )] ); + +=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 write_csv_skel + + ## Description : prepare and write csv output file + ## Input : $csv_file, $rows + ## Output : $csv_file + ## Usage : my ( $csv_file ) = write_csv_skel( $csv_file, $rows ) ; + +=cut +## START of SUB +sub write_csv_skel { + ## Retrieve Values + my $self = shift ; + my ( $csv_file, $rows ) = @_ ; + + my $ocsv = lib::csv::new( {is_binary => 1 , quote_binary => 0, quote_char => undef }) ; + my $csv = $ocsv->get_csv_object("\t") ; + $ocsv->write_csv_from_arrays($csv, $$csv_file, $rows) ; + + return($csv_file) ; +} +## END of SUB + +=head2 METHOD write_xls_skel + + ## Description : prepare and write xls output file + ## Input : $xls_file, $rows + ## Output : $xls_file + ## Usage : my ( $xls_file ) = write_xls_skel( $xls_file, $rows ) ; + +=cut +## START of SUB +sub write_xls_skel { + ## Retrieve Values + my $self = shift ; + my ( $out_xls, $mzs, $pcs, $pcgroups, $records ) = @_ ; + + my $results = undef ; + my $i = 0 ; + + open(XLS, '>:utf8', "$$out_xls") or die "Cant' create the file $$out_xls\n" ; + print XLS "ID\tPCGROUP\tQuery(Da)\tScore\tMetabolite_name\tCpd_Mw(Da)\tFormula\tAdduct\tMASSBANK_ID\tInstrument\tMS_level\n" ; + + $results = ['ID','PCGROUP','Query(Da)','Score','Metabolite_name','Cpd_Mw(Da)','Formula','Adduct','MASSBANK_ID','Instrument','MS_level'] ; + + foreach my $pc (@{$pcs}) { + + if ($pcgroups->{$pc}) { +# print "------>$pc - $pcgroups->{$pc}{annotation}{num_res}\n" ; + + if ( $pcgroups->{$pc}{'annotation'} ) { + my $result = undef ; + my $well_id = "mz_0".sprintf("%04s", $i+1 ) ; + + if ($pcgroups->{$pc}{'annotation'}{'num_res'} > 0) { + + my @entries = @{$pcgroups->{$pc}{'annotation'}{'res'} } ; + my $status = undef ; + foreach my $entry (@entries) { + my $match = undef ; + ## manage if the queried mz is really in the mzs spectrum list... + + if ( $pcgroups->{$pc}{'enrich_annotation'}{$mzs->[$i]} ) { + + my @matching_ids = @{$pcgroups->{$pc}{'enrich_annotation'}{$mzs->[$i]}} ; + + ## + if ( scalar @matching_ids == 0 ) { + $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" ; + print XLS "$well_id\t$pc\t$mzs->[$i]\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n" ; + last ; + } + else { + # search the massbank matched id + foreach (@matching_ids) { + if ($_ eq $entry->{'id'} ) { + $match = 'TRUE' ; + last ; + } + } + + if ( ( defined $match ) and ($match eq 'TRUE') ) { + ## sort by ['ID','PCGROUP','Query(Da)','Score','Metabolite_name','Cpd_Mw(Da)','Formula','Adduct','MASSBANK_ID','Instrument','MS_level'] + + ## print mz_id + if ($mzs->[$i]) { print XLS "$well_id\t" ; $result .= $well_id."\t" ; } + else { print XLS "NA\t" ; } + ## print submitted pcgroup + if ($pc ) { print XLS "$pc\t" ; $result .= $pc."\t" ; } ## pb de clean de la derniere ligne !!!!!! + else { print XLS "NA\t" ; } + ## print Query(Da) + if ($mzs->[$i]) { print XLS "$mzs->[$i]\t" ; $result .= $mzs->[$i]."\t" ; } + else { print XLS "NA\t" ; } + + ## print Score + if ($entry->{'score'}) { print XLS "$entry->{'score'}\t" ; $result .= $entry->{'score'}."\t" ; } + else { print XLS "NA\n" ; } + ## print Met_name + if ($entry->{'id'}) { print XLS "$records->{$entry->{'id'}}{names}[0]\t" ; $result .= $records->{$entry->{'id'}}{names}[0]."\t" ; } + else { print XLS "NA\t" ; } + ## print Cpd_mw + if ($entry->{'exactMass'}) { print XLS "$entry->{'exactMass'}\t" ; $result .= $entry->{'exactMass'}."\t" ; } + else { print XLS "NA\t" ; } + ## print Formula + if ($entry->{'formula'}) { print XLS "$entry->{'formula'}\t" ; $result .= $entry->{'formula'}."\t" ; } + else { print XLS "NA\t" ; } + ## print Adduct (precursor type) + if ($entry->{'id'}) { print XLS "$records->{$entry->{'id'}}{precursor_type}\t" ; $result .= $records->{$entry->{'id'}}{precursor_type}."\t" ; } + else { print XLS "NA\t" ; } + ## print Massbank ID + if ($entry->{'id'}) { print XLS "$entry->{'id'}\t" ; $result .= $entry->{'id'}."\t" ; } + else { print XLS "NA\t" ; } + ## print Instrument + if ($entry->{'id'}) { print XLS "$records->{$entry->{'id'}}{instrument_type}\t" ; $result .= $records->{$entry->{'id'}}{instrument_type}."\t" ; } + else { print XLS "NA\t" ; } + ## print MS_Level + if ($entry->{'id'}) { print XLS "$records->{$entry->{'id'}}{ms_type}\n" ; $result .= $records->{$entry->{'id'}}{ms_type}."\n" ; } + else { print XLS "NA\n" ; } + + } + ## else match is not TRUE + else { + next ; + } + } + } + } ## End foreach entries + } + else { + $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" ; + print XLS "$well_id\t$pc\t$mzs->[$i]\t0\tNA\tNA\tNA\tNA\tNA\tNA\tNA\n" ; + } + } + else{ + warn "Not possible to get number of found ids on MassBank\n" ; + } + } + else { + croak "No such pc group exists in your pcgroups object - No xls written\n" ; + } + $i++ ; + + } ## End foreach pcs + + close(XLS) ; + return($results) ; +} +## END of SUB + +=head2 METHOD write_json_skel + + ## Description : prepare and write json output file + ## Input : $json_file, $scalar + ## Output : $json_file + ## Usage : my ( $json_file ) = write_json_skel( $csv_file, $scalar ) ; + +=cut +## START of SUB +sub write_json_skel { + ## Retrieve Values + my $self = shift ; + my ( $json_file, $scalar ) = @_ ; + + my $utf8_encoded_json_text = encode_json $scalar ; + open(JSON, '>:utf8', "$$json_file") or die "Cant' create the file $$json_file\n" ; + print JSON $utf8_encoded_json_text ; + close(JSON) ; + + return($json_file) ; +} +## END of SUB + +=head2 METHOD write_html_skel + + ## Description : prepare and write the html output file + ## Input : $html_file_name, $html_object, $html_template + ## Output : $html_file_name + ## Usage : my ( $html_file_name ) = write_html_skel( $html_file_name, $html_object ) ; + +=cut +## START of SUB +sub write_html_skel { + ## Retrieve Values + my $self = shift ; + my ( $html_file_name, $html_object, $pages , $search_condition, $html_template, $js_path, $css_path ) = @_ ; + + my $html_file = $$html_file_name ; + + if ( defined $html_file ) { + open ( HTML, ">$html_file" ) or die "Can't create the output file $html_file " ; + + if (-e $html_template) { + my $ohtml = HTML::Template->new(filename => $html_template); + $ohtml->param( JS_GALAXY_PATH => $js_path, CSS_GALAXY_PATH => $css_path ) ; + $ohtml->param( CONDITIONS => $search_condition ) ; + $ohtml->param( PAGES_NB => $pages ) ; + $ohtml->param( PAGES => $html_object ) ; + print HTML $ohtml->output ; + } + else { + croak "Can't fill any html output : No template available ($html_template)\n" ; + } + + close (HTML) ; + } + else { + croak "No output file name available to write HTML file\n" ; + } + return(\$html_file) ; +} +## END of SUB + +1 ; + + +__END__ + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc writter.pm + +=head1 Exports + +=over 4 + +=item :ALL is ... + +=back + +=head1 AUTHOR + +Franck Giacomoni Efranck.giacomoni@clermont.inra.frE + +=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 : 14 / 08 / 2015 + +version 2 : ?? + +=cut \ No newline at end of file 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 @@ -0,0 +1,1 @@ +Galaxy MassBank (by spectra) queries - All results
Results of MASSBANK queries -

ID from inputPCGroupMass (m/z)Metabolite nameCompound IDFormulaCompound MW (Da)MS typeion/prec. typeInstr. typeScoreInChI Identifier

Copyright © INRA, N Paulhe, F Giacomoni 2014

\ No newline at end of file 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 @@ -0,0 +1,423 @@ +#!perl + +## script : XXX.pl + +## Notes : +# -> manage score sorting : Cleaned_pcGroups done but not in outputs ! + +#============================================================================= +# Included modules and versions +#============================================================================= +## Perl modules +use strict ; +use warnings ; +use Carp qw (cluck croak carp) ; + +use threads; +use threads::shared; +use Thread::Queue; + +use Data::Dumper ; +use Getopt::Long ; +use POSIX ; +use FindBin ; ## Allows you to locate the directory of original perl script + +## Specific Perl Modules (PFEM) +use lib $FindBin::Bin ; +my $binPath = $FindBin::Bin ; +use lib::csv qw( :ALL ) ; +use lib::conf qw( :ALL ) ; + +## Dedicate Perl Modules (Home made...) +use lib::massbank_api qw( :ALL ) ; +use lib::threader qw(:ALL) ; +use lib::mapper qw(:ALL) ; +use lib::writter qw(:ALL) ; +use lib::massbank_parser qw(:ALL) ; + + + +## Initialized values +my ($help, $mzs_file, $col_mz, $col_int, $col_pcgroup, $line_header ) = ( undef, undef, undef, undef, undef,undef, undef ) ; +my ($server, $ion_mode, $score_threshold, $instruments, $max, $unit, $tol, $cutoff) = ( undef, undef, undef, undef, undef, undef, undef ) ; +my ($output_json, $output_tabular, $output_xlsx, $output_html ) = ( undef, undef, undef, undef ) ; + +## Local values ONLY FOR TEST : +#my $server = 'JP' ; +#my $threading_threshold = 6 ; + +#============================================================================= +# Manage EXCEPTIONS +#============================================================================= +&GetOptions ( "help|h" => \$help, # HELP + "masses:s" => \$mzs_file, + "col_mz:i" => \$col_mz, + "col_int:i" => \$col_int, ## optionnal + "col_pcgroup:i" => \$col_pcgroup, + "lineheader:i" => \$line_header, + "mode:s" => \$ion_mode, + "score_threshold:f" => \$score_threshold, + "instruments:s" => \$instruments, # advanced -> to transform into string with comma => done ! + "max:i" => \$max, # advanced + "unit:s" => \$unit, # advanced + "tolerance:f" => \$tol, + "cutoff:i" => \$cutoff, # advanced : intensity cutoff + "server:s" => \$server, ## by default JP and # advanced + "output_json:s" => \$output_json, + "output_xlsx:s" => \$output_xlsx, + "output_tabular:s" => \$output_tabular, + "output_html:s" => \$output_html, + ) ; + +## if you put the option -help or -h function help is started +if ( defined($help) ){ &help ; } + +#============================================================================= +# MAIN SCRIPT +#============================================================================= + +## -------------- Conf file ------------------------ : +my ( $CONF ) = ( undef ) ; +foreach my $conf ( <$binPath/*.cfg> ) { + my $oConf = lib::conf::new() ; + $CONF = $oConf->as_conf($conf) ; +} + +## -------------- HTML template file ------------------------ : +foreach my $html_template ( <$binPath/*.tmpl> ) { $CONF->{'HTML_TEMPLATE'} = $html_template ; } + +## Main variables : +my ($pcs, $mzs, $into, $complete_rows, $pcgroups) = (undef, undef, undef, undef, undef) ; + +## manage csv file containing list of masses (every thing is manage in jar) +if ( ( defined $mzs_file ) and ( $mzs_file ne "" ) and ( -e $mzs_file ) ) { + + ## parse csv ids and masses + my $is_header = undef ; + my $ocsv = lib::csv->new() ; + my $csv = $ocsv->get_csv_object( "\t" ) ; + if ( ( defined $line_header ) and ( $line_header > 0 ) ) { $is_header = 'yes' ; } + $pcs = $ocsv->get_value_from_csv_multi_header( $csv, $mzs_file, $col_pcgroup, $is_header, $line_header ) ; ## retrieve pc values on csv + $mzs = $ocsv->get_value_from_csv_multi_header( $csv, $mzs_file, $col_mz, $is_header, $line_header ) ; ## retrieve mz values on csv + $into = $ocsv->get_value_from_csv_multi_header( $csv, $mzs_file, $col_int, $is_header, $line_header ) if ( defined $col_int ); ## retrieve into values on csv // optionnal in input files + $complete_rows = $ocsv->parse_csv_object($csv, \$mzs_file) ; ## parse all csv for output csv build + + ## manage input file with no into colunm / init into with a default value of 10 + if ( !defined $col_int ) { + my $nb_mzs = scalar(@{$mzs}) ; + my @intos = map {10} (0..$nb_mzs-1) ; + my $nb_intos = scalar(@intos) ; + if ($nb_intos == $nb_mzs) { $into = \@intos ; } + else { carp "A difference exists between intensity and mz values\n" } + } + + ## manage instruments string to array_ref + if (defined $instruments ) { + if ($instruments eq '') { ## in xml : can select nothing... + $instruments = ['all'] ; + } + else { + my @instruments = split(/,/, $instruments) ; + $instruments = \@instruments ; + } + } + + + ## Build pcgroups with their features : + my $omap = lib::mapper->new() ; + $pcgroups = $omap->get_pcgroups($pcs, $mzs, $into ) ; + my $pcgroup_list = $omap->get_pcgroup_list($pcs ) ; + +# print Dumper $pcgroups ; + + my $pc_num = 0 ; + $pc_num = scalar(@{$pcgroup_list}) ; + + ## manage a list of query pc_group dependant: + if ($pcgroups) { + ## - - - - - - - - - - - - - - - - - - - - - Multithreadind mode if pcgroups > 6 - - - - - - - - - - - - - - - - + if ($pc_num > $CONF->{'THREADING_THRESHOLD'}) { + print $server."\n" ; + print "\n------ ** ** ** Using multithreading mode ** ** ** --------\n\n" ; + my $time_start = time ; + + our $NBTHREADS = $CONF->{'THREADING_THRESHOLD'} ; + +# use constant THREADS => 6 ; + my $Qworks = Thread::Queue->new(); + my @threads = () ; + my @queries = () ; + my @Qresults = () ; + + foreach my $pc_group_id (keys %{$pcgroups}) { + push (@queries, $pcgroups->{$pc_group_id}) if $pcgroups->{$pc_group_id} ; + } + + for (1..$NBTHREADS) { + my $oworker = lib::threader->new ; + push @threads, threads->create(sub { $oworker->searchSpectrumWorker($Qworks, $server, $ion_mode, $instruments, $max, $unit, $tol, $cutoff) ; } ) ; + } + + $Qworks->enqueue(@queries); + $Qworks->enqueue(undef) for 1..$NBTHREADS; + push @Qresults, $_->join foreach @threads; + + + my $time_end = time ; + my $seconds = $time_end-$time_start ; + print "\n------ Time used in multithreading mode : $seconds seconds --------\n\n" ; + +# print Dumper @Qresults ; + + ## controle number of returned queries : + my $massbank_results_num = 0 ; + $massbank_results_num = scalar @Qresults ; + + if ( $massbank_results_num == $pc_num ) { + ## Map @Qresults with annotation hash : pcgroup_id in @Qresults (pcgroup2) // id in $pcgroups (pcgroup2) + foreach my $result (@Qresults) { + ## manage annotation part + if ($result->{'pcgroup_id'}) { + if ($pcgroups->{$result->{'pcgroup_id'}}) { + $pcgroups->{$result->{'pcgroup_id'}}{'annotation'} = $result ; + } + else { carp "Carefull : no mapping possible between massbank results and initial pcgroups data\n";} + } + else { carp "Carefull : no pcgroup id defined in massbank results\n"; } + + ## manage massbank_ids part + if ($result->{'res'}) { + my @tmp_res = map {$_->{'id'}} @{$result->{'res'}} ; + $pcgroups->{$result->{'pcgroup_id'}}{'massbank_ids'} = \@tmp_res ; + } + } + } + else { + croak "[ERROR] : problem between massbank results number and pcgroups number\n"; + } + } + ## - - - - - - - - - - - - - - - - - - - - - mono thread mode if pcgroups <= 6 - - - - - - - - - - - - - - - - + else { + ## connexion +# print $server."\n" ; + my $omassbank = lib::massbank_api->new() ; + my $soap = $omassbank->selectMassBank($server) ; + print "\n------ ** ** ** Using batch mode ** ** ** --------\n\n" ; + my $time_start = time ; + foreach my $pcgroup (keys %{$pcgroups}) { + ## searchSpectrum via SOAP + print "Annot pcgroup n-$pcgroup\n" ; + my $oquery = lib::massbank_api->new() ; + my ($results, $num) = $oquery->searchSpectrum($soap, $pcgroups->{$pcgroup}{'id'}, $pcgroups->{$pcgroup}{'mzmed'}, $pcgroups->{$pcgroup}{'into'}, $ion_mode, $instruments, $max, $unit, $tol, $cutoff) ; + $pcgroups->{$pcgroup}{'annotation'} = $results ; + # print Dumper $results ; + } + my $time_end = time ; + my $seconds = $time_end-$time_start ; + print "\n------ Time used in foreach mode: $seconds seconds --------\n\n" ; + } + } + else { + croak "The pcgroup object is not defined\n" ; + } +# print "Init pcGroups results are\n" ; +# print Dumper $pcgroups ; + +} ## End of elsif "defined $mzs_file" +else { + warn "[WARN] Can't use Massbank WS service without an existing input tabular file\n" ; + &help ; +} + +## Clean zone - use threshold on massbank entry returned score +my $omap = lib::mapper->new() ; +my $cleaned_pcgroups = $omap->filter_pcgroup_res($pcgroups, $score_threshold) ; + +#print "Cleaned_pcGroups are\n" ; +#print Dumper $cleaned_pcgroups ; + +## add min/max value of each mzmed in the pc_group +my $pcgroups_with_intervales = $omap->add_min_max_for_pcgroup_res($cleaned_pcgroups, $tol ) ; + +#print "pcGroups_with_intervales are\n" ; +#print Dumper $pcgroups_with_intervales ; + + +## search in the local indexed db - - - TODO - - - + +## OR search new ones + +## get all unique Massbank Ids found +my $oids = lib::mapper->new() ; +my $all_massbank_ids = $omap->compute_ids_from_pcgroups_res($cleaned_pcgroups) ; + +## get entries on the MassBank server by ID by pieces of 10 +my $omapper = lib::mapper->new() ; +my $recordList = $omapper->get_massbank_records_by_chunk ($server, $all_massbank_ids, 10) ; +#print "\n\nRecords are\n" ; +#print Dumper $recordList ; +#print Dumper $all_massbank_ids ; + +## foreach record - get id and peaks - create a object +my %records = (); +foreach (@$recordList) { + ## parse record handles + my $parser = lib::massbank_parser->new() ; + my $id = $parser->getIdFromString($_) ; + $records{$id}{'peaks'} = $parser->getPeaksFromString($_) ; + $records{$id}{'names'} = $parser->getChemNamesFromString($_) ; + $records{$id}{'instrument_type'} = $parser->getInstrumentTypeFromString($_) ; + $records{$id}{'precursor_type'} = $parser->getPrecursorTypeFromString($_) ; + $records{$id}{'ms_type'} = $parser->getMsTypeFromString($_) ; + $records{$id}{'formula'} = $parser->getFormulaFromString($_) ; + $records{$id}{'exact_mz'} = $parser->getExactMzFromString($_) ; + $records{$id}{'inchi'} = $parser->getInchiFromString($_) ; +} +#print Dumper %records ; + +## Map pc_groups and records +my $well_annoted_pcGroups = $omapper->mapGroupsWithRecords($pcgroups_with_intervales, \%records) ; + +#print Dumper $well_annoted_pcGroups ; + +## Output writting : +my ( $massbank_matrix ) = ( undef ) ; + +## XLS OUTPUT -- new format +if ( (defined $output_xlsx) and (defined $well_annoted_pcGroups) and (defined $mzs) and (defined $pcs) ) { + my $owritter = lib::writter->new() ; + $owritter->write_xls_skel(\$output_xlsx, $mzs, $pcs, $well_annoted_pcGroups, \%records) ; +} + +## CSV OUTPUT +if ( (defined $output_tabular) and (defined $well_annoted_pcGroups) and (defined $pcs) and (defined $mzs) ) { + my $omapper = lib::mapper->new() ; + if ( ( defined $line_header ) and ( $line_header == 1 ) ) { $massbank_matrix = $omapper->set_massbank_matrix_object('massbank', $pcs, $mzs, $well_annoted_pcGroups, \%records ) ; } + elsif ( ( defined $line_header ) and ( $line_header == 0 ) ) { $massbank_matrix = $omapper->set_massbank_matrix_object(undef, $pcs, $mzs, $well_annoted_pcGroups, \%records ) ; } + + $massbank_matrix = $omapper->add_massbank_matrix_to_input_matrix($complete_rows, $massbank_matrix) ; + my $owritter = lib::writter->new() ; + $owritter->write_csv_skel(\$output_tabular, $massbank_matrix) ; +} + +my $json_scalar = undef ; +## JSON OUTPUT +if ( (defined $output_json) and (defined $well_annoted_pcGroups) and (defined $mzs) and (defined $pcs) ) { + my $omapper = lib::mapper->new() ; + $json_scalar = $omapper->map_pc_to_generic_json($pcs, $well_annoted_pcGroups, \%records) ; + my $owritter = lib::writter->new() ; + $owritter->write_json_skel(\$output_json, $json_scalar) ; +} + +## HTML OUTPUT -- TODO +if ( (defined $output_html) and (defined $json_scalar) ) { + +# print Dumper $json_scalar ; + + ## Uses N mz and theirs entries per page (see config file). + # how many pages you need with your input mz list? + my $nb_pages_for_html_out = ceil( scalar(@{$mzs} ) / $CONF->{HTML_ENTRIES_PER_PAGE} ) ; + + ## Search condition: + my $search_condition = "Search params : Molecular specie = $ion_mode / delta ($unit) = $tol / Score threshold = $score_threshold and max hit = $max per pcgroup" ; + + my $oHtml = lib::mapper->new() ; + my ($tbody_object) = $oHtml->set_html_tbody_object( $nb_pages_for_html_out, $CONF->{HTML_ENTRIES_PER_PAGE} ) ; + ($tbody_object) = $oHtml->add_mz_to_tbody_object($tbody_object, $CONF->{HTML_ENTRIES_PER_PAGE}, $mzs, $json_scalar) ; + ($tbody_object) = $oHtml->add_entries_to_tbody_object($tbody_object, $CONF->{HTML_ENTRIES_PER_PAGE}, $mzs, $json_scalar) ; + + my $oWritter = lib::writter->new() ; + $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'}) ; +} +else { + warn "[WARN] The html output file or the json iss not defined\n" ; +} + + + + + + + +#==================================================================================== +# Help subroutine called with -h option +# number of arguments : 0 +# Argument(s) : +# Return : 1 +#==================================================================================== +sub help { + print STDERR " +massbank_ws_searchspectrum.pl + +# massbank_ws_searchspectrum.pl is a script to use SOAP massbank webservice and send specific queries about spectra searches. +# Input : a list of mzs, intensities, pcgroup. +# Author : Franck Giacomoni +# Email : franck.giacomoni\@clermont.inra.fr +# Version : 1.0 +# Created : 20/01/2017 +USAGE : + massbank_ws_searchspectrum.pl -help OR + + massbank_ws_searchspectrum.pl + -masses [name of input file] -col_id -col_mz -col_int -col_pcgroup -lineheader + -mode [ion mode : Positive, Negative or Both ] + -score_threshold [Ignore Massbank results with a score lower than the defined threshold] + -instruments [array of string: all or values obtained by getInstrumentTypes method] + -max [0 is all results or int] + -unit [unit or ppm] + -tolerance [Tolerance of values of m/z of peaks: 0.3 unit or 50 ppm] + -cutoff [Ignore peaks whose intensity is not larger than the value of cutoff. Default: 50)] + -server [name of the massbank server : EU or JP only] + -output_json [ouput file for JSON] + -output_xls [ouput file for XLS] + -output_tabular [ouput file for TABULAR] + + "; + exit(1); +} + +## END of script - F Giacomoni + +__END__ + +=head1 NAME + + XXX.pl -- script for + +=head1 USAGE + + XXX.pl -precursors -arg1 [-arg2] + or XXX.pl -help + +=head1 SYNOPSIS + +This script manage ... + +=head1 DESCRIPTION + +This main program is a ... + +=over 4 + +=item B + +=item B + +=back + +=head1 AUTHOR + +Franck Giacomoni Efranck.giacomoni@clermont.inra.frE +Yann Guitton + +=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 : 05 / 01 / 2016 + +version 2 : ?? + +=cut \ No newline at end of file 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 @@ -0,0 +1,268 @@ + + + : Search by pseudo-spectra on a High Quality Mass Spectral Database. + + + perl-soap-lite + perl-lwp-simple + perl-libwww-perl + perl-html-template + perl-uri + perl-text-csv + perl-json + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.1002/jms.1777 + + 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 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 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 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 @@ -0,0 +1,1178 @@ +#! perl +use diagnostics; +use warnings; +no warnings qw/void/; +use strict; +no strict "refs" ; +use Test::More qw( no_plan ); +#use Test::More tests => 8 ; ## with MAPPER SEQUENCE +use FindBin ; +use Carp ; + +## Specific Modules +use lib $FindBin::Bin ; +my $binPath = $FindBin::Bin ; +use lib::massbank_api_Test qw( :ALL ) ; +use lib::massbank_mapper_Test qw( :ALL ) ; +use lib::massbank_main_Test qw( :ALL ) ; + + +## To launch the right sequence : MAIN, API, MAPPER, THREADER, COMPUTE... +my $sequence = 'COMPUTE' ; +my $current_test = 1 ; +my $server = 'EU' ; + + +if ($sequence eq "COMPUTE") { + print "\n\t\t\t\t * * * * * * \n" ; + print "\t * * * - - - Test MassBank Main script - - - * * * \n\n" ; + sleep 1 ; print "\n** Test $current_test min_from_double_with_delta with doubles **\n" ; $current_test++ ; + is_deeply( min_from_double_with_deltaTest ( + 303.0485467, 'Da', 0.01), + 303.0385467, + 'Method \'min_and_max_from_double_with_delta\' works with a double and return the attended min value'); + + sleep 1 ; print "\n** Test $current_test max_from_double_with_delta with doubles **\n" ; $current_test++ ; + is_deeply( max_from_double_with_deltaTest ( + 303.0485467, 'Da', 0.01), + 303.0585467001, + 'Method \'max_from_double_with_delta\' works with a double and return the attended max value'); + +} +elsif ($sequence eq "MAIN") { + print "\n\t\t\t\t * * * * * * \n" ; + print "\t * * * - - - Test MassBank Main script - - - * * * \n\n" ; + ## Test NORMAL file => OK + ok( run_main_massbank_pl( + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/pcgrp_annot.tsv', + 1, 14, 7, 1, 0.5, + 'Positive', 'all', 2, 'unit', 0.3, 5, 'EU', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out1.json', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out1.csv', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out1.xls'), + 'Main script massbank_ws_searchspectrum.pl with is running and manage normal data (mz, ) ' ); + + ## Test BUG file wih relative intensities => OK + ok( run_main_massbank_pl( + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/261-pcgroups-mz-relative_int.tsv', + '2', '1', '3', '1', 0.5, + 'Positive', 'all', 2, 'unit', 0.3, 5, 'JP', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out2.json', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out2.csv', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out2.xls'), + 'Main script massbank_ws_searchspectrum.pl with is running and manage real file (mz, relative int, ...)' ); + + ## Test BUG file wih real intensities (>10000) => OK + ok( run_main_massbank_pl( + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/2214-mz-int-pcgroups.tsv', + '1', '3', '2', '1', 0.5, + 'Positive', 'all', 2, 'unit', 0.3, 5, 'JP', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out3.json', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out3.csv', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out3.xls'), + 'Main script massbank_ws_searchspectrum.pl with is running and manage real file (mz, relative int, ...)' ); + + ## Test BUG file wih relative intensities and ppm / 15 / 5 => OK + ok( run_main_massbank_pl( + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/261-pcgroups-mz-relative_int.tsv', + '2', '1', '3', '1', 0.5, + 'Positive', 'all', 2, 'ppm', 15, 5, 'JP', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out4.json', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out4.csv', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out4.xls'), + 'Main script massbank_ws_searchspectrum.pl with is running and manage real file (mz, relative int, ...)' ); + + ## Test BUG file wih real intensities (>10000) and ppm / 15 / 5 + long file => OK + ok( run_main_massbank_pl( + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/2214-mz-int-pcgroups.tsv', + '1', '3', '2', '1', 0.5, + 'Positive', 'all', 2, 'ppm', 15, 5, 'JP', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out5.json', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out5.csv', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out5.xls'), + 'Main script massbank_ws_searchspectrum.pl with is running and manage real file (mz, int, ...)' ); + + ## Test BUG file wih real intensities (>10000) and ppm / 15 / 5 + long file -> parameters c5b5ac363f7bdb2d => OK + ok( run_main_massbank_pl( + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/2214-mz-int-pcgroups.tsv', + '1', '3', '2', '1', 0.5, + 'Positive', "LC-ESI-IT,LC-ESI-ITFT,LC-ESI-ITTOF,LC-ESI-Q,LC-ESI-QFT,LC-ESI-QIT,LC-ESI-QQ,LC-ESI-QTOF,LC-ESI-TOF", 10, 'ppm', 15, 5, 'JP', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out6.json', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out6.csv', + '/Users/fgiacomoni/Inra/labs/tests/massbank_V02/out6.xls'), + 'Main script massbank_ws_searchspectrum.pl with is running and manage real file (mz, int, ...)' ); + +} + + +#-masses +#-col_mz 1 +#-col_pcgroup 14 +#-col_int 7 +#-lineheader 1 +#-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 + + +elsif ($sequence eq "MAPPER") { + + ## testing mapper module of massbank wrapper. + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + print "\n\t\t\t\t * * * * * * \n" ; + print "\t * * * - - - Test MassBank Mapper module - - - * * * \n\n" ; + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # ARGVTS : $pcs, $mzs, $ints + sleep 1 ; print "\n** Test $current_test get_pcgroup_list with pcs array **\n" ; $current_test++ ; + is_deeply( get_pcgroup_listTest ( + [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,7,8,8,8,8,8,9,9,10,10,10,10,11,12,13,13,13,14,14,14] ), + ['1', '2','3','4','5','6','7','8','9','10','11','12','13','14'] , + 'Method \'getPcgroupList\' works with various and multiple pcgroups and return the attended uniq pcgroups array'); + + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # ARGVTS : $pcs, $mzs, $ints + print "\n** Test $current_test get_pcgroups with pcs, mzs, ints arrays **\n" ; $current_test++ ; + is_deeply( get_pcgroupsTest ( + [1, 2, 1, 2, 1, 2, 1], ['273.096', '289.086', '290.118', '291.096', '292.113', '579.169', '580.179'], ['300', '300', '300', '300', '300', '300', '300'] ), + { '1' => { 'id' => '1', + 'mzmed' => ['273.096','290.118','292.113','580.179'], + 'into' => ['300','300','300','300'], + 'annotation' => {}, + 'massbank_ids' => [] }, + '2' => { 'annotation' => {}, + 'into' => ['300','300','300'], + 'mzmed' => ['289.086','291.096','579.169'], + 'id' => '2', + 'massbank_ids' => [], } + }, + 'Method \'getPcgroups\' works with two pcgroups and return the attended pcgroups object'); + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # ARGVTS : $pcs, $mzs, $ints + print "\n** Test $current_test get_pcgroups with pcs, mzs, ints (some can be equal to 0) arrays **\n" ; $current_test++ ; + is_deeply( get_pcgroupsTest ( + [1, 2, 1, 2, 1, 2, 1], ['273.096', '289.086', '290.118', '291.096', '292.113', '579.169', '580.179'], ['0', '300', '300', '300', '300', '300', '300'] ), + { '1' => { 'id' => '1', + 'mzmed' => ['273.096','290.118','292.113','580.179'], + 'into' => ['0','300','300','300'], + 'annotation' => {}, + 'massbank_ids' => [] }, + '2' => { 'annotation' => {}, + 'into' => ['300','300','300'], + 'mzmed' => ['289.086','291.096','579.169'], + 'id' => '2', + 'massbank_ids' => [], } + }, + 'Method \'getPcgroups\' works with two pcgroups (with intensity equal to 0) and return the attended pcgroups object'); + + + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $header, $init_pcs, $pcgroups + sleep 1 ; print "\n** Test $current_test set_massbank_matrix_object with pc array and pcgroups object **\n" ; $current_test++ ; + is_deeply( set_massbank_matrix_objectTest ( 'massbank', [1,1,2,2,1], + { '1' => { 'id' => '1', + 'mzmed' => ['273.096','290.118','292.113','580.179'], + 'into' => ['300','300','300','300'], + 'annotation' => {'num_res' => 3}, + 'massbank_ids' => ['CA0001', 'CA0011', 'CA0111'] }, + '2' => { 'annotation' => {'num_res' => 3}, + 'into' => ['300','300','300'], + 'mzmed' => ['289.086','291.096','579.169'], + 'id' => '2', + 'massbank_ids' => ['CA0002', 'CA0022', 'CA0222'], } + } ), ## end argvts + [ [ 'massbank' ], ['CA0001|CA0011|CA0111'],['CA0001|CA0011|CA0111'], ['CA0002|CA0022|CA0222'], ['CA0002|CA0022|CA0222'], ['CA0001|CA0011|CA0111'] ], + 'Method \'set_massbank_matrix_object\' works with header, pcs list, pcgroups and return the attended massbank matrix'); + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $header, $init_pcs, $pcgroups + sleep 1 ; print "\n** Test $current_test set_massbank_matrix_object with undef hearder, pc array and pcgroups object **\n" ; $current_test++ ; + is_deeply( set_massbank_matrix_objectTest ( undef, [1,1,2,2,1], + { '1' => { 'id' => '1', + 'mzmed' => ['273.096','290.118','292.113','580.179'], + 'into' => ['300','300','300','300'], + 'annotation' => {'num_res' => 3}, + 'massbank_ids' => ['CA0001', 'CA0011', 'CA0111'] }, + '2' => { 'annotation' => {'num_res' => 3}, + 'into' => ['300','300','300'], + 'mzmed' => ['289.086','291.096','579.169'], + 'id' => '2', + 'massbank_ids' => ['CA0002', 'CA0022', 'CA0222'], } + } ), ## end argvts + [ ['CA0001|CA0011|CA0111'],['CA0001|CA0011|CA0111'], ['CA0002|CA0022|CA0222'], ['CA0002|CA0022|CA0222'], ['CA0001|CA0011|CA0111'] ], + 'Method \'set_massbank_matrix_object\' works with undef header and return the attended massbank matrix'); + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $header, $init_pcs, $pcgroups + sleep 1 ; print "\n** Test $current_test set_massbank_matrix_object with empty massbankIds **\n" ; $current_test++ ; + is_deeply( set_massbank_matrix_objectTest ( 'massbank', [1,1,2,2,1], + { '1' => { 'id' => '1', + 'mzmed' => ['273.096','290.118','292.113','580.179'], + 'into' => ['300','300','300','300'], + 'annotation' => {'num_res' => 3}, + 'massbank_ids' => ['CA0001', 'CA0011', 'CA0111'] }, + '2' => { 'annotation' => {'num_res' => 0}, + 'into' => ['300','300','300'], + 'mzmed' => ['289.086','291.096','579.169'], + 'id' => '2', + 'massbank_ids' => [], } + } ), ## end argvts + [ [ 'massbank' ], ['CA0001|CA0011|CA0111'],['CA0001|CA0011|CA0111'], ['No_result_found_on_MassBank'], ['No_result_found_on_MassBank'], ['CA0001|CA0011|CA0111'] ], + 'Method \'set_massbank_matrix_object\' works with empty massbank_ids and return the attended massbank matrix'); + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $input_matrix_object, $massbank_matrix_object + sleep 1 ; print "\n** Test $current_test add_massbank_matrix_to_input_matrix with two matrix **\n" ; $current_test++ ; + is_deeply( add_massbank_matrix_to_input_matrixTest ( + [[ 'pcgroup' ],[1],[1],[2],[2],[1]], + [ [ 'massbank' ], ['CA0001|CA0011|CA0111'],['CA0001|CA0011|CA0111'], ['CA0002|CA0022|CA0222'], ['CA0002|CA0022|CA0222'], ['CA0001|CA0011|CA0111'] ], + ), ## end argvts + [ ['pcgroup','massbank'],[1,'CA0001|CA0011|CA0111'],[1,'CA0001|CA0011|CA0111'],[2,'CA0002|CA0022|CA0222'],[2,'CA0002|CA0022|CA0222'],[1,'CA0001|CA0011|CA0111'] + ], ## end results + 'Method \'add_massbank_matrix_to_input_matrix\' works with two wel formatted matrix and return the right csv matrix'); + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $pcgroups_object, threshold + sleep 1 ; print "\n** Test $current_test filter_pcgroup_res with pcgroups object and a threshold **\n" ; $current_test++ ; + is_deeply( filter_pcgroup_resTest ( + { '1' => { 'massbank_ids' => ['MB0004', 'MB0005', 'MB0008'], 'annotation' => {'res' => [ {'score' => 0.4, 'id' => 'MB0004'}, {'score' => 0.8, 'id' => 'MB0008' }, {'score' => 0.5, 'id' => 'MB0005' } ], 'num_res' => 3 } }, '2' => { 'massbank_ids' => ['MB0004', 'MB0008', 'MB0007'], 'annotation' => {'res' => [{'score' => 0.4, 'id' => 'MB0004'}, {'score' => 0.8, 'id' => 'MB0008'}, {'score' => 0.7, 'id' => 'MB0007'} ], 'num_res' => 3 } } }, + 0.5 + ), ## end argvts + { '1' => { 'massbank_ids' => ['MB0005', 'MB0008'], 'annotation' => { 'res' => [ {'score' => 0.5, 'id' => 'MB0005' }, {'score' => 0.8, 'id' => 'MB0008'} ], 'num_res' => 2 } }, '2' => { 'massbank_ids' => ['MB0007', 'MB0008'], 'annotation' => {'res' => [{'score' => 0.7, 'id' => 'MB0007' }, {'score' => 0.8, 'id' => 'MB0008' } ], 'num_res' => 2 } } }, + ## end results + 'Method \'filter_pcgroup_resTest\' works with well formated pcgroups object and a float for threshold'); + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $pcgroups_object, threshold + sleep 1 ; print "\n** Test $current_test filter_pcgroup_res with empty pcgroups object and a threshold **\n" ; $current_test++ ; + is_deeply( filter_pcgroup_resTest ( + { '1' => { 'massbank_ids' => [], 'annotation' => {'res' => [ ], 'num_res' => 1 } }, '2' => { 'massbank_ids' => [], 'annotation' => {'res' => [ ], 'num_res' => 1 } } }, + 0.5 + ), ## end argvts + { '1' => { 'massbank_ids' => [], 'annotation' => { 'res' => [ ], 'num_res' => 0 } }, '2' => { 'massbank_ids' => [], 'annotation' => {'res' => [ ], 'num_res' => 0 } } }, + ## end results + 'Method \'filter_pcgroup_resTest\' works with an empty pcgroups object and a float for threshold'); + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $pcgroups_object, threshold + sleep 1 ; print "\n** Test $current_test filter_pcgroup_res with pcgroups object but undef params and a threshold **\n" ; $current_test++ ; + is_deeply( filter_pcgroup_resTest ( + { '1' => { 'massbank_ids' => [], 'annotation' => {'res' => [ {'score' => undef, 'id' => undef} ], 'num_res' => 0 } }, '2' => { 'massbank_ids' => ['MB0004', 'MB0008', 'MB0007'], 'annotation' => {'res' => [{'score' => 0.4, 'id' => 'MB0004'}, {'score' => 0.8, 'id' => 'MB0008'}, {'score' => 0.7, 'id' => 'MB0007'} ], 'num_res' => 3 } } }, + 0.5 + ), ## end argvts + { '1' => { 'massbank_ids' => [], 'annotation' => { 'res' => [ {'score' => undef, 'id' => undef } ], 'num_res' => 0 } }, '2' => { 'massbank_ids' => ['MB0007', 'MB0008'], 'annotation' => {'res' => [{'score' => 0.7, 'id' => 'MB0007' }, {'score' => 0.8, 'id' => 'MB0008' } ], 'num_res' => 2 } } }, + ## end results + 'Method \'filter_pcgroup_resTest\' works with well formated pcgroups object (but undef value) and a float for threshold'); + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $pcgroups_object + sleep 1 ; print "\n** Test $current_test compute_ids_from_pcgroups_res with pcgroups object **\n" ; $current_test++ ; + is_deeply( compute_ids_from_pcgroups_resTest ( + { '1' => { 'massbank_ids' => ['MB0004', 'MB0005', 'MB0008'], 'annotation' => {'res' => [ {'score' => 0.4, 'id' => 'MB0004'}, {'score' => 0.8, 'id' => 'MB0008' }, {'score' => 0.5, 'id' => 'MB0005' } ], 'num_res' => 3 } }, '2' => { 'massbank_ids' => ['MB0004', 'MB0008', 'MB0007'], 'annotation' => {'res' => [{'score' => 0.4, 'id' => 'MB0004'}, {'score' => 0.8, 'id' => 'MB0008'}, {'score' => 0.7, 'id' => 'MB0007'} ], 'num_res' => 3 } } }, + ), ## end argvts + ['MB0004', 'MB0005', 'MB0007', 'MB0008'], + ## end results + 'Method \'compute_ids_from_pcgroups_res\' works with a classic pcgroups object return a nice and unique list of ids'); + + + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + ## ARGVTS : $massbank_ids, chunk_size + sleep 1 ; print "\n** Test $current_test get_massbank_records_by_chunk with ids list **\n" ; $current_test++ ; + is_deeply( get_massbank_records_by_chunkTest ( + 'EU', + ['KOX00002', 'KOX00003', 'FU000001', 'TY000040', 'TY000041', 'FU000002'], + 2 + ), ## end argvts + ['ACCESSION: KOX00002 +RECORD_TITLE: GABA; LC-ESI-QTOF; MS2; MERGED; [M+H]+ +DATE: 2011.08.24 (Created 2008.11.28) +AUTHORS: Institute for Advanced Biosciences, Keio Univ. +LICENSE: Copyright 2006-2011 Keio +COMMENT: Peak data in the following records are not open to the public as requested by their authors. +COMMENT: Instead MassBank provides the merged spectra for the public. +COMMENT: This record was generated by merging the following three MassBank records. +COMMENT: [Merging] KO006374 GABA; LC-ESI-QTOF; MS2; CE:10 V [M+H]+ +COMMENT: [Merging] KO006375 GABA; LC-ESI-QTOF; MS2; CE:20 V [M+H]+ +COMMENT: [Merging] KO006376 GABA; LC-ESI-QTOF; MS2; CE:30 V [M+H]+ +COMMENT: [Merging] KO006377 GABA; LC-ESI-QTOF; MS2; CE:40 V [M+H]+ +COMMENT: [Merging] KO006378 GABA; LC-ESI-QTOF; MS2; CE:50 V [M+H]+ +CH$NAME: GABA +CH$NAME: 4-Aminobutanoate +CH$NAME: 4-Aminobutanoic acid +CH$NAME: 4-Aminobutylate +CH$NAME: 4-Aminobutyrate +CH$NAME: 4-Aminobutyric acid +CH$NAME: gamma-Aminobutyric acid +CH$COMPOUND_CLASS: N/A +CH$FORMULA: C4H9NO2 +CH$EXACT_MASS: 103.06333 +CH$SMILES: NCCCC(O)=O +CH$IUPAC: InChI=1S/C4H9NO2/c5-3-1-2-4(6)7/h1-3,5H2,(H,6,7) +CH$LINK: CAS 56-12-2 +CH$LINK: CHEBI 30566 +CH$LINK: KEGG C00334 +CH$LINK: NIKKAJI J1.375G +CH$LINK: PUBCHEM SID:3628 +AC$INSTRUMENT: Qstar, Applied Biosystems +AC$INSTRUMENT_TYPE: LC-ESI-QTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS2 +AC$MASS_SPECTROMETRY: ION_MODE POSITIVE +MS$FOCUSED_ION: PRECURSOR_M/Z 104 +MS$FOCUSED_ION: PRECURSOR_TYPE [M+H]+ +PK$ANNOTATION: 39.0234750963 45.0340397826 68.0500241978 69.0340397826 86.0605888841 87.0446044689 104.0711535704 +PK$NUM_PEAK: N/A +PK$PEAK: m/z int. rel.int. + N/A +', + 'ACCESSION: KOX00003 +RECORD_TITLE: Adenosine; LC-ESI-QTOF; MS2; MERGED; [M-H]- +DATE: 2012.05.21 (Created 2008.11.28) +AUTHORS: Institute for Advanced Biosciences, Keio Univ. +LICENSE: Copyright 2006-2011 Keio +COMMENT: Peak data in the following records are not open to the public as requested by their authors. +COMMENT: Instead MassBank provides the merged spectra for the public. +COMMENT: This record was generated by merging the following three MassBank records. +COMMENT: [Merging] KO004298 Adenosine; LC-ESI-QTOF; MS2; CE:10 V [M-H]- +COMMENT: [Merging] KO004299 Adenosine; LC-ESI-QTOF; MS2; CE:20 V [M-H]- +COMMENT: [Merging] KO004301 Adenosine; LC-ESI-QTOF; MS2; CE:40 V [M-H]- +COMMENT: [Merging] KO004302 Adenosine; LC-ESI-QTOF; MS2; CE:50 V [M-H]- +CH$NAME: Adenosine +CH$COMPOUND_CLASS: N/A +CH$FORMULA: C10H13N5O4 +CH$EXACT_MASS: 267.09675 +CH$SMILES: OC[C@@H](O1)[C@@H](O)[C@@H](O)[C@@H]1n(c3)c(n2)c(n3)c(N)nc2 +CH$IUPAC: InChI=1S/C10H13N5O4/c11-8-5-9(13-2-12-8)15(3-14-5)10-7(18)6(17)4(1-16)19-10/h2-4,6-7,10,16-18H,1H2,(H2,11,12,13)/t4-,6-,7-,10-/m1/s1 +CH$LINK: CAS 58-61-7 +CH$LINK: CHEBI 16335 +CH$LINK: CHEMPDB ADN +CH$LINK: KEGG C00212 +CH$LINK: NIKKAJI J4.501B +CH$LINK: PUBCHEM SID:3512 +AC$INSTRUMENT: Qstar, Applied Biosystems +AC$INSTRUMENT_TYPE: LC-ESI-QTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS2 +AC$MASS_SPECTROMETRY: ION_MODE NEGATIVE +MS$FOCUSED_ION: PRECURSOR_M/Z 266 +MS$FOCUSED_ION: PRECURSOR_TYPE [M-H]- +PK$ANNOTATION: 107.0357711171 134.0466701544 136.0623202186 266.0889288996 +PK$NUM_PEAK: N/A +PK$PEAK: m/z int. rel.int. + N/A +', + 'ACCESSION: FU000001 +RECORD_TITLE: 3-Man2GlcNAc; LC-ESI-QQ; MS2; CE:15V; Amide +DATE: 2016.01.19 (Created 2009.02.18, modified 2011.05.06) +AUTHORS: Matsuura F, Ohta M, Kittaka M, Faculty of Life Science and Biotechnology, Fukuyama University +LICENSE: CC BY-SA +CH$NAME: 3-Man2GlcNAc +CH$NAME: Man-alpha-1-3Man-beta-1-4GlcNac +CH$COMPOUND_CLASS: Natural Product; Oligosaccharide; N-linked glycan; High-mannose type +CH$FORMULA: C20H35NO16 +CH$EXACT_MASS: 545.19558 +CH$SMILES: CC(=O)NC(C(O)1)C(O)C(OC(O2)C(O)C(OC(O3)C(O)C(O)C(O)C(CO)3)C(O)C(CO)2)C(CO)O1 +CH$IUPAC: InChI=1/C20H35NO16/c1-5(25)21-9-12(28)16(8(4-24)33-18(9)32)36-20-15(31)17(11(27)7(3-23)35-20)37-19-14(30)13(29)10(26)6(2-22)34-19/h6-20,22-24,26-32H,2-4H2,1H3,(H,21,25)/t6-,7-,8-,9-,10-,11-,12-,13+,14-,15+,16-,17+,18+,19-,20+/m1/s1/f/h21H +CH$LINK: CHEMSPIDER 24606097 +CH$LINK: KEGG G00319 +CH$LINK: OligosaccharideDataBase man 547428 +CH$LINK: OligosaccharideDataBase2D map5 ODS=1.21 Amide=2.85 +AC$INSTRUMENT: 2695 HPLC Quadro Micro API, Waters +AC$INSTRUMENT_TYPE: LC-ESI-QQ +AC$MASS_SPECTROMETRY: MS_TYPE MS2 +AC$MASS_SPECTROMETRY: ION_MODE POSITIVE +AC$MASS_SPECTROMETRY: COLLISION_ENERGY 15.0 V +AC$MASS_SPECTROMETRY: DATAFORMAT Centroid +AC$MASS_SPECTROMETRY: DESOLVATION_GAS_FLOW 897 L/Hr +AC$MASS_SPECTROMETRY: DESOLVATION_TEMPERATURE 399 C +AC$MASS_SPECTROMETRY: FRAGMENTATION_METHOD LOW-ENERGY CID +AC$MASS_SPECTROMETRY: IONIZATION ESI +AC$MASS_SPECTROMETRY: SCANNING 1 amu/sec (m/z = 20-2040) +AC$MASS_SPECTROMETRY: SOURCE_TEMPERATURE 100C +AC$CHROMATOGRAPHY: COLUMN_NAME TSK-GEL Amide-80 2.0 mm X 250 mm (TOSOH) +AC$CHROMATOGRAPHY: COLUMN_TEMPERATURE 40 C +AC$CHROMATOGRAPHY: FLOW_GRADIENT 74/26 at 0 min, 50/50 at 60 min. +AC$CHROMATOGRAPHY: FLOW_RATE 0.2 ml/min +AC$CHROMATOGRAPHY: RETENTION_TIME 7.080 min +AC$CHROMATOGRAPHY: SAMPLING_CONE 43.10 V +AC$CHROMATOGRAPHY: SOLVENT CH3CN/H2O +MS$FOCUSED_ION: DERIVATIVE_FORM C29H46N2O17 +MS$FOCUSED_ION: DERIVATIVE_MASS 694.27965 +MS$FOCUSED_ION: DERIVATIVE_TYPE ABEE (p-Aminobenzoic acid ethyl ester) +MS$FOCUSED_ION: PRECURSOR_M/Z 695.00 +MS$FOCUSED_ION: PRECURSOR_TYPE [M+H]+ +PK$SPLASH: splash10-00080az000-bfe86aa7211a87812a06 +PK$NUM_PEAK: 8 +PK$PEAK: m/z int. rel.int. + 370.8 3.277e5 366 + 371.4 3.036e4 34 + 532.0 5.812e4 65 + 532.6 2.982e5 333 + 533.3 5.196e4 58 + 694.1 4.564e5 510 + 694.8 8.939e5 999 + 695.4 5.537e4 62 +', + 'ACCESSION: FU000002 +RECORD_TITLE: 3-Man2GlcNAc; LC-ESI-QQ; MS2; CE:20V; Amide +DATE: 2016.01.19 (Created 2009.02.18, modified 2011.05.06) +AUTHORS: Matsuura F, Ohta M, Kittaka M, Faculty of Life Science and Biotechnology, Fukuyama University +LICENSE: CC BY-SA +CH$NAME: 3-Man2GlcNAc +CH$NAME: Man-alpha-1-3Man-beta-1-5GlcNac +CH$COMPOUND_CLASS: Natural Product; Oligosaccharide; N-linked glycan; High-mannose type +CH$FORMULA: C20H35NO16 +CH$EXACT_MASS: 545.19558 +CH$SMILES: CC(=O)NC(C(O)1)C(O)C(OC(O2)C(O)C(OC(O3)C(O)C(O)C(O)C(CO)3)C(O)C(CO)2)C(CO)O1 +CH$IUPAC: InChI=1/C20H35NO16/c1-5(25)21-9-12(28)16(8(4-24)33-18(9)32)36-20-15(31)17(11(27)7(3-23)35-20)37-19-14(30)13(29)10(26)6(2-22)34-19/h6-20,22-24,26-32H,2-4H2,1H3,(H,21,25)/t6-,7-,8-,9-,10-,11-,12-,13+,14-,15+,16-,17+,18+,19-,20+/m1/s1/f/h21H +CH$LINK: CHEMSPIDER 24606097 +CH$LINK: KEGG G00319 +CH$LINK: OligosaccharideDataBase man 547428 +CH$LINK: OligosaccharideDataBase2D map5 ODS=1.21 Amide=2.85 +AC$INSTRUMENT: 2695 HPLC Quadro Micro API, Waters +AC$INSTRUMENT_TYPE: LC-ESI-QQ +AC$MASS_SPECTROMETRY: MS_TYPE MS2 +AC$MASS_SPECTROMETRY: ION_MODE POSITIVE +AC$MASS_SPECTROMETRY: COLLISION_ENERGY 20.0 V +AC$MASS_SPECTROMETRY: DATAFORMAT Centroid +AC$MASS_SPECTROMETRY: DESOLVATION_GAS_FLOW 897 L/Hr +AC$MASS_SPECTROMETRY: DESOLVATION_TEMPERATURE 399 C +AC$MASS_SPECTROMETRY: FRAGMENTATION_METHOD LOW-ENERGY CID +AC$MASS_SPECTROMETRY: IONIZATION ESI +AC$MASS_SPECTROMETRY: SCANNING 1 amu/sec (m/z = 20-2040) +AC$MASS_SPECTROMETRY: SOURCE_TEMPERATURE 100C +AC$CHROMATOGRAPHY: COLUMN_NAME TSK-GEL Amide-80 2.0 mm X 250 mm (TOSOH) +AC$CHROMATOGRAPHY: COLUMN_TEMPERATURE 40 C +AC$CHROMATOGRAPHY: FLOW_GRADIENT 74/26 at 0 min, 50/50 at 60 min. +AC$CHROMATOGRAPHY: FLOW_RATE 0.2 ml/min +AC$CHROMATOGRAPHY: RETENTION_TIME 7.088 min +AC$CHROMATOGRAPHY: SAMPLING_CONE 43.10 V +AC$CHROMATOGRAPHY: SOLVENT CH3CN/H2O +MS$FOCUSED_ION: DERIVATIVE_FORM C29H46N2O17 +MS$FOCUSED_ION: DERIVATIVE_MASS 694.27965 +MS$FOCUSED_ION: DERIVATIVE_TYPE ABEE (p-Aminobenzoic acid ethyl ester) +MS$FOCUSED_ION: PRECURSOR_M/Z 695.00 +MS$FOCUSED_ION: PRECURSOR_TYPE [M+H]+ +PK$SPLASH: splash10-000z0fb000-52e2618a90c53226e008 +PK$NUM_PEAK: 10 +PK$PEAK: m/z int. rel.int. + 324.9 5.549e4 65 + 370.8 8.511e5 999 + 371.3 8.989e4 106 + 486.8 2.622e4 31 + 532.0 5.832e4 68 + 532.7 3.515e5 413 + 533.3 3.910e4 46 + 693.9 4.249e4 50 + 694.5 1.979e5 232 + 695.3 9.682e4 114 +', + 'ACCESSION: TY000040 +RECORD_TITLE: Aconitine; LC-ESI-ITTOF; MS; [M+H]+ +DATE: 2016.01.19 (Created 2008.10.10, modified 2011.05.06) +AUTHORS: Ken Tanaka +LICENSE: CC BY-SA +CH$NAME: Aconitine +CH$NAME: NSC56464 +CH$NAME: 16-Ethyl-1alpha,6alpha,19beta-trimethoxy-4-(methoxymethyl)-aconitane-3alpha,8,10alpha,11,18alpha-pentol, 8-acetate 10-benzoate +CH$NAME: 20-ethyl-3alpha,13,15alpha-trihydroxy-1alpha,6alpha,16beta-trimethoxy-4-(methoxymethyl)aconitane-8,14alpha-diyl 8-acetate 14-benzoate +CH$COMPOUND_CLASS: Natural Product; Alkaloid +CH$FORMULA: C34H47NO11 +CH$EXACT_MASS: 645.31491 +CH$SMILES: COC(C7)C(C61[H])(C5([H])2)C(N(CC(COC)6C7O)CC)([H])C(C(C5([H])3)(C(C(OC)C(O)(C(OC(=O)c(c4)cccc4)3)C2)O)OC(C)=O)([H])C1OC +CH$IUPAC: InChI=1S/C34H47NO11/c1-7-35-15-31(16-41-3)20(37)13-21(42-4)33-19-14-32(40)28(45-30(39)18-11-9-8-10-12-18)22(19)34(46-17(2)36,27(38)29(32)44-6)23(26(33)35)24(43-5)25(31)33/h8-12,19-29,37-38,40H,7,13-16H2,1-6H3/t19-,20-,21+,22-,23+,24+,25-,26+,27+,28-,29+,31+,32-,33+,34-/m1/s1 +CH$LINK: CAS 302-27-2 +CH$LINK: NIKKAJI J9.871J +CH$LINK: PUBCHEM 245005 +AC$INSTRUMENT: Shimadzu LC20A-IT-TOFMS +AC$INSTRUMENT_TYPE: LC-ESI-ITTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS +AC$MASS_SPECTROMETRY: ION_MODE POSITIVE +AC$MASS_SPECTROMETRY: CDL_TEMPERATURE 200 C +AC$MASS_SPECTROMETRY: INTERFACE_VOLTAGE +4.50 kV +AC$MASS_SPECTROMETRY: SCANNING_RANGE 100-2000 +AC$CHROMATOGRAPHY: COLUMN_NAME Waters Atlantis T3 (2.1 x 150 mm, 5 um) +AC$CHROMATOGRAPHY: COLUMN_TEMPERATURE 40 C +AC$CHROMATOGRAPHY: FLOW_GRADIENT 10 % B to 100 % B/40 min +AC$CHROMATOGRAPHY: FLOW_RATE 0.2 ml/min +AC$CHROMATOGRAPHY: RETENTION_TIME 1197.701 +AC$CHROMATOGRAPHY: SOLVENT (A)5 mM ammonium acetate, (B)CH3CN +MS$FOCUSED_ION: ION_TYPE [M+H]+ +PK$SPLASH: splash10-000000z000-1f6554288e1249b37bcb +PK$NUM_PEAK: 3 +PK$PEAK: m/z int. rel.int. + 646.3223 64380108 999 + 647.3252 26819201 416 + 648.3309 7305831 113 +', + 'ACCESSION: TY000041 +RECORD_TITLE: Atropine; LC-ESI-ITTOF; MS; [M+H]+ +DATE: 2016.01.19 (Created 2008.10.10, modified 2011.05.06) +AUTHORS: Ken Tanaka +LICENSE: CC BY-SA +CH$NAME: Atropine +CH$NAME: Benzeneacetic acid, alpha-(hydroxymethyl)- (3-endo)-8-methyl-8-azabicyclo[3.2.1]oct-3-yl ester +CH$NAME: 1alphaH,5alphaH-Tropan-3alpha-ol (+-)-tropate (ester) +CH$NAME: Benzeneacetic acid, alpha-(hydroxymethyl)-, 8-methyl-8-azabicyclo[3.2.1]oct-3-yl ester, endo- +CH$NAME: (+-)-Atropine +CH$NAME: (+-)-Hyoscyamine +CH$NAME: Tropine (+-)-tropate +CH$NAME: dl-Tropyl tropate +CH$NAME: dl-Hyoscyamine +CH$NAME: Tropine tropate +CH$NAME: Atropinol +CH$NAME: Eyesules +CH$NAME: Atropen +CH$NAME: Isopto-atropine +CH$NAME: Troyl tropate +CH$NAME: Belladenal +CH$NAME: Atropina +CH$NAME: Cytospaz +CH$NAME: Donnagel +CH$NAME: Anaspaz +CH$NAME: Atnaa +CH$NAME: Lonox +CH$NAME: Neo-Diophen +CH$NAME: DL-Tropanyl 2-hydroxy-1-phenylpropionate +CH$NAME: 2-Phenylhydracrylic acid 3-alpha-tropanyl ester +CH$NAME: tropan-3alpha-yl 3-hydroxy-2-phenylpropanoate +CH$NAME: 8-Methyl-8-azabicyclo[3.2.1]oct-3-yl tropate +CH$NAME: 8-Methyl-8-azabicyclo[3.2.1]oct-3-yl 3-hydroxy-2-phenylpropanoate +CH$NAME: alpha-(Hydroxymethyl)benzeneacetic acid 8-methyl-8-azabicyclo(3.2.1)oct-3-yl ester +CH$NAME: Benzeneacetic acid, alpha-(hydroxymethyl)-, (3-endo)-8-methyl-8-azabicyclo(3.2.1)oct-3-yl ester +CH$NAME: (3-endo)-8-methyl-8-azabicyclo[3.2.1]oct-3-yl (2S)-3-hydroxy-2-phenylpropanoate +CH$NAME: [(1R,5S)-8-methyl-8-azabicyclo[3.2.1]octan-3-yl] 3-hydroxy-2-phenylpropanoate +CH$NAME: beta-(Hydroxymethyl)benzeneacetic acid 8-methyl-8-azabicyclo[3.2.1]oct-3-yl ester +CH$NAME: endo-(+/-)-alpha-(Hydroxymethyl)benzeneacetic acid 8-methyl-8-azabicyclo[3.2.1]oct-3-yl ester +CH$COMPOUND_CLASS: Natural Product; Alkaloid +CH$FORMULA: C17H23NO3 +CH$EXACT_MASS: 289.16779 +CH$SMILES: OCC(C(=O)OC(C2)CC(C3)N(C)C(C3)2)c(c1)cccc1 +CH$IUPAC: InChI=1S/C17H23NO3/c1-18-13-7-8-14(18)10-15(9-13)21-17(20)16(11-19)12-5-3-2-4-6-12/h2-6,13-16,19H,7-11H2,1H3/t13-,14+,15+,16? +CH$LINK: CAS 51-55-8 +CH$LINK: NIKKAJI J237.402A +CH$LINK: PUBCHEM 174174 +AC$INSTRUMENT: Shimadzu LC20A-IT-TOFMS +AC$INSTRUMENT_TYPE: LC-ESI-ITTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS +AC$MASS_SPECTROMETRY: ION_MODE POSITIVE +AC$MASS_SPECTROMETRY: CDL_TEMPERATURE 200 C +AC$MASS_SPECTROMETRY: INTERFACE_VOLTAGE +4.50 kV +AC$MASS_SPECTROMETRY: SCANNING_RANGE 100-2000 +AC$CHROMATOGRAPHY: COLUMN_NAME Waters Atlantis T3 (2.1 x 150 mm, 5 um) +AC$CHROMATOGRAPHY: COLUMN_TEMPERATURE 40 C +AC$CHROMATOGRAPHY: FLOW_GRADIENT 10 % B to 100 % B/40 min +AC$CHROMATOGRAPHY: FLOW_RATE 0.2 ml/min +AC$CHROMATOGRAPHY: RETENTION_TIME 641.701 +AC$CHROMATOGRAPHY: SOLVENT (A)5 mM ammonium acetate, (B)CH3CN +MS$FOCUSED_ION: ION_TYPE [M+H]+ +PK$SPLASH: splash10-00z0000000-bdadd43ab0e2444986f1 +PK$NUM_PEAK: 2 +PK$PEAK: m/z int. rel.int. + 290.1754 109188681 999 + 291.1762 21571851 197 +' + ], + ## end results + 'Method \'get_massbank_records_by_chunk\' works with a full ids list and return a nice and unique list of records from WS-MassBank'); + + +#### #### ##### ###### ################################################ ###### ##### ##### ###### ###### + + ## END of MAPPER SEQUENCE ## + +#### #### ##### ###### ################################################ ###### ##### ##### ###### ###### +} + +#### #### ##### ###### ################################################ ###### ##### ##### ###### ###### + + ## START of API SEQUENCE ## + +#### #### ##### ###### ################################################ ###### ##### ##### ###### ###### +elsif ($sequence eq "API") { + + ## testing connectMassBank on Japan and DE servers. + ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + print "\n\t\t\t\t * * * * * * \n" ; + print "\t * * * - - - Test MassBank API from SOAP - - - * * * \n\n" ; + + + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test connectMassBankJP with real uri and proxy **\n" ; $current_test++; +isa_ok( connectMassBankJPTest(), 'SOAP::Lite' ); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test connectMassBankDE with real uri and proxy **\n" ; $current_test++ ; +isa_ok( connectMassBankDETest(), 'SOAP::Lite' ); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test getInstrumentTypes with the JP server **\n" ; $current_test++ ; +#is_deeply( getInstrumentTypesTest('JP'), ['APCI-ITFT', 'APCI-ITTOF','CE-ESI-TOF', 'CI-B', 'EI-B', 'EI-EBEB', 'ESI-ITFT', 'ESI-ITTOF', 'FAB-B', 'FAB-EB', 'FAB-EBEB', 'FD-B', 'FI-B', 'GC-EI-QQ', 'GC-EI-TOF', 'LC-APCI-QTOF', 'LC-APPI-QQ', 'LC-ESI-IT', 'LC-ESI-ITFT', 'LC-ESI-ITTOF', 'LC-ESI-Q', 'LC-ESI-QFT', 'LC-ESI-QIT', 'LC-ESI-QQ', 'LC-ESI-QTOF', 'LC-ESI-TOF', 'MALDI-QIT', 'MALDI-TOF', 'MALDI-TOFTOF'], "Works with \'JP server\' and return a list of instrument types"); +print "-- no test -- skipped because JP getInstrumentTypes method is down\n" ; + +print "\n** Test $current_test getInstrumentTypes with the DE server **\n" ; $current_test++ ; +#is_deeply( getInstrumentTypesTest('EU'), ['APCI-ITFT', 'APCI-ITTOF', 'CE-ESI-TOF', 'CI-B', 'EI-B', 'EI-EBEB', 'ESI-FTICR', 'ESI-ITFT', 'ESI-ITTOF', 'FAB-B', 'FAB-EB', 'FAB-EBEB', 'FD-B', 'FI-B', 'GC-EI-QQ', 'GC-EI-TOF', 'HPLC-ESI-TOF', 'LC-APCI-Q', 'LC-APCI-QTOF', 'LC-APPI-QQ', 'LC-ESI-IT', 'LC-ESI-ITFT', 'LC-ESI-ITTOF', 'LC-ESI-Q', 'LC-ESI-QFT', 'LC-ESI-QIT', 'LC-ESI-QQ', 'LC-ESI-QTOF', 'LC-ESI-TOF', 'MALDI-QIT', 'MALDI-TOF', 'MALDI-TOFTOF', 'UPLC-ESI-QTOF'], "Works with $server server and return a list of instrument types"); +print "-- no test -- skipped because DE method is down\n" ; +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test initRecordObject on a well formatted massbank record string **\n" ; $current_test++ ; +is_deeply( initRecordObjectTest('ACCESSION: KOX00001 +RECORD_TITLE: GABA; LC-ESI-QTOF; MS2; MERGED; [M-H]- +DATE: 2011.08.24 (Created 2008.11.28) +AUTHORS: Institute for Advanced Biosciences, Keio Univ. +LICENSE: Copyright 2006-2011 Keio +COMMENT: Peak data in the following records are not open to the public as requested by their authors. +COMMENT: Instead MassBank provides the merged spectra for the public. +COMMENT: This record was generated by merging the following three MassBank records. +COMMENT: [Merging] KO004290 GABA; LC-ESI-QTOF; MS2; CE:10 V [M-H]- +COMMENT: [Merging] KO004291 GABA; LC-ESI-QTOF; MS2; CE:20 V [M-H]- +COMMENT: [Merging] KO004292 GABA; LC-ESI-QTOF; MS2; CE:30 V [M-H]- +CH$NAME: GABA +CH$NAME: 4-Aminobutanoate +CH$NAME: 4-Aminobutanoic acid +CH$NAME: 4-Aminobutylate +CH$NAME: 4-Aminobutyrate +CH$NAME: 4-Aminobutyric acid +CH$NAME: gamma-Aminobutyric acid +CH$COMPOUND_CLASS: N/A +CH$FORMULA: C4H9NO2 +CH$EXACT_MASS: 103.06333 +CH$SMILES: NCCCC(O)=O +CH$IUPAC: InChI=1S/C4H9NO2/c5-3-1-2-4(6)7/h1-3,5H2,(H,6,7) +CH$LINK: CAS 56-12-2 +CH$LINK: CHEBI 30566 +CH$LINK: KEGG C00334 +CH$LINK: NIKKAJI J1.375G +CH$LINK: PUBCHEM SID:3628 +AC$INSTRUMENT: Qstar, Applied Biosystems +AC$INSTRUMENT_TYPE: LC-ESI-QTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS2 +AC$MASS_SPECTROMETRY: ION_MODE NEGATIVE +MS$FOCUSED_ION: PRECURSOR_M/Z 102 +MS$FOCUSED_ION: PRECURSOR_TYPE [M-H]- +PK$ANNOTATION: 41.9979886273 84.0449388199 102.0555035062 +PK$NUM_PEAK: N/A +PK$PEAK: m/z int. rel.int. + N/A +'), +{ + 'CH$NAME' => 'gamma-Aminobutyric acid', + 'AC$MASS_SPECTROMETRY' => 'ION_MODE NEGATIVE', + 'CH$LINK: PUBCHEM SID' => '3628', + 'ACCESSION' => 'KOX00001', + 'CH$COMPOUND_CLASS' => 'N/A', + 'LICENSE' => 'Copyright 2006-2011 Keio', + 'COMMENT: [Merging] KO004292 GABA; LC-ESI-QTOF; MS2; CE' => '30 V [M-H]-', + 'COMMENT: [Merging] KO004291 GABA; LC-ESI-QTOF; MS2; CE' => '20 V [M-H]-', + 'CH$IUPAC' => 'InChI=1S/C4H9NO2/c5-3-1-2-4(6)7/h1-3,5H2,(H,6,7)', + 'PK$ANNOTATION' => '41.9979886273 84.0449388199 102.0555035062', + 'AUTHORS' => 'Institute for Advanced Biosciences, Keio Univ.', + 'PK$NUM_PEAK' => 'N/A', + 'CH$SMILES' => 'NCCCC(O)=O', + 'AC$INSTRUMENT_TYPE' => 'LC-ESI-QTOF', + 'CH$EXACT_MASS' => '103.06333', + 'CH$LINK' => 'NIKKAJI J1.375G', + 'CH$FORMULA' => 'C4H9NO2', + 'PK$PEAK' => { + 'relint' => [], + 'int' => [], + 'mz' => [] + }, + 'DATE' => '2011.08.24 (Created 2008.11.28)', + 'MS$FOCUSED_ION' => 'PRECURSOR_TYPE [M-H]-', + 'RECORD_TITLE' => 'GABA; LC-ESI-QTOF; MS2; MERGED; [M-H]-', + 'COMMENT: [Merging] KO004290 GABA; LC-ESI-QTOF; MS2; CE' => '10 V [M-H]-', + 'AC$INSTRUMENT' => 'Qstar, Applied Biosystems', + 'COMMENT' => 'This record was generated by merging the following three MassBank records.' + }, +"Works with a well formatted massbank record string and return one record object from \"KOX00001\" id"); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test initRecordObject on a well formatted massbank record string (has peaks !!) **\n" ; $current_test++ ; +is_deeply( initRecordObjectTest('ACCESSION: TY000040 +RECORD_TITLE: Aconitine; LC-ESI-ITTOF; MS; [M+H]+ +DATE: 2011.05.06 (Created 2008.10.10) +AUTHORS: Ken Tanaka +LICENSE: CC BY-SA +CH$NAME: Aconitine +CH$NAME: NSC56464 +CH$NAME: 16-Ethyl-1alpha,6alpha,19beta-trimethoxy-4-(methoxymethyl)-aconitane-3alpha,8,10alpha,11,18alpha-pentol, 8-acetate 10-benzoate +CH$NAME: 20-ethyl-3alpha,13,15alpha-trihydroxy-1alpha,6alpha,16beta-trimethoxy-4-(methoxymethyl)aconitane-8,14alpha-diyl 8-acetate 14-benzoate +CH$COMPOUND_CLASS: Natural Product; Alkaloid +CH$FORMULA: C34H47NO11 +CH$EXACT_MASS: 645.31491 +CH$SMILES: COC(C7)C(C61[H])(C5([H])2)C(N(CC(COC)6C7O)CC)([H])C(C(C5([H])3)(C(C(OC)C(O)(C(OC(=O)c(c4)cccc4)3)C2)O)OC(C)=O)([H])C1OC +CH$IUPAC: InChI=1S/C34H47NO11/c1-7-35-15-31(16-41-3)20(37)13-21(42-4)33-19-14-32(40)28(45-30(39)18-11-9-8-10-12-18)22(19)34(46-17(2)36,27(38)29(32)44-6)23(26(33)35)24(43-5)25(31)33/h8-12,19-29,37-38,40H,7,13-16H2,1-6H3/t19-,20-,21+,22-,23+,24+,25-,26+,27+,28-,29+,31+,32-,33+,34-/m1/s1 +CH$LINK: CAS 302-27-2 +CH$LINK: NIKKAJI J9.871J +CH$LINK: PUBCHEM 245005 +AC$INSTRUMENT: Shimadzu LC20A-IT-TOFMS +AC$INSTRUMENT_TYPE: LC-ESI-ITTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS +AC$MASS_SPECTROMETRY: ION_MODE POSITIVE +AC$MASS_SPECTROMETRY: CDL_TEMPERATURE 200 C +AC$MASS_SPECTROMETRY: INTERFACE_VOLTAGE +4.50 kV +AC$MASS_SPECTROMETRY: SCANNING_RANGE 100-2000 +AC$CHROMATOGRAPHY: COLUMN_NAME Waters Atlantis T3 (2.1 x 150 mm, 5 um) +AC$CHROMATOGRAPHY: COLUMN_TEMPERATURE 40 C +AC$CHROMATOGRAPHY: FLOW_GRADIENT 10 % B to 100 % B/40 min +AC$CHROMATOGRAPHY: FLOW_RATE 0.2 ml/min +AC$CHROMATOGRAPHY: RETENTION_TIME 1197.701 +AC$CHROMATOGRAPHY: SOLVENT (A)5 mM ammonium acetate, (B)CH3CN +MS$FOCUSED_ION: ION_TYPE [M+H]+ +PK$NUM_PEAK: 3 +PK$PEAK: m/z int. rel.int. + 646.3223 64380108 999 + 647.3252 26819201 416 + 648.3309 7305831 113 +'), +{ + 'MS$FOCUSED_ION' => 'ION_TYPE [M+H]+', + 'CH$COMPOUND_CLASS' => 'Natural Product; Alkaloid', + 'CH$EXACT_MASS' => '645.31491', + 'AC$MASS_SPECTROMETRY' => 'SCANNING_RANGE 100-2000', + 'AC$INSTRUMENT' => 'Shimadzu LC20A-IT-TOFMS', + 'PK$PEAK' => { + 'mz' => [ + '646.3223', + '647.3252', + '648.3309' + ], + 'int' => [ + '64380108', + '26819201', + '7305831' + ], + 'relint' => [ + '999', + '416', + '113' + ] + }, + 'CH$IUPAC' => 'InChI=1S/C34H47NO11/c1-7-35-15-31(16-41-3)20(37)13-21(42-4)33-19-14-32(40)28(45-30(39)18-11-9-8-10-12-18)22(19)34(46-17(2)36,27(38)29(32)44-6)23(26(33)35)24(43-5)25(31)33/h8-12,19-29,37-38,40H,7,13-16H2,1-6H3/t19-,20-,21+,22-,23+,24+,25-,26+,27+,28-,29+,31+,32-,33+,34-/m1/s1', + 'AC$CHROMATOGRAPHY' => 'SOLVENT (A)5 mM ammonium acetate, (B)CH3CN', + 'DATE' => '2011.05.06 (Created 2008.10.10)', + 'LICENSE' => 'CC BY-SA', + 'AC$INSTRUMENT_TYPE' => 'LC-ESI-ITTOF', + 'CH$FORMULA' => 'C34H47NO11', + 'CH$LINK' => 'PUBCHEM 245005', + 'CH$NAME' => '20-ethyl-3alpha,13,15alpha-trihydroxy-1alpha,6alpha,16beta-trimethoxy-4-(methoxymethyl)aconitane-8,14alpha-diyl 8-acetate 14-benzoate', + 'PK$NUM_PEAK' => '3', + 'ACCESSION' => 'TY000040', + 'RECORD_TITLE' => 'Aconitine; LC-ESI-ITTOF; MS; [M+H]+', + 'CH$SMILES' => 'COC(C7)C(C61[H])(C5([H])2)C(N(CC(COC)6C7O)CC)([H])C(C(C5([H])3)(C(C(OC)C(O)(C(OC(=O)c(c4)cccc4)3)C2)O)OC(C)=O)([H])C1OC', + 'AUTHORS' => 'Ken Tanaka' + }, +"Works with a well formatted massbank record string and return one record object from \"KOX00001\" id"); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test getRecord on $server server with a true ID **\n" ; $current_test++ ; +is_deeply( getRecordInfoTest($server, ['KOX00001']), +['ACCESSION: KOX00001 +RECORD_TITLE: GABA; LC-ESI-QTOF; MS2; MERGED; [M-H]- +DATE: 2011.08.24 (Created 2008.11.28) +AUTHORS: Institute for Advanced Biosciences, Keio Univ. +LICENSE: Copyright 2006-2011 Keio +COMMENT: Peak data in the following records are not open to the public as requested by their authors. +COMMENT: Instead MassBank provides the merged spectra for the public. +COMMENT: This record was generated by merging the following three MassBank records. +COMMENT: [Merging] KO004290 GABA; LC-ESI-QTOF; MS2; CE:10 V [M-H]- +COMMENT: [Merging] KO004291 GABA; LC-ESI-QTOF; MS2; CE:20 V [M-H]- +COMMENT: [Merging] KO004292 GABA; LC-ESI-QTOF; MS2; CE:30 V [M-H]- +CH$NAME: GABA +CH$NAME: 4-Aminobutanoate +CH$NAME: 4-Aminobutanoic acid +CH$NAME: 4-Aminobutylate +CH$NAME: 4-Aminobutyrate +CH$NAME: 4-Aminobutyric acid +CH$NAME: gamma-Aminobutyric acid +CH$COMPOUND_CLASS: N/A +CH$FORMULA: C4H9NO2 +CH$EXACT_MASS: 103.06333 +CH$SMILES: NCCCC(O)=O +CH$IUPAC: InChI=1S/C4H9NO2/c5-3-1-2-4(6)7/h1-3,5H2,(H,6,7) +CH$LINK: CAS 56-12-2 +CH$LINK: CHEBI 30566 +CH$LINK: KEGG C00334 +CH$LINK: NIKKAJI J1.375G +CH$LINK: PUBCHEM SID:3628 +AC$INSTRUMENT: Qstar, Applied Biosystems +AC$INSTRUMENT_TYPE: LC-ESI-QTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS2 +AC$MASS_SPECTROMETRY: ION_MODE NEGATIVE +MS$FOCUSED_ION: PRECURSOR_M/Z 102 +MS$FOCUSED_ION: PRECURSOR_TYPE [M-H]- +PK$ANNOTATION: 41.9979886273 84.0449388199 102.0555035062 +PK$NUM_PEAK: N/A +PK$PEAK: m/z int. rel.int. + N/A +'], +"Works with $server server and return one record from \"KOX00001\" id"); + +## test a false massbank ID - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test getRecord with a false ID **\n" ; $current_test++ ; +is_deeply( getRecordInfoTest($server, ['KOX100101']), [undef], "Method \'getRecordInfo\' works with $server server and manage no sended record from \"KOX100101\" a false id"); + +## test a false massbank ID - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test getRecord with a false ID into a real list **\n" ; $current_test++; +is_deeply( getRecordInfoTest($server, ['KOX100101', 'KOX00001']), ['ACCESSION: KOX00001 +RECORD_TITLE: GABA; LC-ESI-QTOF; MS2; MERGED; [M-H]- +DATE: 2011.08.24 (Created 2008.11.28) +AUTHORS: Institute for Advanced Biosciences, Keio Univ. +LICENSE: Copyright 2006-2011 Keio +COMMENT: Peak data in the following records are not open to the public as requested by their authors. +COMMENT: Instead MassBank provides the merged spectra for the public. +COMMENT: This record was generated by merging the following three MassBank records. +COMMENT: [Merging] KO004290 GABA; LC-ESI-QTOF; MS2; CE:10 V [M-H]- +COMMENT: [Merging] KO004291 GABA; LC-ESI-QTOF; MS2; CE:20 V [M-H]- +COMMENT: [Merging] KO004292 GABA; LC-ESI-QTOF; MS2; CE:30 V [M-H]- +CH$NAME: GABA +CH$NAME: 4-Aminobutanoate +CH$NAME: 4-Aminobutanoic acid +CH$NAME: 4-Aminobutylate +CH$NAME: 4-Aminobutyrate +CH$NAME: 4-Aminobutyric acid +CH$NAME: gamma-Aminobutyric acid +CH$COMPOUND_CLASS: N/A +CH$FORMULA: C4H9NO2 +CH$EXACT_MASS: 103.06333 +CH$SMILES: NCCCC(O)=O +CH$IUPAC: InChI=1S/C4H9NO2/c5-3-1-2-4(6)7/h1-3,5H2,(H,6,7) +CH$LINK: CAS 56-12-2 +CH$LINK: CHEBI 30566 +CH$LINK: KEGG C00334 +CH$LINK: NIKKAJI J1.375G +CH$LINK: PUBCHEM SID:3628 +AC$INSTRUMENT: Qstar, Applied Biosystems +AC$INSTRUMENT_TYPE: LC-ESI-QTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS2 +AC$MASS_SPECTROMETRY: ION_MODE NEGATIVE +MS$FOCUSED_ION: PRECURSOR_M/Z 102 +MS$FOCUSED_ION: PRECURSOR_TYPE [M-H]- +PK$ANNOTATION: 41.9979886273 84.0449388199 102.0555035062 +PK$NUM_PEAK: N/A +PK$PEAK: m/z int. rel.int. + N/A +'], "Method \'getRecordInfo\' works with $server server and don\'t send record from \"KOX100101\" a false id into a list"); + + +## test an undef massbank IDs list - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test getRecord with a undef list of IDs **\n" ; $current_test++; +is_deeply( getRecordInfoTest($server, undef), [], "Method \'getRecordInfo\' works with $server server and manage undef massbank ids list"); + +## test an empty massbank IDs list - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test getRecord with a void list of IDs **\n" ; $current_test++ ; +is_deeply( getRecordInfoTest($server, [] ), [], "Method \'getRecordInfo\' works with $server server and manage empty massbank ids list"); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +print "\n** Test $current_test getRecord on $server server with only one real ID **\n" ; $current_test++; +is_deeply( getRecordInfoTest($server, ['KOX00001']), +['ACCESSION: KOX00001 +RECORD_TITLE: GABA; LC-ESI-QTOF; MS2; MERGED; [M-H]- +DATE: 2011.08.24 (Created 2008.11.28) +AUTHORS: Institute for Advanced Biosciences, Keio Univ. +LICENSE: Copyright 2006-2011 Keio +COMMENT: Peak data in the following records are not open to the public as requested by their authors. +COMMENT: Instead MassBank provides the merged spectra for the public. +COMMENT: This record was generated by merging the following three MassBank records. +COMMENT: [Merging] KO004290 GABA; LC-ESI-QTOF; MS2; CE:10 V [M-H]- +COMMENT: [Merging] KO004291 GABA; LC-ESI-QTOF; MS2; CE:20 V [M-H]- +COMMENT: [Merging] KO004292 GABA; LC-ESI-QTOF; MS2; CE:30 V [M-H]- +CH$NAME: GABA +CH$NAME: 4-Aminobutanoate +CH$NAME: 4-Aminobutanoic acid +CH$NAME: 4-Aminobutylate +CH$NAME: 4-Aminobutyrate +CH$NAME: 4-Aminobutyric acid +CH$NAME: gamma-Aminobutyric acid +CH$COMPOUND_CLASS: N/A +CH$FORMULA: C4H9NO2 +CH$EXACT_MASS: 103.06333 +CH$SMILES: NCCCC(O)=O +CH$IUPAC: InChI=1S/C4H9NO2/c5-3-1-2-4(6)7/h1-3,5H2,(H,6,7) +CH$LINK: CAS 56-12-2 +CH$LINK: CHEBI 30566 +CH$LINK: KEGG C00334 +CH$LINK: NIKKAJI J1.375G +CH$LINK: PUBCHEM SID:3628 +AC$INSTRUMENT: Qstar, Applied Biosystems +AC$INSTRUMENT_TYPE: LC-ESI-QTOF +AC$MASS_SPECTROMETRY: MS_TYPE MS2 +AC$MASS_SPECTROMETRY: ION_MODE NEGATIVE +MS$FOCUSED_ION: PRECURSOR_M/Z 102 +MS$FOCUSED_ION: PRECURSOR_TYPE [M-H]- +PK$ANNOTATION: 41.9979886273 84.0449388199 102.0555035062 +PK$NUM_PEAK: N/A +PK$PEAK: m/z int. rel.int. + N/A +'], +"Method \'getRecordInfo\' works with $server server and return one record from \"KOX00001\" id"); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff +# Structure of res : %ret = {'res' => [], 'num_res' => int, 'pcgroup_id'=> int } +print "\n** Test $current_test searchSpectrum with a list of mzs, intensities and real search parameters **\n" ; $current_test++; +is_deeply( searchSpectrumTest( + ['273.096', '289.086', '290.118', '291.096', '292.113', '579.169', '580.179'], + ['300', '300', '300', '300', '300', '300', '300'], + 'Positive', # mode + ['all'], # instrument + '2', # max return / only 2 for test + 'unit', # unit (unit or ppm) + 0.3, # tol with unit = unit / can be also 50 with unit = ppm + 50 # cutoff + ), + { 'num_res' => 2, 'pcgroup_id' => 1, 'res' => + [ + { + 'title' => 'Lormetazepam; LC-ESI-Q; MS; POS; 60 V', + 'exactMass' => '334.02758', + 'score' => '0.428034082411', + 'id' => 'WA001260', + 'formula' => 'C16H12Cl2N2O2' + }, + { + 'formula' => 'C16H12Cl2N2O2', + 'exactMass' => '334.02758', + 'score' => '0.385859601865', + 'id' => 'WA001261', + 'title' => 'Lormetazepam; LC-ESI-Q; MS; POS; 45 V' + } + ] + }, +"Method \'searchSpectrum\' works with $server server and return a list of entries from given mzs list"); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff +# Structure of res : %ret = {'res' => [], 'num_res' => int, 'pcgroup_id'=> int } +print "\n** Test $current_test searchSpectrum with the Atrazine fingerprint and real search parameters **\n" ; $current_test++; +is_deeply( searchSpectrumTest( + ['68.0245', '96.056', '104.0014', '132.0328', '138.1031', '146.0233', '174.0547', '180.125', '188.0703'], + ['300', '300', '300', '300', '300', '300', '300'], + 'Positive', # mode + ['all'], # instrument + '2', # max return / only 2 for test + 'unit', # unit (unit or ppm) + 0.3, # tol with unit = unit / can be also 50 with unit = ppm + 50 # cutoff + ), + { 'num_res' => 2, 'pcgroup_id' => 1, 'res' => + [ + { + 'title' => 'Lormetazepam; LC-ESI-Q; MS; POS; 60 V', + 'exactMass' => '334.02758', + 'score' => '0.428034082411', + 'id' => 'WA001260', + 'formula' => 'C16H12Cl2N2O2' + }, + { + 'formula' => 'C16H12Cl2N2O2', + 'exactMass' => '334.02758', + 'score' => '0.385859601865', + 'id' => 'WA001261', + 'title' => 'Lormetazepam; LC-ESI-Q; MS; POS; 45 V' + } + ] + }, +"Method \'searchSpectrum\' works with $server server and return the Atrazine record from given mzs list"); + + + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff +print "\n** Test $current_test searchSpectrum with a list of mzs, intensities and real search parameters **\n" ; $current_test++; +is_deeply( searchSpectrumTest( + ['273.096', '289.086', '290.118', '291.096', '292.113', '579.169', '580.179'], + ['5', '5', '5', '5', '5', '5', '5'], + 'Positive', # mode + ['all'], # instrument + '2', # max return / only 2 for test + 'unit', # unit (unit or ppm) + 0.3, # tol with unit = unit / can be also 50 with unit = ppm + 50 # cutoff + ), + { 'num_res' => 2, 'pcgroup_id' => 1, 'res' => + [ + { + 'title' => 'Lormetazepam; LC-ESI-Q; MS; POS; 60 V', + 'exactMass' => '334.02758', + 'score' => '0.428034082411', + 'id' => 'WA001260', + 'formula' => 'C16H12Cl2N2O2' + }, + { + 'formula' => 'C16H12Cl2N2O2', + 'exactMass' => '334.02758', + 'score' => '0.385859601865', + 'id' => 'WA001261', + 'title' => 'Lormetazepam; LC-ESI-Q; MS; POS; 45 V' + } + ] + }, +"Method \'searchSpectrum\' works with $server server and return a list of entries from given mzs list with no intensity (very low in true)"); +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff +print "\n** Test $current_test searchSpectrum with a list of mzs, intensities and real search parameters - /!\\ Bug - Real intensity **\n" ; $current_test++; +is_deeply( searchSpectrumTest( + ['121.5145853','121.6260795','126.186473','126.2979602','126.4094198','184.0731041'], + ['614328.101','298110.8522','1372105.065','799423.8448','99064.65118','2342541.316'], + 'Positive', # mode + ['all'], # instrument + '2', # max return / only 2 for test + 'unit', # unit (unit or ppm) + 0.3, # tol with unit = unit / can be also 50 with unit = ppm + 50 # cutoff + ), + { 'num_res' => 1, 'pcgroup_id' => 1, 'res' => + [ + { + 'formula' => 'C12H13NO2', + 'id' => 'KO003209', + 'title' => '3-Indolebutyric acid; LC-ESI-QQ; MS2; CE:30 V; [M+H]+', + 'score' => '0.239887404489', + 'exactMass' => '203.09463' + } + ] + }, +"Method \'searchSpectrum\' works with $server server and return a list of entries from given mzs list /!\\ Bug - Real intensity"); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff +print "\n** Test $current_test searchSpectrum with a list of mzs, intensities and real search parameters - /!\\ Bug - Real relative intensity **\n" ; $current_test++; +is_deeply( searchSpectrumTest( + ['121.51459','121.62608','126.18647','126.29796','126.40942','184.0731','385.23','502.29222','503.29564','548.33424','550.32453','551.32481','566.28931','566.79058','568.339'], + ['2','1','7','4','1','5','0','18','5','4','1','1','0','0','999'], + 'Positive', # mode + ['all'], # instrument + '2', # max return / only 2 for test + 'unit', # unit (unit or ppm) + 0.3, # tol with unit = unit / can be also 50 with unit = ppm + 50 # cutoff + ), + { 'num_res' => 2, 'pcgroup_id' => 1, 'res' => + [ + { + 'id' => 'CA000162', + 'exactMass' => '568.42803', + 'title' => 'beta,beta-Carotene-2,2\'-diol; FAB-EBEB; MS2; m/z: 568.43; [M]*+', + 'formula' => 'C40H56O2', + 'score' => '0.904567659364' + }, + { + 'exactMass' => '568.42803', + 'id' => 'CA000153', + 'score' => '0.620521335460', + 'formula' => 'C40H56O2', + 'title' => 'Isozeaxanthin; FAB-EBEB; MS2; m/z: 568.43; [M]*+' + } + ] + }, +"Method \'searchSpectrum\' works with $server server and return a list of entries from given mzs list /!\\ Bug - Real relative intensity"); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff +print "\n** Test $current_test searchSpectrum with a list of mzs, intensities and max = 2 **\n" ; $current_test++; +is_deeply( searchSpectrumNBTest( + ['273.096', '289.086', '290.118', '291.096', '292.113', '579.169', '580.179'], + ['300', '300', '300', '300', '300', '300', '300'], + 'Positive', # mode + ['all'], # instrument + '2', # max return / only 2 for test + 'unit', # unit (unit or ppm) + 0.3, # tol with unit = unit / can be also 50 with unit = ppm + 50 # cutoff + ), + 2, +'Method \'searchSpectrum\' works with $server server and return the right number of entries from given mzs list and parameters (max)'); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff +print "\n** Test $current_test searchSpectrum with a list of mzs, but no intensity (in true very low) and max = 2 **\n" ; $current_test++; +is_deeply( searchSpectrumNBTest( + ['273.096', '289.086', '290.118', '291.096', '292.113', '579.169', '580.179'], + [10, 10, 10, 10, 10, 10, 10 ], + 'Positive', # mode + ['all'], # instrument + '2', # max return / only 2 for test + 'unit', # unit (unit or ppm) + 0.3, # tol with unit = unit / can be also 50 with unit = ppm + 50 # cutoff + ), + 2, +'Method \'searchSpectrum\' works with $server server and return the right number of entries from given mzs list and no intensity'); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff +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 ++; +is_deeply( searchSpectrumNBTest( + ['273.096', '289.086', '290.118', '291.096', '292.113', '579.169', '580.179'], + ['300', '300', '300', '300', '300', '300', '300'], + 'Positive', # mode + undef, # instrument + '2', # max return / only 2 for test + undef, # unit (unit or ppm) + undef, # tol with unit = unit / can be also 50 with unit = ppm + undef # cutoff + ), + 2, +'Method \'searchSpectrum\' works with $server server and return the right number of entries from def parameters (instrument, unit, tolerance, cutoff )'); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $mzs, $intensities, $ion, $instruments, $max, $unit, $tol, $cutoff, $max +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++; +is_deeply( searchSpectrumNBTest( + ['273.096', '289.086', '290.118', '291.096', '292.113', '579.169', '580.179'], + ['300', '300', '300', '300', '300', '300', '300'], + 'Positive', # mode + undef, # instrument - ['all'] by default + undef, # max return - 0 by default + undef, # unit - unit by default + undef, # tol - 0.3 (by default) with unit = unit / can be also 50 (by default) with unit = ppm + undef # cutoff - 5 by default + ), + 388, +'Method \'searchSpectrum\' works with $server server and return the right number of entries (363) with undef parameters (instrument, unit, tolerance, cutoff, max )'); + +## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# ARGVTS : $ids +print "\n** Test $current_test getPeak with a list ids **\n" ; $current_test++; +is_deeply( getPeakTest( ['PR020003', 'FU000001']), + [ + { + 'numPeaks' => '9', + 'mzs' => ['207.0897','210.0499','224.5345','225.2768','226.0377','226.9938','227.9228','243.1025','410.0056'], + 'intensities' => ['8.488e2','9.442e2','1.093e3','5.294e4','2.896e4','7.015e3','7.870e2','4.024e3','5.620e2'], + 'id' => 'PR020003' + }, + { + 'id' => 'FU000001', + 'intensities' => ['3.277e5', '3.036e4', '5.812e4', '2.982e5', '5.196e4','4.564e5', '8.939e5','5.537e4'], + 'mzs' => ['370.8', '371.4', '532.0', '532.6', '533.3', '694.1', '694.8','695.4'], + 'numPeaks' => '8' + } + ], +'Method \'getPeak\' works with $server server and return the peak lists from given ids list'); + + + + +print "\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n" ; + +} +else { + croak "Can\'t launch any test : no sequence clearly defined !!!!\n" ; +} + 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 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 @@ -0,0 +1,2215 @@ +mz QC6 pcgroup +121.5145853 614328.101 1 +121.6260795 298110.8522 1 +126.186473 1372105.065 1 +126.2979602 799423.8448 1 +126.4094198 99064.65118 1 +184.0731041 2342541.316 1 +385.2300024 153777.6254 1 +502.2922166 6619648.811 1 +503.2956385 1681584.125 1 +548.334235 2507995.364 1 +550.3245293 829008.4774 1 +551.3248058 368415.0327 1 +566.2893078 157486.0653 1 +566.7905764 48222.51792 1 +568.3390012 446382177.5 1 +570.3450055 28876124.32 1 +571.3479121 2988517.198 1 +572.3505372 225428.16 1 +579.3233358 216856.8949 1 +587.3122117 917520.0619 1 +587.8139534 690601.2217 1 +588.3154837 58952.83371 1 +592.3272029 502690.7187 1 +626.392138 1395956.985 1 +636.313923 174562.4613 1 +652.2915266 967624.7076 1 +653.2949542 291543.285 1 +666.307255 243719.0918 1 +112.6288375 117890.6728 2 +358.2770237 0 2 +411.3575423 165856.1927 2 +478.3218145 545683.9077 2 +479.3251723 144657.5645 2 +496.3388594 326649278.1 2 +497.3421007 86412954.14 2 +498.3448681 12878117.73 2 +499.3471079 1028079.683 2 +507.3234575 167638.1508 2 +515.3122686 720161.6218 2 +515.8139796 397175.3526 2 +518.3207866 13745773.19 2 +519.3241556 3311868.986 2 +520.3272042 243489.526 2 +534.2948444 504710.1168 2 +554.3921216 1385635.332 2 +555.3954949 348251.8324 2 +564.313868 168012.914 2 +580.2914584 995761.851 2 +581.2947583 204696.4707 2 +586.3083281 138599.0003 2 +594.3070945 92685.13566 2 +596.370224 615370.5679 2 +597.3736566 72737.09261 2 +115.9676656 121776.9211 3 +317.2007344 2098352.407 3 +318.2040976 458557.6832 3 +319.2073582 0 3 +353.3521065 1658398.883 3 +474.3570859 360044.8496 3 +482.3597638 1296382.244 3 +483.3631202 301426.7483 3 +504.3378034 238621.0857 3 +522.3543945 180368757.6 3 +523.3577138 50377590.4 3 +524.3607156 7255131.902 3 +525.3630416 599539.8512 3 +541.3279032 196068.4889 3 +541.8296488 69409.55717 3 +544.3364533 10222073.29 3 +545.3398262 2790644.602 3 +546.3429472 184432.5974 3 +560.310504 309862.3598 3 +580.4077319 1005043.61 3 +581.4111065 122900.2556 3 +606.3070159 494884.5942 3 +612.3239909 156489.1575 3 +315.16276 204707.2467 4 +321.1796828 126724.0327 4 +326.3774822 115518284.2 4 +327.3808042 25116955.97 4 +328.3842252 2615994.772 4 +329.3875872 0 4 +389.1668823 0 4 +504.3051591 202555.2418 4 +676.5461678 5758573.034 4 +697.5247595 243020.3285 4 +697.7538842 239983.8012 4 +698.7572722 113034.2856 4 +699.7608545 0 4 +114.6217783 653938.15 5 +114.7332742 302321.6519 5 +116.5136396 1044234.858 5 +116.6251117 544124.1944 5 +120.2973566 19775.85284 5 +120.4088554 19691.44866 5 +328.2377679 259917.185 5 +462.243275 533866.1601 5 +462.2664868 1086115.103 5 +463.2698715 250396.1727 5 +480.277096 2065022.357 5 +481.280575 488031.4981 5 +498.2875864 5319234.948 5 +499.2910559 1101477.389 5 +515.3141244 1986891.781 5 +516.2982049 9988985.803 5 +517.301694 2839874.622 5 +518.2947627 320720.4282 5 +518.3050052 389610.6434 5 +533.3244307 267221595.3 5 +534.3277395 77776421.92 5 +535.3211137 11295733.1 5 +536.3240385 2929361.018 5 +537.3269699 212290.5597 5 +538.2680198 5824612.09 5 +538.2798766 7330132.232 5 +539.2832914 2623326.24 5 +554.2449701 2660229.58 5 +555.2484984 451046.4285 5 +555.3065167 657771.0423 5 +560.2618251 390998.2675 5 +561.3557977 6502591.384 5 +562.3592327 1856206.571 5 +574.3512231 982454.9197 5 +575.3545263 91242.72597 5 +100.0754227 463055.5623 6 +104.052634 1312590.706 6 +120.0805276 8972796.407 6 +121.0838857 689370.0993 6 +123.0549787 72375006.65 6 +124.0583775 4254013.967 6 +131.0489038 334262.8124 6 +132.1015786 95629449.65 6 +133.0315327 4235943.439 6 +133.1049622 5913875.878 6 +134.1058828 332109.922 6 +136.0754357 889175.4386 6 +137.0454536 77094471.44 6 +138.0488322 3867770.676 6 +149.0593986 456297.0041 6 +150.0580269 23805425.28 6 +151.0612352 2096401.193 6 +152.0563547 875251.7323 6 +159.0274341 2597503.227 6 +165.0543755 1410621.436 6 +166.085871 42307407.59 6 +167.0892997 3985804.571 6 +174.1235058 158797.6081 6 +175.0013747 11421129.02 6 +176.0047588 501060.366 6 +176.9995337 727204.4634 6 +182.0809017 8962361.037 6 +183.0842944 689801.5599 6 +188.0703384 2704248.846 6 +189.0737004 279539.7309 6 +189.1231288 258551.8081 6 +192.0653615 246521.0182 6 +202.1799478 236440.6917 6 +204.1228069 7874268.406 6 +204.1339792 1515839.669 6 +205.0968831 4901304.974 6 +206.1003234 641015.9685 6 +209.0917817 973410.2985 6 +213.123129 852356.8271 6 +215.138751 140997.1368 6 +218.1383621 535673.3715 6 +220.1176229 4991486.125 6 +221.1209727 386821.5287 6 +224.0761515 154760.0945 6 +229.1543785 1370388.278 6 +232.1540016 2042645.001 6 +233.15736 189433.6745 6 +238.0741185 328256.3172 6 +239.1057208 376978.1147 6 +241.1543629 817822.5378 6 +242.0995435 685184.5104 6 +243.0526933 104523.0492 6 +246.1333104 352414.3098 6 +246.1695788 109384.7545 6 +248.1489816 242275.5701 6 +250.093127 1674953.529 6 +257.1130092 1890428.693 6 +258.0734576 1457434.002 6 +258.1163214 1457344.463 6 +264.1438986 1068811.294 6 +268.103784 4118799.963 6 +268.1401341 6727359.567 6 +269.0877201 31084684.25 6 +270.0910859 3355470.258 6 +271.0920519 203094.5662 6 +275.1419922 73923.54638 6 +276.1437942 738101.107 6 +276.1801221 161243.2928 6 +282.1192667 146519.9683 6 +284.0986162 2079119.793 6 +285.0825064 191817.8883 6 +285.1019713 191817.8883 6 +290.1594043 651498.3721 6 +291.0695996 3260881.965 6 +292.0729618 271018.5962 6 +292.2015981 207241.2737 6 +294.1543898 3063942.707 6 +295.0660256 552849.2046 6 +295.1577567 286761.8814 6 +298.0963907 606584.0658 6 +298.1280753 183164.8922 6 +302.1244032 2037198.811 6 +304.17507 123420.9006 6 +307.0434539 14824793.79 6 +308.0468739 1434468.528 6 +309.0416128 964210.3596 6 +310.1280172 181931.8186 6 +310.1757416 212310.0782 6 +311.0398051 398810.5066 6 +318.1906567 522423.0508 6 +322.0544187 85526.454 6 +327.1407576 192230.9194 6 +328.1386144 889572.8307 6 +341.1352858 699770.8496 6 +367.1494606 341172.1298 6 +375.2234194 154278.8027 6 +377.144997 273974.7768 6 +384.1510069 116519.8991 6 +400.1822364 2027035.831 6 +401.1855633 323138.1637 6 +403.2294585 372558.1032 6 +427.1079978 2385773.776 6 +428.111217 313258.075 6 +434.1664143 1058679.891 6 +435.1697499 166872.0228 6 +443.0818673 3314340.355 6 +444.0850873 502374.5852 6 +445.0800625 154459.6133 6 +450.1614327 2850549.656 6 +451.164688 440509.0961 6 +473.1772132 2124069.352 6 +474.1806068 475963.8647 6 +477.1722303 227807.4177 6 +485.3578183 104114.5274 6 +518.1735392 135925.0525 6 +525.1933897 248113.0111 6 +536.1842817 275552.4583 6 +537.1680799 18279203.39 6 +538.1716926 3563637.315 6 +539.174341 430876.5736 6 +552.1791591 1075023.264 6 +553.1827069 258811.5227 6 +559.1500988 2822077.228 6 +560.1537024 527119.1299 6 +574.1609497 145007.6612 6 +575.1240278 4468265.045 6 +576.1277129 775475.5093 6 +577.1217736 142787.7429 6 +590.1349634 120469.0902 6 +331.179897 0 7 +349.3207391 723408.26 7 +358.3210724 104300.8246 7 +376.2840171 97105.58236 7 +418.3057696 84969.75468 7 +460.2585213 105312.8887 7 +542.3230503 75301901.82 7 +543.3263759 22504149.08 7 +306.2897753 93041.66214 8 +332.2215091 0 8 +457.3667553 940068.9104 8 +458.3701249 174113.8574 8 +633.3988594 1050789.689 8 +634.4022309 409023.7752 8 +650.4253197 53181412.6 8 +651.4286554 20725229.38 8 +652.431785 3998650.887 8 +653.4348455 965326.2614 8 +655.3805039 4227507.28 8 +656.3839574 1432693.215 8 +657.3869999 325305.7358 8 +671.3546283 42430.96932 8 +677.3625112 493346.4104 8 +678.3658113 112827.4733 8 +678.4565311 1578039.292 8 +679.4598874 543786.1607 8 +691.451869 415658.8887 8 +692.455268 151898.4276 8 +717.3513114 101505.7917 8 +731.3669598 147767.0884 8 +430.2609461 0 9 +478.2920984 10177938.86 9 +479.2954591 2530738.478 9 +480.2986934 186176.007 9 +554.3235023 109510.2928 9 +560.3059371 348323.2226 9 +569.3421449 85028298.48 9 +590.3207283 11617053.38 9 +591.3241808 3396402.419 9 +606.2949034 454928.6882 9 +627.3956253 385358.3958 9 +270.3151221 0 10 +387.2888376 571753.0495 10 +422.3259485 98455.23605 10 +446.3257124 1689573.256 10 +502.3214833 1767389.52 10 +520.338894 71748751.36 10 +521.3423065 19611325.18 10 +522.345291 2535564.277 10 +523.3474914 199403.6808 10 +542.3211515 4095512.233 10 +543.3243206 1096196.385 10 +558.2956679 50459.04683 10 +563.3123966 96297.9588 10 +578.3919752 437353.4863 10 +579.3953853 59400.26784 10 +604.2912996 180522.3311 10 +243.2790096 39414.9212 11 +436.2169057 17327.37487 11 +464.28201 1942903.797 11 +465.2853978 367169.4931 11 +482.2925856 1520503.851 11 +483.295994 346301.1693 11 +499.3191173 1361107.812 11 +500.3031232 4192393.883 11 +501.3066044 1042467.674 11 +502.2994205 77918.00044 11 +517.3295528 24666038.59 11 +518.3330033 6650720.267 11 +519.3256826 805808.2167 11 +520.3290345 105238.4761 11 +522.2849839 2061365.852 11 +523.2884508 572281.3983 11 +524.2691563 156848.2011 11 +530.3136436 172182.0772 11 +538.2501374 374881.6609 11 +544.2668847 304701.7672 11 +545.3608805 757757.4557 11 +568.2951304 20529073.19 11 +569.298673 5409738.747 11 +570.3011231 820384.1367 11 +571.303344 54932.19772 11 +573.2505765 1785379.55 11 +574.2540146 375208.6469 11 +589.2246648 177165.5764 11 +596.326528 1181540.778 11 +597.3299228 264388.457 11 +609.3218464 293397.3001 11 +612.3213863 0 11 +647.3778923 165211.7486 11 +429.2530186 111323.6466 12 +490.35202 0 12 +544.3388971 36454151.04 12 +545.342399 10220895.98 12 +546.3456402 1307171.322 12 +566.3210696 1182561.014 12 +567.3244566 280669.7758 12 +574.3129727 7334969.398 12 +602.3920665 100987.7655 12 +102.0546999 1285185.367 13 +102.0910757 1048526.211 13 +106.0495872 369839.2549 13 +112.0502841 886881.2517 13 +114.0659488 789772.2984 13 +116.0703306 17147838.17 13 +117.0737021 822062.2007 13 +118.0859469 35529881.24 13 +119.0892799 1768003.791 13 +120.065241 2967394.094 13 +122.0709742 238551.6701 13 +127.0386768 399012.0928 13 +130.0495949 742122.97 13 +130.0860181 285482.9419 13 +132.0764631 4608720.673 13 +134.0267386 3640154.525 13 +134.1172302 6840925.546 13 +136.061447 19810020.79 13 +138.0522676 141279.2551 13 +139.0498392 330515.4854 13 +144.1016028 904974.3141 13 +145.0492444 881264.631 13 +146.0267662 340212.4235 13 +146.1172542 1543068.912 13 +147.0761245 1488943.862 13 +148.0601379 717433.2037 13 +148.0965126 783280.4424 13 +149.022974 2986005.302 13 +150.0768995 625245.8918 13 +154.0261773 182927.124 13 +156.0322316 1244069.941 13 +160.0965162 177442.3516 13 +162.0757877 491167.3237 13 +162.1121526 2358835.222 13 +163.0597993 841156.7879 13 +163.1155438 1083000.424 13 +168.0863847 511608.186 13 +173.0417886 27069.52473 13 +175.0710574 239381.0654 13 +178.0238439 91960.49336 13 +179.0044997 283910.3437 13 +180.0864164 3126037.096 13 +186.0540292 288742.2425 13 +186.0758037 192313.9482 13 +189.0157474 69283.64421 13 +198.0969219 6625270.144 13 +199.100298 302339.2852 13 +199.1689796 1267828.385 13 +203.1387366 330334.8699 13 +203.1499549 363048.0479 13 +204.0863473 1108682.87 13 +205.1261641 4082077.418 13 +212.1125414 139098.3105 13 +213.0269056 29880.92765 13 +217.1794643 923143.7766 13 +222.0968528 824700.3296 13 +230.0954397 153630.1762 13 +241.0849101 330731.9648 13 +243.1005348 823939.7136 13 +244.0787926 687118.3882 13 +244.0924132 1843823.599 13 +245.0765219 252384.3676 13 +245.0958588 282226.1473 13 +250.1281494 351398.5813 13 +255.0971563 1357255.552 13 +256.1005226 81906.10757 13 +260.0526944 3427858.736 13 +261.0560501 214572.9439 13 +262.0508069 201670.1394 13 +262.128061 226087.1393 13 +265.1113496 333703.5879 13 +266.0742994 281750.4093 13 +268.0512591 174360.9129 13 +273.0839985 417942.7854 13 +275.159814 192388.9007 13 +280.1386342 642047.9713 13 +282.0482249 1734687.512 13 +286.0965642 1031673.468 13 +288.0743148 441021.695 13 +290.1343729 85041.04724 13 +308.0907194 1868111.853 13 +309.0940646 193623.2762 13 +312.1107796 318988.7203 13 +318.1193685 2067681.563 13 +320.2577992 514337.6949 13 +330.0726286 63880.76815 13 +346.0465246 170100.3009 13 +346.2734667 4011295.136 13 +347.2768165 754334.9418 13 +360.1495497 282621.287 13 +385.0672287 156525.8688 13 +385.1284172 262853.9442 13 +404.1420945 413550.7393 13 +405.1261457 1715261.181 13 +406.1294265 188990.6924 13 +418.1386861 470325.8929 13 +431.1404106 166766.2412 13 +522.2021048 326636.284 13 +576.1714039 752989.8542 13 +247.2416149 203669.5652 14 +265.2522062 950596.08 14 +282.2787265 99319140.7 14 +283.282065 18556402.33 14 +284.285463 1634705.81 14 +299.3052486 137904.9155 14 +326.3776165 785927.1697 14 +370.2769624 9138351.026 14 +375.2265394 1049347.476 14 +376.2298089 115308.1171 14 +395.2449353 104069.2434 14 +396.2526726 14444864.93 14 +397.2560444 3760416.281 14 +398.259528 296392.8256 14 +409.4145882 78212.41444 14 +414.3030715 2763241.712 14 +415.3064021 539128.7837 14 +464.3856117 291634.368 14 +563.5502067 14435405.09 14 +564.5536824 5537160.809 14 +565.5569892 874099.2065 14 +606.4568048 357336.0814 14 +607.4602884 102468.9355 14 +633.4829374 1136177.103 14 +634.4863992 322697.0111 14 +650.4830184 329254.4268 14 +431.2898055 327374.3833 15 +482.3233612 3697202.725 15 +483.32671 779092.8721 15 +508.2783641 102398.8737 15 +526.2918596 53792124.94 15 +527.2953684 15555440.46 15 +668.6388149 66549.88996 15 +729.5569389 275354.3681 15 +730.5604548 36401.59174 15 +731.5546682 87844.82657 15 +359.3414915 328476.2736 16 +524.3700067 32233597.55 16 +525.3735224 8459337.202 16 +526.3766583 939318.6857 16 +546.3521508 2497371.958 16 +547.3554918 577893.2846 16 +582.4232884 79386.2451 16 +166.1117424 51998.10383 17 +331.2162251 9293230.079 17 +332.2196572 2139054.831 17 +333.222989 160868.8007 17 +342.3361028 885131.6619 17 +343.3394106 99110.54783 17 +675.5427508 11846843.08 17 +334.3210297 22056401 18 +335.3244623 4566688.363 18 +336.3278065 454016.0822 18 +355.2472833 201500.6601 18 +496.2897603 211030.8328 18 +667.6352471 322791.5655 18 +522.305156 2158196.235 19 +523.3085908 594971.2596 19 +546.3544047 11617546.64 19 +547.3578176 3272183.679 19 +585.3178444 74219.94687 19 +610.3494604 116564.4885 19 +345.1955704 183603.143 20 +346.1988439 0 20 +370.294512 219023.5663 20 +403.2485294 0 20 +518.3231445 17062845.37 20 +519.3265167 4754291.431 20 +520.3296721 527015.1707 20 +540.3051836 1161079.684 20 +541.3085565 230102.8229 20 +566.3230459 535312.726 20 +567.3265387 137810.6779 20 +576.3763563 170240.2101 20 +346.3210656 306485.327 21 +494.3231958 25524809.68 21 +495.3265739 8295663.555 21 +496.3296321 553268.0566 21 +516.305125 1700163.724 21 +517.2333079 85048.34962 21 +517.3084617 284595.5713 21 +552.3763289 134981.9139 21 +640.3446465 537508.9699 21 +155.0464381 43729.91258 22 +211.1090249 235805.1359 22 +242.283813 197749.2513 22 +267.1715042 1144333.95 22 +268.1749059 43560.12752 22 +289.1534053 15694.79499 22 +301.2157301 61708.78221 22 +312.2293167 148830.8784 22 +325.2245217 0 22 +340.2604925 0 22 +398.3257692 1558668.805 22 +399.3290891 232175.6078 22 +401.3518816 125737.4135 22 +442.3518718 80221.01578 22 +466.2919212 1394713.8 22 +467.295288 225942.0183 22 +480.3439837 497449.6973 22 +481.3473297 76480.30048 22 +504.3075009 1298788.439 22 +505.3109309 343967.5255 22 +506.3595738 163693.3378 22 +508.338863 5309837.594 22 +509.3422294 1203663.044 22 +530.3208223 159869.9174 22 +548.3609537 574278.0019 22 +570.3543831 19980393.7 22 +571.3577909 6149144.344 22 +604.4078025 28237.21861 22 +626.5011552 0 22 +364.3315477 429417.3022 23 +419.1692828 60867.49666 23 +470.3831891 227641.011 23 +500.3783343 924293.437 23 +501.3817189 96807.5131 23 +532.3398493 490607.6157 23 +533.3430057 169851.788 23 +548.3241545 427817.3097 23 +550.3397615 10189494.57 23 +551.3432173 2650475.061 23 +552.3363837 266453.1549 23 +555.2952671 398156.0307 23 +567.3664395 376249.6703 23 +568.36993 67307.52399 23 +104.1067028 37753375.68 24 +126.0216286 2637618.762 24 +105.1100828 1824644.926 25 +120.1016415 1474882.689 25 +127.0250335 151924.7559 25 +128.0174562 430586.6586 25 +143.048202 1219754.816 25 +169.0581048 187748.9473 25 +170.0323644 381036.4504 25 +184.0730768 412272.3166 25 +185.0320579 1114365.459 25 +193.9881364 302773.3485 25 +203.0523287 2344662.743 25 +204.0556901 928239.1354 25 +215.0693041 470823.0964 25 +220.0295851 216121.5048 25 +221.185632 1000814.63 25 +243.1830496 1234609.763 25 +245.1800904 409455.8143 25 +249.0367577 270457.0257 25 +251.0362569 1643833.569 25 +253.0321185 116395.7448 25 +258.1097196 71434.96654 25 +273.0181686 142970.8816 25 +276.9848048 24064.6973 25 +288.9921016 168196.4261 25 +310.9740583 780043.6489 25 +326.0302185 312040.2967 25 +328.0669069 49159.03951 25 +350.0487897 118876.233 25 +366.0226707 474382.6229 25 +376.0507757 203262.9159 25 +381.0788535 672192.2757 25 +381.9966505 32570.39944 25 +383.1155333 28985.3563 25 +398.0326557 224359.7501 25 +414.0065863 717747.93 25 +435.988467 470564.3916 25 +451.9623914 738578.3548 25 +457.9704209 161637.3112 25 +473.9442892 469126.4187 25 +489.918213 329208.0668 25 +491.0371546 105958.3264 25 +507.0111778 0 25 +527.1575141 88452.68284 25 +539.0210825 215485.9484 25 +543.1314759 673239.2842 25 +576.9770886 170207.69 25 +598.9590126 135667.5474 25 +614.9328847 84852.75566 25 +636.9148678 130069.4181 25 +668.1461363 87687.44973 25 +184.0730202 880040.935 26 +290.6386702 122747.2961 26 +299.3051662 454710.866 26 +339.2523671 298330.8078 26 +381.3104955 276111.1827 26 +400.2798358 45233.95547 26 +403.292378 109839.9525 26 +468.3075555 16316485.71 26 +469.310892 3615192.966 26 +470.3140518 301803.3441 26 +476.2762721 1615152.251 26 +477.2795728 345637.0837 26 +490.2894979 1123601.62 26 +491.2928464 253179.7889 26 +524.3061113 472959.4031 26 +525.3091494 137479.412 26 +526.3607157 96713.87778 26 +530.323174 239474.8092 26 +544.3294369 8781237.525 26 +545.331882 814559.0114 26 +554.3230309 250535.5211 26 +561.2964512 241705.0605 26 +561.7982165 219528.2449 26 +564.3050163 10742846.35 26 +565.3084007 3061567.613 26 +566.3115462 336507.5017 26 +570.2816976 6894122.992 26 +571.2850598 2070202.06 26 +572.2882351 196349.4946 26 +580.2790784 666297.8145 26 +592.263691 333414.0895 26 +600.3762905 1988025.494 26 +601.3797619 492505.3208 26 +626.2756879 979015.8658 26 +627.2791785 92112.60644 26 +632.2925108 217060.6014 26 +640.29127 165458.1565 26 +464.2116559 83441.31093 27 +473.3264695 995128.5293 27 +575.371408 304697.7869 27 +576.3749471 0 27 +374.3523854 415068.6361 28 +480.3076039 22243549.09 28 +481.3110037 5577079.668 28 +482.3142285 400882.5836 28 +502.2896169 1123635.386 28 +503.2929143 258429.5821 28 +244.1902516 324274.7392 29 +315.1333525 199178.6888 29 +392.1907444 1178609.003 29 +393.1940424 111188.0992 29 +397.1461168 204373.1602 29 +398.1494067 0 29 +420.2219783 223286.0921 29 +421.2250767 0 29 +433.217195 31913.61518 29 +465.2373926 21729.19182 29 +533.3245418 16927531.69 29 +534.3279871 4273423.983 29 +442.3365626 658127.3795 30 +516.31744 375243.8564 30 +664.404498 3295236.469 30 +665.4079223 1125183.032 30 +669.359708 214837.9819 30 +311.2364526 133569.7226 31 +385.2730795 11796659.26 31 +386.276419 2929719.595 31 +387.2799216 198801.6818 31 +464.3360693 187157.8117 31 +510.3545594 152205.365 31 +521.2653217 145163.0349 31 +539.2760334 3029626.534 31 +540.2794106 763413.203 31 +557.2865643 24164156.45 31 +558.290045 7016149.903 31 +559.2929372 1081252.946 31 +575.3163927 11996743.68 31 +576.3193471 1775574.488 31 +579.2683082 4818722.429 31 +595.2334779 941031.8213 31 +596.2368039 189288.2415 31 +601.2502709 343740.8817 31 +602.3442987 1003049.719 31 +603.347628 289061.6825 31 +557.3420975 296786.0635 32 +658.3340786 480149.5377 32 +725.4158819 281163.3946 32 +745.4423885 114572.1962 32 +338.2658229 266776.6828 33 +374.3369766 306575.5875 33 +474.2605592 98332.58534 33 +516.3074236 8690236.849 33 +517.3108324 2530604.114 33 +518.3138519 264461.2747 33 +538.2893488 352143.4441 33 +648.4096185 6103073.502 33 +649.4130027 2455436.237 33 +653.3649072 557338.7117 33 +654.3682824 193799.1205 33 +531.3088421 1772645.593 34 +532.312341 478792.8085 34 +583.3770305 0 35 +605.3587715 135660.8629 35 +637.3056042 721910.6458 35 +638.3087681 177211.5816 35 +654.331387 12930102.16 35 +655.3348214 4553178.79 35 +656.3378617 691122.5618 35 +659.2866257 381591.2292 35 +660.289952 99652.71882 35 +682.3626545 978496.3295 35 +683.3660738 238366.0535 35 +695.3579933 1287726.939 35 +696.3614602 451672.6488 35 +362.3523052 22948559.69 36 +363.3556573 5346956.807 36 +364.359015 448519.8099 36 +374.2684833 76782.64676 36 +430.2943431 260003.603 36 +468.3076675 201398.731 36 +723.6978041 245796.0681 36 +724.7014313 46753.48796 36 +112.8954981 2896433.208 37 +114.892824 945365.0287 37 +140.067936 332965.4952 37 +148.0036172 3678928.22 37 +149.9925282 203602.3375 37 +156.0418533 1483956.536 37 +156.0764529 777468.1658 37 +163.9775151 8309120.74 37 +164.9809193 55985.59842 37 +165.9756478 462429.6932 37 +169.985577 333483.6959 37 +170.8541087 158285.9653 37 +185.9595244 4302631.423 37 +186.82805 228715.2265 37 +187.9576416 199054.1387 37 +188.8250087 82203.81414 37 +194.0324112 207837.8411 37 +195.977061 254818.4252 37 +196.8569004 200136.236 37 +201.9334494 10996708.49 37 +202.9367698 91888.36006 37 +203.9315137 1410483.134 37 +207.014011 233822.7199 37 +207.9980229 52689.13507 37 +219.0262216 5324330.106 37 +221.0243557 347973.0785 37 +222.9878639 561404.7711 37 +223.9718959 96894.06827 37 +231.9439773 189906.6102 37 +241.0081985 296523.9641 37 +243.918081 164307.96 37 +254.8153802 336456.7085 37 +256.982119 311889.9363 37 +259.8919855 850665.7111 37 +260.760461 70536.31944 37 +261.8891844 250580.2366 37 +275.8659236 1423382.187 37 +277.8633431 420512.0137 37 +287.0136164 227714.877 37 +295.0000971 71081.4372 37 +302.9875787 290388.5567 37 +317.8505899 134950.0017 37 +326.9479723 930437.5981 37 +332.9559771 354851.616 37 +333.8244936 420683.0903 37 +335.8217042 285610.0819 37 +348.9298745 1910032.903 37 +349.7984092 451086.8918 37 +350.9286285 174625.7355 37 +351.7957263 347791.1914 37 +363.986061 132516.7045 37 +364.9037725 2990323.005 37 +366.891402 561412.8769 37 +366.9023097 575905.6734 37 +368.888469 93473.20626 37 +369.9843903 165889.191 37 +385.9582995 119871.5415 37 +406.8884432 214886.3224 37 +407.7569314 172775.2658 37 +408.8865165 70293.48193 37 +409.754149 198365.8187 37 +422.8623317 688126.5148 37 +423.9812592 59897.07889 37 +424.8603024 388232.5246 37 +425.7280988 157595.6278 37 +438.8362153 619084.1056 37 +439.9551568 185950.4948 37 +440.8344187 381206.4483 37 +480.8209084 197669.5273 37 +482.8180098 114523.8779 37 +495.9262306 351148.406 37 +496.794729 274425.3089 37 +498.7920516 257320.9044 37 +511.9001906 508399.8198 37 +512.7686922 274214.7506 37 +513.8977259 105612.5288 37 +514.7661055 165070.0487 37 +527.874112 357205.6269 37 +569.8588621 176603.8355 37 +585.8328362 165830.9968 37 +587.8301275 127560.0923 37 +658.8968896 80019.02347 37 +674.8708145 284044.1577 37 +106.9503297 182460.8857 38 +122.9242411 4765405.956 38 +124.9223677 689147.1994 38 +136.9398893 224209.6315 38 +181.9614019 140980.502 38 +189.1595296 107002.0707 38 +190.9116754 1555535.634 38 +204.9273031 246535.6729 38 +206.8855837 1351295.95 38 +208.8837251 289469.4353 38 +220.9012198 204025.3242 38 +222.0289306 353876.8991 38 +229.1197552 56801.42197 38 +231.9882035 231025.3622 38 +253.9469107 112826.2064 38 +255.135415 142068.1049 38 +258.8989819 1089439.804 38 +264.8441757 824583.5229 38 +269.9207842 549508.7804 38 +274.8728901 1898719.092 38 +280.8181026 409424.3255 38 +285.8947098 816445.5231 38 +290.8468146 1345891.852 38 +296.065617 1598272.32 38 +343.8533147 365857.7888 38 +353.8820851 397773.2169 38 +367.2029253 140338.3596 38 +284.2943683 1284522.615 39 +285.2977711 127265.7582 39 +351.2889256 514191.0147 39 +352.2922482 78196.97448 39 +365.3884299 136850.7519 39 +395.2526641 238044.242 39 +402.4088195 277299.1757 39 +432.3677188 0 39 +436.3931725 366896.551 39 +452.5182418 538258.6195 39 +453.521471 0 39 +476.3938864 64080.45206 39 +520.4201535 240584.2293 39 +690.5428546 444210.4631 39 +710.4750014 345168.6826 39 +712.524865 0 39 +730.540022 8284066.748 39 +731.5434673 12067000.34 39 +732.4569812 266138.8151 39 +732.5463522 2484927.033 39 +735.4953078 1486313.091 39 +736.4988523 1031584.185 39 +737.5021032 46914.69755 39 +244.2630224 627678.4508 40 +288.2891395 11910318.13 40 +289.2925066 2082700.198 40 +376.3315308 387990.5436 40 +544.2531323 138789.7926 40 +149.023003 9220639.998 41 +150.0263399 629773.156 41 +205.0856187 1714730.765 41 +206.0890005 0 41 +279.1586463 5479333.444 41 +280.1620045 969488.0112 41 +301.1405452 956865.935 41 +302.1439221 59270.81654 41 +317.1144852 18212.22419 41 +390.3360159 1203195.076 41 +391.3392583 189866.9514 41 +400.3414683 4109145.925 41 +401.3448199 835588.5122 41 +418.2944939 125352.1564 41 +510.3545716 3365990.351 41 +511.357906 689852.1709 41 +532.3364707 68551.2109 41 +590.3806813 6161792.884 41 +591.3841558 1855908.558 41 +592.3872301 263090.65 41 +612.3628034 304830.1006 41 +640.5040123 206806.7059 41 +641.5076174 62801.58227 41 +500.2762487 14815460.14 42 +501.2796761 3752186.005 42 +502.2827865 360231.2216 42 +522.2582049 755649.97 42 +523.2616341 73941.32684 42 +603.2919612 907629.7488 42 +621.3026163 3148474.098 42 +638.3291266 4914893.477 42 +645.302412 207810.3254 42 +166.0859336 479023.4537 43 +240.671896 99073.0047 43 +268.2630454 312446.6771 43 +372.3618521 66648.51739 43 +390.3836153 1061129.544 43 +391.3869337 168351.4622 43 +402.2996487 154727.7122 43 +476.3150884 5740486.76 43 +477.3185065 1949263.501 43 +478.321833 206832.8792 43 +480.3364603 829494.6703 43 +481.3397621 161991.522 43 +498.2969514 502642.0244 43 +499.3003301 82761.31392 43 +520.278936 263791.2756 43 +534.3681977 29968.57206 43 +587.3480051 52765.30446 43 +281.6782838 125465.5019 44 +362.3047393 305193.5553 44 +420.3213276 105417.7428 44 +496.3524262 623897.5488 44 +497.3558082 114633.7202 44 +562.3493144 9710503.123 44 +563.3527768 2850954.774 44 +564.3558115 391179.1752 44 +582.3544515 259962.6152 44 +584.3313219 590006.2046 44 +585.334754 103629.4668 44 +596.3420247 1348727.099 44 +597.3453429 338503.9762 44 +338.341251 775227.4861 45 +339.3446628 57118.74297 45 +506.5286994 0 45 +738.506151 6665540.426 45 +739.5095173 2882649.017 45 +740.5122922 123875.0212 45 +298.2735277 2623240.802 46 +353.2679991 123592.2089 46 +478.3207723 1721630.865 46 +479.3240822 622515.2455 46 +480.3274802 50241.21229 46 +548.3701186 5163501.054 46 +549.3735264 1388646.738 46 +550.3767002 118999.9147 46 +570.3524132 219791.0059 46 +360.3366381 14494863.74 47 +361.3399838 3234353.525 47 +362.3432739 292747.4419 47 +528.3075379 1984019.929 47 +719.6664389 269465.201 47 +720.670112 43265.04579 47 +226.6562406 128497.5467 48 +341.3520329 300838.3865 48 +411.3210507 689161.0498 48 +412.3243349 106946.6216 48 +414.3570383 96259.7615 48 +452.3051905 6062998.949 48 +453.3084727 1933655.601 48 +454.3117923 203050.2758 48 +581.3633052 151199.6421 48 +300.289176 10122817.74 49 +301.2925581 1721523.079 49 +322.2711157 173036.1917 49 +119.0851878 1136639.833 50 +121.1008532 1348068.097 50 +123.1165017 456671.8921 50 +135.1164854 538593.0794 50 +139.1113848 1270153.162 50 +149.1320989 545448.5394 50 +153.1270341 909298.2971 50 +223.0632208 840276.4236 50 +237.2208451 699525.8817 50 +239.2364505 680826.9471 50 +247.2415587 603144.5776 50 +257.2470309 4670118.142 50 +263.2364509 819933.3558 50 +265.2521053 5023808.782 50 +266.2554171 597166.6786 50 +270.0353886 906238.7387 50 +277.2156902 578269.6428 50 +279.2313531 414564.3182 50 +281.050656 1050031.48 50 +282.278595 32713388.93 50 +283.2626381 5678303.612 50 +284.2659766 863869.545 50 +285.2782502 349431.355 50 +303.2313258 1224697.669 50 +305.2469522 658413.3484 50 +329.2469109 2330821.807 50 +330.2502146 354357.2574 50 +355.0693072 703212.6348 50 +369.3509106 6402226.139 50 +370.3542273 1252173.917 50 +371.1005768 636386.8843 50 +296.257857 270871.1809 51 +375.3363819 134130.3238 51 +520.3024527 3483487.534 51 +616.3447533 414286.2811 51 +289.1693175 0 52 +484.3622628 136981.49 52 +542.3500355 112606.949 52 +559.3765507 250686.229 52 +109.1008633 819088.2217 53 +121.1008471 1581238.457 53 +123.1164876 1604159.798 53 +125.0957378 451251.143 53 +133.1008305 889091.6882 53 +135.1165042 1437249.394 53 +139.1113806 1520896.592 53 +147.1164326 717292.3587 53 +149.1321031 1263651.806 53 +153.127035 856882.1126 53 +175.1477606 425879.1199 53 +223.0632042 1062190.244 53 +237.2208421 882423.832 53 +239.2364617 964169.8325 53 +247.241553 524054.6156 53 +255.2314203 702693.4006 53 +257.2470231 10402457.26 53 +263.2364435 729544.4097 53 +265.2521026 2317852.466 53 +266.2554134 587584.9838 53 +270.0353769 1092913.799 53 +277.2156967 595854.5027 53 +279.2313438 938089.8819 53 +281.0506359 541970.5634 53 +281.2469862 1391888.183 53 +283.2626444 4353508.921 53 +284.2659759 855890.2178 53 +285.2782428 1403689.008 53 +298.2735777 46556.41164 53 +303.2313025 3425462.813 53 +305.2469625 624825.9043 53 +313.2730764 801112.7051 53 +329.2469041 1260080.45 53 +330.2502416 542432.0605 53 +355.0692948 1447323.119 53 +369.3509022 3973048.978 53 +370.3542089 1313848.133 53 +371.1005918 812052.3757 53 +445.1192212 750033.369 53 +566.3346953 1450826.468 54 +567.3382023 222054.1891 54 +228.2317735 577267.2946 55 +372.2891048 1246225.14 55 +373.2924494 279318.263 55 +376.3679707 391464.9695 55 +394.2709709 221836.4386 55 +395.2742515 0 55 +430.3420485 21914.06832 55 +604.3835106 619205.4207 55 +605.3869005 101059.7271 55 +609.3387223 91218.61899 55 +368.2789776 21809.99213 56 +374.2795831 162568.5395 56 +376.2587895 382243.1579 56 +377.2620832 23895.43392 56 +393.2852951 2229246.657 56 +394.2886041 460861.9857 56 +396.2613823 240473.6825 56 +398.240719 27983.9536 56 +420.1910142 137720.4664 56 +421.3165159 1503308.595 56 +422.3198035 343557.5131 56 +434.3117347 259140.6086 56 +435.3150723 49642.02087 56 +449.3477024 1266575.739 56 +450.350919 280066.0883 56 +678.5086045 1036914.767 57 +679.5119523 398391.1578 57 +706.5376679 2788314.198 57 +707.541001 931058.7655 57 +732.5532976 21919070.9 57 +733.5565539 10237091.5 57 +734.5587833 1544879.036 57 +120.0804543 3053419.553 58 +166.085883 11045653.18 58 +167.0892355 1084852.66 58 +188.0678523 0 58 +291.0694784 1454513.874 58 +307.0433925 1269471.192 58 +454.2920719 8879512.682 59 18.04926324 +455.2953719 2013714.608 59 +456.2986086 140346.3483 59 +472.3413351 6294137.162 59 +473.344666 1742244.799 59 +474.3480038 238010.558 59 +476.2739337 441891.4757 59 +182.080859 81972.26636 60 +312.3620252 0 60 +332.3306348 904890.8936 60 +333.3339184 205252.4222 60 +426.3570373 6053205.238 60 +427.3603099 1360948.569 60 +492.309974 2108149.364 60 +493.3133599 636015.1803 60 +514.2918299 0 60 +702.4626368 185686.2699 60 +702.7969811 134308.893 60 +314.3048694 142995.4169 61 +364.3203963 104957.7206 61 +412.3414146 333632.9831 61 +572.3701206 1892895.185 61 +573.3734929 543546.0118 61 +436.3776556 304923.6651 62 +534.344903 2323508.869 62 +535.3483527 611580.6846 62 +538.3001134 91784.63853 62 +675.6756017 50073.55828 63 +676.6789355 0 63 +394.2269759 394073.8047 64 +395.2302636 49237.89762 64 +635.4142195 165915.1505 64 +652.4409207 3127298.438 64 +653.4442367 1042313.047 64 +654.4473461 185191.1231 64 +657.3962853 313168.2378 64 +658.3994651 44933.30226 64 +311.2364431 112956.4205 65 +326.3048566 6184088.084 65 +327.3082051 1147275.868 65 +442.3308706 5164603.772 65 +443.3341614 1490993.847 65 +444.3376016 96091.9613 65 +452.3151768 426522.6083 65 +459.3573643 47294.82807 65 +464.3127011 484238.3899 65 +487.388651 276151.953 65 +500.3839365 68834.83621 65 +607.4568598 250136.5513 65 +452.3726586 232518.3534 66 +666.4201737 4459353.253 66 +667.4235639 1491003.148 66 +668.4359545 337731.2791 66 +669.4391751 125197.0711 66 +142.1223185 175340.8962 67 +155.1063316 1036506.962 67 +165.1120822 102952.9006 67 +171.101302 212043.819 67 +172.1329109 4649996.078 67 +173.1362789 189192.0441 67 +188.1278366 1666915.059 67 +189.1311766 82069.0758 67 +194.1148366 253290.0566 67 +254.2474393 1564537.116 67 +255.2507592 39265.1831 67 +296.3307233 268130.4037 67 +306.2399457 39901.01074 67 +347.2899021 200827.0704 67 +374.3047855 308063.0727 67 +383.3414919 1100379.416 67 +384.344776 255152.6971 67 +396.2865941 46986.9284 67 +402.2995618 114343.7579 67 +640.4412511 277568.6957 67 +681.5015929 106528.4646 67 +478.2612566 835057.6001 68 +479.2647315 231410.4406 68 +500.243164 58510.89316 68 +529.2932732 29040.73675 68 +274.2734729 274845.4395 69 +387.1794843 2231488.869 69 +388.1828404 507564.6669 69 +404.206018 3177875.436 69 +405.2093274 681694.4125 69 +409.1613444 2983069.021 69 +410.1646998 647802.1154 69 +425.1352536 1598384.515 69 +426.1386004 199798.9241 69 +432.2372049 6570915.673 69 +433.2405066 1749272.634 69 +445.2324219 7742226.862 69 +446.2357325 1878737.029 69 +447.2391512 60206.8883 69 +303.1433064 44996.02916 70 +320.1697722 1449981.489 70 +321.1731093 172584.433 70 +325.1251526 311289.195 70 +326.1284914 0 70 +348.2010339 408809.0968 70 +349.2043442 17850.95819 70 +361.1962916 0 70 +184.0730694 391972.965 71 +294.2058599 385287.9753 71 +321.2418732 228296.6582 71 +388.3204525 642480.2625 71 +389.3237733 139953.307 71 +422.3257216 76149.26581 71 +424.3413865 1032651.271 71 +425.3447756 196322.3556 71 +448.341364 2546584.156 71 +449.3447042 716198.5085 71 +482.2659166 299071.5469 71 +528.3200663 257050.8817 71 +530.3231223 176529.4339 71 +561.3180509 196520.7271 71 +568.3386757 36766335.45 71 +569.3421968 10573091.46 71 +578.3444313 165433.2756 71 +621.398822 0 71 +730.3820295 696976.4731 72 +731.3853584 196308.5601 72 +581.2386711 119892.4924 73 +583.2542969 46848.29902 73 +585.269941 1976835.192 73 +586.2734366 537224.4664 73 +350.3047916 319291.1064 74 +420.3101443 644728.1211 74 +421.3133909 61442.22834 74 +436.3414176 122176.6865 74 +441.2966497 159766.2028 74 +536.406561 101912.4399 74 +550.3858082 3588745.877 74 +551.3891955 860372.6204 74 +552.3922273 47464.38731 74 +572.3677318 113016.1475 74 +272.2943324 128969.2259 75 +282.2786419 848516.8105 75 +283.2819103 104959.1267 75 +300.2892017 5033794.574 75 +301.2925627 767449.8062 75 +316.3204515 2515995.611 75 +317.3238264 434931.7505 75 +322.2711585 0 75 +351.3364069 2050244.904 75 +352.3397557 417788.339 75 +373.3174114 31549.36644 75 +383.2897832 105703.1516 75 +421.3181379 25910.27188 75 +436.2508151 168848.5304 75 +453.277387 202166.9279 75 +572.360985 1640508.236 75 +573.3633424 171801.0514 75 +581.3075365 258356.6285 75 +592.3363396 2025901.456 75 +593.3396976 682235.6559 75 +599.3182118 340023.2746 75 +628.4076161 304413.7068 75 +309.3258895 148517.8896 76 +368.351674 3216169.824 76 +369.3550054 640427.0668 76 +385.3570152 87499.54464 76 +425.2654615 198271.1078 76 +426.2688081 23316.09369 76 +493.2527862 0 76 +559.5187553 482159.7868 76 +560.5221598 146072.4502 76 +428.3726964 5656027.623 77 +429.376034 1213148.637 77 +702.4695331 190487.7523 77 +601.2901278 165906.928 78 +649.3936896 3480480.972 78 +650.3970479 1141660.773 78 +651.400101 116782.434 78 +671.375395 720639.3481 78 +672.3788279 194903.8249 78 +694.4515023 174872.2298 78 +212.117787 15293764.7 79 +213.1211471 2224151.687 79 +219.1738825 129203.7869 80 +330.2533649 6144691.112 80 +331.2566985 1172429.62 80 +450.2278324 757942.9692 80 +452.226041 242312.6006 80 +721.4212326 424763.4143 80 +722.4248639 186635.9243 80 +723.4188891 145061.9298 80 +180.1015883 128755.4964 81 +246.1695077 1531224.169 81 +247.1729139 158993.4184 81 +726.5060896 5998564.16 82 +727.5095075 2589244.6 82 +728.5125391 357731.3018 82 +748.4880569 302110.2918 82 +354.2998776 176691.201 83 +367.1940752 277241.3653 83 +373.2109125 5507297.109 83 +374.2142958 1259415.085 83 +380.2767373 154830.0327 83 +389.184863 180302.5919 83 +390.3725679 157724.4126 83 +428.315435 2176945.908 83 +429.3187394 514525.4836 83 +450.2973267 877917.9766 83 +478.331017 415314.3304 83 +480.4041479 194419.1097 83 +500.3128609 208424.1423 83 +560.3680892 425239.0988 83 +563.3481746 0 83 +701.4512607 307201.1379 83 +702.4546927 112758.5593 83 +723.4331846 470083.1051 83 +724.4364968 142169.4171 83 +728.4835645 322712.0826 83 +728.5221951 975229.0959 83 +325.320762 817205.4655 84 +509.2866084 106131.0574 84 +526.3131592 107729.5269 84 +556.3389432 1694252.293 84 +188.0702528 2548886.781 85 +189.0736213 283408.2439 85 +205.0967714 4678973.151 85 +206.100128 416130.6098 85 +227.0786601 315098.4894 85 +249.0605968 81682.30113 85 +324.2891775 2554920.871 86 +325.2925388 451784.5079 86 +346.2710333 27767.87545 86 +351.3363879 101667.6513 86 +392.3516228 0 86 +432.2559468 158058.113 86 +452.3726347 253834.8678 86 +494.3255502 39990.57976 86 +304.1883926 21656.35416 87 +342.3724655 117606.3146 87 +506.3230696 92307.08141 87 +572.2971317 237586.6624 87 +664.3446771 438751.8179 87 +688.3446198 3519947.379 87 +689.3480494 1121810.463 87 +690.3508605 163063.0883 87 +150.0579657 160226.7779 88 +426.2995178 363502.1384 88 +452.3362607 95070.04624 88 +460.2871574 4159301.998 88 +461.2905246 1013371.338 88 +462.2829004 180471.6866 88 +482.2689473 195758.8134 88 +508.3388338 714279.7092 88 +609.3321773 29547.04868 88 +386.2765684 0 89 +730.5375094 12074551.16 89 +731.5409701 3580372.248 89 +107.0852441 69756.72732 90 +125.0957979 248517.2621 90 +135.0801414 519565.6669 90 +153.0906807 709613.7621 90 +170.1172501 1503537.5 90 +330.2633817 475680.3838 90 +352.2452605 2832232.737 90 +353.2485866 530695.5425 90 +368.2191619 257043.5338 90 +375.3211266 7256873.842 90 +376.3244543 1002346.562 90 +388.316372 2918650.728 90 +389.3196813 483669.0678 90 +410.2716456 266337.1064 90 +434.2716055 1315563.257 90 +435.2749479 214270.3756 90 +659.5197149 580749.3552 90 +660.5230917 215740.151 90 +682.5049269 41258.4723 90 +724.4538426 788608.9864 90 +725.4572302 223698.9152 90 +387.2887681 0 91 +429.3720287 302349.7821 91 +658.539727 284567.7847 91 +659.543167 86171.07389 91 +732.5531065 9565061.507 91 +733.5565617 3199656.319 91 +740.5581206 908345.6494 91 +482.3232121 412569.0132 92 +256.2265783 3858233.116 93 +257.2299528 565966.9669 93 +272.2003735 253289.4318 93 +361.3570214 765048.6543 93 +362.3603248 60827.49188 93 +392.3264166 164557.4726 93 +267.2103847 422561.5945 94 +270.315123 479611.1368 94 +320.2580137 236714.0619 94 +321.2419502 67016.00092 94 +325.2007935 111595.1929 94 +341.1783658 660882.9406 94 +347.1952684 3972240.214 94 +348.1986208 608123.5955 94 +363.1688642 73835.23066 94 +412.2874623 2077093.188 94 +413.2908108 421165.6472 94 +416.3727595 127565.8948 94 +428.3153144 1655177.453 94 +434.2692692 498809.6062 94 +435.272644 130183.4916 94 +446.3258337 1187472.359 94 +447.3291651 198248.2246 94 +456.2511357 225866.5057 94 +466.2710918 170529.342 94 +468.3077207 26405.10745 94 +470.3404186 72310.81647 94 +472.2791698 302931.5195 94 +473.2823646 40096.21456 94 +486.3683573 364048.6962 94 +487.3717182 98284.92129 94 +490.2895559 29309.96338 94 +510.3910519 360474.5899 94 +518.3209635 115969.6968 94 +532.3729841 752382.4893 94 +533.3763132 56966.60182 94 +544.3366351 90639.34476 94 +590.3209721 259993.5276 94 +649.4193428 14769.2455 94 +671.4015064 428449.0997 94 +672.4048308 98998.40067 94 +697.5247986 1105059.709 94 +698.5282469 431795.2858 94 +713.5204005 19754.72087 94 +726.4697403 310741.7937 94 +727.4732159 57042.7371 94 +748.4517462 246502.7899 94 +324.3620307 3046580.023 95 +325.3653466 614367.2612 95 +344.2613276 274326.3657 95 +349.2109662 1214537.772 95 +350.2143304 199273.7713 95 +424.3567474 479800.0726 95 +675.4327615 30821.70923 95 +326.2871023 7312159.337 96 +327.2904229 1304921.119 96 +328.2828551 164982.6439 96 +431.4352032 1044917.92 96 +200.2368677 712894.2462 97 +201.2402264 34131.5344 97 +466.174414 280785.6047 97 +600.2822442 52801.52447 97 +651.4090943 67881.40568 97 +392.315211 227685.7059 98 +478.3517966 364786.6913 98 +552.4013621 140689.8783 98 +578.4357125 210160.799 98 +589.3661794 343455.1312 98 +590.3696553 137001.567 98 +611.3479794 636262.57 98 +612.351386 127196.9614 98 +312.2892288 41083.47622 99 +372.3102639 519693.5253 99 +388.2509682 197763.9056 99 +399.3362996 2237910.042 99 +400.3396333 562643.392 99 +405.2775469 69297.96322 99 +447.3290645 404777.0077 99 +529.3108964 708972.868 99 +301.2111649 59007.46489 100 +363.3728202 5383082.539 100 +364.3761614 1178761.764 100 +373.2110055 45449.38027 100 +433.2842823 1194188.569 100 +434.2875711 275566.7153 100 +653.5023598 103072.4178 100 +663.1325701 456364.7867 100 +663.8013859 136660.609 100 +696.52493 245973.6981 100 +718.5741489 753293.9944 100 +719.5776107 55803.4553 100 +722.475119 233664.9082 100 +741.5900465 3029639.937 100 +742.5934648 983206.1495 100 +743.5972281 240294.5545 100 +748.4908191 658779.6848 100 +749.494405 257332.8385 100 +482.3233511 3418087.39 101 +483.3266872 772304.1618 101 +304.2993307 2076209.899 102 +305.302709 420279.1153 102 +320.2579354 130521.6312 102 +376.232359 654258.2268 102 +387.2886912 535415.8629 102 +398.2142254 1001541.829 102 +421.2900948 1746426.839 102 +434.2852971 1435080.46 102 +435.2885111 102457.6369 102 +512.3700957 439425.1786 102 +559.3021517 1679291.59 102 +560.3056312 317388.3885 102 +576.3286781 2597030.288 102 +577.3321003 620349.4154 102 +581.2840029 280842.1524 102 +447.2632987 643348.8521 103 +448.2666447 127501.8796 103 +531.3318745 789095.0253 104 +532.3350283 123375.8626 104 +137.0454414 13956360.82 105 +269.0875464 3458362.148 105 +307.0433583 6162487.993 105 +350.3159151 2963429.507 106 +351.3191925 458045.8969 106 +394.3419948 1021225.481 106 +470.2904742 184076.0002 106 +214.2525011 717825.8548 107 +389.2580809 22517.14253 107 +440.2898552 176473.1815 107 +445.2452746 377531.3341 107 +452.3126234 445136.3773 107 +492.3074761 1353963.254 107 +493.310823 214813.7926 107 +552.2880101 190424.4719 107 +583.2540146 2435264.371 107 +583.7557038 229264.4713 107 +584.2573852 522324.7239 107 +182.1536148 145275.7268 108 +272.257962 76300.92549 108 +298.3462951 379006.5991 108 +299.3496802 45196.09423 108 +346.2735039 2204891.128 108 +347.276823 496571.4334 108 +350.2295348 102363.1758 108 +368.2553866 305902.7447 108 +369.258678 76163.59556 108 +373.3054831 497561.9204 108 +386.3007139 525366.8173 108 +404.3264835 61611.63414 108 +466.2943438 892292.0904 108 +467.2976432 157905.0264 108 +508.3259775 861667.3865 108 +509.3293108 183332.9333 108 +513.2812804 76236.4834 108 +263.236442 217966.6454 109 +280.2630293 5226221.172 109 +281.2663716 973597.2183 109 +397.3569854 197130.7294 109 +416.3152344 1524802.347 109 +417.3185072 322656.2606 109 +438.2971086 75442.24358 109 +125.9859012 16572310.07 110 +126.9892494 246679.2346 110 +140.0015439 10035409.25 110 +152.946772 2687593.196 110 +166.9623956 14204247.2 110 +167.0124325 18384666.13 110 +168.0157855 505960.2103 110 +181.0281075 4043049.057 110 +183.061141 284081.4625 110 +185.023042 1213780.358 110 +193.9733133 585760.5631 110 +214.9172341 176326.5901 110 +228.9328266 459601.002 110 +239.9661685 1103057.059 110 +253.981792 1138082.278 110 +255.9436756 2229310.177 110 +267.9974436 245141.4945 110 +269.9592857 2672720.974 110 +280.9426036 154641.3408 110 +282.9044807 390267.0629 110 +283.9748933 809714.885 110 +296.9201133 633420.2338 110 +310.9357648 219562.0594 110 +334.9931903 1258000.509 110 +422.7610717 858410.4506 110 +423.262775 329377.9408 110 +435.7688597 152118.06 110 +704.5242544 3442891.297 111 +705.5276527 1624896.999 111 +709.4794946 40094.56705 111 +348.2891757 273519.8619 112 +386.2683581 259052.9776 112 +388.36793 6298242.567 112 +389.3712561 1410667.315 112 +416.3515535 247344.4283 112 +496.3389468 16939719.8 112 +596.4147313 75535.8743 112 +722.4382181 252344.6048 112 +423.3613096 541825.7298 113 +424.364597 78712.28316 113 +441.3718264 65843.57685 113 +622.3059194 58461.41212 113 +662.3888249 941177.7322 113 +663.3922825 313260.4724 113 +679.3780017 388099.6819 113 +719.3667155 197896.2365 113 +232.1538904 1533526.995 114 +233.1572628 152171.2454 114 +250.0929856 401059.4569 114 +320.3054734 762894.2785 115 +359.2575009 559921.0339 115 +361.2731347 1134070.776 115 +362.2764633 75838.05273 115 +604.2952363 151021.2888 115 +622.3059058 827105.9653 115 +623.3086942 138310.0761 115 +639.3325524 1287363.101 115 +640.335314 170562.6125 115 +643.2843065 711912.7488 115 +644.2877834 98753.68869 115 +659.2493714 153798.056 115 +662.3290878 592993.8629 115 +663.3325858 184878.7001 115 +380.3153246 130508.4588 116 +454.3883017 1286168.369 116 +455.3916631 333798.056 116 +218.1535086 126235.3367 117 +303.1850299 405455.7576 117 +310.2734674 2483124.819 117 +373.3206587 1277292.272 117 +374.3239569 217884.4882 117 +395.3023733 114618.4072 117 +410.2351759 227023.6337 117 +427.2617593 153323.6974 117 +442.2479856 1744440.491 117 +443.2512739 427206.23 117 +242.2838398 364300.9794 118 +340.3204334 528045.3632 118 +341.3237928 31949.60914 118 +388.3415232 175696.7232 118 +414.3359074 2218140.22 118 +415.339258 570488.8961 118 +424.2739803 1323810.853 118 +425.2772909 278066.6516 118 +506.3232254 684147.6106 118 +507.3266045 138907.6391 118 +508.3752537 2817285.007 118 +509.3785861 694910.7314 118 +530.357166 103806.0283 118 +228.1954537 702041.65 119 +244.1904038 378078.7018 119 +370.3310752 71499.63953 119 +431.3837047 273637.5045 119 +456.4040352 684676.5988 119 +643.7853151 689976.8647 119 +644.1197548 1109245.468 119 +386.2717279 196931.903 120 +409.3570122 2082422.335 120 +410.3603349 436173.6974 120 +450.2993574 2178716.625 120 +451.302693 561530.4449 120 +598.4221855 196842.8098 120 +376.3315142 1399143.548 121 +377.3347878 336536.6107 121 +474.3297206 391073.288 121 +417.2272541 158567.2861 122 +640.3163965 1615696.087 122 +641.319742 370607.5136 122 +645.2717987 36895.70059 122 +668.3475912 96793.0258 122 +253.1443076 115697.6677 123 +298.0962759 687118.8484 123 +367.2684038 109221.9177 124 +374.1802256 410318.7272 124 +375.1835732 18428.67445 124 +384.2948541 180094.3301 124 +131.0851272 358478.5642 125 +282.2786116 11002296.42 125 +381.4196851 356214.432 126 +422.3046418 1461632.733 126 +423.3079822 337968.6717 126 +694.5198019 234578.0849 126 +256.2629532 1453064.354 127 +282.2785569 9117152.874 127 +431.3874352 429022.4734 127 +325.211046 214690.3086 128 +337.3573114 1626633.379 128 +338.3606254 264771.7879 128 +354.2820712 211279.1245 128 +371.2803257 1591220.69 128 +372.2728342 107808.3687 128 +398.2685045 485300.1966 128 +474.3782522 0 128 +490.4013009 75308.34855 128 +518.4045577 74331.58826 128 +523.3597671 100273.1728 128 +563.2646655 142794.9047 128 +564.2681981 23025.63152 128 +567.3860155 106403.0952 128 +736.4907201 543178.5076 128 +738.5426296 5486054.993 128 +739.5461117 1187986.424 128 +744.5532643 1820117.426 128 +658.5398059 5923700.014 129 +706.5397202 1192448.615 129 +707.5433122 289590.0205 129 +732.5535111 4382625.256 129 +746.5687986 1511946.105 129 +747.5722254 590233.494 129 +377.1448159 1707441.728 130 +378.1481818 221047.5673 130 +399.1267439 171715.9123 130 +500.2740864 306116.3695 131 +559.3026112 1488195.221 131 +576.3287078 2438602.122 131 +430.3309687 245325.3543 132 +431.3342818 18121.63406 132 +444.3789297 182804.9041 132 +396.3102151 296695.0428 133 +528.2984805 2955234.922 133 +529.3008539 195782.1569 133 +548.2740094 2132085.921 133 +549.2774022 602366.7505 133 +564.2393453 192019.224 133 +584.3700949 949377.9408 133 +585.3735489 208422.5992 133 +610.2444924 131184.322 133 +330.2533456 2414812.374 134 +433.2013922 254461.8018 134 +226.1798444 302597.6654 135 +367.4042023 1074007.076 135 +368.4074935 300452.0156 135 +408.3079717 326650.0143 135 +410.2685353 60662.24359 135 +286.3098764 90772.09927 136 +304.2840191 159790.8626 136 +378.2803514 621132.4448 136 +379.2836919 80061.85134 136 +402.2532116 232752.6982 136 +403.2565373 0 136 +415.2107339 1005022.564 136 +416.2140362 195856.5965 136 +437.1925785 1008224.428 136 +438.1958263 145147.7736 136 +453.1664529 489411.4278 136 +460.2684217 3644273.102 136 +461.2717616 813599.1297 136 +473.2636531 4228806.273 136 +474.2669914 1111145.497 136 +488.2996009 421978.5988 136 +534.3180214 341864.2801 136 +544.3106261 96005.15678 136 +378.3471205 1254451.871 137 +379.3504264 213761.0754 137 +430.242718 113007.1372 137 +377.3519725 273146.115 138 +409.3053943 516557.7457 138 +440.2787615 99643.75746 138 +457.305228 1749984.123 138 +458.3085659 567154.7915 138 +479.2871769 77492.60599 138 +511.3021637 164868.1753 138 +526.2919191 2588458.101 138 +528.3287434 374724.6244 138 +256.2631139 4274384.159 139 +257.2664221 727276.7847 139 +387.3727843 1321671.5 139 +388.2874443 905845.7645 139 +388.3760969 337433.7232 139 +389.290702 152386.4323 139 +394.3309924 1433172.036 139 +395.3343058 279074.9181 139 +437.3883665 302402.834 139 +358.2846274 1037984.456 140 +359.2879818 381080.5496 140 +380.2664456 241594.6808 140 +531.2708132 576762.5917 140 +532.2741203 39047.50947 140 +548.297284 567351.4931 140 +549.3007126 40739.87132 140 +553.2525919 65187.08453 140 +732.545629 942149.6171 140 +733.5490605 282874.6288 140 +354.3554317 145121.532 141 +390.2666798 53235.61179 141 +416.2789325 266539.053 141 +458.2892964 216529.5574 141 +576.3650849 2179069.11 141 +577.3684797 572504.603 141 +598.3471594 50012.25159 141 +223.0960898 94467.3209 142 +232.1327502 0 142 +430.3206486 251536.0593 142 +573.355984 28344.13234 142 +200.1641557 347038.8773 143 +216.1590529 51261.30533 143 +424.2838742 284759.4815 143 +436.3543004 234337.4333 143 +511.3192156 65288.60379 143 +533.3010472 111057.7649 143 +277.1793006 283039.8802 144 +295.1897907 331592.8525 144 +327.2159961 333286.294 144 +372.2737583 457384.8921 144 +385.2689456 390314.7754 144 +394.2944751 323131.7396 144 +452.2762916 1062915.001 144 +453.2795526 78989.70206 144 +684.5554361 2293410.025 145 +329.2005802 331760.8721 146 +330.2038663 17316.39553 146 +478.2612599 96612.08229 146 +616.461969 1144935.684 146 +617.4653851 187335.3807 146 +362.2472626 404406.3788 147 +510.4872745 1099754.661 147 +511.4905593 748430.349 147 +536.1645351 1744266.01 147 +537.1634336 426917.4792 147 +538.161191 336839.803 147 +704.521726 3106048.523 147 +724.4904592 509983.9229 147 +725.4939911 144080.5292 147 +747.5721908 911482.2509 147 +444.3100747 690821.8215 148 +445.313307 227432.1181 148 +468.3100106 178222.6633 148 +522.3544982 2471673.981 148 +606.3755807 149563.6617 148 +510.4507365 210744.7845 149 +682.5398326 3539201.293 149 +701.827144 467707.4543 149 +702.161557 1052496.325 149 +702.4959633 532067.1415 149 +734.5112029 903299.3773 149 +735.5146595 442589.3443 149 +270.2787292 247150.7961 150 +340.3933266 2340394.723 150 +341.3966564 143682.0305 150 +369.2970225 290574.4644 150 +374.3776046 737490.8035 150 +375.3809339 58874.41528 150 +436.7929757 803914.7789 150 +437.2946785 250532.8228 150 +704.4853236 316913.7625 150 +705.4888782 93027.25732 150 +328.3205212 1530681.784 151 +329.3238238 246180.4337 151 +396.3465968 784609.5244 151 +353.3885427 2485567.475 152 +354.3918754 503291.8078 152 +694.5095062 87810.59688 152 +355.2373535 100367.7199 153 +394.3420125 1346263.432 153 +395.3453542 239743.4768 153 +416.3239327 165983.1362 153 +436.2950476 181006.5792 153 +534.3085833 228821.6442 153 +664.4044701 1101099.624 153 +172.1328616 832547.5042 154 +302.3048353 49170.45858 154 +324.2139874 110149.584 154 +347.2898311 446061.7122 154 +348.3367356 3254159.773 154 +349.3400384 574007.1663 154 +360.2850797 173687.8422 154 +450.2894423 59224.95226 154 +470.3255239 141958.1049 154 +482.3102974 428003.7638 154 +487.2656963 144758.0579 154 +642.3602565 473696.4809 154 +683.3693157 133054.301 154 +327.2267228 147884.3371 155 +356.2977302 297908.3349 155 +400.3933113 18213.7176 155 +565.4498278 106671.2083 155 +590.3212844 24195.80694 155 +608.4727541 558927.6295 155 +613.428098 517723.4694 155 +656.5244469 1042066.914 155 +657.4542294 237440.7598 155 +680.5243511 1941559.146 155 +681.5277708 653656.3038 155 +710.5090872 710897.3488 155 +711.5126761 132908.5877 155 +732.495997 202027.6929 155 +740.5563439 567827.1423 155 +744.5897837 2362970.607 155 +496.2717938 99977.62096 156 +513.2983195 905705.3558 156 +514.3017617 165329.4557 156 +220.1175036 1502141.055 157 +430.3797053 945604.8648 158 +736.5270362 2935080.021 158 +737.5304486 1125597.07 158 +738.533529 222690.5991 158 +144.0804014 647944.7527 159 +173.1069849 1480176.046 159 +174.1103524 39047.93 159 +299.3051763 155431.067 160 +369.1243568 491787.8489 160 +390.2995986 217022.2686 160 +400.2839737 622759.7035 160 +401.2872034 119385.2241 160 +320.255393 54242.86134 161 +356.3265559 420900.0272 161 +450.3569735 148433.0557 161 +526.3130976 52710.76551 161 +538.3857493 412923.9705 161 +539.3891746 96066.64085 161 +583.3233231 907531.6441 161 +601.3338972 1078688.881 161 +352.32054 69177.91713 162 +411.3728129 1632501.625 162 +412.3760887 364039.8551 162 +418.331077 198221.8304 162 +432.4306178 343023.1063 162 +600.4363939 447094.9024 162 +601.4398671 107154.1025 162 +366.3360521 994769.0545 163 +367.3393663 85644.30023 163 +742.4644381 333127.5922 163 +173.3455393 238294.5408 164 +173.4570225 237757.5237 164 +385.2731825 1637066.448 164 +138.1022189 199498.2634 165 +163.1325244 1317546.614 165 +298.1868777 206758.4777 165 +222.1120235 118327.0888 166 +278.2585304 609545.287 166 +316.2377257 1516085.353 166 +317.2410805 213290.298 166 +436.2122676 77348.97877 166 +545.3975102 145067.8787 167 +746.5687651 4952485.162 167 +269.1279791 0 168 +317.1641962 17312.93812 168 +331.1798608 175670.5112 168 +332.1831543 0 168 +376.2375975 34726.1916 168 +389.2328291 151741.2548 168 +390.2361226 0 168 +514.2918756 256080.1365 168 +202.1334767 197441.7048 169 +218.1171173 444175.7379 169 +291.0694615 5237429.827 170 +280.2629685 249989.2416 171 +347.2112962 28938.03032 171 +408.2560766 92565.28654 171 +397.3498928 0 172 +435.7851269 328190.7879 172 +706.4797861 1126414.001 172 +707.483234 446009.2498 172 +125.9858968 3743151.398 173 +167.0124232 1291983.29 173 +345.2994404 128273.6648 174 +362.3260168 92955.37152 174 +367.2813182 663013.1372 174 +368.2845854 118826.7517 174 +416.3992112 152967.28 174 +110.0084008 310960.4301 175 +124.0240313 789359.37 175 +151.0349073 3224472.764 175 +152.0356935 119440.2372 175 +153.0324605 283785.6405 175 +165.0505436 3088459.712 175 +166.0513464 136714.4118 175 +253.2633815 111175.0063 176 +577.3216028 180026.2034 176 +580.2716572 1268463.853 176 +581.2745272 191579.3784 176 +615.3396157 140267.9469 176 +429.3720158 1115976.537 177 +430.3753167 230180.3404 177 +543.3818491 97889.1143 178 +565.3636561 116038.6292 178 +146.1171803 169472.998 179 +290.159233 465146.1582 179 +125.9859013 6691145.44 180 +140.0015372 1138120.777 180 +163.132484 4238882.843 180 +167.0124359 1261995.108 180 +186.0338282 779329.9135 180 +191.1637929 4118319.462 180 +391.2835488 2527068.193 180 +364.1959073 317192.9166 181 +365.1992666 24757.60375 181 +369.1512928 25525.20191 181 +682.4798157 1170763.308 182 +682.8142361 1329737.725 182 +708.4953774 182529.7393 182 +311.2768401 369718.3004 183 +332.2553689 544772.6669 183 +333.258747 0 183 +372.3214793 179466.6854 183 +454.3282852 173607.6966 183 +466.3054489 918368.4459 183 +467.308719 251055.1827 183 +149.0229425 5356223.261 184 +361.1388054 18186.39966 185 +406.258032 405541.7735 185 +428.2398676 177396.5105 185 +366.2996533 325933.4487 186 +388.2815042 92567.25293 186 +541.3490736 0 186 +721.8098044 311870.6642 186 +722.1442331 286106.0682 186 +722.4785667 26973.05838 186 +323.2576595 1119899.949 187 +324.2609483 116791.8386 187 +367.2214907 225118.5504 187 +480.3676236 236245.2804 187 +329.2470817 282973.8775 188 +346.2736557 1036922.743 188 +347.2770126 225986.7572 188 +387.205956 292296.7942 189 +615.178688 73401.48021 189 +664.4045409 262638.9916 189 +368.315495 152173.6531 190 +538.3860063 472606.3537 190 +539.3892443 21597.03639 190 +706.5012578 348516.9303 190 +257.2470189 1003866.965 191 +283.2626115 1835458.266 191 +303.2313014 767926.2231 191 +329.2468827 813513.3646 191 +202.1620275 15544.16532 192 +350.3159106 205362.7544 192 +558.4201216 980758.3996 192 +559.4236416 326674.8647 192 +342.2533283 275822.9724 193 +324.2715655 683867.7504 194 +481.3493312 26780.89039 194 +521.4235846 0 194 +525.3754995 246292.365 194 +526.3787414 54543.68837 194 +564.4464395 421687.7953 194 +569.4017274 466655.5334 194 +570.4052238 50057.07165 194 +614.4314106 0 194 +685.4797152 253886.3725 194 +585.3323114 0 195 +462.2147136 188035.5011 196 +479.2412621 459117.4623 196 +191.1638628 681444.6492 197 +158.1535057 22474.64341 198 +228.195329 1445412.701 198 +250.1772541 926309.7339 198 +273.2530598 216556.1818 198 +286.248327 399447.5306 198 +374.2894294 89180.18096 198 +547.3401854 171981.8508 199 +109.1008677 648961.4281 200 +133.1008338 446037.1975 200 +147.1164298 0 200 +281.2469846 933509.0981 200 +313.2730776 0 200 +445.1192143 1055775.68 200 +501.3347484 120876.2272 201 +346.2734284 1846019.863 202 +403.4040951 521699.613 203 +416.4243458 244772.6944 203 +716.5582053 520359.4062 203 +369.3508555 1749131.201 204 +370.3541606 323820.6576 204 +379.2372718 0 205 +540.3074862 349672.5335 205 +347.3050576 663378.9219 206 +322.2735534 367678.0126 207 +442.294423 172525.1254 207 +609.4762758 124677.0003 208 +652.4989463 379611.8734 208 +688.5271109 1449091.678 208 +689.5304996 413044.4576 208 +436.3203568 93720.83967 209 +436.2872935 392271.2702 210 +351.3728627 450751.789 211 +438.3722636 160575.9269 211 +482.419633 672501.5935 211 +483.4228955 225212.4512 211 +338.3776079 455694.5383 212 +360.3619345 84242.66497 212 +565.3661932 0 212 +312.3619927 516656.0488 213 +335.3415291 357329.5896 213 +462.3028965 282572.63 213 +348.3002835 292746.7573 214 +111.116512 2218305.478 215 +133.1008037 1044914.542 215 +151.1114041 572951.25 215 +584.3266289 239424.0831 216 +602.337247 232663.9813 216 +618.3604105 247845.4812 216 +619.3639428 26923.74915 216 +623.3157351 59595.99978 216 +350.377592 49441.94917 217 +370.3674265 433230.8533 217 +379.4041005 229837.2648 217 +517.3662721 89486.50732 218 +539.3481455 22203.39016 218 +330.2819728 287128.6222 219 +407.4353168 0 219 +663.4671239 478077.111 219 +697.5282115 122469.5267 219 +310.3100363 427008.8901 220 +302.2143169 17278.72907 221 +266.1381564 324657.0482 222 +300.1799891 82332.33106 222 +170.153565 369918.6102 223 +307.2737764 29918.9708 223 +746.3771353 193301.4576 223 +332.3053903 158975.8391 224 +386.1989138 82396.3659 224 +703.5743348 1184555.801 225 +509.3422062 106332.1276 226 +741.1570223 268693.5274 226 +741.4914841 344147.2886 226 +741.8260314 198510.4317 226 +562.4306319 328284.7266 227 +563.4340431 18872.59119 227 +268.1035363 534252.4539 228 +385.3054402 499413.6009 229 +726.4695624 503286.5471 229 +727.4727658 188332.8504 229 +378.3471658 197894.6862 230 +423.2633337 154138.8896 230 +674.503838 919157.7664 230 +675.5072181 324560.9802 230 +720.4309235 143576.2898 230 +363.2523778 210978.9906 231 +570.3262845 375363.896 231 +571.3295928 149645.2661 231 +740.5219175 1544626.862 232 +741.5253504 305067.1262 232 +377.3884264 20171.93865 233 +437.3618181 49300.31517 233 +678.5060848 1321400.042 233 +679.5094571 215330.6023 233 +736.4904105 430636.9037 233 +255.2314009 512723.8957 234 +256.2629749 888099.3782 234 +298.2735552 168903.2691 234 +298.2735117 194692.4532 235 +331.2835901 280844.0388 235 +552.4016221 173428.497 236 +628.1940218 235545.2755 237 +683.1486598 953476.9982 237 +140.0015248 1481524.191 238 +318.190497 99823.94702 239 +125.9859013 398103.8614 240 +140.001529 515654.018 240 +354.3360615 162417.8304 241 +436.2866909 19798.56509 241 +662.511116 525647.8204 241 +192.0685326 204010.2836 242 +404.3153945 172593.5184 243 +414.3206753 267993.0298 244 +536.3702259 337991.5355 245 +395.4352892 0 246 +660.5454221 982415.7565 246 +315.1849177 51050.16753 247 +366.4088767 305943.203 248 +401.3884867 366661.2675 248 +567.3793829 267430.8508 249 +300.2715203 720705.831 250 +358.2482107 66718.49533 251 +514.2846879 429406.7596 251 +515.3258901 130170.3144 252 +410.325746 615720.8294 253 +410.2893365 144975.4363 254 +495.2877678 20129.07861 255 +745.5931083 592730.4401 256 +446.2792894 192580.6632 257 +580.3600032 624930.1471 258 +391.4040611 399686.7138 259 +512.284429 143159.2769 260 +644.4541038 496178.6893 261 +463.258152 159530.9721 262 +332.1387163 295157.0875 263 +366.195784 252882.1663 264 +513.334647 141263.2114 264 +396.3829774 399287.5827 265 +375.2171567 0 266 +570.3447994 168316.8779 266 +299.1385621 90889.18344 267 +379.3677563 304867.3484 268 +535.3166131 105152.0583 269 +379.2947774 82853.65353 270 +609.2884105 17567.99291 270 +167.1426455 528168.2992 271 +229.2156985 1470185.756 271 +258.2503877 1747023.071 271 +304.2346716 293927.2153 271 +268.299456 97516.96626 272 +327.3365798 489140.8783 273 +710.5113943 260788.053 274 +748.5846242 429602.6287 274 +286.3099308 253226.1009 275 +360.3367435 374524.0159 276 +533.4303433 139679.1578 276 +301.1186907 71381.29913 277 +336.2502204 283760.9261 278 +420.309974 107758.5217 278 +300.3367153 119773.3762 279 +193.1069965 36354.11507 280 +377.3518862 137936.1303 281 +392.2787938 191496.038 282 +408.2220371 92686.4699 283 +466.1963276 137678.0055 284 +161.132084 380636.3981 285 +292.2013976 41466.78924 286 +316.2112756 110076.0906 287 +248.2367912 431074.2413 288 +402.2819963 109317.5765 289 +444.3465296 159998.0154 289 +209.0917227 114977.7277 290 +261.1592734 35653.53661 291 +163.1477344 604114.3131 292 +186.0338085 1292272.028 293 +408.3619586 324680.3344 294 +154.1586574 41388.39637 295 +549.4151013 205451.663 296 +457.1509073 109797.7946 297 +175.1477518 639584.5627 298 +204.1227077 55214.80473 299 +650.438396 110830.976 300 +179.1268461 984329.6446 301 +179.2383355 874487.3156 301 +386.352364 167882.061 302 +341.1966277 0 303 +431.3240999 0 304 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 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 @@ -0,0 +1,1 @@ +Galaxy MassBank (by spectra) queries - All results
Results of MASSBANK queries - Search params : Molecular specie = Positive / delta (unit) = 0.3 / Score threshold = 0.5 and max hit = 20 per pcgroup

ID from inputPCGroupMass (m/z)Metabolite nameCompound IDFormulaCompound MW (Da)MS typeion/prec. typeInstr. typeScoreInChI Identifier
mz_000011303.0485467
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
HyperosideFIO00150C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.631453810993InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
IsoquercitrinTY000218C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.630268036021InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1
IsoquercitrinFIO00160C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.629320319716InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
RutinFIO00589C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.628953392993InChI=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
Quercetin-3-beta-O-galactosidePR020075C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.618103117363InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
Quercetin-3-O-beta-glucopyranosidePR020078C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.609833904994InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
Quercetin-3-O-rutinosidePR020080C27H30O16610.15338MS [M+H]+LC-ESI-QTOF0.593021369395InChI=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
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
Hesperetin-7-O-neohesperidosidePR020045C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.585927069664InChI=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
HirsutrinTY000168C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.571213973695InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
HesperidinFIO00484C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.526179514801InChI=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
Hesperetin-7-O-rutinosidePR020046C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.503808010925InChI=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
mz_000021304.0519266
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
HyperosideFIO00150C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.631453810993InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
IsoquercitrinTY000218C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.630268036021InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1
IsoquercitrinFIO00160C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.629320319716InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
RutinFIO00589C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.628953392993InChI=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
Quercetin-3-beta-O-galactosidePR020075C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.618103117363InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
Quercetin-3-O-beta-glucopyranosidePR020078C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.609833904994InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
Quercetin-3-O-rutinosidePR020080C27H30O16610.15338MS [M+H]+LC-ESI-QTOF0.593021369395InChI=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
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
Hesperetin-7-O-neohesperidosidePR020045C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.585927069664InChI=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
HirsutrinTY000168C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.571213973695InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
HesperidinFIO00484C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.526179514801InChI=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
Hesperetin-7-O-rutinosidePR020046C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.503808010925InChI=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
mz_000031305.0552454
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
HyperosideFIO00150C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.631453810993InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
IsoquercitrinTY000218C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.630268036021InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1
IsoquercitrinFIO00160C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.629320319716InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
RutinFIO00589C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.628953392993InChI=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
Quercetin-3-beta-O-galactosidePR020075C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.618103117363InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
Quercetin-3-O-beta-glucopyranosidePR020078C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.609833904994InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
Quercetin-3-O-rutinosidePR020080C27H30O16610.15338MS [M+H]+LC-ESI-QTOF0.593021369395InChI=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
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
Hesperetin-7-O-neohesperidosidePR020045C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.585927069664InChI=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
HirsutrinTY000168C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.571213973695InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
HesperidinFIO00484C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.526179514801InChI=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
Hesperetin-7-O-rutinosidePR020046C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.503808010925InChI=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
mz_000041325.0531081
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000051325.5558227
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000061326.0658445
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000071334.0589389
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000081334.5601886
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000091335.0608018
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000101465.101281
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
HyperosideFIO00150C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.631453810993InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
IsoquercitrinTY000218C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.630268036021InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1
IsoquercitrinFIO00160C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.629320319716InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
RutinFIO00589C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.628953392993InChI=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
Quercetin-3-beta-O-galactosidePR020075C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.618103117363InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
Quercetin-3-O-beta-glucopyranosidePR020078C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.609833904994InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
Quercetin-3-O-rutinosidePR020080C27H30O16610.15338MS [M+H]+LC-ESI-QTOF0.593021369395InChI=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
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
Hesperetin-7-O-neohesperidosidePR020045C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.585927069664InChI=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
HirsutrinTY000168C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.571213973695InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
HesperidinFIO00484C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.526179514801InChI=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
Hesperetin-7-O-rutinosidePR020046C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.503808010925InChI=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
mz_000111466.1044404
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
HyperosideFIO00150C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.631453810993InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
IsoquercitrinTY000218C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.630268036021InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1
IsoquercitrinFIO00160C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.629320319716InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
RutinFIO00589C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.628953392993InChI=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
Quercetin-3-beta-O-galactosidePR020075C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.618103117363InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
Quercetin-3-O-beta-glucopyranosidePR020078C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.609833904994InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
Quercetin-3-O-rutinosidePR020080C27H30O16610.15338MS [M+H]+LC-ESI-QTOF0.593021369395InChI=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
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
Hesperetin-7-O-neohesperidosidePR020045C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.585927069664InChI=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
HirsutrinTY000168C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.571213973695InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
HesperidinFIO00484C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.526179514801InChI=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
Hesperetin-7-O-rutinosidePR020046C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.503808010925InChI=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
mz_000121467.1065989
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
HyperosideFIO00150C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.631453810993InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
IsoquercitrinTY000218C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.630268036021InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1
IsoquercitrinFIO00160C21H20O12464.09548MS2 [M+H]+LC-ESI-QTOF0.629320319716InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
RutinFIO00589C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.628953392993InChI=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
Quercetin-3-beta-O-galactosidePR020075C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.618103117363InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1
Quercetin-3-O-beta-glucopyranosidePR020078C21H20O12464.09548MS [M+H]+LC-ESI-QTOF0.609833904994InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
HirsutrinTY000168C21H20O12464.09548MS[M+H]+LC-ESI-ITTOF0.571213973695InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1
HesperidinFIO00484C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.526179514801InChI=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
mz_000131503.0443595
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000141519.0203434
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000151520.0216826
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000161611.1574452
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
RutinFIO00589C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.628953392993InChI=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
Quercetin-3-O-rutinosidePR020080C27H30O16610.15338MS [M+H]+LC-ESI-QTOF0.593021369395InChI=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
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
Hesperetin-7-O-neohesperidosidePR020045C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.585927069664InChI=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
Hesperetin-7-O-rutinosidePR020046C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.503808010925InChI=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
mz_000171612.1618463
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
Quercetin-3-O-rutinosidePR020080C27H30O16610.15338MS [M+H]+LC-ESI-QTOF0.593021369395InChI=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
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
Hesperetin-7-O-neohesperidosidePR020045C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.585927069664InChI=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
Hesperetin-7-O-rutinosidePR020046C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.503808010925InChI=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
mz_000181613.1621027
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
Rutin PB006201C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.718240688151InChI=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
RutinFIO00588C27H30O16610.15338MS2 [M+H]+LC-ESI-QTOF0.676089256465InChI=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
Quercetin-3-O-rutinosidePR020080C27H30O16610.15338MS [M+H]+LC-ESI-QTOF0.593021369395InChI=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
HesperidinFIO00483C28H34O15610.18977MS2 [M+H]+LC-ESI-QTOF0.591111986992InChI=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
Hesperetin-7-O-neohesperidosidePR020045C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.585927069664InChI=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
Hesperetin-7-O-rutinosidePR020046C28H34O15610.18977MS [M+H]+LC-ESI-QTOF0.503808010925InChI=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
mz_000191630.6266888
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000201631.1270815
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000211633.1395015
RutinTY000246C27H30O16610.15338MS[M+H]+LC-ESI-ITTOF0.722183932245InChI=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
mz_000221634.1424296
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000231635.1427623
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000241636.1507892
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000251649.1057016
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000261649.6002579
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000271650.1081035
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000281655.1225036
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000291717.0893975
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000302135.0459028
1-ETHYL-2,3-DIMETHYLBENZENEJP012276C10H14134.10955MSMSCI-B0.842444634941InChI=1S/C10H14/c1-4-10-7-5-6-8(2)9(10)3/h5-7H,4H2,1-3H3
1,2-DIETHYLBENZENEJP012273C10H14134.10955MSMSCI-B0.834834020699InChI=1S/C10H14/c1-3-9-7-5-6-8-10(9)4-2/h5-8H,3-4H2,1-2H3
1,3-DIETHYLBENZENEJP012274C10H14134.10955MSMSCI-B0.825082890799InChI=1S/C10H14/c1-3-9-6-5-7-10(4-2)8-9/h5-8H,3-4H2,1-2H3
1-ETHYL-3,5-DIMETHYLBENZENEJP012279C10H14134.10955MSMSCI-B0.822346316415InChI=1S/C10H14/c1-4-10-6-8(2)5-9(3)7-10/h5-7H,4H2,1-3H3
1,4-DIETHYLBENZENEJP012275C10H14134.10955MSMSCI-B0.812855498092InChI=1S/C10H14/c1-3-9-5-7-10(4-2)8-6-9/h5-8H,3-4H2,1-2H3
1-ETHYL-3,4-DIMETHYLBENZENEJP012277C10H14134.10955MSMSCI-B0.809347489341InChI=1S/C10H14/c1-4-10-6-5-8(2)9(3)7-10/h5-7H,4H2,1-3H3
2-METHYL-1-PROPYLBENZENEJP012267C10H14134.10955MSMSCI-B0.793494288532InChI=1S/C10H14/c1-3-6-10-8-5-4-7-9(10)2/h4-5,7-8H,3,6H2,1-2H3
3-METHYL-1-PROPYLBENZENEJP012268C10H14134.10955MSMSCI-B0.771842678731InChI=1S/C10H14/c1-3-5-10-7-4-6-9(2)8-10/h4,6-8H,3,5H2,1-2H3
4-METHYL-1-PROPYLBENZENEJP012269C10H14134.10955MSMSCI-B0.766089270107InChI=1S/C10H14/c1-3-4-10-7-5-9(2)6-8-10/h5-8H,3-4H2,1-2H3
BUTYLBENZENEJP012263C10H14134.10955MSMSCI-B0.721608041747InChI=1S/C10H14/c1-2-3-7-10-8-5-4-6-9-10/h4-6,8-9H,2-3,7H2,1H3
5-METHYL-1,3-DIISOPROPYLBENZENEJP012297C13H20176.15650MSMSCI-B0.502725943227InChI=1S/C13H20/c1-9(2)12-6-11(5)7-13(8-12)10(3)4/h6-10H,1-5H3
mz_000312136.0490744
1-ETHYL-2,3-DIMETHYLBENZENEJP012276C10H14134.10955MSMSCI-B0.842444634941InChI=1S/C10H14/c1-4-10-7-5-6-8(2)9(10)3/h5-7H,4H2,1-3H3
1,2-DIETHYLBENZENEJP012273C10H14134.10955MSMSCI-B0.834834020699InChI=1S/C10H14/c1-3-9-7-5-6-8-10(9)4-2/h5-8H,3-4H2,1-2H3
1,3-DIETHYLBENZENEJP012274C10H14134.10955MSMSCI-B0.825082890799InChI=1S/C10H14/c1-3-9-6-5-7-10(4-2)8-9/h5-8H,3-4H2,1-2H3
1-ETHYL-3,5-DIMETHYLBENZENEJP012279C10H14134.10955MSMSCI-B0.822346316415InChI=1S/C10H14/c1-4-10-6-8(2)5-9(3)7-10/h5-7H,4H2,1-3H3
1,4-DIETHYLBENZENEJP012275C10H14134.10955MSMSCI-B0.812855498092InChI=1S/C10H14/c1-3-9-5-7-10(4-2)8-6-9/h5-8H,3-4H2,1-2H3
1-ETHYL-3,4-DIMETHYLBENZENEJP012277C10H14134.10955MSMSCI-B0.809347489341InChI=1S/C10H14/c1-4-10-6-5-8(2)9(3)7-10/h5-7H,4H2,1-3H3
2-METHYL-1-PROPYLBENZENEJP012267C10H14134.10955MSMSCI-B0.793494288532InChI=1S/C10H14/c1-3-6-10-8-5-4-7-9(10)2/h4-5,7-8H,3,6H2,1-2H3
3-METHYL-1-PROPYLBENZENEJP012268C10H14134.10955MSMSCI-B0.771842678731InChI=1S/C10H14/c1-3-5-10-7-4-6-9(2)8-10/h4,6-8H,3,5H2,1-2H3
4-METHYL-1-PROPYLBENZENEJP012269C10H14134.10955MSMSCI-B0.766089270107InChI=1S/C10H14/c1-3-4-10-7-5-9(2)6-8-10/h5-8H,3-4H2,1-2H3
BUTYLBENZENEJP012263C10H14134.10955MSMSCI-B0.721608041747InChI=1S/C10H14/c1-2-3-7-10-8-5-4-6-9-10/h4-6,8-9H,2-3,7H2,1H3
5-METHYL-1,3-DIISOPROPYLBENZENEJP012297C13H20176.15650MSMSCI-B0.502725943227InChI=1S/C13H20/c1-9(2)12-6-11(5)7-13(8-12)10(3)4/h6-10H,1-5H3
mz_000322153.0565924
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000332175.0362187
1-ETHYL-2,3-DIMETHYLBENZENEJP012276C10H14134.10955MSMSCI-B0.842444634941InChI=1S/C10H14/c1-4-10-7-5-6-8(2)9(10)3/h5-7H,4H2,1-3H3
1,2-DIETHYLBENZENEJP012273C10H14134.10955MSMSCI-B0.834834020699InChI=1S/C10H14/c1-3-9-7-5-6-8-10(9)4-2/h5-8H,3-4H2,1-2H3
1,3-DIETHYLBENZENEJP012274C10H14134.10955MSMSCI-B0.825082890799InChI=1S/C10H14/c1-3-9-6-5-7-10(4-2)8-9/h5-8H,3-4H2,1-2H3
1-ETHYL-3,5-DIMETHYLBENZENEJP012279C10H14134.10955MSMSCI-B0.822346316415InChI=1S/C10H14/c1-4-10-6-8(2)5-9(3)7-10/h5-7H,4H2,1-3H3
1,4-DIETHYLBENZENEJP012275C10H14134.10955MSMSCI-B0.812855498092InChI=1S/C10H14/c1-3-9-5-7-10(4-2)8-6-9/h5-8H,3-4H2,1-2H3
1-ETHYL-3,4-DIMETHYLBENZENEJP012277C10H14134.10955MSMSCI-B0.809347489341InChI=1S/C10H14/c1-4-10-6-5-8(2)9(3)7-10/h5-7H,4H2,1-3H3
2-METHYL-1-PROPYLBENZENEJP012267C10H14134.10955MSMSCI-B0.793494288532InChI=1S/C10H14/c1-3-6-10-8-5-4-7-9(10)2/h4-5,7-8H,3,6H2,1-2H3
3-METHYL-1-PROPYLBENZENEJP012268C10H14134.10955MSMSCI-B0.771842678731InChI=1S/C10H14/c1-3-5-10-7-4-6-9(2)8-10/h4,6-8H,3,5H2,1-2H3
4-METHYL-1-PROPYLBENZENEJP012269C10H14134.10955MSMSCI-B0.766089270107InChI=1S/C10H14/c1-3-4-10-7-5-9(2)6-8-10/h5-8H,3-4H2,1-2H3
BUTYLBENZENEJP012263C10H14134.10955MSMSCI-B0.721608041747InChI=1S/C10H14/c1-2-3-7-10-8-5-4-6-9-10/h4-6,8-9H,2-3,7H2,1H3
5-METHYL-1,3-DIISOPROPYLBENZENEJP012297C13H20176.15650MSMSCI-B0.502725943227InChI=1S/C13H20/c1-9(2)12-6-11(5)7-13(8-12)10(3)4/h6-10H,1-5H3
mz_000342176.0376081
1,2-DIETHYLBENZENEJP012273C10H14134.10955MSMSCI-B0.834834020699InChI=1S/C10H14/c1-3-9-7-5-6-8-10(9)4-2/h5-8H,3-4H2,1-2H3
3-METHYL-1-PROPYLBENZENEJP012268C10H14134.10955MSMSCI-B0.771842678731InChI=1S/C10H14/c1-3-5-10-7-4-6-9(2)8-10/h4,6-8H,3,5H2,1-2H3
BUTYLBENZENEJP012263C10H14134.10955MSMSCI-B0.721608041747InChI=1S/C10H14/c1-2-3-7-10-8-5-4-6-9-10/h4-6,8-9H,2-3,7H2,1H3
5-METHYL-1,3-DIISOPROPYLBENZENEJP012297C13H20176.15650MSMSCI-B0.502725943227InChI=1S/C13H20/c1-9(2)12-6-11(5)7-13(8-12)10(3)4/h6-10H,1-5H3
mz_000352197.0192355
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000362403.0711753
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000373117.0358602
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000383145.0301952
trans-4-Hydroxy-3-methoxycinnamatePR100005C10H10O4194.05791MS2 [M+H]+LC-ESI-QTOF0.526245917512InChI=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+
mz_000393146.0338015
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000403149.0608613
trans-4-Hydroxy-3-methoxycinnamatePR100005C10H10O4194.05791MS2 [M+H]+LC-ESI-QTOF0.526245917512InChI=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+
mz_000413163.0397626
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000423177.0539492
trans-4-Hydroxy-3-methoxycinnamatePR100005C10H10O4194.05791MS2 [M+H]+LC-ESI-QTOF0.526245917512InChI=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+
mz_000433178.0578014
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000443195.0644538
trans-4-Hydroxy-3-methoxycinnamatePR100005C10H10O4194.05791MS2 [M+H]+LC-ESI-QTOF0.526245917512InChI=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+
mz_000453196.0700972
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000463217.047301
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000473233.0121036
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000483251.0221026
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000493269.0328959
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000503279.0200882
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000513297.0306054
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000523301.0504305
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000533308.0261572
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000543315.0378642
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000553371.2623675
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000563422.0847921
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000573425.0339018
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000583427.0703433
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000593428.071429
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000603443.0411698
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000613445.074958
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000623446.0817674
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000633449.2321066
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000643463.0878154
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000653472.296343
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000663480.3076532
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000673607.1399722
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_000683621.1283748
UNKNOWNNONEn/an/an/an/an/a0n/a
mz_00069421.1283748
UNKNOWNNONEn/an/an/an/an/a0n/a

Copyright © INRA, N Paulhe, F Giacomoni 2014

\ No newline at end of file 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 @@ -0,0 +1,1 @@ +{"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.628953392993","precursor_type":" [M+H]+","formula":"C27H30O16","name":"Rutin","id":"FIO00589","ms_type":"MS2"},"FIO00483":{"instrument_type":"LC-ESI-QTOF","peaks":null,"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","precursor_type":" [M+H]+","formula":"C28H34O15","name":"Hesperidin","id":"FIO00483","ms_type":"MS2"}},"mzmax":611.4574452001,"pcgroup":"1","into":"52749.60957"},"422.0847921":{"num_res":0,"mzmin":421.7847921,"mzmax":422.3847921001,"mzmed":"422.0847921","RECORDS":null,"into":"817.022","pcgroup":"3"},"621.1283748":{"mzmin":620.8283748,"num_res":0,"pcgroup":"3","into":"434.6288","RECORDS":null,"mzmed":"621.1283748","mzmax":621.4283748001},"465.101281":{"into":"108485.9646","pcgroup":"1","mzmax":465.4012810001,"RECORDS":{"FIO00589":{"formula":"C27H30O16","precursor_type":" [M+H]+","ms_type":"MS2","id":"FIO00589","name":"Rutin","instrument_type":"LC-ESI-QTOF","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.628953392993","peaks":null},"PB006201":{"peaks":null,"exact_mz":"610.15338","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","instrument_type":"LC-ESI-QTOF","name":"Rutin ","id":"PB006201","ms_type":"MS2","precursor_type":" [M+H]+","formula":"C27H30O16"},"TY000218":{"instrument_type":"LC-ESI-ITTOF","score":"0.630268036021","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1","exact_mz":"464.09548","peaks":null,"formula":"C21H20O12","precursor_type":"[M+H]+","id":"TY000218","ms_type":"MS","name":"Isoquercitrin"},"FIO00160":{"peaks":null,"inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.629320319716","exact_mz":"464.09548","instrument_type":"LC-ESI-QTOF","name":"Isoquercitrin","id":"FIO00160","ms_type":"MS2","precursor_type":" [M+H]+","formula":"C21H20O12"},"FIO00483":{"instrument_type":"LC-ESI-QTOF","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.591111986992","exact_mz":"610.18977","precursor_type":" [M+H]+","formula":"C28H34O15","name":"Hesperidin","ms_type":"MS2","id":"FIO00483"},"FIO00588":{"instrument_type":"LC-ESI-QTOF","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","peaks":null,"formula":"C27H30O16","precursor_type":" [M+H]+","id":"FIO00588","ms_type":"MS2","name":"Rutin"},"FIO00484":{"precursor_type":" [M+H]+","formula":"C28H34O15","name":"Hesperidin","ms_type":"MS2","id":"FIO00484","instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"610.18977","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.526179514801"},"PR020080":{"instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"610.15338","score":"0.593021369395","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","precursor_type":" [M+H]+","formula":"C27H30O16","name":"Quercetin-3-O-rutinoside","id":"PR020080","ms_type":"MS"},"PR020046":{"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","peaks":null,"instrument_type":"LC-ESI-QTOF","ms_type":"MS","id":"PR020046","name":"Hesperetin-7-O-rutinoside","formula":"C28H34O15","precursor_type":" [M+H]+"},"PR020045":{"peaks":null,"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","exact_mz":"610.18977","instrument_type":"LC-ESI-QTOF","name":"Hesperetin-7-O-neohesperidoside","ms_type":"MS","id":"PR020045","precursor_type":" [M+H]+","formula":"C28H34O15"},"PR020078":{"peaks":null,"inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.609833904994","exact_mz":"464.09548","instrument_type":"LC-ESI-QTOF","name":"Quercetin-3-O-beta-glucopyranoside","id":"PR020078","ms_type":"MS","precursor_type":" [M+H]+","formula":"C21H20O12"},"TY000246":{"name":"Rutin","id":"TY000246","ms_type":"MS","precursor_type":"[M+H]+","formula":"C27H30O16","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.722183932245","instrument_type":"LC-ESI-ITTOF"},"FIO00150":{"precursor_type":" [M+H]+","formula":"C21H20O12","name":"Hyperoside","id":"FIO00150","ms_type":"MS2","instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"464.09548","score":"0.631453810993","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1"},"TY000168":{"instrument_type":"LC-ESI-ITTOF","peaks":null,"exact_mz":"464.09548","score":"0.571213973695","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","precursor_type":"[M+H]+","formula":"C21H20O12","name":"Hirsutrin","id":"TY000168","ms_type":"MS"},"PR020075":{"peaks":null,"score":"0.618103117363","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","exact_mz":"464.09548","instrument_type":"LC-ESI-QTOF","name":"Quercetin-3-beta-O-galactoside","id":"PR020075","ms_type":"MS","precursor_type":" [M+H]+","formula":"C21H20O12"}},"mzmed":"465.101281","mzmin":464.801281,"num_res":15},"21.1283748":{"mzmin":20.8283748,"num_res":0,"pcgroup":"4","into":"34.6288","mzmax":21.4283748001,"RECORDS":null,"mzmed":"21.1283748"},"630.6266888":{"mzmin":630.3266888,"num_res":0,"pcgroup":"1","into":"17110.08429","mzmax":630.9266888001,"mzmed":"630.6266888","RECORDS":null},"607.1399722":{"num_res":0,"mzmin":606.8399722,"mzmax":607.4399722001,"mzmed":"607.1399722","RECORDS":null,"pcgroup":"3","into":"284.236875"},"463.0878154":{"mzmin":462.7878154,"num_res":0,"into":"819.0366","pcgroup":"3","RECORDS":null,"mzmed":"463.0878154","mzmax":463.3878154001},"449.2321066":{"num_res":0,"mzmin":448.9321066,"mzmax":449.5321066001,"RECORDS":null,"mzmed":"449.2321066","pcgroup":"3","into":"1741.715684"},"136.0490744":{"num_res":11,"mzmin":135.7490744,"mzmed":"136.0490744","RECORDS":{"JP012269":{"instrument_type":"CI-B","exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-3-4-10-7-5-9(2)6-8-10/h5-8H,3-4H2,1-2H3","score":"0.766089270107","peaks":null,"formula":"C10H14","precursor_type":"MS","ms_type":"MS","id":"JP012269","name":"4-METHYL-1-PROPYLBENZENE"},"JP012277":{"peaks":null,"score":"0.809347489341","inchi":"InChI=1S/C10H14/c1-4-10-6-5-8(2)9(3)7-10/h5-7H,4H2,1-3H3","exact_mz":"134.10955","instrument_type":"CI-B","name":"1-ETHYL-3,4-DIMETHYLBENZENE","id":"JP012277","ms_type":"MS","precursor_type":"MS","formula":"C10H14"},"JP012279":{"formula":"C10H14","precursor_type":"MS","id":"JP012279","ms_type":"MS","name":"1-ETHYL-3,5-DIMETHYLBENZENE","instrument_type":"CI-B","score":"0.822346316415","inchi":"InChI=1S/C10H14/c1-4-10-6-8(2)5-9(3)7-10/h5-7H,4H2,1-3H3","exact_mz":"134.10955","peaks":null},"JP012297":{"name":"5-METHYL-1,3-DIISOPROPYLBENZENE","id":"JP012297","ms_type":"MS","precursor_type":"MS","formula":"C13H20","peaks":null,"inchi":"InChI=1S/C13H20/c1-9(2)12-6-11(5)7-13(8-12)10(3)4/h6-10H,1-5H3","score":"0.502725943227","exact_mz":"176.15650","instrument_type":"CI-B"},"JP012274":{"exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-3-9-6-5-7-10(4-2)8-9/h5-8H,3-4H2,1-2H3","score":"0.825082890799","peaks":null,"instrument_type":"CI-B","ms_type":"MS","id":"JP012274","name":"1,3-DIETHYLBENZENE","formula":"C10H14","precursor_type":"MS"},"JP012276":{"exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-4-10-7-5-6-8(2)9(10)3/h5-7H,4H2,1-3H3","score":"0.842444634941","peaks":null,"instrument_type":"CI-B","id":"JP012276","ms_type":"MS","name":"1-ETHYL-2,3-DIMETHYLBENZENE","formula":"C10H14","precursor_type":"MS"},"JP012275":{"precursor_type":"MS","formula":"C10H14","name":"1,4-DIETHYLBENZENE","ms_type":"MS","id":"JP012275","instrument_type":"CI-B","peaks":null,"inchi":"InChI=1S/C10H14/c1-3-9-5-7-10(4-2)8-6-9/h5-8H,3-4H2,1-2H3","score":"0.812855498092","exact_mz":"134.10955"},"JP012273":{"exact_mz":"134.10955","score":"0.834834020699","inchi":"InChI=1S/C10H14/c1-3-9-7-5-6-8-10(9)4-2/h5-8H,3-4H2,1-2H3","peaks":null,"instrument_type":"CI-B","id":"JP012273","ms_type":"MS","name":"1,2-DIETHYLBENZENE","formula":"C10H14","precursor_type":"MS"},"JP012268":{"id":"JP012268","ms_type":"MS","name":"3-METHYL-1-PROPYLBENZENE","formula":"C10H14","precursor_type":"MS","exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-3-5-10-7-4-6-9(2)8-10/h4,6-8H,3,5H2,1-2H3","score":"0.771842678731","peaks":null,"instrument_type":"CI-B"},"JP012267":{"precursor_type":"MS","formula":"C10H14","name":"2-METHYL-1-PROPYLBENZENE","id":"JP012267","ms_type":"MS","instrument_type":"CI-B","peaks":null,"score":"0.793494288532","inchi":"InChI=1S/C10H14/c1-3-6-10-8-5-4-7-9(10)2/h4-5,7-8H,3,6H2,1-2H3","exact_mz":"134.10955"},"JP012263":{"ms_type":"MS","id":"JP012263","name":"BUTYLBENZENE","formula":"C10H14","precursor_type":"MS","score":"0.721608041747","inchi":"InChI=1S/C10H14/c1-2-3-7-10-8-5-4-6-9-10/h4-6,8-9H,2-3,7H2,1H3","exact_mz":"134.10955","peaks":null,"instrument_type":"CI-B"}},"mzmax":136.3490744001,"into":"9243.038571","pcgroup":"2"},"297.0306054":{"mzmax":297.3306054001,"RECORDS":null,"mzmed":"297.0306054","into":"1108.1016","pcgroup":"3","num_res":0,"mzmin":296.7306054},"325.0531081":{"RECORDS":null,"mzmed":"325.0531081","mzmax":325.3531081001,"pcgroup":"1","into":"16589.13717","num_res":0,"mzmin":324.7531081},"634.1424296":{"pcgroup":"1","into":"23879.52783","mzmax":634.4424296001,"mzmed":"634.1424296","RECORDS":null,"mzmin":633.8424296,"num_res":0},"503.0443595":{"mzmax":503.3443595001,"RECORDS":null,"mzmed":"503.0443595","into":"2661.062625","pcgroup":"1","num_res":0,"mzmin":502.7443595},"304.0519266":{"into":"39377.69332","pcgroup":"1","mzmed":"304.0519266","RECORDS":{"PR020075":{"score":"0.618103117363","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","exact_mz":"464.09548","peaks":null,"instrument_type":"LC-ESI-QTOF","ms_type":"MS","id":"PR020075","name":"Quercetin-3-beta-O-galactoside","formula":"C21H20O12","precursor_type":" [M+H]+"},"TY000168":{"instrument_type":"LC-ESI-ITTOF","peaks":null,"exact_mz":"464.09548","score":"0.571213973695","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","precursor_type":"[M+H]+","formula":"C21H20O12","name":"Hirsutrin","ms_type":"MS","id":"TY000168"},"FIO00150":{"formula":"C21H20O12","precursor_type":" [M+H]+","id":"FIO00150","ms_type":"MS2","name":"Hyperoside","instrument_type":"LC-ESI-QTOF","exact_mz":"464.09548","score":"0.631453810993","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","peaks":null},"TY000246":{"instrument_type":"LC-ESI-ITTOF","exact_mz":"610.15338","score":"0.722183932245","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","peaks":null,"formula":"C27H30O16","precursor_type":"[M+H]+","id":"TY000246","ms_type":"MS","name":"Rutin"},"PR020078":{"formula":"C21H20O12","precursor_type":" [M+H]+","ms_type":"MS","id":"PR020078","name":"Quercetin-3-O-beta-glucopyranoside","instrument_type":"LC-ESI-QTOF","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.609833904994","exact_mz":"464.09548","peaks":null},"PR020045":{"formula":"C28H34O15","precursor_type":" [M+H]+","ms_type":"MS","id":"PR020045","name":"Hesperetin-7-O-neohesperidoside","instrument_type":"LC-ESI-QTOF","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","exact_mz":"610.18977","peaks":null},"PR020046":{"instrument_type":"LC-ESI-QTOF","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","peaks":null,"formula":"C28H34O15","precursor_type":" [M+H]+","ms_type":"MS","id":"PR020046","name":"Hesperetin-7-O-rutinoside"},"FIO00484":{"score":"0.526179514801","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","ms_type":"MS2","id":"FIO00484","name":"Hesperidin","formula":"C28H34O15","precursor_type":" [M+H]+"},"PR020080":{"precursor_type":" [M+H]+","formula":"C27H30O16","name":"Quercetin-3-O-rutinoside","ms_type":"MS","id":"PR020080","instrument_type":"LC-ESI-QTOF","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.593021369395","exact_mz":"610.15338"},"FIO00588":{"id":"FIO00588","ms_type":"MS2","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.676089256465","peaks":null,"instrument_type":"LC-ESI-QTOF"},"FIO00483":{"exact_mz":"610.18977","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.591111986992","peaks":null,"instrument_type":"LC-ESI-QTOF","ms_type":"MS2","id":"FIO00483","name":"Hesperidin","formula":"C28H34O15","precursor_type":" [M+H]+"},"FIO00160":{"peaks":null,"exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.629320319716","instrument_type":"LC-ESI-QTOF","name":"Isoquercitrin","id":"FIO00160","ms_type":"MS2","precursor_type":" [M+H]+","formula":"C21H20O12"},"PB006201":{"instrument_type":"LC-ESI-QTOF","peaks":null,"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","precursor_type":" [M+H]+","formula":"C27H30O16","name":"Rutin ","id":"PB006201","ms_type":"MS2"},"FIO00589":{"instrument_type":"LC-ESI-QTOF","peaks":null,"score":"0.628953392993","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","precursor_type":" [M+H]+","formula":"C27H30O16","name":"Rutin","ms_type":"MS2","id":"FIO00589"},"TY000218":{"score":"0.630268036021","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1","exact_mz":"464.09548","peaks":null,"instrument_type":"LC-ESI-ITTOF","id":"TY000218","ms_type":"MS","name":"Isoquercitrin","formula":"C21H20O12","precursor_type":"[M+H]+"}},"mzmax":304.3519266001,"mzmin":303.7519266,"num_res":15},"153.0565924":{"mzmin":152.7565924,"num_res":0,"into":"4206.543056","pcgroup":"2","mzmax":153.3565924001,"RECORDS":null,"mzmed":"153.0565924"},"315.0378642":{"mzmin":314.7378642,"num_res":0,"into":"570.8708","pcgroup":"3","mzmed":"315.0378642","RECORDS":null,"mzmax":315.3378642001},"195.0644538":{"num_res":1,"mzmin":194.7644538,"mzmax":195.3644538001,"RECORDS":{"PR100005":{"instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"194.05791","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+","precursor_type":" [M+H]+","formula":"C10H10O4","name":"trans-4-Hydroxy-3-methoxycinnamate","id":"PR100005","ms_type":"MS2"}},"mzmed":"195.0644538","pcgroup":"3","into":"1925.5536"},"446.0817674":{"RECORDS":null,"mzmed":"446.0817674","mzmax":446.3817674001,"into":"352.6043636","pcgroup":"3","num_res":0,"mzmin":445.7817674},"305.0552454":{"mzmin":304.7552454,"num_res":15,"into":"6932.447143","pcgroup":"1","mzmax":305.3552454001,"RECORDS":{"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"},"TY000218":{"formula":"C21H20O12","precursor_type":"[M+H]+","ms_type":"MS","id":"TY000218","name":"Isoquercitrin","instrument_type":"LC-ESI-ITTOF","score":"0.630268036021","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1","exact_mz":"464.09548","peaks":null},"FIO00589":{"instrument_type":"LC-ESI-QTOF","exact_mz":"610.15338","score":"0.628953392993","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","peaks":null,"formula":"C27H30O16","precursor_type":" [M+H]+","ms_type":"MS2","id":"FIO00589","name":"Rutin"},"FIO00160":{"exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.629320319716","peaks":null,"instrument_type":"LC-ESI-QTOF","ms_type":"MS2","id":"FIO00160","name":"Isoquercitrin","formula":"C21H20O12","precursor_type":" [M+H]+"},"FIO00483":{"peaks":null,"exact_mz":"610.18977","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.591111986992","instrument_type":"LC-ESI-QTOF","name":"Hesperidin","id":"FIO00483","ms_type":"MS2","precursor_type":" [M+H]+","formula":"C28H34O15"},"FIO00484":{"peaks":null,"score":"0.526179514801","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","instrument_type":"LC-ESI-QTOF","name":"Hesperidin","id":"FIO00484","ms_type":"MS2","precursor_type":" [M+H]+","formula":"C28H34O15"},"FIO00588":{"precursor_type":" [M+H]+","formula":"C27H30O16","name":"Rutin","ms_type":"MS2","id":"FIO00588","instrument_type":"LC-ESI-QTOF","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.676089256465","exact_mz":"610.15338"},"PR020080":{"instrument_type":"LC-ESI-QTOF","exact_mz":"610.15338","score":"0.593021369395","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","peaks":null,"formula":"C27H30O16","precursor_type":" [M+H]+","id":"PR020080","ms_type":"MS","name":"Quercetin-3-O-rutinoside"},"PR020046":{"name":"Hesperetin-7-O-rutinoside","id":"PR020046","ms_type":"MS","precursor_type":" [M+H]+","formula":"C28H34O15","peaks":null,"exact_mz":"610.18977","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","instrument_type":"LC-ESI-QTOF"},"PR020045":{"name":"Hesperetin-7-O-neohesperidoside","ms_type":"MS","id":"PR020045","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"},"PR020078":{"ms_type":"MS","id":"PR020078","name":"Quercetin-3-O-beta-glucopyranoside","formula":"C21H20O12","precursor_type":" [M+H]+","score":"0.609833904994","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","exact_mz":"464.09548","peaks":null,"instrument_type":"LC-ESI-QTOF"},"TY000246":{"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","instrument_type":"LC-ESI-ITTOF","name":"Rutin","ms_type":"MS","id":"TY000246","precursor_type":"[M+H]+","formula":"C27H30O16"},"PR020075":{"precursor_type":" [M+H]+","formula":"C21H20O12","name":"Quercetin-3-beta-O-galactoside","id":"PR020075","ms_type":"MS","instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","score":"0.618103117363"},"TY000168":{"name":"Hirsutrin","ms_type":"MS","id":"TY000168","precursor_type":"[M+H]+","formula":"C21H20O12","peaks":null,"exact_mz":"464.09548","score":"0.571213973695","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","instrument_type":"LC-ESI-ITTOF"},"FIO00150":{"ms_type":"MS2","id":"FIO00150","name":"Hyperoside","formula":"C21H20O12","precursor_type":" [M+H]+","exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","score":"0.631453810993","peaks":null,"instrument_type":"LC-ESI-QTOF"}},"mzmed":"305.0552454"},"163.0397626":{"mzmin":162.7397626,"num_res":0,"pcgroup":"3","into":"718.091","RECORDS":null,"mzmed":"163.0397626","mzmax":163.3397626001},"520.0216826":{"mzmin":519.7216826,"num_res":0,"pcgroup":"1","into":"767.3935714","mzmax":520.3216826001,"RECORDS":null,"mzmed":"520.0216826"},"428.071429":{"pcgroup":"3","into":"553.6545455","RECORDS":null,"mzmed":"428.071429","mzmax":428.3714290001,"mzmin":427.771429,"num_res":0},"633.1395015":{"num_res":1,"mzmin":632.8395015,"mzmax":633.4395015001,"mzmed":"633.1395015","RECORDS":{"TY000246":{"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","precursor_type":"[M+H]+","formula":"C27H30O16","name":"Rutin","id":"TY000246","ms_type":"MS"}},"into":"78153.96508","pcgroup":"1"},"443.0411698":{"pcgroup":"3","into":"842.8931","mzmax":443.3411698001,"mzmed":"443.0411698","RECORDS":null,"mzmin":442.7411698,"num_res":0},"467.1065989":{"RECORDS":{"TY000218":{"name":"Isoquercitrin","ms_type":"MS","id":"TY000218","precursor_type":"[M+H]+","formula":"C21H20O12","peaks":null,"exact_mz":"464.09548","score":"0.630268036021","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1","instrument_type":"LC-ESI-ITTOF"},"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"},"FIO00589":{"formula":"C27H30O16","precursor_type":" [M+H]+","ms_type":"MS2","id":"FIO00589","name":"Rutin","instrument_type":"LC-ESI-QTOF","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.628953392993","peaks":null},"FIO00160":{"exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.629320319716","peaks":null,"instrument_type":"LC-ESI-QTOF","id":"FIO00160","ms_type":"MS2","name":"Isoquercitrin","formula":"C21H20O12","precursor_type":" [M+H]+"},"FIO00483":{"exact_mz":"610.18977","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.591111986992","peaks":null,"instrument_type":"LC-ESI-QTOF","ms_type":"MS2","id":"FIO00483","name":"Hesperidin","formula":"C28H34O15","precursor_type":" [M+H]+"},"PR020078":{"instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.609833904994","precursor_type":" [M+H]+","formula":"C21H20O12","name":"Quercetin-3-O-beta-glucopyranoside","ms_type":"MS","id":"PR020078"},"FIO00150":{"instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","score":"0.631453810993","precursor_type":" [M+H]+","formula":"C21H20O12","name":"Hyperoside","id":"FIO00150","ms_type":"MS2"},"TY000168":{"name":"Hirsutrin","ms_type":"MS","id":"TY000168","precursor_type":"[M+H]+","formula":"C21H20O12","peaks":null,"score":"0.571213973695","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","exact_mz":"464.09548","instrument_type":"LC-ESI-ITTOF"},"PR020075":{"peaks":null,"exact_mz":"464.09548","score":"0.618103117363","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","instrument_type":"LC-ESI-QTOF","name":"Quercetin-3-beta-O-galactoside","id":"PR020075","ms_type":"MS","precursor_type":" [M+H]+","formula":"C21H20O12"},"FIO00484":{"ms_type":"MS2","id":"FIO00484","name":"Hesperidin","formula":"C28H34O15","precursor_type":" [M+H]+","score":"0.526179514801","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"},"FIO00588":{"id":"FIO00588","ms_type":"MS2","name":"Rutin","formula":"C27H30O16","precursor_type":" [M+H]+","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","peaks":null,"instrument_type":"LC-ESI-QTOF"}},"mzmed":"467.1065989","mzmax":467.4065989001,"pcgroup":"1","into":"5576.989909","num_res":11,"mzmin":466.8065989},"269.0328959":{"num_res":0,"mzmin":268.7328959,"RECORDS":null,"mzmed":"269.0328959","mzmax":269.3328959001,"into":"2372.712176","pcgroup":"3"},"197.0192355":{"num_res":0,"mzmin":196.7192355,"mzmax":197.3192355001,"RECORDS":null,"mzmed":"197.0192355","into":"963.0227895","pcgroup":"2"},"196.0700972":{"mzmed":"196.0700972","RECORDS":null,"mzmax":196.3700972001,"pcgroup":"3","into":"279.2630769","num_res":0,"mzmin":195.7700972},"403.0711753":{"num_res":0,"mzmin":402.7711753,"mzmed":"403.0711753","RECORDS":null,"mzmax":403.3711753001,"pcgroup":"2","into":"399.5335385"},"146.0338015":{"RECORDS":null,"mzmed":"146.0338015","mzmax":146.3338015001,"pcgroup":"3","into":"2337.98","num_res":0,"mzmin":145.7338015},"145.0301952":{"into":"20533.65455","pcgroup":"3","mzmax":145.3301952001,"RECORDS":{"PR100005":{"peaks":null,"exact_mz":"194.05791","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+","instrument_type":"LC-ESI-QTOF","name":"trans-4-Hydroxy-3-methoxycinnamate","id":"PR100005","ms_type":"MS2","precursor_type":" [M+H]+","formula":"C10H10O4"}},"mzmed":"145.0301952","mzmin":144.7301952,"num_res":1},"650.1081035":{"RECORDS":null,"mzmed":"650.1081035","mzmax":650.4081035001,"pcgroup":"1","into":"1549.122","num_res":0,"mzmin":649.8081035},"427.0703433":{"mzmed":"427.0703433","RECORDS":null,"mzmax":427.3703433001,"pcgroup":"3","into":"1897.090909","num_res":0,"mzmin":426.7703433},"251.0221026":{"mzmed":"251.0221026","RECORDS":null,"mzmax":251.3221026001,"into":"3523.02613","pcgroup":"3","num_res":0,"mzmin":250.7221026},"335.0608018":{"into":"5194.492773","pcgroup":"1","mzmax":335.3608018001,"RECORDS":null,"mzmed":"335.0608018","mzmin":334.7608018,"num_res":0},"631.1270815":{"num_res":0,"mzmin":630.8270815,"mzmed":"631.1270815","RECORDS":null,"mzmax":631.4270815001,"into":"7219.6755","pcgroup":"1"},"233.0121036":{"num_res":0,"mzmin":232.7121036,"mzmax":233.3121036001,"mzmed":"233.0121036","RECORDS":null,"pcgroup":"3","into":"3540.9"},"655.1225036":{"num_res":0,"mzmin":654.8225036,"mzmax":655.4225036001,"RECORDS":null,"mzmed":"655.1225036","pcgroup":"1","into":"1257.1268"},"334.5601886":{"mzmin":334.2601886,"num_res":0,"into":"16357.10268","pcgroup":"1","mzmed":"334.5601886","RECORDS":null,"mzmax":334.8601886001},"117.0358602":{"RECORDS":null,"mzmed":"117.0358602","mzmax":117.3358602001,"pcgroup":"3","into":"994.5956471","num_res":0,"mzmin":116.7358602},"217.047301":{"mzmax":217.3473010001,"RECORDS":null,"mzmed":"217.047301","pcgroup":"3","into":"1703.950417","num_res":0,"mzmin":216.747301},"325.5558227":{"into":"5385.764","pcgroup":"1","mzmax":325.8558227001,"mzmed":"325.5558227","RECORDS":null,"mzmin":325.2558227,"num_res":0},"176.0376081":{"mzmin":175.7376081,"num_res":4,"into":"410.713875","pcgroup":"2","mzmed":"176.0376081","RECORDS":{"JP012268":{"inchi":"InChI=1S/C10H14/c1-3-5-10-7-4-6-9(2)8-10/h4,6-8H,3,5H2,1-2H3","score":"0.771842678731","exact_mz":"134.10955","peaks":null,"instrument_type":"CI-B","ms_type":"MS","id":"JP012268","name":"3-METHYL-1-PROPYLBENZENE","formula":"C10H14","precursor_type":"MS"},"JP012273":{"formula":"C10H14","precursor_type":"MS","ms_type":"MS","id":"JP012273","name":"1,2-DIETHYLBENZENE","instrument_type":"CI-B","score":"0.834834020699","inchi":"InChI=1S/C10H14/c1-3-9-7-5-6-8-10(9)4-2/h5-8H,3-4H2,1-2H3","exact_mz":"134.10955","peaks":null},"JP012263":{"name":"BUTYLBENZENE","id":"JP012263","ms_type":"MS","precursor_type":"MS","formula":"C10H14","peaks":null,"score":"0.721608041747","inchi":"InChI=1S/C10H14/c1-2-3-7-10-8-5-4-6-9-10/h4-6,8-9H,2-3,7H2,1H3","exact_mz":"134.10955","instrument_type":"CI-B"},"JP012297":{"id":"JP012297","ms_type":"MS","name":"5-METHYL-1,3-DIISOPROPYLBENZENE","formula":"C13H20","precursor_type":"MS","exact_mz":"176.15650","score":"0.502725943227","inchi":"InChI=1S/C13H20/c1-9(2)12-6-11(5)7-13(8-12)10(3)4/h6-10H,1-5H3","peaks":null,"instrument_type":"CI-B"}},"mzmax":176.3376081001},"466.1044404":{"pcgroup":"1","into":"26116.08643","mzmax":466.4044404001,"RECORDS":{"TY000218":{"precursor_type":"[M+H]+","formula":"C21H20O12","name":"Isoquercitrin","id":"TY000218","ms_type":"MS","instrument_type":"LC-ESI-ITTOF","peaks":null,"exact_mz":"464.09548","score":"0.630268036021","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1"},"FIO00589":{"formula":"C27H30O16","precursor_type":" [M+H]+","id":"FIO00589","ms_type":"MS2","name":"Rutin","instrument_type":"LC-ESI-QTOF","score":"0.628953392993","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},"PB006201":{"formula":"C27H30O16","precursor_type":" [M+H]+","id":"PB006201","ms_type":"MS2","name":"Rutin ","instrument_type":"LC-ESI-QTOF","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.718240688151","peaks":null},"FIO00160":{"instrument_type":"LC-ESI-QTOF","exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.629320319716","peaks":null,"formula":"C21H20O12","precursor_type":" [M+H]+","ms_type":"MS2","id":"FIO00160","name":"Isoquercitrin"},"FIO00483":{"name":"Hesperidin","ms_type":"MS2","id":"FIO00483","precursor_type":" [M+H]+","formula":"C28H34O15","peaks":null,"exact_mz":"610.18977","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","instrument_type":"LC-ESI-QTOF"},"FIO00484":{"formula":"C28H34O15","precursor_type":" [M+H]+","ms_type":"MS2","id":"FIO00484","name":"Hesperidin","instrument_type":"LC-ESI-QTOF","exact_mz":"610.18977","score":"0.526179514801","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","peaks":null},"FIO00588":{"name":"Rutin","id":"FIO00588","ms_type":"MS2","precursor_type":" [M+H]+","formula":"C27H30O16","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","instrument_type":"LC-ESI-QTOF"},"PR020080":{"formula":"C27H30O16","precursor_type":" [M+H]+","id":"PR020080","ms_type":"MS","name":"Quercetin-3-O-rutinoside","instrument_type":"LC-ESI-QTOF","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},"PR020046":{"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","peaks":null,"instrument_type":"LC-ESI-QTOF","id":"PR020046","ms_type":"MS","name":"Hesperetin-7-O-rutinoside","formula":"C28H34O15","precursor_type":" [M+H]+"},"PR020045":{"formula":"C28H34O15","precursor_type":" [M+H]+","id":"PR020045","ms_type":"MS","name":"Hesperetin-7-O-neohesperidoside","instrument_type":"LC-ESI-QTOF","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","peaks":null},"PR020078":{"precursor_type":" [M+H]+","formula":"C21H20O12","name":"Quercetin-3-O-beta-glucopyranoside","ms_type":"MS","id":"PR020078","instrument_type":"LC-ESI-QTOF","peaks":null,"inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.609833904994","exact_mz":"464.09548"},"TY000246":{"formula":"C27H30O16","precursor_type":"[M+H]+","id":"TY000246","ms_type":"MS","name":"Rutin","instrument_type":"LC-ESI-ITTOF","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","peaks":null},"TY000168":{"peaks":null,"inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.571213973695","exact_mz":"464.09548","instrument_type":"LC-ESI-ITTOF","name":"Hirsutrin","ms_type":"MS","id":"TY000168","precursor_type":"[M+H]+","formula":"C21H20O12"},"FIO00150":{"ms_type":"MS2","id":"FIO00150","name":"Hyperoside","formula":"C21H20O12","precursor_type":" [M+H]+","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","score":"0.631453810993","exact_mz":"464.09548","peaks":null,"instrument_type":"LC-ESI-QTOF"},"PR020075":{"instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"464.09548","score":"0.618103117363","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","precursor_type":" [M+H]+","formula":"C21H20O12","name":"Quercetin-3-beta-O-galactoside","id":"PR020075","ms_type":"MS"}},"mzmed":"466.1044404","mzmin":465.8044404,"num_res":15},"175.0362187":{"num_res":11,"mzmin":174.7362187,"mzmax":175.3362187001,"RECORDS":{"JP012267":{"inchi":"InChI=1S/C10H14/c1-3-6-10-8-5-4-7-9(10)2/h4-5,7-8H,3,6H2,1-2H3","score":"0.793494288532","exact_mz":"134.10955","peaks":null,"instrument_type":"CI-B","ms_type":"MS","id":"JP012267","name":"2-METHYL-1-PROPYLBENZENE","formula":"C10H14","precursor_type":"MS"},"JP012263":{"peaks":null,"exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-2-3-7-10-8-5-4-6-9-10/h4-6,8-9H,2-3,7H2,1H3","score":"0.721608041747","instrument_type":"CI-B","name":"BUTYLBENZENE","id":"JP012263","ms_type":"MS","precursor_type":"MS","formula":"C10H14"},"JP012268":{"id":"JP012268","ms_type":"MS","name":"3-METHYL-1-PROPYLBENZENE","formula":"C10H14","precursor_type":"MS","score":"0.771842678731","inchi":"InChI=1S/C10H14/c1-3-5-10-7-4-6-9(2)8-10/h4,6-8H,3,5H2,1-2H3","exact_mz":"134.10955","peaks":null,"instrument_type":"CI-B"},"JP012276":{"name":"1-ETHYL-2,3-DIMETHYLBENZENE","id":"JP012276","ms_type":"MS","precursor_type":"MS","formula":"C10H14","peaks":null,"inchi":"InChI=1S/C10H14/c1-4-10-7-5-6-8(2)9(10)3/h5-7H,4H2,1-3H3","score":"0.842444634941","exact_mz":"134.10955","instrument_type":"CI-B"},"JP012297":{"formula":"C13H20","precursor_type":"MS","id":"JP012297","ms_type":"MS","name":"5-METHYL-1,3-DIISOPROPYLBENZENE","instrument_type":"CI-B","inchi":"InChI=1S/C13H20/c1-9(2)12-6-11(5)7-13(8-12)10(3)4/h6-10H,1-5H3","score":"0.502725943227","exact_mz":"176.15650","peaks":null},"JP012274":{"name":"1,3-DIETHYLBENZENE","ms_type":"MS","id":"JP012274","precursor_type":"MS","formula":"C10H14","peaks":null,"exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-3-9-6-5-7-10(4-2)8-9/h5-8H,3-4H2,1-2H3","score":"0.825082890799","instrument_type":"CI-B"},"JP012275":{"name":"1,4-DIETHYLBENZENE","id":"JP012275","ms_type":"MS","precursor_type":"MS","formula":"C10H14","peaks":null,"inchi":"InChI=1S/C10H14/c1-3-9-5-7-10(4-2)8-6-9/h5-8H,3-4H2,1-2H3","score":"0.812855498092","exact_mz":"134.10955","instrument_type":"CI-B"},"JP012273":{"id":"JP012273","ms_type":"MS","name":"1,2-DIETHYLBENZENE","formula":"C10H14","precursor_type":"MS","exact_mz":"134.10955","score":"0.834834020699","inchi":"InChI=1S/C10H14/c1-3-9-7-5-6-8-10(9)4-2/h5-8H,3-4H2,1-2H3","peaks":null,"instrument_type":"CI-B"},"JP012269":{"score":"0.766089270107","inchi":"InChI=1S/C10H14/c1-3-4-10-7-5-9(2)6-8-10/h5-8H,3-4H2,1-2H3","exact_mz":"134.10955","peaks":null,"instrument_type":"CI-B","ms_type":"MS","id":"JP012269","name":"4-METHYL-1-PROPYLBENZENE","formula":"C10H14","precursor_type":"MS"},"JP012279":{"instrument_type":"CI-B","inchi":"InChI=1S/C10H14/c1-4-10-6-8(2)5-9(3)7-10/h5-7H,4H2,1-3H3","score":"0.822346316415","exact_mz":"134.10955","peaks":null,"formula":"C10H14","precursor_type":"MS","id":"JP012279","ms_type":"MS","name":"1-ETHYL-3,5-DIMETHYLBENZENE"},"JP012277":{"instrument_type":"CI-B","peaks":null,"exact_mz":"134.10955","score":"0.809347489341","inchi":"InChI=1S/C10H14/c1-4-10-6-5-8(2)9(3)7-10/h5-7H,4H2,1-3H3","precursor_type":"MS","formula":"C10H14","name":"1-ETHYL-3,4-DIMETHYLBENZENE","id":"JP012277","ms_type":"MS"}},"mzmed":"175.0362187","pcgroup":"2","into":"7465.729412"},"301.0504305":{"mzmin":300.7504305,"num_res":0,"pcgroup":"3","into":"486.0704762","RECORDS":null,"mzmed":"301.0504305","mzmax":301.3504305001},"334.0589389":{"RECORDS":null,"mzmed":"334.0589389","mzmax":334.3589389001,"into":"54965.0688","pcgroup":"1","num_res":0,"mzmin":333.7589389},"135.0459028":{"mzmax":135.3459028001,"RECORDS":{"JP012297":{"instrument_type":"CI-B","exact_mz":"176.15650","inchi":"InChI=1S/C13H20/c1-9(2)12-6-11(5)7-13(8-12)10(3)4/h6-10H,1-5H3","score":"0.502725943227","peaks":null,"formula":"C13H20","precursor_type":"MS","ms_type":"MS","id":"JP012297","name":"5-METHYL-1,3-DIISOPROPYLBENZENE"},"JP012274":{"precursor_type":"MS","formula":"C10H14","name":"1,3-DIETHYLBENZENE","ms_type":"MS","id":"JP012274","instrument_type":"CI-B","peaks":null,"score":"0.825082890799","inchi":"InChI=1S/C10H14/c1-3-9-6-5-7-10(4-2)8-9/h5-8H,3-4H2,1-2H3","exact_mz":"134.10955"},"JP012276":{"precursor_type":"MS","formula":"C10H14","name":"1-ETHYL-2,3-DIMETHYLBENZENE","id":"JP012276","ms_type":"MS","instrument_type":"CI-B","peaks":null,"exact_mz":"134.10955","score":"0.842444634941","inchi":"InChI=1S/C10H14/c1-4-10-7-5-6-8(2)9(10)3/h5-7H,4H2,1-3H3"},"JP012275":{"formula":"C10H14","precursor_type":"MS","id":"JP012275","ms_type":"MS","name":"1,4-DIETHYLBENZENE","instrument_type":"CI-B","exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-3-9-5-7-10(4-2)8-6-9/h5-8H,3-4H2,1-2H3","score":"0.812855498092","peaks":null},"JP012273":{"inchi":"InChI=1S/C10H14/c1-3-9-7-5-6-8-10(9)4-2/h5-8H,3-4H2,1-2H3","score":"0.834834020699","exact_mz":"134.10955","peaks":null,"instrument_type":"CI-B","id":"JP012273","ms_type":"MS","name":"1,2-DIETHYLBENZENE","formula":"C10H14","precursor_type":"MS"},"JP012269":{"name":"4-METHYL-1-PROPYLBENZENE","id":"JP012269","ms_type":"MS","precursor_type":"MS","formula":"C10H14","peaks":null,"exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-3-4-10-7-5-9(2)6-8-10/h5-8H,3-4H2,1-2H3","score":"0.766089270107","instrument_type":"CI-B"},"JP012277":{"precursor_type":"MS","formula":"C10H14","name":"1-ETHYL-3,4-DIMETHYLBENZENE","ms_type":"MS","id":"JP012277","instrument_type":"CI-B","peaks":null,"exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-4-10-6-5-8(2)9(3)7-10/h5-7H,4H2,1-3H3","score":"0.809347489341"},"JP012279":{"instrument_type":"CI-B","exact_mz":"134.10955","score":"0.822346316415","inchi":"InChI=1S/C10H14/c1-4-10-6-8(2)5-9(3)7-10/h5-7H,4H2,1-3H3","peaks":null,"formula":"C10H14","precursor_type":"MS","id":"JP012279","ms_type":"MS","name":"1-ETHYL-3,5-DIMETHYLBENZENE"},"JP012267":{"id":"JP012267","ms_type":"MS","name":"2-METHYL-1-PROPYLBENZENE","formula":"C10H14","precursor_type":"MS","exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-3-6-10-8-5-4-7-9(10)2/h4-5,7-8H,3,6H2,1-2H3","score":"0.793494288532","peaks":null,"instrument_type":"CI-B"},"JP012263":{"formula":"C10H14","precursor_type":"MS","id":"JP012263","ms_type":"MS","name":"BUTYLBENZENE","instrument_type":"CI-B","exact_mz":"134.10955","inchi":"InChI=1S/C10H14/c1-2-3-7-10-8-5-4-6-9-10/h4-6,8-9H,2-3,7H2,1H3","score":"0.721608041747","peaks":null},"JP012268":{"instrument_type":"CI-B","peaks":null,"inchi":"InChI=1S/C10H14/c1-3-5-10-7-4-6-9(2)8-10/h4,6-8H,3,5H2,1-2H3","score":"0.771842678731","exact_mz":"134.10955","precursor_type":"MS","formula":"C10H14","name":"3-METHYL-1-PROPYLBENZENE","ms_type":"MS","id":"JP012268"}},"mzmed":"135.0459028","pcgroup":"2","into":"97555.81142","num_res":11,"mzmin":134.7459028},"178.0578014":{"pcgroup":"3","into":"3510.916043","mzmax":178.3578014001,"mzmed":"178.0578014","RECORDS":null,"mzmin":177.7578014,"num_res":0},"308.0261572":{"into":"751.5176","pcgroup":"3","mzmed":"308.0261572","RECORDS":null,"mzmax":308.3261572001,"mzmin":307.7261572,"num_res":0},"519.0203434":{"into":"3261.486136","pcgroup":"1","mzmax":519.3203434001,"mzmed":"519.0203434","RECORDS":null,"mzmin":518.7203434,"num_res":0},"635.1427623":{"num_res":0,"mzmin":634.8427623,"mzmax":635.4427623001,"RECORDS":null,"mzmed":"635.1427623","into":"7234.640417","pcgroup":"1"},"636.1507892":{"num_res":0,"mzmin":635.8507892,"RECORDS":null,"mzmed":"636.1507892","mzmax":636.4507892001,"into":"1583.057478","pcgroup":"1"},"279.0200882":{"mzmin":278.7200882,"num_res":0,"into":"740.7787059","pcgroup":"3","RECORDS":null,"mzmed":"279.0200882","mzmax":279.3200882001},"649.6002579":{"num_res":0,"mzmin":649.3002579,"mzmed":"649.6002579","RECORDS":null,"mzmax":649.9002579001,"into":"972.9296842","pcgroup":"1"},"612.1618463":{"num_res":7,"mzmin":611.8618463,"mzmax":612.4618463001,"mzmed":"612.1618463","RECORDS":{"TY000246":{"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","instrument_type":"LC-ESI-ITTOF","name":"Rutin","ms_type":"MS","id":"TY000246","precursor_type":"[M+H]+","formula":"C27H30O16"},"PR020046":{"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","name":"Hesperetin-7-O-rutinoside","id":"PR020046","ms_type":"MS","precursor_type":" [M+H]+","formula":"C28H34O15"},"PR020080":{"ms_type":"MS","id":"PR020080","name":"Quercetin-3-O-rutinoside","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.593021369395","peaks":null,"instrument_type":"LC-ESI-QTOF"},"PB006201":{"precursor_type":" [M+H]+","formula":"C27H30O16","name":"Rutin ","id":"PB006201","ms_type":"MS2","instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"610.15338","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"},"FIO00588":{"ms_type":"MS2","id":"FIO00588","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.676089256465","exact_mz":"610.15338","peaks":null,"instrument_type":"LC-ESI-QTOF"},"FIO00483":{"peaks":null,"exact_mz":"610.18977","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","instrument_type":"LC-ESI-QTOF","name":"Hesperidin","ms_type":"MS2","id":"FIO00483","precursor_type":" [M+H]+","formula":"C28H34O15"},"PR020045":{"instrument_type":"LC-ESI-QTOF","peaks":null,"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","exact_mz":"610.18977","precursor_type":" [M+H]+","formula":"C28H34O15","name":"Hesperetin-7-O-neohesperidoside","id":"PR020045","ms_type":"MS"}},"into":"16140.56724","pcgroup":"1"},"649.1057016":{"into":"5106.935619","pcgroup":"1","mzmax":649.4057016001,"mzmed":"649.1057016","RECORDS":null,"mzmin":648.8057016,"num_res":0},"326.0658445":{"mzmin":325.7658445,"num_res":0,"pcgroup":"1","into":"3192.858682","mzmax":326.3658445001,"mzmed":"326.0658445","RECORDS":null},"303.0485467":{"mzmin":302.7485467,"num_res":15,"into":"247182.3356","pcgroup":"1","mzmed":"303.0485467","RECORDS":{"FIO00483":{"precursor_type":" [M+H]+","formula":"C28H34O15","name":"Hesperidin","id":"FIO00483","ms_type":"MS2","instrument_type":"LC-ESI-QTOF","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.591111986992","exact_mz":"610.18977"},"FIO00160":{"precursor_type":" [M+H]+","formula":"C21H20O12","name":"Isoquercitrin","id":"FIO00160","ms_type":"MS2","instrument_type":"LC-ESI-QTOF","peaks":null,"exact_mz":"464.09548","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","score":"0.629320319716"},"PB006201":{"precursor_type":" [M+H]+","formula":"C27H30O16","name":"Rutin ","ms_type":"MS2","id":"PB006201","instrument_type":"LC-ESI-QTOF","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.718240688151","exact_mz":"610.15338"},"TY000218":{"ms_type":"MS","id":"TY000218","name":"Isoquercitrin","formula":"C21H20O12","precursor_type":"[M+H]+","score":"0.630268036021","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18+,21-/m0/s1","exact_mz":"464.09548","peaks":null,"instrument_type":"LC-ESI-ITTOF"},"FIO00589":{"instrument_type":"LC-ESI-QTOF","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.628953392993","peaks":null,"formula":"C27H30O16","precursor_type":" [M+H]+","ms_type":"MS2","id":"FIO00589","name":"Rutin"},"PR020075":{"formula":"C21H20O12","precursor_type":" [M+H]+","id":"PR020075","ms_type":"MS","name":"Quercetin-3-beta-O-galactoside","instrument_type":"LC-ESI-QTOF","exact_mz":"464.09548","score":"0.618103117363","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","peaks":null},"TY000168":{"name":"Hirsutrin","id":"TY000168","ms_type":"MS","precursor_type":"[M+H]+","formula":"C21H20O12","peaks":null,"score":"0.571213973695","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","exact_mz":"464.09548","instrument_type":"LC-ESI-ITTOF"},"FIO00150":{"formula":"C21H20O12","precursor_type":" [M+H]+","id":"FIO00150","ms_type":"MS2","name":"Hyperoside","instrument_type":"LC-ESI-QTOF","exact_mz":"464.09548","score":"0.631453810993","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15+,17+,18-,21+/m1/s1","peaks":null},"TY000246":{"instrument_type":"LC-ESI-ITTOF","score":"0.722183932245","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,"formula":"C27H30O16","precursor_type":"[M+H]+","id":"TY000246","ms_type":"MS","name":"Rutin"},"PR020078":{"formula":"C21H20O12","precursor_type":" [M+H]+","id":"PR020078","ms_type":"MS","name":"Quercetin-3-O-beta-glucopyranoside","instrument_type":"LC-ESI-QTOF","score":"0.609833904994","inchi":"InChI=1S/C21H20O12/c22-6-13-15(27)17(29)18(30)21(32-13)33-20-16(28)14-11(26)4-8(23)5-12(14)31-19(20)7-1-2-9(24)10(25)3-7/h1-5,13,15,17-18,21-27,29-30H,6H2/t13-,15-,17+,18-,21+/m1/s1","exact_mz":"464.09548","peaks":null},"PR020045":{"precursor_type":" [M+H]+","formula":"C28H34O15","name":"Hesperetin-7-O-neohesperidoside","id":"PR020045","ms_type":"MS","instrument_type":"LC-ESI-QTOF","peaks":null,"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"},"PR020046":{"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","peaks":null,"instrument_type":"LC-ESI-QTOF","id":"PR020046","ms_type":"MS","name":"Hesperetin-7-O-rutinoside","formula":"C28H34O15","precursor_type":" [M+H]+"},"PR020080":{"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","id":"PR020080","ms_type":"MS","name":"Quercetin-3-O-rutinoside","formula":"C27H30O16","precursor_type":" [M+H]+"},"FIO00484":{"instrument_type":"LC-ESI-QTOF","peaks":null,"score":"0.526179514801","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","precursor_type":" [M+H]+","formula":"C28H34O15","name":"Hesperidin","ms_type":"MS2","id":"FIO00484"},"FIO00588":{"name":"Rutin","id":"FIO00588","ms_type":"MS2","precursor_type":" [M+H]+","formula":"C27H30O16","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","instrument_type":"LC-ESI-QTOF"}},"mzmax":303.3485467001},"717.0893975":{"mzmin":716.7893975,"num_res":0,"into":"453.1308","pcgroup":"1","mzmed":"717.0893975","RECORDS":null,"mzmax":717.3893975001},"149.0608613":{"num_res":1,"mzmin":148.7608613,"mzmax":149.3608613001,"mzmed":"149.0608613","RECORDS":{"PR100005":{"formula":"C10H10O4","precursor_type":" [M+H]+","ms_type":"MS2","id":"PR100005","name":"trans-4-Hydroxy-3-methoxycinnamate","instrument_type":"LC-ESI-QTOF","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","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":{}} \ No newline at end of file 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 @@ -0,0 +1,70 @@ +mz mzmin mzmax rt rtmin rtmax into intb maxo sn sample isotopes adduct pcgroup massbank(score::name::mz::formula::adduct::id) +303.0485467 303.0479126 303.0501709 273.698 270.334 278.072 247182.3356 246032.8821 80132 351 1 [8][M]+ 1 0.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 +304.0519266 304.050354 304.0531006 273.362 270.671 278.072 39377.69332 39179.45225 12431 267 1 [8][M+1]+ 1 0.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 +305.0552454 305.0523376 305.0632324 274.034 271.007 278.072 6932.447143 6916.875306 2489 149 1 [8][M+2]+ 1 0.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 +325.0531081 325.0501099 325.0581665 273.698 271.007 278.744 16589.13717 16498.21541 4449 72 1 [1][M]+ 1 NONE +325.5558227 325.5527039 325.5592346 273.698 270.334 278.744 5385.764 5364.939238 1474 158 1 1 NONE +326.0658445 326.0617065 326.0741272 274.034 271.007 278.408 3192.858682 3180.844071 959 118 1 [1][M+1]+ 1 NONE +334.0589389 334.0574951 334.0603943 273.698 270.334 278.744 54965.0688 54850.32436 13751 389 1 1 NONE +334.5601886 334.5524292 334.5627747 273.362 270.334 279.753 16357.10268 16227.57541 4281 166 1 1 NONE +335.0608018 335.0567017 335.0646362 274.034 270.671 278.072 5194.492773 5184.064091 1421 148 1 1 NONE +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 0.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 +466.1044404 466.0985107 466.1070862 273.362 270.334 278.072 26116.08643 26072.63829 8449 532 1 [10][M+1]+ 1 0.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 +467.1065989 467.1006775 467.1124573 274.034 270.671 278.072 5576.989909 5560.706107 2070 174 1 [10][M+2]+ 1 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.591111986992::[Hesperidin]::610.18977::C28H34O15::[ [M+H]+]::FIO00483 | 0.571213973695::[Hirsutrin]::464.09548::C21H20O12::[[M+H]+]::TY000168 | 0.526179514801::[Hesperidin]::610.18977::C28H34O15::[ [M+H]+]::FIO00484 +503.0443595 503.0398865 503.0495605 274.034 270.671 278.744 2661.062625 2635.329938 919 62 1 1 NONE +519.0203434 519.0109863 519.03125 273.698 271.007 278.408 3261.486136 3233.291851 1105 74 1 [2][M]+ 1 NONE +520.0216826 520.0151978 520.031189 274.371 271.007 278.072 767.3935714 756.3133696 303 20 1 [2][M+1]+ 1 NONE +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 0.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.628953392993::[Rutin]::610.15338::C27H30O16::[ [M+H]+]::FIO00589 | 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.503808010925::[Hesperetin-7-O-rutinoside]::610.18977::C28H34O15::[ [M+H]+]::PR020046 +612.1618463 612.1569824 612.166626 273.362 270.671 277.735 16140.56724 16129.11427 6402 867 1 [6][M+1]+ 1 0.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.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.503808010925::[Hesperetin-7-O-rutinoside]::610.18977::C28H34O15::[ [M+H]+]::PR020046 +613.1621027 613.1480713 613.1749268 273.698 271.007 278.072 3880.703571 3874.311429 1483 291 1 [6][M+2]+ 1 0.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.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.503808010925::[Hesperetin-7-O-rutinoside]::610.18977::C28H34O15::[ [M+H]+]::PR020046 +630.6266888 630.6172485 630.6311646 273.698 271.007 278.072 17110.08429 17103.35571 6626 1590 1 [4][M]2+ 1 NONE +631.1270815 631.1121216 631.1309814 274.034 270.671 278.072 7219.6755 7213.283727 2839 876 1 [4][M+1]2+ 1 NONE +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 0.722183932245::[Rutin]::610.15338::C27H30O16::[[M+H]+]::TY000246 +634.1424296 634.1401978 634.1456909 273.698 270.334 278.408 23879.52783 23851.69336 7234 695 1 [9][M+1]+ 1 NONE +635.1427623 635.1370239 635.1464844 273.698 270.334 278.408 7234.640417 7226.23 2120 2119 1 [9][M+2]+ 1 NONE +636.1507892 636.1391602 636.1651001 274.371 271.007 278.744 1583.057478 1561.299402 636 47 1 [9][M+3]+ 1 NONE +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 NONE +649.6002579 649.5925293 649.6157227 273.698 271.343 277.735 972.9296842 967.2105263 351 77 1 [3][M+1]2+ 1 NONE +650.1081035 650.0990601 650.1168213 273.698 271.007 279.417 1549.122 1535.345619 602 64 1 [3][M+2]2+ 1 NONE +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 NONE +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 NONE +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 0.842444634941::[1-ETHYL-2,3-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012276 | 0.834834020699::[1,2-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012273 | 0.825082890799::[1,3-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012274 | 0.822346316415::[1-ETHYL-3,5-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012279 | 0.812855498092::[1,4-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012275 | 0.809347489341::[1-ETHYL-3,4-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012277 | 0.793494288532::[2-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012267 | 0.771842678731::[3-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012268 | 0.766089270107::[4-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012269 | 0.721608041747::[BUTYLBENZENE]::134.10955::C10H14::[MS]::JP012263 | 0.502725943227::[5-METHYL-1,3-DIISOPROPYLBENZENE]::176.15650::C13H20::[MS]::JP012297 +136.0490744 136.0469818 136.0510406 280.426 277.061 284.126 9243.038571 9236.31 2771 477 1 [14][M+1]+ 2 0.842444634941::[1-ETHYL-2,3-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012276 | 0.834834020699::[1,2-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012273 | 0.825082890799::[1,3-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012274 | 0.822346316415::[1-ETHYL-3,5-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012279 | 0.812855498092::[1,4-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012275 | 0.809347489341::[1-ETHYL-3,4-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012277 | 0.793494288532::[2-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012267 | 0.771842678731::[3-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012268 | 0.766089270107::[4-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012269 | 0.721608041747::[BUTYLBENZENE]::134.10955::C10H14::[MS]::JP012263 | 0.502725943227::[5-METHYL-1,3-DIISOPROPYLBENZENE]::176.15650::C13H20::[MS]::JP012297 +153.0565924 153.0544586 153.0579376 280.426 276.725 282.78 4206.543056 4165.861024 1470 39 1 [M+H]+ 152.048 2 NONE +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 0.842444634941::[1-ETHYL-2,3-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012276 | 0.834834020699::[1,2-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012273 | 0.825082890799::[1,3-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012274 | 0.822346316415::[1-ETHYL-3,5-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012279 | 0.812855498092::[1,4-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012275 | 0.809347489341::[1-ETHYL-3,4-DIMETHYLBENZENE]::134.10955::C10H14::[MS]::JP012277 | 0.793494288532::[2-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012267 | 0.771842678731::[3-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012268 | 0.766089270107::[4-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012269 | 0.721608041747::[BUTYLBENZENE]::134.10955::C10H14::[MS]::JP012263 | 0.502725943227::[5-METHYL-1,3-DIISOPROPYLBENZENE]::176.15650::C13H20::[MS]::JP012297 +176.0376081 176.0342712 176.0409698 280.089 275.716 281.098 410.713875 408.695625 320 108 1 [13][M+1]+ 2 0.834834020699::[1,2-DIETHYLBENZENE]::134.10955::C10H14::[MS]::JP012273 | 0.771842678731::[3-METHYL-1-PROPYLBENZENE]::134.10955::C10H14::[MS]::JP012268 | 0.721608041747::[BUTYLBENZENE]::134.10955::C10H14::[MS]::JP012263 | 0.502725943227::[5-METHYL-1,3-DIISOPROPYLBENZENE]::176.15650::C13H20::[MS]::JP012297 +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 NONE +403.0711753 403.0660706 403.0734253 279.753 278.408 282.78 399.5335385 396.1704615 260 26 1 2 NONE +117.0358602 117.033165 117.0389862 278.072 275.38 281.098 994.5956471 970.9683282 507 24 1 3 NONE +145.0301952 145.0294189 145.0324097 278.072 274.707 282.107 20533.65455 20181.26777 7200 53 1 [12][M]+ 3 0.526245917512::[trans-4-Hydroxy-3-methoxycinnamate]::194.05791::C10H10O4::[ [M+H]+]::PR100005 +146.0338015 146.0315704 146.0370331 278.072 276.052 281.098 2337.98 2333.2704 849 848 1 [12][M+1]+ 3 NONE +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 0.526245917512::[trans-4-Hydroxy-3-methoxycinnamate]::194.05791::C10H10O4::[ [M+H]+]::PR100005 +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 NONE +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 0.526245917512::[trans-4-Hydroxy-3-methoxycinnamate]::194.05791::C10H10O4::[ [M+H]+]::PR100005 +178.0578014 178.0528107 178.0614929 278.072 275.043 282.78 3510.916043 3464.439494 1316 54 1 [11][M+1]+ 3 NONE +195.0644538 195.0613861 195.0670013 278.072 275.716 280.762 1925.5536 1901.981571 858 35 1 [M+H]+ 194.055 3 0.526245917512::[trans-4-Hydroxy-3-methoxycinnamate]::194.05791::C10H10O4::[ [M+H]+]::PR100005 +196.0700972 196.0676727 196.0720062 278.072 277.061 281.435 279.2630769 271.3225846 204 13 1 [M+K]+ 157.103 3 NONE +217.047301 217.044632 217.0532379 277.735 275.38 279.417 1703.950417 1700.249833 886 885 1 [M+Na]+ 194.055 3 NONE +233.0121036 233.0091858 233.0163269 278.072 274.707 282.107 3540.9 3531.509848 1481 132 1 [M+K]+ 194.055 3 NONE +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 NONE +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 NONE +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 NONE +297.0306054 297.0255432 297.038147 278.072 275.38 280.426 1108.1016 1103.392 385 384 1 3 NONE +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 NONE +308.0261572 308.0209351 308.034668 278.072 275.716 282.444 751.5176 741.6344 323 27 1 3 NONE +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 NONE +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 NONE +422.0847921 422.0766602 422.0930786 277.399 275.716 279.081 817.022 813.9935 617 129 1 3 NONE +425.0339018 425.0305176 425.0410461 277.735 276.052 279.417 398.7525 388.7106316 267 13 1 3 NONE +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 NONE +428.071429 428.0612793 428.0791016 278.072 273.362 280.762 553.6545455 544.381348 310 27 1 [7][M+1]+ 3 NONE +443.0411698 443.0319519 443.0491333 278.072 273.362 280.089 842.8931 834.6301017 384 31 1 3 NONE +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 NONE +446.0817674 446.0753784 446.0857849 277.735 276.725 280.426 352.6043636 348.2589676 238 23 1 [5][M+1]+ 3 NONE +449.2321066 449.2252808 449.2385864 277.735 275.716 282.107 1741.715684 1720.915388 631 37 1 [M+K]+ 410.275 3 NONE +463.0878154 463.078186 463.0952759 278.072 274.707 283.116 819.0366 814.7170295 408 71 1 [M+Na]+ 440.098 3 NONE +472.296343 472.2885132 472.3045959 277.399 275.716 280.089 369.0139231 363.6954096 249 23 1 [3M+H]+ 157.103 3 NONE +480.3076532 480.2977295 480.315033 277.399 276.052 280.762 412.125 404.4284586 208 19 1 3 NONE +607.1399722 607.1333618 607.1530151 278.072 274.034 282.107 284.236875 281.321625 211 34 1 3 NONE +621.1283748 621.1159668 621.1455688 278.072 276.389 279.753 434.6288 431.6012 258 43 1 [3M+K]+ 194.055 3 NONE +21.1283748 21.1159668 21.1455688 78.072 76.389 79.753 34.6288 31.6012 258 43 1 [X]+ 94.055 4 NONE 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 @@ -0,0 +1,202 @@ +ID PCGROUP Query(Da) Score Metabolite_name Cpd_Mw(Da) Formula Adduct MASSBANK_ID Instrument MS_level +mz_00001 1 303.0485467 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00001 1 303.0485467 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00001 1 303.0485467 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00001 1 303.0485467 0.631453810993 Hyperoside 464.09548 C21H20O12 [M+H]+ FIO00150 LC-ESI-QTOF MS2 +mz_00001 1 303.0485467 0.630268036021 Isoquercitrin 464.09548 C21H20O12 [M+H]+ TY000218 LC-ESI-ITTOF MS +mz_00001 1 303.0485467 0.629320319716 Isoquercitrin 464.09548 C21H20O12 [M+H]+ FIO00160 LC-ESI-QTOF MS2 +mz_00001 1 303.0485467 0.628953392993 Rutin 610.15338 C27H30O16 [M+H]+ FIO00589 LC-ESI-QTOF MS2 +mz_00001 1 303.0485467 0.618103117363 Quercetin-3-beta-O-galactoside 464.09548 C21H20O12 [M+H]+ PR020075 LC-ESI-QTOF MS +mz_00001 1 303.0485467 0.609833904994 Quercetin-3-O-beta-glucopyranoside 464.09548 C21H20O12 [M+H]+ PR020078 LC-ESI-QTOF MS +mz_00001 1 303.0485467 0.593021369395 Quercetin-3-O-rutinoside 610.15338 C27H30O16 [M+H]+ PR020080 LC-ESI-QTOF MS +mz_00001 1 303.0485467 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00001 1 303.0485467 0.585927069664 Hesperetin-7-O-neohesperidoside 610.18977 C28H34O15 [M+H]+ PR020045 LC-ESI-QTOF MS +mz_00001 1 303.0485467 0.571213973695 Hirsutrin 464.09548 C21H20O12 [M+H]+ TY000168 LC-ESI-ITTOF MS +mz_00001 1 303.0485467 0.526179514801 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00484 LC-ESI-QTOF MS2 +mz_00001 1 303.0485467 0.503808010925 Hesperetin-7-O-rutinoside 610.18977 C28H34O15 [M+H]+ PR020046 LC-ESI-QTOF MS +mz_00002 1 304.0519266 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00002 1 304.0519266 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00002 1 304.0519266 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00002 1 304.0519266 0.631453810993 Hyperoside 464.09548 C21H20O12 [M+H]+ FIO00150 LC-ESI-QTOF MS2 +mz_00002 1 304.0519266 0.630268036021 Isoquercitrin 464.09548 C21H20O12 [M+H]+ TY000218 LC-ESI-ITTOF MS +mz_00002 1 304.0519266 0.629320319716 Isoquercitrin 464.09548 C21H20O12 [M+H]+ FIO00160 LC-ESI-QTOF MS2 +mz_00002 1 304.0519266 0.628953392993 Rutin 610.15338 C27H30O16 [M+H]+ FIO00589 LC-ESI-QTOF MS2 +mz_00002 1 304.0519266 0.618103117363 Quercetin-3-beta-O-galactoside 464.09548 C21H20O12 [M+H]+ PR020075 LC-ESI-QTOF MS +mz_00002 1 304.0519266 0.609833904994 Quercetin-3-O-beta-glucopyranoside 464.09548 C21H20O12 [M+H]+ PR020078 LC-ESI-QTOF MS +mz_00002 1 304.0519266 0.593021369395 Quercetin-3-O-rutinoside 610.15338 C27H30O16 [M+H]+ PR020080 LC-ESI-QTOF MS +mz_00002 1 304.0519266 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00002 1 304.0519266 0.585927069664 Hesperetin-7-O-neohesperidoside 610.18977 C28H34O15 [M+H]+ PR020045 LC-ESI-QTOF MS +mz_00002 1 304.0519266 0.571213973695 Hirsutrin 464.09548 C21H20O12 [M+H]+ TY000168 LC-ESI-ITTOF MS +mz_00002 1 304.0519266 0.526179514801 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00484 LC-ESI-QTOF MS2 +mz_00002 1 304.0519266 0.503808010925 Hesperetin-7-O-rutinoside 610.18977 C28H34O15 [M+H]+ PR020046 LC-ESI-QTOF MS +mz_00003 1 305.0552454 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00003 1 305.0552454 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00003 1 305.0552454 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00003 1 305.0552454 0.631453810993 Hyperoside 464.09548 C21H20O12 [M+H]+ FIO00150 LC-ESI-QTOF MS2 +mz_00003 1 305.0552454 0.630268036021 Isoquercitrin 464.09548 C21H20O12 [M+H]+ TY000218 LC-ESI-ITTOF MS +mz_00003 1 305.0552454 0.629320319716 Isoquercitrin 464.09548 C21H20O12 [M+H]+ FIO00160 LC-ESI-QTOF MS2 +mz_00003 1 305.0552454 0.628953392993 Rutin 610.15338 C27H30O16 [M+H]+ FIO00589 LC-ESI-QTOF MS2 +mz_00003 1 305.0552454 0.618103117363 Quercetin-3-beta-O-galactoside 464.09548 C21H20O12 [M+H]+ PR020075 LC-ESI-QTOF MS +mz_00003 1 305.0552454 0.609833904994 Quercetin-3-O-beta-glucopyranoside 464.09548 C21H20O12 [M+H]+ PR020078 LC-ESI-QTOF MS +mz_00003 1 305.0552454 0.593021369395 Quercetin-3-O-rutinoside 610.15338 C27H30O16 [M+H]+ PR020080 LC-ESI-QTOF MS +mz_00003 1 305.0552454 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00003 1 305.0552454 0.585927069664 Hesperetin-7-O-neohesperidoside 610.18977 C28H34O15 [M+H]+ PR020045 LC-ESI-QTOF MS +mz_00003 1 305.0552454 0.571213973695 Hirsutrin 464.09548 C21H20O12 [M+H]+ TY000168 LC-ESI-ITTOF MS +mz_00003 1 305.0552454 0.526179514801 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00484 LC-ESI-QTOF MS2 +mz_00003 1 305.0552454 0.503808010925 Hesperetin-7-O-rutinoside 610.18977 C28H34O15 [M+H]+ PR020046 LC-ESI-QTOF MS +mz_00004 1 325.0531081 0 NA NA NA NA NA NA NA +mz_00005 1 325.5558227 0 NA NA NA NA NA NA NA +mz_00006 1 326.0658445 0 NA NA NA NA NA NA NA +mz_00007 1 334.0589389 0 NA NA NA NA NA NA NA +mz_00008 1 334.5601886 0 NA NA NA NA NA NA NA +mz_00009 1 335.0608018 0 NA NA NA NA NA NA NA +mz_00010 1 465.101281 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00010 1 465.101281 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00010 1 465.101281 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00010 1 465.101281 0.631453810993 Hyperoside 464.09548 C21H20O12 [M+H]+ FIO00150 LC-ESI-QTOF MS2 +mz_00010 1 465.101281 0.630268036021 Isoquercitrin 464.09548 C21H20O12 [M+H]+ TY000218 LC-ESI-ITTOF MS +mz_00010 1 465.101281 0.629320319716 Isoquercitrin 464.09548 C21H20O12 [M+H]+ FIO00160 LC-ESI-QTOF MS2 +mz_00010 1 465.101281 0.628953392993 Rutin 610.15338 C27H30O16 [M+H]+ FIO00589 LC-ESI-QTOF MS2 +mz_00010 1 465.101281 0.618103117363 Quercetin-3-beta-O-galactoside 464.09548 C21H20O12 [M+H]+ PR020075 LC-ESI-QTOF MS +mz_00010 1 465.101281 0.609833904994 Quercetin-3-O-beta-glucopyranoside 464.09548 C21H20O12 [M+H]+ PR020078 LC-ESI-QTOF MS +mz_00010 1 465.101281 0.593021369395 Quercetin-3-O-rutinoside 610.15338 C27H30O16 [M+H]+ PR020080 LC-ESI-QTOF MS +mz_00010 1 465.101281 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00010 1 465.101281 0.585927069664 Hesperetin-7-O-neohesperidoside 610.18977 C28H34O15 [M+H]+ PR020045 LC-ESI-QTOF MS +mz_00010 1 465.101281 0.571213973695 Hirsutrin 464.09548 C21H20O12 [M+H]+ TY000168 LC-ESI-ITTOF MS +mz_00010 1 465.101281 0.526179514801 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00484 LC-ESI-QTOF MS2 +mz_00010 1 465.101281 0.503808010925 Hesperetin-7-O-rutinoside 610.18977 C28H34O15 [M+H]+ PR020046 LC-ESI-QTOF MS +mz_00011 1 466.1044404 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00011 1 466.1044404 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00011 1 466.1044404 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00011 1 466.1044404 0.631453810993 Hyperoside 464.09548 C21H20O12 [M+H]+ FIO00150 LC-ESI-QTOF MS2 +mz_00011 1 466.1044404 0.630268036021 Isoquercitrin 464.09548 C21H20O12 [M+H]+ TY000218 LC-ESI-ITTOF MS +mz_00011 1 466.1044404 0.629320319716 Isoquercitrin 464.09548 C21H20O12 [M+H]+ FIO00160 LC-ESI-QTOF MS2 +mz_00011 1 466.1044404 0.628953392993 Rutin 610.15338 C27H30O16 [M+H]+ FIO00589 LC-ESI-QTOF MS2 +mz_00011 1 466.1044404 0.618103117363 Quercetin-3-beta-O-galactoside 464.09548 C21H20O12 [M+H]+ PR020075 LC-ESI-QTOF MS +mz_00011 1 466.1044404 0.609833904994 Quercetin-3-O-beta-glucopyranoside 464.09548 C21H20O12 [M+H]+ PR020078 LC-ESI-QTOF MS +mz_00011 1 466.1044404 0.593021369395 Quercetin-3-O-rutinoside 610.15338 C27H30O16 [M+H]+ PR020080 LC-ESI-QTOF MS +mz_00011 1 466.1044404 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00011 1 466.1044404 0.585927069664 Hesperetin-7-O-neohesperidoside 610.18977 C28H34O15 [M+H]+ PR020045 LC-ESI-QTOF MS +mz_00011 1 466.1044404 0.571213973695 Hirsutrin 464.09548 C21H20O12 [M+H]+ TY000168 LC-ESI-ITTOF MS +mz_00011 1 466.1044404 0.526179514801 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00484 LC-ESI-QTOF MS2 +mz_00011 1 466.1044404 0.503808010925 Hesperetin-7-O-rutinoside 610.18977 C28H34O15 [M+H]+ PR020046 LC-ESI-QTOF MS +mz_00012 1 467.1065989 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00012 1 467.1065989 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00012 1 467.1065989 0.631453810993 Hyperoside 464.09548 C21H20O12 [M+H]+ FIO00150 LC-ESI-QTOF MS2 +mz_00012 1 467.1065989 0.630268036021 Isoquercitrin 464.09548 C21H20O12 [M+H]+ TY000218 LC-ESI-ITTOF MS +mz_00012 1 467.1065989 0.629320319716 Isoquercitrin 464.09548 C21H20O12 [M+H]+ FIO00160 LC-ESI-QTOF MS2 +mz_00012 1 467.1065989 0.628953392993 Rutin 610.15338 C27H30O16 [M+H]+ FIO00589 LC-ESI-QTOF MS2 +mz_00012 1 467.1065989 0.618103117363 Quercetin-3-beta-O-galactoside 464.09548 C21H20O12 [M+H]+ PR020075 LC-ESI-QTOF MS +mz_00012 1 467.1065989 0.609833904994 Quercetin-3-O-beta-glucopyranoside 464.09548 C21H20O12 [M+H]+ PR020078 LC-ESI-QTOF MS +mz_00012 1 467.1065989 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00012 1 467.1065989 0.571213973695 Hirsutrin 464.09548 C21H20O12 [M+H]+ TY000168 LC-ESI-ITTOF MS +mz_00012 1 467.1065989 0.526179514801 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00484 LC-ESI-QTOF MS2 +mz_00013 1 503.0443595 0 NA NA NA NA NA NA NA +mz_00014 1 519.0203434 0 NA NA NA NA NA NA NA +mz_00015 1 520.0216826 0 NA NA NA NA NA NA NA +mz_00016 1 611.1574452 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00016 1 611.1574452 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00016 1 611.1574452 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00016 1 611.1574452 0.628953392993 Rutin 610.15338 C27H30O16 [M+H]+ FIO00589 LC-ESI-QTOF MS2 +mz_00016 1 611.1574452 0.593021369395 Quercetin-3-O-rutinoside 610.15338 C27H30O16 [M+H]+ PR020080 LC-ESI-QTOF MS +mz_00016 1 611.1574452 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00016 1 611.1574452 0.585927069664 Hesperetin-7-O-neohesperidoside 610.18977 C28H34O15 [M+H]+ PR020045 LC-ESI-QTOF MS +mz_00016 1 611.1574452 0.503808010925 Hesperetin-7-O-rutinoside 610.18977 C28H34O15 [M+H]+ PR020046 LC-ESI-QTOF MS +mz_00017 1 612.1618463 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00017 1 612.1618463 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00017 1 612.1618463 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00017 1 612.1618463 0.593021369395 Quercetin-3-O-rutinoside 610.15338 C27H30O16 [M+H]+ PR020080 LC-ESI-QTOF MS +mz_00017 1 612.1618463 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00017 1 612.1618463 0.585927069664 Hesperetin-7-O-neohesperidoside 610.18977 C28H34O15 [M+H]+ PR020045 LC-ESI-QTOF MS +mz_00017 1 612.1618463 0.503808010925 Hesperetin-7-O-rutinoside 610.18977 C28H34O15 [M+H]+ PR020046 LC-ESI-QTOF MS +mz_00018 1 613.1621027 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00018 1 613.1621027 0.718240688151 Rutin 610.15338 C27H30O16 [M+H]+ PB006201 LC-ESI-QTOF MS2 +mz_00018 1 613.1621027 0.676089256465 Rutin 610.15338 C27H30O16 [M+H]+ FIO00588 LC-ESI-QTOF MS2 +mz_00018 1 613.1621027 0.593021369395 Quercetin-3-O-rutinoside 610.15338 C27H30O16 [M+H]+ PR020080 LC-ESI-QTOF MS +mz_00018 1 613.1621027 0.591111986992 Hesperidin 610.18977 C28H34O15 [M+H]+ FIO00483 LC-ESI-QTOF MS2 +mz_00018 1 613.1621027 0.585927069664 Hesperetin-7-O-neohesperidoside 610.18977 C28H34O15 [M+H]+ PR020045 LC-ESI-QTOF MS +mz_00018 1 613.1621027 0.503808010925 Hesperetin-7-O-rutinoside 610.18977 C28H34O15 [M+H]+ PR020046 LC-ESI-QTOF MS +mz_00019 1 630.6266888 0 NA NA NA NA NA NA NA +mz_00020 1 631.1270815 0 NA NA NA NA NA NA NA +mz_00021 1 633.1395015 0.722183932245 Rutin 610.15338 C27H30O16 [M+H]+ TY000246 LC-ESI-ITTOF MS +mz_00022 1 634.1424296 0 NA NA NA NA NA NA NA +mz_00023 1 635.1427623 0 NA NA NA NA NA NA NA +mz_00024 1 636.1507892 0 NA NA NA NA NA NA NA +mz_00025 1 649.1057016 0 NA NA NA NA NA NA NA +mz_00026 1 649.6002579 0 NA NA NA NA NA NA NA +mz_00027 1 650.1081035 0 NA NA NA NA NA NA NA +mz_00028 1 655.1225036 0 NA NA NA NA NA NA NA +mz_00029 1 717.0893975 0 NA NA NA NA NA NA NA +mz_00030 2 135.0459028 0.842444634941 1-ETHYL-2,3-DIMETHYLBENZENE 134.10955 C10H14 MS JP012276 CI-B MS +mz_00030 2 135.0459028 0.834834020699 1,2-DIETHYLBENZENE 134.10955 C10H14 MS JP012273 CI-B MS +mz_00030 2 135.0459028 0.825082890799 1,3-DIETHYLBENZENE 134.10955 C10H14 MS JP012274 CI-B MS +mz_00030 2 135.0459028 0.822346316415 1-ETHYL-3,5-DIMETHYLBENZENE 134.10955 C10H14 MS JP012279 CI-B MS +mz_00030 2 135.0459028 0.812855498092 1,4-DIETHYLBENZENE 134.10955 C10H14 MS JP012275 CI-B MS +mz_00030 2 135.0459028 0.809347489341 1-ETHYL-3,4-DIMETHYLBENZENE 134.10955 C10H14 MS JP012277 CI-B MS +mz_00030 2 135.0459028 0.793494288532 2-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012267 CI-B MS +mz_00030 2 135.0459028 0.771842678731 3-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012268 CI-B MS +mz_00030 2 135.0459028 0.766089270107 4-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012269 CI-B MS +mz_00030 2 135.0459028 0.721608041747 BUTYLBENZENE 134.10955 C10H14 MS JP012263 CI-B MS +mz_00030 2 135.0459028 0.502725943227 5-METHYL-1,3-DIISOPROPYLBENZENE 176.1565 C13H20 MS JP012297 CI-B MS +mz_00031 2 136.0490744 0.842444634941 1-ETHYL-2,3-DIMETHYLBENZENE 134.10955 C10H14 MS JP012276 CI-B MS +mz_00031 2 136.0490744 0.834834020699 1,2-DIETHYLBENZENE 134.10955 C10H14 MS JP012273 CI-B MS +mz_00031 2 136.0490744 0.825082890799 1,3-DIETHYLBENZENE 134.10955 C10H14 MS JP012274 CI-B MS +mz_00031 2 136.0490744 0.822346316415 1-ETHYL-3,5-DIMETHYLBENZENE 134.10955 C10H14 MS JP012279 CI-B MS +mz_00031 2 136.0490744 0.812855498092 1,4-DIETHYLBENZENE 134.10955 C10H14 MS JP012275 CI-B MS +mz_00031 2 136.0490744 0.809347489341 1-ETHYL-3,4-DIMETHYLBENZENE 134.10955 C10H14 MS JP012277 CI-B MS +mz_00031 2 136.0490744 0.793494288532 2-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012267 CI-B MS +mz_00031 2 136.0490744 0.771842678731 3-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012268 CI-B MS +mz_00031 2 136.0490744 0.766089270107 4-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012269 CI-B MS +mz_00031 2 136.0490744 0.721608041747 BUTYLBENZENE 134.10955 C10H14 MS JP012263 CI-B MS +mz_00031 2 136.0490744 0.502725943227 5-METHYL-1,3-DIISOPROPYLBENZENE 176.1565 C13H20 MS JP012297 CI-B MS +mz_00032 2 153.0565924 0 NA NA NA NA NA NA NA +mz_00033 2 175.0362187 0.842444634941 1-ETHYL-2,3-DIMETHYLBENZENE 134.10955 C10H14 MS JP012276 CI-B MS +mz_00033 2 175.0362187 0.834834020699 1,2-DIETHYLBENZENE 134.10955 C10H14 MS JP012273 CI-B MS +mz_00033 2 175.0362187 0.825082890799 1,3-DIETHYLBENZENE 134.10955 C10H14 MS JP012274 CI-B MS +mz_00033 2 175.0362187 0.822346316415 1-ETHYL-3,5-DIMETHYLBENZENE 134.10955 C10H14 MS JP012279 CI-B MS +mz_00033 2 175.0362187 0.812855498092 1,4-DIETHYLBENZENE 134.10955 C10H14 MS JP012275 CI-B MS +mz_00033 2 175.0362187 0.809347489341 1-ETHYL-3,4-DIMETHYLBENZENE 134.10955 C10H14 MS JP012277 CI-B MS +mz_00033 2 175.0362187 0.793494288532 2-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012267 CI-B MS +mz_00033 2 175.0362187 0.771842678731 3-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012268 CI-B MS +mz_00033 2 175.0362187 0.766089270107 4-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012269 CI-B MS +mz_00033 2 175.0362187 0.721608041747 BUTYLBENZENE 134.10955 C10H14 MS JP012263 CI-B MS +mz_00033 2 175.0362187 0.502725943227 5-METHYL-1,3-DIISOPROPYLBENZENE 176.1565 C13H20 MS JP012297 CI-B MS +mz_00034 2 176.0376081 0.834834020699 1,2-DIETHYLBENZENE 134.10955 C10H14 MS JP012273 CI-B MS +mz_00034 2 176.0376081 0.771842678731 3-METHYL-1-PROPYLBENZENE 134.10955 C10H14 MS JP012268 CI-B MS +mz_00034 2 176.0376081 0.721608041747 BUTYLBENZENE 134.10955 C10H14 MS JP012263 CI-B MS +mz_00034 2 176.0376081 0.502725943227 5-METHYL-1,3-DIISOPROPYLBENZENE 176.1565 C13H20 MS JP012297 CI-B MS +mz_00035 2 197.0192355 0 NA NA NA NA NA NA NA +mz_00036 2 403.0711753 0 NA NA NA NA NA NA NA +mz_00037 3 117.0358602 0 NA NA NA NA NA NA NA +mz_00038 3 145.0301952 0.526245917512 trans-4-Hydroxy-3-methoxycinnamate 194.05791 C10H10O4 [M+H]+ PR100005 LC-ESI-QTOF MS2 +mz_00039 3 146.0338015 0 NA NA NA NA NA NA NA +mz_00040 3 149.0608613 0.526245917512 trans-4-Hydroxy-3-methoxycinnamate 194.05791 C10H10O4 [M+H]+ PR100005 LC-ESI-QTOF MS2 +mz_00041 3 163.0397626 0 NA NA NA NA NA NA NA +mz_00042 3 177.0539492 0.526245917512 trans-4-Hydroxy-3-methoxycinnamate 194.05791 C10H10O4 [M+H]+ PR100005 LC-ESI-QTOF MS2 +mz_00043 3 178.0578014 0 NA NA NA NA NA NA NA +mz_00044 3 195.0644538 0.526245917512 trans-4-Hydroxy-3-methoxycinnamate 194.05791 C10H10O4 [M+H]+ PR100005 LC-ESI-QTOF MS2 +mz_00045 3 196.0700972 0 NA NA NA NA NA NA NA +mz_00046 3 217.047301 0 NA NA NA NA NA NA NA +mz_00047 3 233.0121036 0 NA NA NA NA NA NA NA +mz_00048 3 251.0221026 0 NA NA NA NA NA NA NA +mz_00049 3 269.0328959 0 NA NA NA NA NA NA NA +mz_00050 3 279.0200882 0 NA NA NA NA NA NA NA +mz_00051 3 297.0306054 0 NA NA NA NA NA NA NA +mz_00052 3 301.0504305 0 NA NA NA NA NA NA NA +mz_00053 3 308.0261572 0 NA NA NA NA NA NA NA +mz_00054 3 315.0378642 0 NA NA NA NA NA NA NA +mz_00055 3 371.2623675 0 NA NA NA NA NA NA NA +mz_00056 3 422.0847921 0 NA NA NA NA NA NA NA +mz_00057 3 425.0339018 0 NA NA NA NA NA NA NA +mz_00058 3 427.0703433 0 NA NA NA NA NA NA NA +mz_00059 3 428.071429 0 NA NA NA NA NA NA NA +mz_00060 3 443.0411698 0 NA NA NA NA NA NA NA +mz_00061 3 445.074958 0 NA NA NA NA NA NA NA +mz_00062 3 446.0817674 0 NA NA NA NA NA NA NA +mz_00063 3 449.2321066 0 NA NA NA NA NA NA NA +mz_00064 3 463.0878154 0 NA NA NA NA NA NA NA +mz_00065 3 472.296343 0 NA NA NA NA NA NA NA +mz_00066 3 480.3076532 0 NA NA NA NA NA NA NA +mz_00067 3 607.1399722 0 NA NA NA NA NA NA NA +mz_00068 3 621.1283748 0 NA NA NA NA NA NA NA +mz_00069 4 21.1283748 0 NA NA NA NA NA NA NA