Repository 'bank_inhouse'
hg clone https://toolshed.g2.bx.psu.edu/repos/fgiacomoni/bank_inhouse

Changeset 0:be582bcd6585 (2018-10-04)
Next changeset 1:52798007c6b2 (2019-01-24)
Commit message:
Master branch Updating - - Fxx
added:
README.txt
bank_inhouse.pl
bank_inhouse.xml
bih.tmpl
conf_bih.cfg
inhouse.tsv
lib/bih.pm
lib/conf.pm
lib/csv.pm
lib/json.pm
static/images/bank_inhouse.png
t/bih_managerTest.t
t/lib/bihTest.pm
test-data/in_test2.tabular
test-data/out_test1.tabular
test-data/out_test2a.tabular
test-data/out_test2b.tabular
test-data/out_test_pf1.tabular
test-data/out_test_pf2a.tabular
test-data/out_test_pf2b.tabular
b
diff -r 000000000000 -r be582bcd6585 README.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/README.txt Thu Oct 04 10:37:14 2018 -0400
b
@@ -0,0 +1,66 @@
+## ****** match_mass environnemnt : ****** ##
+# version December 2014 M Landi / M Petera / JF Martin
+
+## --- 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 Data::Dumper ;
+use Getopt::Long ;
+use POSIX ;
+use List::Util qw( min max );
+use FindBin ;
+
+# libs CPAN PERL : 
+use Math::BigFloat;
+use LWP::Simple;
+use LWP::UserAgent;
+use URI::URL;
+use SOAP::Lite;
+use Encode;
+use HTML::Template ;
+use Net::SSL ;
+use Data::Dumper ;
+use REST::Client;
+use JSON;
+
+# libs pfem PERL : libs are now integrated
+use lib::conf  qw( :ALL ) ;
+use lib::csv  qw( :ALL ) ;
+use lib::json  qw( :ALL ) ;
+
+## --- R bin and Packages : --- ##
+NA
+
+## --- Binary dependencies --- ##
+Uses a local database : "inhouse.tsv" in some cases
+"create_inhouse_bank.pl" : allows to recreate "inhouse.tsv"
+--
+
+## --- Config : --- ##
+Edit the following lines in the config file : conf_pf.ini
+with  your personal token used to manage and allow Pforest access / the WS PeakForest url
+PF_GLOBAL_TOKEN
+PF_WS_URL=https://rest.peakforest.org
+PF_REST_QUERY_CLEAN_RANGE=/spectra/lcms/peaks/get-range-clean
+
+--
+
+## --- XML HELP PART --- ##
+one image : 
+bank_inhouse.png
+--
+
+## --- DATASETS --- ##
+No data set ! waiting for galaxy pages
+--
+
+## --- ??? COMMENTS ??? --- ##
+Uses a local database : "inhouse.tsv" in some cases
+"create_inhouse_bank.pl" : allows to recreate "inhouse.tsv"
+--
\ No newline at end of file
b
diff -r 000000000000 -r be582bcd6585 bank_inhouse.pl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bank_inhouse.pl Thu Oct 04 10:37:14 2018 -0400
[
b'@@ -0,0 +1,493 @@\n+#!perl\n+\n+## script  : bank_inhouse.pl\n+#=============================================================================\n+#                              Included modules and versions\n+#=============================================================================\n+## Perl modules\n+use strict ;\n+use warnings ;\n+use Carp qw (cluck croak carp) ;\n+\n+use Data::Dumper ;\n+use Getopt::Long ;\n+use POSIX ;\n+use List::Util qw( min max );\n+use FindBin ; ## Allows you to locate the directory of original perl script\n+\n+## Specific Modules\n+use lib $FindBin::Bin ;\n+my $binPath = $FindBin::Bin ;\n+use lib::bih qw( :ALL ) ;\n+\n+## PFEM Perl Modules\n+use lib::conf  qw( :ALL ) ;\n+use lib::csv  qw( :ALL ) ;\n+\n+## Initialized values\n+my ( $help ) = ( undef ) ;\n+my ( $mass ) = ( undef ) ;\n+my ( $masses_file, $nbline_header, $col_mass ) = ( undef, undef, undef ) ;\n+my ( $col_rt, $manual_rt, $rt_delta, $mz_delta_type, $mz_delta, $rtdb ) = ( undef, undef, undef, undef, undef, undef ) ;\n+my ( $mode, $tissues, $bank_in, $bank_name, $col_mzdb) = ( undef, undef, undef, undef, undef ) ;\n+my ( $out_tab, $out_html, $out_xls, $out_json, $out_full ) = ( undef, undef, undef, undef, undef ) ;\n+my ($rest_mode) = (\'no\') ;\n+\n+my ( $verbose ) = ( 2 ) ; ## verbose level is 3 for debugg\n+\n+#=============================================================================\n+#                                Manage EXCEPTIONS\n+#=============================================================================\n+\n+&GetOptions ( \t"h"\t\t\t\t\t=> \\$help,\t\t\t\t# HELP\n+\t\t\t\t"masse:s"\t\t\t=> \\$mass,\t\t\t\t## option : one masse\n+\t\t\t\t"input:s"\t\t\t=> \\$masses_file,\t\t## option : path to the input\n+\t\t\t\t"rest:s"\t\t\t=> \\$rest_mode,\t\t\t## option : allow uses of peakforest rest service \n+\t\t\t\t"nbheader:i"\t\t=> \\$nbline_header,\t\t## numbre of header line present in file\n+\t\t\t\t"colrt:i"\t\t\t=> \\$col_rt,\t\t\t## Column retention time for retrieve formula/masses list in tabular file\n+\t\t\t\t"rt:s"\t\t\t\t=> \\$manual_rt,\t\t\t## Retention time for manual masses list\n+\t\t\t\t"rt_delta:f"\t\t=> \\$rt_delta,\t\t\t## Delta for retention time\n+\t\t\t\t"colmass:i"\t\t\t=> \\$col_mass,\t\t\t## Column id for retrieve formula list in tabular file\n+\t\t\t\t"mz_delta:s"\t\t=> \\$mz_delta_type,\t\t## Delta type for masses\n+\t\t\t\t"mass_delta:f"\t\t=> \\$mz_delta,\t\t\t## Delta for masses\n+\t\t\t\t"mode:s"\t\t\t=> \\$mode,\t\t\t\t## Molecular species (positive/negative/neutral) \n+\t\t\t\t"tissues:s"\t\t\t=> \\$tissues,\t\t\t## Restricted to certain characterization and localization (blood/plasma/urine/peptide) \n+\t\t\t\t"bank_in:s"\t\t\t=> \\$bank_in,\t\t\t## option : path to a personal data bank\n+\t\t\t\t"bank_name:s"\t\t=> \\$bank_name,\t\t\t## option : name of the bank\n+\t\t\t\t"mzdb:i"\t\t\t=> \\$col_mzdb,\t\t\t## Column number in which is the masses of the personal data bank\n+\t\t\t\t"rtdb:i"\t\t\t=> \\$rtdb,\t\t\t\t## Column number in which is the retention time of the personal data bank\n+\t\t\t\t"outputJson:s"\t\t=> \\$out_json,\t\t\t## option : path to the ouput (results)\n+\t\t\t\t"outputXls:s"\t\t=> \\$out_xls,\t\t\t## option : path to the ouput (tabular : results )\n+\t\t\t\t"outputTab:s"\t\t=> \\$out_tab,\t\t\t## path to the ouput (tabular : input+results (1 col) )\n+\t\t\t\t"outputView:s"\t\t=> \\$out_html,\t\t\t## option : path to the results view (output2)\n+\t\t\t\t"outputFull:s"\t\t=> \\$out_full,\t\t\t## path to the ouput (tabular : input+results (x col) )\n+\t\t\t) ;\n+\n+#=============================================================================\n+#                                EXCEPTIONS\n+#=============================================================================\n+## if you put the option -help or -h function help is started\n+if ( defined $help ) { &help() ; }\n+\n+#=============================================================================\n+#                                MAIN SCRIPT\n+#=============================================================================\n+\n+\n+print "The bank_inhouse program is launched as:\\n";\n+print "./bank_inhouse.pl " ;\n+print "--h "  if (defined $help) ;\n+print "--masse $mass " if (defined $mass) ;\n+print "--input $masses_file " if (defi'..b'able\\n" ;\t}\n+\t\t\t$ocsv->write_csv_skel(\\$out_tab, $lm_matrix) ;\n+\t\t}\n+\t\telse {\tcroak "Can\'t create a tabular output for BiH : your output file is not defined\\n" ;\t}\n+\t}\n+\telsif (defined $mass) { } ## no csv output for manual masses\n+\telse {\tcroak "the input format is not identifiable or your output file is not defined\\n" ;\t}\n+} ## END IF\n+else {\tcroak "Can\'t create a tabular output for BiH : no result found\\n" ;\t}\n+\n+## -------------- Produce Full output ------------------ :\n+if (defined $results) {\n+\tif ( defined $masses_file ) {\n+\t\tif ( defined $out_full ) {\n+\t\t\tmy $sep = "\\t";\n+\t\t\tmy $ofull = lib::bih::new() ;\n+\t\t\tif ( ( $header_choice eq \'yes\' ) and ( defined $nbline_header ) and ( $nbline_header > 0 )) {\n+\t\t\t\t$ofull->write_full_excel_like($complete_rows, $sep, $masses, $mz_delta_type, $mz_delta, $col_mzdb, $rt, $rt_delta, $rtdb, $results, $out_full, $nbline_header, $bank_head, "BiH_$bank_name") ;\n+\t\t\t}\n+\t\t\telsif ( ( $header_choice eq \'no\' ) or ( $nbline_header <= 0 )) {\n+\t\t\t\t$ofull->write_full_excel_like($complete_rows, $sep, $masses, $mz_delta_type, $mz_delta, $col_mzdb, $rt, $rt_delta, $rtdb, $results, $out_full, 0, undef, undef) ;\n+\t\t\t}\n+\t\t\telse {\tcroak "The number of header line is not identifiable\\n" ;\t}\n+\t\t}\n+\t}\n+\telsif (defined $mass) { } ## no csv output for manual masses\n+\telse {\tcroak "the input format is not identifiable or your output file is not defined\\n" ;\t}\n+} ## END IF\n+else {\tcroak "Can\'t create a full output for BiH : no result found\\n" ;\t}\n+\n+\n+#====================================================================================\n+# Help subroutine called with -h option\n+# number of arguments : 0\n+# Argument(s)        :\n+# Return           : 1\n+#====================================================================================\n+sub help {\n+\tprint STDERR "\n+bank_inhouse\n+\n+# bank_inhouse is a script to query a in house bank (file) using chemical mass and return a list of common names.\n+# Input : mass or list of masses\n+# Author : Marion LANDI and Franck Giacomoni (for the Rest part)\n+# Email : franck.giacomoni\\@clermont.inra.fr\n+# Version : 1.1\n+# Created : 15/10/2014\n+# Updated : 15/12/2015\n+USAGE :\t\t \n+\t\tbank_inhouse.pl -masse [mass]\n+\t\t \t\t-tolerance [Delta of mass (Da)] -mode [Ionization type: positive/negative/neutral] \n+\t\t \t\t-tissues [Restricted to certain tissues] -- optionnal\n+\t\t \t\t-bank_in [file for in personal house bank] -- optionnal\n+\t\t \t\t-outputTab [output file tabular format] -outputView [output file html format]\n+\t\t\t\t-verbose\n+\t\tOR\t\t\t\t\n+\t\tbank_inhouse.pl -input [path to list of masses file]\n+\t\t\t-nbHeader [nb of lines of headers : 0-n] -colId [Ids colunm number in input file] -colmass [masses col] -colrt [RT col]\n+ \t\t\t-tolerance [Delta of mass (Da)] -mode [molecular type: positive/negative/neutral]\n+ \t\t\t-bank_in [file for in house bank]\n+ \t\t\t-tissues [Restricted to certain tissues] \n+ \t\t\t-outputTab [output file tabular format] -outputView [output file html format]\n+\t\t \t\t\t\t\n+\t\tOR \n+\t\tbank_inhouse.pl\t-masse [mass]\n+\t\t\t\t-rest [get the PeakForest ref db : yes|no]\n+\t\t\t\t-mz_delta [Delta type for mass (Da or PPM)] -mass_delta [Delta for mass (Da or PPM)] -mode [molecular type: positive/negative/neutral]\n+\t\t \t\t-outputXls [output xls format]\n+\t\t \t\t\n+\t\tOthers output formats: \t\t\n+\t\t \t\t-outputJson [output json format]  -outputFull [output format is input+res]\n+\t\t";\n+\texit(1);\n+}\n+\n+## END of script - M Landi \n+\n+__END__\n+\n+=head1 NAME\n+\n+ bank_inhouse.pl -- script for\n+\n+=head1 USAGE\n+\n+ bank_inhouse.pl -precursors -arg1 [-arg2] \n+ or bank_inhouse.pl -help\n+\n+=head1 SYNOPSIS\n+\n+This script manage ... \n+\n+=head1 DESCRIPTION\n+\n+This main program is a ...\n+\n+=over 4\n+\n+=item B<function01>\n+\n+=item B<function02>\n+\n+=back\n+\n+=head1 AUTHOR\n+\n+Marion LANDI E<lt>marion.landi@clermont.inra.frE<gt>\n+\n+=head1 LICENSE\n+\n+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.\n+\n+=head1 VERSION\n+\n+version 1 : 15 / 10 / 2014\n+\n+version 2 : 21 / 11 / 2014\n+\n+=cut\n'
b
diff -r 000000000000 -r be582bcd6585 bank_inhouse.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bank_inhouse.xml Thu Oct 04 10:37:14 2018 -0400
[
b'@@ -0,0 +1,446 @@\n+<tool id="bank_inhouse" name="bank_inhouse" version="1.1.3">\n+  <description>\n+        search by accurate mass (and by Retention time) on a local bank\n+  </description>\n+  \n+  <requirements>\n+  \t<requirement type="package" version="2.90">perl-json</requirement>\n+  \t<requirement type="package" version="1.97">perl-text-csv</requirement>\n+  \t<requirement type="package" version="6.15">perl-lwp-simple</requirement>\n+  \t<requirement type="package" version="1.74">perl-uri</requirement>\n+  \t<requirement type="package" version="1.19">perl-soap-lite</requirement>\n+  \t<requirement type="package" version="2.97">perl-html-template</requirement>\n+  \t<requirement type="package" version="0.428">perl-list-moreutils</requirement>\n+  \t<requirement type="package" version="6.15">perl-libwww-perl</requirement>\n+  </requirements>\n+  <stdio>\n+      <exit_code range="1" level="fatal" />\n+  </stdio>\n+  \n+   <command><![CDATA[\n+      perl $__tool_directory__/bank_inhouse.pl\n+      \n+      #if str($input_type.choice) == "YES":\n+         -input "${input_type.variableMetadata_in}"\n+         #if str($input_type.header.header_choice) == "YES":\n+             -nbheader "${input_type.header.nbheader}"\n+         #end if\n+         \n+         -colmass "${input_type.colmass}"\n+         #if str($input_type.use_file_rt.rt_file_choice) == "YES":\n+             -colrt "${input_type.use_file_rt.colrt}"\n+             -rt_delta "${input_type.use_file_rt.rt_file_delta}"\n+         #end if\n+      #else:\n+         #if str($input_type.use_rt.rt_choice) == "YES":\n+             -rt "${input_type.use_rt.rt}"\n+             -rt_delta "${input_type.use_rt.rt_delta}"\n+         #end if\n+         -masse "${input_type.masse}"\n+      #end if\n+      \n+      -mz_delta "${mz_delta_type.mz_delta}"\n+      -mass_delta "${mz_delta_type.mass_delta}"\n+\n+      #if str($bank_type.perso_bank) == "YES":\n+         -bank_in "${bank_type.bank_in}" -bank_name "${bank_type.bank_in.name}"\n+         -mzdb "${bank_type.mzdb}"\n+         #if str($bank_type.bank_rt.bank_rt_choice) == "YES":\n+             -rtdb "${bank_type.bank_rt.rtdb}"\n+         #end if\n+      #end if\n+\n+      #if str($input_type.choice) == "YES":\n+          -outputTab "$variableMetadata_out"\n+          -outputXls "$bankInhouseResXls_filein"\n+          #if str($outfiles) == "YES":\n+            -outputFull "$variableMetadata_full_out"\n+          #end if\n+      #else:\n+          -outputXls "$bankInhouseResXls_manualin"\n+      #end if\n+      \n+      #if str($outfiles) == "YES":\n+        -outputJson "$Json"\n+      #end if\n+  ]]></command>\n+  \n+  <inputs>\n+      <conditional name="input_type">\n+        <param name="choice" type="select" display="radio" label="* Would you use a file?" help="if \'NO\' is selected then one or more mass(es) must be entered manually">\n+          <option value="NO">NO</option>\n+          <option value="YES" selected="true">YES</option>\n+        </param>\n+        <when value="YES">\n+          <param name="variableMetadata_in" type="data" label="FILE OF MASSES (format: tabular)" help="Generally variable metadata file" format="tabular" />\n+          \n+          <conditional name="header">\n+            <param name="header_choice" type="boolean" checked="true" truevalue="YES" falsevalue="NO" label="Do you have a header?" help="if \'YES\' is selected then enter your number of header lines" />\n+            <when value="YES">\n+              <param name="nbheader" type="integer" label="Number of header lines" value="1" min="1" max="10" help="number of lines not containing masses"/>\n+            </when>\n+            <when value="NO"/>\n+          </conditional>\n+          \n+          <conditional name="use_file_rt">\n+            <param name="rt_file_choice" type="boolean" checked="true" truevalue="YES" falsevalue="NO" label="Would you use retention time (RT)?" help="Do you have retention times in your bank? In your analyzed file? Would you use it?" />\n+            <when value="YES">\n+              <param name="colrt'..b' \n+\n+Do you have a header\n+    | YES (default) : parameter **Number of header lines** is visible\n+    | NO : all lines are considered to contain masses\n+    |\n+\n+If \'have a header\'=\'YES\'\n+\n+Number of header lines\n+    | Number of lines not containing masses values, these lines will be ignored\n+    |\n+\n+In all header cases :\n+\n+Column of Id\n+    | Specify the column number for the id in the tsv input file\n+    |\n+\n+Would you use retention time (RT)\n+    | YES (default) : parameter **Column of retention time (RT)** and **Delta of retention time (RT) (in minutes)** are visible\n+    | NO : Search will be made solely on the basis of the masses\n+    |\n+\n+If \'Would you use retention time (RT)\'=\'YES\'\n+\n+Column of retention time (RT)\n+    | Specify the column number for the retention time (RT) in the tsv input file\n+    |\n+\n+Delta of retention time (RT) (in minutes)\n+    | Specify a delta to apply on  retention time - This value is a float.\n+    |\n+\n+In all RT cases :\n+\n+Column of masses\n+    | Specify the column number for the mass in the tsv input file\n+    |\n+\n+\n+If \'use file\'=\'NO\'\n+\n+Would you use retention time (RT)\n+    | YES (default) : parameter **retention time (RT) to submit** and **Delta of retention time (RT) (in minutes)** are visible\n+    | NO : Search will be made solely on the basis of the masses\n+    |\n+\n+If \'Would you use retention time (RT)\'=\'YES\'\n+\n+retention time (RT) to submit \n+    | Specify a list of retention time to request\n+    | one or more retention time entered manually\n+    | For a RT list, writes : rt1 rt2 rt3\n+    | You must separate yours values with space\n+    | dot (.) is for float number\n+    |\n+Delta of retention time (RT) (in minutes)\n+    | Specify a delta to apply on  retention time - This value is a float.\n+    |\n+\n+In all RT cases :\n+\n+Mass to submit\n+    | Specify a list of mass to request\n+    | one or more mass(es) entered manually\n+    | For a masses list, writes : m1 m2 m3\n+    | You must separate yours values with space\n+    | dot (.) is for float number\n+    |\n+\n+In all cases :\n+\n+Delta type \n+    | Specify a delta type : "in Dalton" or "in ppm"\n+    |\n+\n+Delta of mass ("in Dalton" or "in ppm" according to choice)\n+    | Specify a delta to apply on mass - This value is a float.\n+    |\n+\n+Use personal data bank\n+    | YES : parameter **Bank file**, **Column of masses (MZ) in Bank file** and **Column of retention time (RT) in Bank file** (optional) are visible, the search will be made only on the information of the file\n+    | NO : a internal bank will be used\n+    |\n+\n+If \'Use personal data bank\'=\'YES\'\n+\n+Bank file\n+    | see "Input files" section above\n+    | Tabular file format, Generally variable metadata file\n+    | \n+\n+Column of masses\n+    | Specify the column number for the mass in the bank input file\n+    |\n+\n+Have you used the retention time (RT) for your input data \n+    | Answering same as for "Would you use retention time (RT)"\n+    | YES (default) : parameter **Column of retention time (RT) in Bank file** is visible\n+    | NO : Search will be made solely on the basis of the masses\n+    |\n+\n+Column of retention time (RT) in Bank file\n+    | Specify the column number for the rt in the bank input file\n+    |\n+\n+\n+------------\n+Output files\n+------------\n+\n+Two types of files (if you manually enter the masses both files are mingled):\n+    | bank_inhouse_(input.name)_TSV.tabular : for linking with others modules.\n+    | \n+    | bank_inhouse_(input.name)_XLS.tabular : an excel-like output will be available. \n+    | \n+\n+\n+---------------------------------------------------\n+\n+\n+---------------\n+Working example\n+---------------\n+\n+\n+.. class:: warningmark\n+\n+Refer to the corresponding W4M HowTo section: http://workflow4metabolomics.org/howto\n+ | Format Data For Postprocessing\n+ | Perform LCMS Annotations\n+\n+.. class:: warningmark\n+\n+And their "W4M courses 2016":\n+ | Using Galaxy4Metabolomics - W4M table format for Galaxy\n+ | Annotation Banks - Annotation  \n+\t\n+\t]]></help>\n+</tool>\n'
b
diff -r 000000000000 -r be582bcd6585 bih.tmpl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bih.tmpl Thu Oct 04 10:37:14 2018 -0400
b
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="INRA de Clermont-Ferrand">
+
+ <title>Galaxy bank_inhouse queries - All results</title>
+
+ <link rel="stylesheet" href="css.php" media="all">
+ <link rel="stylesheet" href="<TMPL_VAR NAME=CSS_GALAXY_PATH>/simplePagination.css"/>
+
+ <!-- JavaScript -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
+ <script src="<TMPL_VAR NAME=JS_GALAXY_PATH>/jquery.simplePagination.js"></script>
+ <style>
+
+ body {padding-top: 70px}
+ div.lm-table-warning {font-size: 1.4em;font-weight: bold;padding-right: 25px;color: #21536a;margin-left: 3px;}
+ tr.green td  {background-color: #eaf2d3; color: black;}
+ tr.blank td {background-color: #9999CC; color: black;}
+ table {font-family:\"Trebuchet MS\", Arial, Helvetica, sans-serif;width:100%;border-collapse:collapse;}
+ table.detail, table.detail tr.parent, table.detail td, table.detail th, table.detail tr.category {border-collapse:collapse;border:1px solid #98bf21;}
+ table.detail th {font-size: 1.2em;text-align: center;padding-top: 5px;padding-bottom: 10px;background-color: #a7c942;color: #ffffff;}
+ td.center-align {text-align:center;}
+ footer {margin: 50px 0;}
+
+ </style>
+ <script>
+ function test(pageNumber)
+ {
+   var page="#page-id-"+pageNumber;
+   $('.select').hide()
+   $(page).show()
+
+ }
+ </script>
+ </head>
+ <body>
+ <div class="container">
+ <div class="lm-table-warning">Results of bank_inhouse queries - <TMPL_VAR NAME=CONDITIONS></div>
+ <div id="detail_table_source" style="display:none"></div>
+ <p>
+ <div id="choose">
+ </div>
+ <p>
+
+ <div id="ms_search_0" class="ms-search-table"></div>
+ <!-- HeadRows-->
+ <table id="detail_table" class="detail">
+ <col style="width:30px;"><!-- Ids (m/z)-->
+ <col style="width:30px;"><!-- Mass (m/z)-->
+ <col style="width:30px;"><!-- Compound-->
+ <col style="width:120px;"><!-- name-->
+ <col style="width:40px;"><!-- adduct-->
+ <col style="width:50px;"><!-- adduct type-->
+ <col style="width:60px;"><!-- adduct mw-->
+ <col style="width:60px;"><!-- cpd mw-->
+ <col style="width:50px;"><!-- delta-->
+ <thead>
+ <th>ID from input</th>
+ <th>Mass (m/z)</th>
+ <th>Compound_ID</th>
+ <th>Formula</th>
+ <th>Compound MW (Da)</th>
+ <th>Adduct</th>
+ <th>Adduct_Type</th>
+ <th>Adduct MW (Da)</th>
+ <th>Delta</th>
+ </thead>
+ <TMPL_LOOP NAME=PAGES>
+ <tbody class="select" id="page-id-<TMPL_VAR NAME=PAGE_NB>">
+ <TMPL_LOOP NAME=MASSES>
+ <tr class="<TMPL_VAR NAME=MZ_COLOR>">
+ <td class="center-align" ><TMPL_VAR NAME=MASSES_ID_QUERY></td>
+ <td id="<TMPL_VAR NAME=MASSES_NB>" class="center-align" ><TMPL_VAR NAME=MASSES_MZ_QUERY></td>
+ <td class="center-align" colspan="7"></td>
+ </tr>
+ <TMPL_LOOP NAME=ENTRIES>
+ <tr class="<TMPL_VAR NAME=ENTRY_COLOR>">
+ <td class="center-align" colspan="2"></td>
+ <td class="center-align"><a href="http://www.bank_inhouse.ca/metabolites/<TMPL_VAR NAME=ENTRY_ENTRY_ID2>" target="_blank" class="btn"><TMPL_VAR NAME=ENTRY_ENTRY_ID></a></td>
+ <td class="center-align"><TMPL_VAR NAME=ENTRY_FORMULA></td>
+ <td class="center-align"><TMPL_VAR NAME=ENTRY_CPD_MZ></td>
+ <td class="center-align"><TMPL_VAR NAME=ENTRY_ADDUCT></td>
+ <td class="center-align"><TMPL_VAR NAME=ENTRY_ADDUCT_TYPE></td>
+ <td class="center-align"><TMPL_VAR NAME=ENTRY_ADDUCT_MZ></td>
+ <td class="center-align"><TMPL_VAR NAME=ENTRY_DELTA></td>
+ </tr>
+ </TMPL_LOOP>
+ </TMPL_LOOP>
+ </tbody>
+ </TMPL_LOOP>
+ </table>
+ </div>
+
+ <div class="container">
+ <hr>
+ <footer>
+ <div class="row">
+   <div class="col-lg-12">
+ <p>
+ <a href="http://jigsaw.w3.org/css-validator/check/referer" target="_blank">
+ <img style="border:0;width:88px;height:31px"
+ src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
+ alt="Valid CSS!" />
+ </a>
+ </p>
+ <p>Copyright &copy; INRA, M Landi 2014 - Jquery Pluggin by <a href="http://flaviusmatis.github.com/" target="_blank">Flavius Matis</a></p>
+   </div>
+  </div>
+  </footer>
+ </div>
+ <script language="javascript">
+ $(function() {
+ $('#choose').pagination({
+ items: <TMPL_VAR NAME=PAGES_NB>,
+ itemsOnPage: 1,
+ currentPage: 1,
+ onInit: function () { test(1); },
+ cssStyle: 'light-theme',
+ onPageClick: function(pageNumber){test(pageNumber)}
+ }).pagination('redraw');
+ });
+ </script>
+ </body>
+</html>
\ No newline at end of file
b
diff -r 000000000000 -r be582bcd6585 conf_bih.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/conf_bih.cfg Thu Oct 04 10:37:14 2018 -0400
b
@@ -0,0 +1,19 @@
+## Conf file for bank_inhouse.pl script
+#
+## Version -- edited by M Landi/F Giacomoni 
+VERSION=2018.10.01 
+#
+## ARGVT
+INHOUSE_BANK=inhouse.tsv
+#
+## MZ value
+PROTON_MZ=1.0078250321
+ELECTRON_MZ=0.0005486
+#
+## 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
+HTML_TEMPLATE=bank_inhouse.tmpl
b
diff -r 000000000000 -r be582bcd6585 inhouse.tsv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inhouse.tsv Thu Oct 04 10:37:14 2018 -0400
[
b'@@ -0,0 +1,290095 @@\n+ENTRY\tNAME\tFORMULA\tMASS\tPATHWAYS\tSOURCE\tMODE\tTISSUES\n+HMDB03813\t2-Acyl-sn-glycero-3-phosphocholine\tNot Available\t0\thttp://www.hmdb.ca/metabolites/HMDB03813\tHMDB\tNA\tNA\n+HMDB03813\t2-Acyl-sn-glycero-3-phosphocholine\tNot Available\t0\tHMDB03813\tPFEM_hmdb_metabocards_official\tNA\tNA\n+HMDB06053\tOmega-muricholic acid\tNA\t0\tNA\tHMDB2010\tNA\tNA\n+MetaCyc04471\te- [e;electron;]\tNA\t0.001\tNA\tmetacyc\tNA\tNA\n+C00080\tH+\tH\t1.0078\tNA\tKEGG\tNA\tNA\n+HMDB01362\tHydrogen\tH\t1.00782\thttp://www.hmdb.ca/metabolites/HMDB01362\tHMDB\tNA\tNA\n+HMDB01362\tHydrogen\tH\t1.00782\tHMDB01362\tPFEM_hmdb_metabocards_official\tNA\tNA\n+MetaCyc00001\tH+ [hydrogen ion;proton;H;]\tH1\t1.007825\t12408-02-5\tmetacyc\tNA\tNA\n+MetaCyc00002\tH2 [hydrogen;hydrogen molecule;]\tH2\t2.01565\t1333-74-0\tmetacyc\tNA\tNA\n+HMDB01362\tHydrogen\tH2\t2.01565\tNA\tHMDB2010\tNA\tNA\n+C00282\tHydrogen\tH2\t2.0157\tNA\tKEGG\tNA\tNA\n+HMDB05949\tLithium\tLi\t7.016\thttp://www.hmdb.ca/metabolites/HMDB05949\tBANQUES_PLASMA_Inhousejuill11&PFEMBLOOD\tNA\tblood/plasma\n+HMDB05949\tLithium\tLi\t7.016\thttp://www.hmdb.ca/metabolites/HMDB05949\tHMDB\tNA\tNA\n+C15473\tLithium\tLi\t7.016\tNA\tKEGG\tNA\tNA\n+HMDB05949\tLithium\tLi\t7.016\thttp://www.hmdb.ca/metabolites/HMDB05949\tPFEM_hmdb_metabocards_blood\tNA\tblood\n+HMDB05949\tLithium\tLi\t7.016\tHMDB05949\tPFEM_hmdb_metabocards_official\tNA\tNA\n+HMDB05949\tLithium\t[Li]+\t7.016\tNA\tHMDB2010\tNA\tNA\n+MetaCyc00003\tLi+ [lithium ion;]\tLI1\t7.016004\tNA\tmetacyc\tNA\tNA\n+3988\tHuman urotensin II\tETPDCFWKYCV\t9\tMH2+\tInhouse_peptide\tNA\tpeptide\n+HMDB02387\tBeryllium\tBe\t9.01218\thttp://www.hmdb.ca/metabolites/HMDB02387\tBANQUES_PLASMA_Inhousejuill11&PFEMBLOOD\tNA\tblood/plasma\n+HMDB02387\tBeryllium\tBe\t9.01218\thttp://www.hmdb.ca/metabolites/HMDB02387\tHMDB\tNA\tNA\n+HMDB02387\tBeryllium\tBe\t9.01218\thttp://www.hmdb.ca/metabolites/HMDB02387\tPFEM_hmdb_metabocards_blood\tNA\tblood\n+HMDB02387\tBeryllium\tBe\t9.01218\tHMDB02387\tPFEM_hmdb_metabocards_official\tNA\tNA\n+HMDB02387\tBeryllium\t[Be]2+\t9.01218\tNA\tHMDB2010\tNA\tNA\n+C16460\tBeryllium\tBe\t9.0122\tNA\tKEGG\tNA\tNA\n+HMDB02386\tBoron\t[B]3+\t11.00931\tNA\tHMDB2010\tNA\tNA\n+MJ000001\tNitrogen \tN\t14.003074\tNA\tMeJP\tNA\tNA\n+HMDB02386\tBoron\tBH3\t14.03278\thttp://www.hmdb.ca/metabolites/HMDB02386\tPFEM_hmdb_metabocards_urine\tNA\turine\n+HMDB02386\tBoron\tBH3\t14.03278\thttp://www.hmdb.ca/metabolites/HMDB02386\tBANQUES_PLASMA_Inhousejuill11&PFEMBLOOD\tNA\tblood/plasma\n+HMDB02386\tBoron\tBH3\t14.03278\thttp://www.hmdb.ca/metabolites/HMDB02386\tBanques_urine_inhousejuill11&pfem_hmdburine&junotneg\tnegative\turine\n+HMDB02386\tBoron\tBH3\t14.03278\thttp://www.hmdb.ca/metabolites/HMDB02386\tbanques-urine_inhousejuill11&PFEM_HMDBurine&JunotPOS\tpositive\turine\n+HMDB02386\tBoron\tBH3\t14.03278\thttp://www.hmdb.ca/metabolites/HMDB02386\tHMDB\tNA\tNA\n+HMDB02386\tBoron\tBH3\t14.03278\thttp://www.hmdb.ca/metabolites/HMDB02386\tPFEM_hmdb_metabocards_blood\tNA\tblood\n+HMDB02386\tBoron\tBH3\t14.03278\tHMDB02386\tPFEM_hmdb_metabocards_official\tNA\tNA\n+MetaCyc00004\tmethyl-group [methyl group;CH3;]\tC1H3\t15.023475\tNA\tmetacyc\tNA\tNA\n+HMDB01845\tAmide\tH2N\t16.01872\thttp://www.hmdb.ca/metabolites/HMDB01845\tHMDB\tNA\tNA\n+HMDB01845\tAmide\tH2N\t16.01872\tHMDB01845\tPFEM_hmdb_metabocards_official\tNA\tNA\n+HMDB02714\tMethane\tCH4\t16.0313\thttp://www.hmdb.ca/metabolites/HMDB02714\tHMDB\tNA\tNA\n+C01438\tMethane\tCH4\t16.0313\tNA\tKEGG\tNA\tNA\n+MJ000002\tMethane \tCH4\t16.0313\tNA\tMeJP\tNA\tNA\n+MetaCyc00005\tmethane []\tC1H4\t16.0313\tNA\tmetacyc\tNA\tNA\n+HMDB02714\tMethane\tCH4\t16.0313\tHMDB02714\tPFEM_hmdb_metabocards_official\tNA\tNA\n+HMDB02714\tMethane\tCH4\t16.0313\tNA\tHMDB2010\tNA\tNA\n+C01328\tHO-\tOH\t17.0027\tNA\tKEGG\tNA\tNA\n+C01329\tNucleoside phosphate\tC5H10O7PR\t17.0027\tNA\tKEGG\tNA\tNA\n+C16844\tHydroxyl radical\tOH\t17.0027\tNA\tKEGG\tNA\tNA\n+HMDB01039\tHydroxide\tHO\t17.00274\thttp://www.hmdb.ca/metabolites/HMDB01039\tHMDB\tNA\tNA\n+MetaCyc00006\tOH- [hydroxyl;hydroxyl ion;OH;hydroxide;hydroxide ion;]\tH1O1\t17.00274\t14280-30-9\tmetacyc\tNA\tNA\n+HMDB01039\tHydroxide\tHO\t17.00274\tHMDB01039\tPFEM_hmdb_metabocards_official\tNA\tNA\n+HMDB01039\tHydroxide\t[OH]-\t17.002741\tNA\tHMDB2010\tNA\tNA\n+C00014\tNH3\tNH3\t17.0265\tNA\tKEGG\tNA\tNA\n+MJ000003\tNH3 \tH3N\t17.026549\tNA\tMeJP\tNA\tNA\n+MetaCyc00007\t'..b'peptide\tNA\tpeptide\n+5415\tdermaseptin 5\tGLWSKIKTAGKSVAKAAAKAAVKAVTNAV\t2838.6589\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+7790\tde novo designed peptide from transportan\tGWTLNSAGYLLGKINLKALAALAKKIL\t2839.6868\tantioxidative\tInhouse_peptide\tNA\tpeptide\n+5437\tlycotoxin 1\tIWLTALKFLGKHAAKHLAKQQLSKL\t2842.6851\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+2948\tmellitin from venom of honey bee(Apis mellifera)\tGIGAVLKVLTTGLPALISWIKRKRQQ~\t2844.7339\tceliac toxic\tInhouse_peptide\tNA\tpeptide\n+2949\tmellitin from venom of honey bee(Apis mellifera)\tGIGAVLKVLTTGLPALISWIKRKRQQ~\t2844.7339\tceliac toxic\tInhouse_peptide\tNA\tpeptide\n+C11198\tMelitten\tC131H229N39O31\t2844.7542\tNA\tKEGG\tNA\tNA\n+7785\tpeptide from honey bee venom\tGIGAVLKVLTTGLPALISWIKRKRQQ\t2845.718\tantioxidative\tInhouse_peptide\tNA\tpeptide\n+5485\tceratotoxin B\tSIGSAFKKALPVAKKIGKAALPIAKAALP\t2858.762\topioid\tInhouse_peptide\tNA\tpeptide\n+5400\tbrevinin-2EE\tGIFDKLKNFAKGVAQSLLNKASCKLSGQC\t2861.5928\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+5509\tceratotoxin A\tSIGSALKKALPVAKKIGKIALPIAKAALP\t2866.825\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+3071\thuman defensin HNP-3\tDCYCRIPACIAGERRYGTCIYQGRLWAFCC\t2871.4758\tceliac toxic\tInhouse_peptide\tNA\tpeptide\n+2950\tmellitin from venom of honey bee(Apis mellifera)\tGIGAVLKVLTTGLPALISWIKRKRQQG\t2902.739\tceliac toxic\tInhouse_peptide\tNA\tpeptide\n+8162\tantimicrobial peptide derived from b-casein (184-210)\tQELLLNPTHQYPVTQPLAPVHNPISV\t2904.5278\tantibacterial\tInhouse_peptide\tNA\tpeptide\n+3441\tNA\tKWKKFIKELQKVLAPGGLLSNIVTSL\t2909.7258\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+3438\tNA\tKWKSFIKNLEKVLKPGGLLSNIVTSL\t2911.7058\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+3442\tNA\tKWKEFIKKLTTAVKKVLTTGLPALIS\t2912.76\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+3229\tbovine lactoferricin B (LF-B)\tFKCRRWQWRMKKLGAPSITCVRRAF\t2917.6414\tceliac toxic\tInhouse_peptide\tNA\tpeptide\n+7051\tLactoferricin B, bovine (Bos taurus)\tFKCRRWQWRMKKLGAPSITCVRRAF\t2917.6414\tantioxidative\tInhouse_peptide\tNA\tpeptide\n+3640\tNA\tLGQQQPFPPQQPYPQPQPFPSQQPY\t2921.3889\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+7468\tcoeliac toxic peptide\tLGQQQPFPPQQPYPQPQPFPSQQPY\t2921.389\tantioxidative\tInhouse_peptide\tNA\tpeptide\n+2762\trabbit NP-5 defesin\tVFCTCRGFLCGSGERASGSCTINGVRHTLCCRR\t2930.5508\tNA\tInhouse_peptide\tNA\tpeptide\n+3112\tadrenocorticotropin hormone fr,: 1-24\tSYSMEHFRWGKPVGKKRRPVKVYP\t2931.5583\tceliac toxic\tInhouse_peptide\tNA\tpeptide\n+C06926\tCosyntropin\tC136H210N40O31S\t2931.5806\tNA\tKEGG\tNA\tNA\n+C06927\tTransferred to D00285\tC136H210N40O31S\t2931.5806\tNA\tKEGG\tNA\tNA\n+3900\tmellitin-like peptide\tFIGASALKVLAGVLPSVISWVKLGRILQ~\t2933.7759\tneuropeptide\tInhouse_peptide\tNA\tpeptide\n+5291\tmellitin-like peptide\tFIGASALKVLAGVLPSVISWVKLGRILQG\t2933.7759\tantibacterial\tInhouse_peptide\tNA\tpeptide\n+2701\tsomatostatin 28\tSANSNPAMAPRERKAGCKNFFWKTFTSC\t2942.4412\tantibacterial\tInhouse_peptide\tNA\tpeptide\n+5352\tCysteine-rich antifungal protein 2 [Fragment]\tQKLCERPSGTXSGVCGNNNACKNQCIR\t2960.3026\tmembrane -active peptide\tInhouse_peptide\tNA\tpeptide\n+5372\tdermaseptin B3\tALWKNMLKGIGKLAGQAALGAVKTLVGAEG\t2964.6733\tmembrane -active peptide\tInhouse_peptide\tNA\tpeptide\n+3440\tNA\tKWKSFIKNLEKVLKKGPILANLVSIV\t2964.8047\tACE inhibitor\tInhouse_peptide\tNA\tpeptide\n+HMDB12124\t(Mannosyl)8-(N-acetylglucosaminyl)2-diphosphodolichol\tC144H240N2O57P2\t2971.541748\tNA\tHMDB2010\tNA\tNA\n+MetaCyc04465\t(mannosyl)8-(N-acetylglucosaminyl)2-diphosphodolichol [{&alpha;-D-mannosyl-(1->2)-&alpha;-D-mannosyl-(1->2)-&alpha;-D-mannosyl-(1->3)-[&alpha;-D-mannosyl-(1->2)-&alpha;-D-mannosyl-(1->3)-[&alpha;-D-mannosyl-(1,6)]-&alpha;-D-mannosyl-(1,6)]-&beta;-D-mannosyl-(1->4)-N-acetyl-&beta;-D-glucosaminyl-(1->4)-N-acetyl-D-glucosaminyl}diphosphodolichol;]\tC144H240N2O57P2\t2971.541812\tNA\tmetacyc\tNA\tNA\n+5529\tPenaeidin-3C\tQVYKGGYTRPIPRPPFVRPVPGGPIGPYNGCPVSCRGISFSQARSCCSRLGRCCHVGKGYSG\t2981.57545\tMH2+\tInhouse_peptide\tNA\tpeptide\n+2763\trabbit NP-4 defensin\tVSCTCRRFSCGFGERASGSCTVNGVRHTLCCRR\t2989.563\tNA\tInhouse_peptide\tNA\tpeptide\n+3947\tmytilin C from Mytilum edulis\tSCASRCKSRCRARRCRYYVSVRYGGFCYCRC\t2996.6021\tneuropeptide\tInhouse_peptide\tNA\tpeptide\n'
b
diff -r 000000000000 -r be582bcd6585 lib/bih.pm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/bih.pm Thu Oct 04 10:37:14 2018 -0400
[
b'@@ -0,0 +1,1052 @@\n+package lib::bih ;\n+\n+use strict;\n+use warnings ;\n+use Exporter ;\n+use Carp ;\n+use Math::BigFloat;\n+\n+use LWP::Simple;\n+use LWP::UserAgent;\n+use URI::URL;\n+use SOAP::Lite;\n+use Encode;\n+use HTML::Template ;\n+#use Net::SSL ;\n+use Data::Dumper ;\n+#use REST::Client;\t\n+use JSON;\n+\n+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);\n+\n+our $VERSION = "1.0";\n+our @ISA = qw(Exporter);\n+our @EXPORT = qw( db_pforest_get_clean_range map_pfjson_bankobject prepare_multi_masses_query );\n+our %EXPORT_TAGS = ( ALL => [qw( db_pforest_get_clean_range map_pfjson_bankobject prepare_multi_masses_query  )] );\n+\n+=head1 NAME\n+\n+My::Module - An example module\n+\n+=head1 SYNOPSIS\n+\n+    use My::Module;\n+    my $object = My::Module->new();\n+    print $object->as_string;\n+\n+=head1 DESCRIPTION\n+\n+This module does not really exist, it\n+was made for the sole purpose of\n+demonstrating how POD works.\n+\n+=head1 METHODS\n+\n+Methods are :\n+\n+=head2 METHOD new\n+\n+\t## Description : new\n+\t## Input : $self\n+\t## Ouput : bless $self ;\n+\t## Usage : new() ;\n+\n+=cut\n+\n+sub new {\n+    ## Variables\n+    my $self={};\n+    bless($self) ;\n+    return $self ;\n+}\n+### END of SUB\n+     \n+=head2 METHOD check_interval\n+\n+\t## Description : checks that the value is in the interval\n+\t## Input : $value, $min, $max\n+\t## Output : $message\n+\t## Usage : $message= check_interval($value, $min, $max) ;\n+\t\n+=cut\n+## START of SUB\n+sub check_interval {\n+\t## Retrieve Values\n+    my $self = shift ;\n+    my ( $value, $min, $max ) = @_ ;\n+    \n+    my ( $message ) = undef ;\n+    if ( $min !~ m/^-?\\d+\\.?\\d*$/ ) {\n+    \t$message="the minimum \'".$min."\' isn\'t a valid number!";\n+    }\n+    elsif ( $max !~ m/^-?\\d+\\.?\\d*$/ ) {\n+    \t$message="the maximum \'".$max."\' isn\'t a valid number!";\n+    }\n+    elsif ( $value !~ m/^-?\\d+\\.?\\d*$/ ) {\n+    \t$message="\'".$value."\' isn\'t a valid number!";\n+    }\n+    elsif ( $value < $min ) {\n+    \t$message="\'".$value."\' is below the minimum!";\n+    }\n+    elsif ( $value > $max ) {\n+    \t$message="\'".$value."\' is greater than the maximum!";\n+    }\n+    else {\n+    \t$message="OK" ;\n+    }\n+    return($message) ;\n+}\n+## END of SUB\n+\n+=head2 METHOD format_manual_list_values\n+\n+\t## Description : extract a list of values and built identifiers\n+\t## Input : $value, $sep\n+\t## Output : \\@values, \\@ids\n+\t## Usage : ($masses, $ids)= format_manual_list_values($mass, $sep) ;\n+\t\n+=cut\n+## START of SUB\n+sub format_manual_list_values {\n+\t## Retrieve Values\n+    my $self = shift ;\n+    my ( $value, $sep ) = @_ ;\n+    \n+    my ( @values, @ids ) = ( (), () ) ;\n+    \n+    if ( ( defined $value ) and ( $value ne "" ) and ( defined $sep ) ) {\n+    \t@values = split($sep, $value);\n+\t\tmy $nb = 1+int(log($#values+1)/log(10));\n+\t\tmy $sf = \'%0\'.$nb.\'s\';\n+\t\tfor (my $i=1 ; $i<=$#values+1 ; $i++){\n+\t\t\tmy $id = sprintf($sf, $i) ;\n+\t\t\tpush (@ids,"value_".$id );\n+\t\t}\n+    }\n+    else {\n+    \tcroak "No value list found \\n" ;\n+    }\n+    return(\\@values, \\@ids) ;\n+}\n+## END of SUB\n+\n+=head2 METHOD parse_bank_interest\n+\n+\t## Description : parse csv object and return a two-dimensional array in a hash by grouping information according to the interest value as key.\n+\t## Input : $csv, \\$file, $col_interest\n+\t## Output : \\%bank_interest, \\$head\n+\t## Usage : my ( $bank_interest, $head ) = parse_bank_interest ( $csv, $file, $col_interest ) ;\n+\t\n+=cut\n+## START of SUB\n+sub parse_bank_interest {\n+\t## Retrieve Values\n+    my $self = shift ;\n+    my ( $csv, $file, $col_interest ) = @_ ;\n+    \n+    my $bank_interest = () ;\n+    my $oBih = new() ;\n+\n+\topen my $fh, "<:encoding(utf8)", $$file or die "Can\'t open csv file $$file: $!";\n+\t\n+\tmy $head = $csv->getline( $fh );\n+\tmy $nb_line = 1 ;\t## for error messages\n+\t\n+\twhile ( my $row = $csv->getline( $fh ) ) {\n+\t    $nb_line++ ;\n+\t\tif ($#$head != $#$row) {\tcroak "Not the same number of columns over the file of the interest bank! See the line: $nb_line in your input bank file!\\n" ;\t}\n+\t\t## it would be more general to do the following masse check out thi'..b'rray number\n+    if  ( ( defined $rts ) and ( $rts ne "" ) ) {\n+\t    splice (@bank_head, 2, 0, "RT_Submit");\n+\t    $col_rtdb -= 1; ## conversion in array number\n+    }\n+    my $head = join("\\t", @bank_head);\n+    print CSV "MASS_Submit\\t".$head."\\n" ;\n+    \n+    foreach my $mass (@{$masses}) {\n+    \tmy $results4mass = $results->[$index_mz];\n+    \t\n+    \tif ( ref($results4mass) eq \'ARRAY\' and defined $results4mass and $results4mass ne [] and $#$results4mass>=0) { ## an requested id has a result in the list of array $results.\n+    \t\tforeach my $entry (@{$results->[$index_mz]}) {\n+    \t\t\tprint CSV $mass."\\t";\n+    \t\t\tmy $format_float = Math::BigFloat->new($entry->[$col_mzdb]);\t## requires "use Math::BigFloat;"\n+\t\t\t\tmy $delta_mass = abs( $format_float-$mass );\t## management problem on small float\n+\t\t\t\tprint CSV $delta_mass."\\t".$entry->[$col_mzdb];\n+\t\t\t\t\n+\t\t\t\tif  ( ( defined $rts ) and ( $rts ne "" ) ) {\n+\t    \t\t\tmy $rt = $rts->[$index_mz] ;\n+\t    \t\t\tmy $format_float_rt = Math::BigFloat->new($entry->[$col_rtdb]);\t## requires "use Math::BigFloat;"\n+\t\t\t\t\tmy $delta_rt = abs( $format_float_rt-$rt );\t## management problem on small float\n+\t    \t\t\tprint CSV "\\t".$rt."\\t".$delta_rt."\\t".$entry->[$col_rtdb];\n+\t\t\t\t}\n+    \t\t\tfor (my $i=0; $i<=$#$entry; $i++){\tprint CSV "\\t".$entry->[$i];\t}\n+    \t\t\tprint CSV "\\n";\n+    \t\t}\n+    \t}\n+    \telse {\n+    \t\tprint CSV $mass."\\tno results found";\n+    \t\tfor (my $i=0; $i<$#bank_head; $i++){\tprint CSV "\\t";\t}\n+    \t\tprint CSV "\\n";\n+    \t}\n+    \t$index_mz++ ;\n+    }\n+   \tclose(CSV) ;\n+    return() ;\n+}\n+## END of SUB\n+\n+\n+=head2 METHOD db_pforest_get_clean_range\n+\n+\t## Description : get a clean range of mass from PeakForest and REST\n+\t## Input : $ws_host, $query, $max\n+\t## Output : $json\n+\t## Usage : $json = db_pforest_get_clean_range( $ws_host, $query, $max ) ;\n+=cut\n+## START of SUB\n+\n+\n+#sub db_pforest_get_clean_range {\r\n+#    my $self = shift;\r\n+#    my ( $ws_host, $query, $min, $max, $mode) = @_;\n+#    my $json = undef ;\r\n+#\t# init\n+##\tmy $ws_url = "https://rest.peakforest.org/search/compounds/monoisotopicmass/59.048/0.02";\n+#\n+#\t$ENV{HTTPS_VERSION} = 3;\n+#\t#$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0 ;\n+#\n+#\tmy $headers = {Accept => \'application/json\', Authorization => \'Basic \'};\n+#\tmy $client = REST::Client->new({\n+#         host    => $ws_host,\n+##         cert    => \'/path/to/ssl.crt\',\n+##         key     => \'/path/to/ssl.key\',\n+##         ca      => \'/path/to/ca.file\',\n+#         timeout => 100,\n+#     });\n+#    my $complete_query = $query.\'/\'.$min.\'/\'.$max ;\n+#    \n+#    if (defined $mode) {\n+#    \t$complete_query = $complete_query.\'?mode=\'.$mode ; \n+#    }\n+#    \n+#    \n+#    print $complete_query."\\n" ;\n+#    $client->GET($complete_query , $headers);\n+#\t$json = from_json ($client->responseContent()) ;\n+#\n+#\treturn ($json) ;   \r\n+#}\n+\n+=head2 METHOD map_pfjson_bankobject\n+\n+\t## Description : map PForest json with the original BiH Bank object\n+\t## Input : $json\n+\t## Output : $complete_bank, $bank_head\n+\t## Usage : ($complete_bank, $bank_heads) = map_pfjson_bankobject( json ) ;\n+=cut\n+## START of SUB\n+sub map_pfjson_bankobject {\n+\tmy $self = shift;\n+    my ( $json ) = @_;\n+    \n+    my ( %complete_bank ) = () ;\n+    my ( @bank_head ) = (\'id\', \'mz\')  ;\n+    \n+    foreach my $cpd (@$json) {\n+    \t$complete_bank{$cpd->{\'mz\'}} = [] ;\n+    \tmy @tmp = @{$cpd->{\'cpds\'}} ;\n+    \t\n+    \tpush ( @tmp, $cpd->{\'mz\'} ) ;\n+    \tpush ( @{ $complete_bank{$cpd->{\'mz\'} } }, \\@tmp ) ;\n+\n+    }\n+    return (\\%complete_bank, \\@bank_head) ;\n+}\n+## END of SUB\n+\n+1 ;\n+\n+\n+__END__\n+\n+=head1 SUPPORT\n+\n+You can find documentation for this module with the perldoc command.\n+\n+ perldoc bih.pm\n+\n+=head1 Exports\n+\n+=over 4\n+\n+=item :ALL is prepare_multi_masses_query\n+\n+=back\n+\n+=head1 AUTHOR\n+\n+Marion Landi E<lt>marion.landi@clermont.inra.frE<gt>\n+\n+=head1 LICENSE\n+\n+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.\n+\n+=head1 VERSION\n+\n+version 1 : 19 / 11 / 2014\n+\n+=cut\n'
b
diff -r 000000000000 -r be582bcd6585 lib/conf.pm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/conf.pm Thu Oct 04 10:37:14 2018 -0400
[
@@ -0,0 +1,259 @@
+package lib::conf ;
+
+use strict;
+use warnings ;
+use Exporter ;
+use Carp ;
+use Data::Dumper ;
+
+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);
+
+our $VERSION = "1.0" ;
+our @ISA = qw(Exporter) ;
+our @EXPORT = qw( as_conf get_value_from_conf check_path_and_file ) ;
+our %EXPORT_TAGS = ( ALL => [qw( as_conf get_value_from_conf )] ) ;
+
+=head1 NAME
+
+conf - A module for manage pfem conf file
+
+=head1 SYNOPSIS
+
+    use conf ;
+    my $object = conf->new() ;
+
+=head1 DESCRIPTION
+
+This module does manage conf file (extract all or selected fields)
+
+=head1 METHODS
+
+Methods are :
+
+=head2 METHOD new
+
+ ## Description : new
+ ## Input : $self
+ ## Ouput : bless $self ;
+ ## Usage : new() ;
+
+=cut
+## START of SUB
+sub new {
+    ## Variables
+    my $self={};
+    bless($self) ;
+    return $self ;
+}
+### END of SUB
+
+=head2 METHOD as_conf
+
+ ## Description : permet de creer l'object conf a partir d'un fichier de conf de type KEY=VALUE
+ ## Input : $file
+ ## Ouput : $oConf (a hash)
+ ## Usage : my ( $oConf ) = as_conf( $file ) ;
+
+=cut
+## START of SUB
+sub as_conf {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $file, $separator ) = @_ ;
+    
+#    if (!defined $separator) { $separator = ';' } ## set separator to ;
+    
+    if ( !defined $file )  {  croak "Can't create object with an none defined file\n" ; }
+    
+    my %Conf = () ; ## Hash devant contenir l'ensemble des parametres locaux
+
+ if (-e $file) {
+ open (CFG, "<$file") or die "Can't open $file\n" ;
+ while (<CFG>) {
+ chomp $_ ;
+ if ( $_ =~ /^#(.*)/)  { next ; }
+ elsif ($_ =~/^(\w+?)=(.*)/) { ## ALPHANUMERIC OR UNDERSCORE ONLY FOR THE KEY AND ANYTHING ELSE FOR VALUE
+
+ my ($key, $value) = ($1, $2) ;
+
+ if (defined $separator) {
+ if ( $value=~/$separator/ ) { ## is a list to split
+ my @tmp = split(/$separator/ , $value) ;
+ $Conf{$key} = \@tmp ;
+ }
+ }
+ else {
+ $Conf{$key} = $value ;
+ }
+ }
+ }
+ close(CFG) ;
+ }
+ else { 
+ croak "Can't create object with an none existing file\n" ;
+ }
+
+    return ( \%Conf ) ;
+}
+## END of SUB
+
+=head2 METHOD as_conf_list
+
+ ## Description : permet de charger une liste txt en array
+ ## Input : $file
+ ## Output : elements
+ ## Usage : my ( elements ) = as_conf_list( $conf_file ) ;
+
+=cut
+## START of SUB
+sub as_conf_list {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $file ) = @_ ;
+    
+    my @elements = () ;
+    if ( !defined $file )  {  croak "Can't create object with an none defined file\n" ; }
+    
+    if (-e $file) {
+ open (CFG, "<$file") or die "Can't open $file\n" ;
+ while (<CFG>) {
+ chomp $_ ;
+ if ( $_ =~ /^#(.*)/)  { next ; }
+ elsif ($_ =~/^(.*)/) { if (defined $1) { push (@elements, $1) ; }  }
+ }
+    }
+    else {
+ croak "Can't create object with an none existing file\n" ;
+ }
+    return(\@elements) ;
+}
+## END of SUB
+
+=head2 METHOD get_value_from_conf
+
+ ## Description : permet de retourner une valeur du hash de conf a partir d'une key
+ ## Input : $oConf, $Key
+ ## Ouput : $Value
+ ## Usage : my ( $Value ) = get_value_from_conf( $oConf, $Key ) ;
+
+=cut
+## START of SUB
+sub get_value_from_conf {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $oConf, $Key ) = @_ ;
+    
+    my $Value = undef ;
+    
+    if ( defined $oConf ) {
+     if ( defined $oConf->{$Key} ) {
+     $Value = $oConf->{$Key} ;
+     }
+    }
+    else {
+     croak "Can't manage value with undefined object\n" ;
+    }
+    return($Value) ;
+}
+## END of SUB
+
+=head2 METHOD get_value_from_conf
+
+ ## Description : permet de retourner une valeur du hash de conf a partir d'une key
+ ## Input : $oConf, $Key
+ ## Ouput : $Value
+ ## Usage : my ( $Value ) = get_value_from_conf( $oConf, $Key ) ;
+
+=cut
+## START of SUB
+sub split_value_from_conf {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $oConf, $Key, $sep ) = @_ ;
+    
+    my $value = undef ;
+    my @values = () ;
+    
+    if ( defined $oConf ) {
+     if ( defined $oConf->{$Key} ) {
+     $value = $oConf->{$Key} ;
+     @values = split ( /$sep/, $value) ;
+     }
+    }
+    else {
+     croak "Can't manage value with undefined object\n" ;
+    }
+    return(\@values) ;
+}
+## END of SUB
+
+
+=head2 METHOD check_path_and_file
+
+ ## Description : permet de verifier les path et la presence des exe decrits dans le file conf. Bloque le script en cas de probleme
+ ## Input : $oConfs
+ ## Ouput : NA
+ ## Usage : &get_value_from_conf( $oConf ) ;
+
+=cut
+## START of SUB
+sub check_path_and_file {
+
+ my $self = shift ;
+ my ( $oConfs ) = @_ ;
+
+ foreach my $conf ( keys %{ $oConfs } ) {
+ if ( $conf =~ /^FILE/ ) {
+ if ( -e $oConfs->{$conf} ) {
+ if ( -s $oConfs->{$conf} ) { next ; }
+ else { carp "[Warning] : The size of file $oConfs->{$conf} is null\n" ; }
+ }
+ else {
+ carp "[Warning] : The file $oConfs->{$conf} doesn't exist\n" ;
+ }
+ }
+ elsif ( $conf =~ /^PATH/ ) {
+ if ( -d $oConfs->{$conf} ) { next ; }
+ else { carp "[Warning] :  The dir $oConfs->{$conf} doesn't exist\n" ; }
+ }
+ else {  next ;  }
+ }
+ return ;
+}
+## END of SUB
+
+1 ;
+
+
+__END__
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+ perldoc conf.pm
+
+
+=head1 Exports
+
+=over 4
+
+=item :ALL is as_conf get_value_from_conf
+
+=back
+
+=head1 AUTHOR
+
+Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt>
+
+=head1 LICENSE
+
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=head1 VERSION
+
+version 1 : 10 / 02 / 2013
+
+version 2 : 15 / 12 / 2015
+
+=cut
\ No newline at end of file
b
diff -r 000000000000 -r be582bcd6585 lib/csv.pm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/csv.pm Thu Oct 04 10:37:14 2018 -0400
[
@@ -0,0 +1,282 @@
+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 );
+our %EXPORT_TAGS = ( ALL => [qw( get_csv_object get_value_from_csv )] );
+
+=head1 NAME
+
+My::Module - An example module
+
+=head1 SYNOPSIS
+
+    use My::Module;
+    my $object = My::Module->new();
+    print $object->as_string;
+
+=head1 DESCRIPTION
+
+This module does not really exist, it
+was made for the sole purpose of
+demonstrating how POD works.
+
+=head1 METHODS
+
+Methods are :
+
+=head2 METHOD new
+
+ ## Description : new
+ ## Input : $self
+ ## Ouput : bless $self ;
+ ## Usage : new() ;
+
+=cut
+
+sub new {
+    ## Variables
+    my $self={};
+    bless($self) ;
+    return $self ;
+}
+### END of SUB
+
+=head2 METHOD get_csv_object
+
+ ## Description : builds a csv object and etablishes format
+ ## Input : $separator
+ ## Output : $csv
+ ## Usage : my ( $csv ) = get_csv_object( $separator ) ;
+
+=cut
+## START of SUB
+sub get_csv_object {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $separator ) = @_ ;
+    
+#    my $csv = Text::CSV->new({'sep_char' => "$separator"});
+    my $csv = Text::CSV->new ( {'sep_char' => "$separator", binary => 1 } )  # should set binary attribute.
+     or die "Cannot use CSV: ".Text::CSV->error_diag ();
+    
+    return($csv) ;
+}
+## END of SUB
+
+=head2 METHOD get_value_from_csv
+
+ ## Description : extract a targeted column in a csv file 
+ ## Input : $csv, $file, $column, $is_header
+ ## Output : $value
+ ## Usage : my ( $value ) = get_value_from_csv( $csv, $file, $column, $is_header ) ;
+
+=cut
+## START of SUB
+sub get_value_from_csv {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $csv, $file, $column, $is_header ) = @_ ;
+    
+    my @value = () ;
+    
+    ## Adapte the number of the colunm : (nb of column to position in array)
+ $column = $column - 1 ;
+    
+    open (CSV, "<", $file) or die $! ;
+
+ my $line = 0 ;
+
+ while (<CSV>) {
+ $line++ ;
+     chomp $_ ;
+ # file has a header
+ if ( defined $is_header ) { if ($line == 1) { next ; } }
+ # parsing the targeted column
+     if ( $csv->parse($_) ) {
+         my @columns = $csv->fields();
+         push ( @value, $columns[$column] ) ;
+     }
+     else {
+         my $err = $csv->error_input;
+         die "Failed to parse line: $err";
+     }
+ }
+ close CSV;
+    return(\@value) ;
+}
+## END of SUB
+
+=head2 METHOD get_value_from_csv_multi_header
+
+ ## Description : extract a targeted column in a csv file 
+ ## Input : $csv, $file, $column, $is_header, $nb_header
+ ## Output : $value
+ ## Usage : my ( $value ) = get_value_from_csv_multi_header( $csv, $file, $column, $is_header, $nb_header ) ;
+
+=cut
+## START of SUB
+sub get_value_from_csv_multi_header {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $csv, $file, $column, $is_header, $nb_header ) = @_ ;
+    
+    my @value = () ;
+    
+    ## Adapte the number of the colunm : (nb of column to position in array)
+ $column = $column - 1 ;
+    
+    open (CSV, "<", $file) or die $! ;
+
+ my $line = 0 ;
+
+ while (<CSV>) {
+ $line++ ;
+     chomp $_ ;
+ # file has a header
+ if ( defined $is_header and $is_header eq 'yes') { if ($line <= $nb_header) { next ; } }
+ # parsing the targeted column
+     if ( $csv->parse($_) ) {
+         my @columns = $csv->fields();
+         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 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
+    open $fh, ">:encoding(utf8)", "$file_name" or die "$file_name: $!";
+    
+ my $status = $csv->print ($fh, $_) for @{$rows};
+ close $fh or die "$file_name: $!";
+    
+    return(\$file_name) ;
+}
+## END of SUB
+
+1 ;
+
+
+__END__
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+ perldoc csv.pm
+
+=head1 Exports
+
+=over 4
+
+=item :ALL is get_csv_object, get_value_from_csv
+
+=back
+
+=head1 AUTHOR
+
+Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt>
+
+=head1 LICENSE
+
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=head1 VERSION
+
+version 1 : 23 / 10 / 2013
+
+version 2 : ??
+
+=cut
\ No newline at end of file
b
diff -r 000000000000 -r be582bcd6585 lib/json.pm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/json.pm Thu Oct 04 10:37:14 2018 -0400
[
@@ -0,0 +1,152 @@
+package lib::json ;
+
+use strict;
+use warnings ;
+use Exporter ;
+use Carp ;
+
+use Data::Dumper ;
+
+## dedicate lib
+use JSON qw( );
+
+use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);
+
+our $VERSION = "1.0";
+our @ISA = qw(Exporter);
+our @EXPORT = qw(decode_json_file);
+our %EXPORT_TAGS = ( ALL => [qw(decode_json_file)] );
+
+=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 decode_json_file
+
+ ## Description : decode a json file and return a json perl object
+ ## Input : $ref_file
+ ## Output : $ojson
+ ## Usage : my ( $ojson ) = decode_json_file( $file ) ;
+
+=cut
+## START of SUB
+sub decode_json_file {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $ref_file ) = @_ ;
+    
+    my $ojson = undef ;
+    
+    if ( ( defined $ref_file ) and ( -e $$ref_file ) ) {
+     my $filename = $$ref_file ;
+     my $json_text = do {
+ open( my $json_fh, "<:encoding(UTF-8)", $filename) or die("Can't open \$filename\": $!\n");
+ local $/;
+ <$json_fh>
+ };
+
+ my $json = JSON->new;
+ $ojson = $json->decode($json_text);
+    }
+    else {
+     croak "Can't decode any file : it doesn't exist or defined\n" ;
+    }
+    return(\$ojson) ;
+}
+## END of SUB
+
+=head2 METHOD decode_json_stdout
+
+ ## Description : decode a perl unicode string and return a json perl object
+ ## Input : $stdout
+ ## Output : $perl_scalar
+ ## Usage : my ( $perl_scalar ) = decode_json_stdout( $stdout ) ;
+
+=cut
+## START of SUB
+sub decode_json_stdout {
+ ## Retrieve Values
+    my $self = shift ;
+    my ( $stdout ) = @_ ;
+    
+    my $perl_scalar = undef ;
+    if ( defined $stdout ) {
+     my $string = $$stdout ;
+#     $string =~ s/\\/\\\\/g ; ## bug patched : jsons are clean now
+         
+     $perl_scalar = JSON->new->decode($string) ;
+    }
+    else {
+     croak "Can't decode any string : it doesn't defined\n" ;
+    }
+    return(\$perl_scalar) ;
+}
+## END of SUB
+
+1 ;
+
+
+__END__
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+ perldoc XXX.pm
+
+=head1 Exports
+
+=over 4
+
+=item :ALL is ...
+
+=back
+
+=head1 AUTHOR
+
+Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt>
+
+=head1 LICENSE
+
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=head1 VERSION
+
+version 1 : xx / xx / 201x
+
+version 2 : ??
+
+=cut
\ No newline at end of file
b
diff -r 000000000000 -r be582bcd6585 static/images/bank_inhouse.png
b
Binary file static/images/bank_inhouse.png has changed
b
diff -r 000000000000 -r be582bcd6585 t/bih_managerTest.t
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/t/bih_managerTest.t Thu Oct 04 10:37:14 2018 -0400
[
b'@@ -0,0 +1,144 @@\n+#! perl\n+use diagnostics;\n+use warnings;\n+no warnings qw/void/;\n+use strict;\n+no strict "refs" ;\n+use Test::More tests => 36 ;\n+use FindBin ;\n+use Data::Dumper ;\n+\n+## Specific Modules\n+use lib $FindBin::Bin ;\n+my $binPath = $FindBin::Bin ;\n+use lib::bihTest qw( :ALL ) ;\n+\n+## testing check_interval\n+print "\\n-- test whether a value is in the interval defines\\n\\n" ;\n+#01\n+is ( check_interval_Test(\'test\', \'0\', \'1\'), "\'test\' isn\'t a valid number!", \'Works with a value that is not a number\');\n+#02\n+is ( check_interval_Test(\'\', \'0\', \'1\'), "\'\' isn\'t a valid number!", \'Works with a value that is not a number\');\n+#03\n+is ( check_interval_Test(\'-0.5\', \'-1\', \'0\'), "OK", \'Works with a negative float\');\n+#04\n+is ( check_interval_Test(\'-0.5\', \'0\', \'1\'), "\'-0.5\' is below the minimum!", \'Works with a number below the minimum!\');\n+#05\n+is ( check_interval_Test(\'2\', \'0\', \'1\'), "\'2\' is greater than the maximum!", \'Works with a number greater than the maximum!\');\n+print "\\n--\\n" ;\n+\n+## testing format_manual_masses\n+print "\\n-- Test format manual list of values lib for values (ex=> masses)\\n\\n" ;\n+#06\n+isa_ok( format_manual_list_values_Testvalues(\'562.0235\', \' \'), \'ARRAY\' );\n+#07\n+is_deeply(format_manual_list_values_Testvalues(\'562.0235\', \' \'), [562.0235], \'Works with \\\'562.0235\\\' for mass\');\n+#08\n+is_deeply(format_manual_list_values_Testvalues(\'562.0235 987.4568\', \' \'), [562.0235, 987.4568], \'Works with \\\'562.0235 987.4568\\\' for masses\');\n+#09\n+is_deeply(format_manual_list_values_Testvalues(\'562.0235;987.4568\', \';\'), [562.0235, 987.4568], \'Works with \\\'562.0235;987.4568\\\' for masses\');\n+print "\\n--\\n" ;\n+\n+print "\\n-- Test format manual list of values lib for ids\\n\\n" ;\n+#10\n+isa_ok( format_manual_list_values_Testids(\'562.0235\', \' \'), \'ARRAY\' );\n+#11\n+is_deeply(format_manual_list_values_Testids(\'562.0235\', \' \'), [\'value_1\'], \'Works with \\\'562.0235\\\' for ids\');\n+#12\n+is_deeply(format_manual_list_values_Testids(\'562.0235 987.4568\', \' \'), [\'value_1\', \'value_2\'], \'Works with \\\'562.0235 987.4568\\\' for ids\');\n+#13\n+is_deeply(format_manual_list_values_Testids(\'562.0235 987.4568 \', \' \'), [\'value_1\', \'value_2\'], \'Works with \\\'562.0235 987.4568 \\\' for ids\');\n+#14\n+is_deeply(format_manual_list_values_Testids(\'562.0235 987.4568 52.0235 98.48 62.0235 987.68 152.05 8.48 562.0235\', \' \'), [\'value_1\', \'value_2\',\'value_3\', \'value_4\',\'value_5\', \'value_6\',\'value_7\', \'value_8\', \'value_9\'], \'Works with 9 masses for ids\');\n+#15\n+is_deeply(format_manual_list_values_Testids(\'562.0235 987.4568 52.0235 98.48 62.0235 987.68 152.05 8.48 562.0235 987.4568\', \' \'), [\'value_01\', \'value_02\',\'value_03\', \'value_04\',\'value_05\', \'value_06\',\'value_07\', \'value_08\', \'value_09\', \'value_10\'], \'Works with 10 masses for ids\');\n+#16\n+is_deeply(format_manual_list_values_Testids(\'562.0235 987.4568 52.0235 98.48 62.0235 987.68 152.05 8.48 562.0235 987.4568 52.0235 98.48 62.0235 987.68 152.05 8.48\', \' \'), [\'value_01\', \'value_02\',\'value_03\', \'value_04\',\'value_05\', \'value_06\',\'value_07\', \'value_08\', \'value_09\', \'value_10\', \'value_11\', \'value_12\', \'value_13\', \'value_14\', \'value_15\', \'value_16\'], \'Works with 16 masses for ids\');\n+print "\\n--\\n" ;\n+\n+## testing manage_mode\n+#print "\\n-- Test manage_mode lib\\n\\n" ;\n+#09\n+#isa_ok( manage_mode_Testionization(\'positive,negative,neutral\'), \'ARRAY\' );\n+#10\n+#is_deeply(manage_mode_Testionization(\'positive,negative,neutral\'), [\'positive\', \'negative\', \'neutral\'], \'Works with \\\'562.0235\\\' for ids\');\n+#14\n+#isa_ok( format_manual_list_values_Testids(\'562.0235 987.4568\'), \'ARRAY\' );\n+#15\n+#is_deeply(format_manual_list_values_Testids(\'562.0235 987.4568\'), [\'mass_1\', \'mass_2\'], \'Works with \\\'562.0235 987.4568\\\' for ids\');\n+#16\n+#is_deeply(format_manual_list_values_Testids(\'562.0235 987.4568 52.0235 98.48 62.0235 987.68 152.05 8.48 562.0235 987.4568 52.0235 98.48 62.0235 987.68 152.05 8.48\'), [\'mass_01\', \'mass_02\',\'mass_03\', \'mass_04\',\'mass_05\', \'mass_06\',\'mass_07\', \'mass_08\', \'mass_09\', \'mass_10\', \'mass_11\', \'mass_12\', \'mass_13\', \'mass_14\', \''..b'000001, \'Works with \\\'500, ppm, 5\\\' for maximum\');\n+print "\\n--\\n" ;\n+\n+## testing dichotomi_search\n+print "\\n-- Test dichotomi_search lib\\n\\n" ;\n+#25\n+is ( dichotomi_search_Test([\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\'], \'0\'), -1, \'Works with \\\'0\\\' smaller than the 1st element\');\n+#26\n+is ( dichotomi_search_Test([\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\'], \'1\'), 0, \'Works with \\\'1\\\' equal to the 1st element\');\n+#27\n+is ( dichotomi_search_Test([\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\'], \'5\'), 4, \'Works with \\\'5\\\' equal to the 4th element\');\n+#28\n+is ( dichotomi_search_Test([\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\'], \'11\'), 10, \'Works with \\\'11\\\' equal to the last (10th) element\');\n+#29\n+is ( dichotomi_search_Test([\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\'], \'11.001\'), 11, \'Works with \\\'11.001\\\' greater than the last (10th) element\');\n+#30\n+is ( dichotomi_search_Test([\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\'], \'9.5\'), 9, \'Works with \\\'9.5\\\' between the 9th and the 10th element return \\\'9\\\'(the index of the 10th)\');\n+#31\n+is ( dichotomi_search_Test([\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\'], \'8.5\'), 8, \'Works with \\\'8.5\\\' between the 8th and the 9th element return \\\'8\\\'(the index of the 9th)\');\n+#32\n+is ( dichotomi_search_Test([\'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\'], \'10.5\'), 10, \'Works with \\\'10.5\\\' between the 10th and the 11th element return \\\'10\\\'(the index of the 11th)\');\n+print "\\n--\\n" ;\n+\n+## test of input bank parsing\n+print "\\n-- Test bank parsing\\n\\n" ;\n+is_deeply ( parse_bank_interest_Test(\n+\t\'/Users/fgiacomoni/Inra/labs/perl/galaxy_tools/tool-bank_inhouse/test_data/in_test2.tabular\', 1),\n+\t{ \'422.0849114\' => [ [ \'C19H18O11\', \'422.0849114\' ] ], \'98.952389\' => [ [ \'Halothane\', \'98.952389\' ] ], \'209.987659\' => [ [ \'Bismuth\', \'209.987659\' ] ], \'18.0105647\' => [ [ \'H2O\', \'18.0105647\' ] ], \'199.951068\' => [ [ \'Picolinic acid\', \'199.951068\' ] ], \'535.3181236\' => [ [ \'C18H45N7O11\', \'535.3181236\' ] ] }, \n+\t"Parsing a bank method works an return a well organized hash\\n" ) ; \n+\n+print "\\n--\\n" ;\n+\n+\n+## test of rest ws of PeakForest\n+print "\\n-- Test PeakForest WS\\n\\n" ;\n+is_deeply ( db_pforest_get_clean_range_Test(\n+\t\'https://rest.peakforest.org\', \'/spectra/lcms/peaks/get-range-clean\', \'190.0\', \'200.0\', \'negative\'),\n+ \t[{ \'cpds\' => [ 186 ], \'thMass\' => \'195.0877\', \'sp\' => 25, \'ri\' => \'100\', \'deltaPPM\' => \'0.245\', \'composition\' => \'C8H11N4O2\', \'attribution\' => \'[M+H]+\', \'mz\' => \'195.0875\' }, { \'composition\' => \'C9H9O5\', \'attribution\' => \'[M-H]-\', \'ri\' => \'100\', \'deltaPPM\' => \'0.271\', \'cpds\' => [ 360 ], \'thMass\' => \'197.0456\', \'sp\' => 37, \'mz\' => \'197.0452\' }, { \'composition\' => \'C9H12NO4\', \'attribution\' => \'[M+H]+\', \'deltaPPM\' => \'-0.426098891623529\', \'ri\' => \'100\', \'thMass\' => \'198.0760844\', \'sp\' => 77, \'cpds\' => [ 1841 ], \'mz\' => \'198.076\' }, { \'mz\' => \'196.0614\', \'composition\' => \'C9H10NO4\', \'attribution\' => \'[M-H]-\', \'cpds\' => [ 1841 ], \'thMass\' => \'196.0615311\', \'sp\' => 78, \'ri\' => \'100\', \'deltaPPM\' => \'-0.668667633415113\' }, { \'cpds\' => [ 1841 ], \'thMass\' => \'198.0760844\', \'sp\' => 79, \'ri\' => \'100\', \'deltaPPM\' => \'-0.426098891623529\', \'composition\' => \'C9H12NO4\', \'attribution\' => \'[M+H]+\', \'mz\' => \'198.076\' }],\n+\t"PForest WS call works an return a clean range og mz between 190 and 200\\n" ) ; \n+\t\n+print "\\n--\\n" ;\n+\n+## test of rest ws of PeakForest\n+print "\\n-- Test PeakForest JSON Bank parsing\\n\\n" ;\n+\n+my ($bank, $headers) = map_pfjson_bankobject_Test([ { \'cpds\' => [ 186 ], \'mz\' => \'195.0875\' }, {\'mz\' => \'198.076\', \'cpds\' => [ 190 ]} ]) ;\n+is_deeply ( \n+\t$bank, \n+\t{ \'198.076\' => [ [ 190, \'198.076\' ] ], \'195.0875\' => [ [ 186, \'195.0875\' ] ] },\n+\t"Parsing json bank from PeakForest works an return a well organized hash for data\\n" ) ;\n+\t\n+is_deeply ( \n+\t$headers, \n+\t[\'id\', \'mz\'],\n+\t"Parsing json bank from PeakForest works an return a well organized array for headers\\n" ) ;\n\\ No newline at end of file\n'
b
diff -r 000000000000 -r be582bcd6585 t/lib/bihTest.pm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/t/lib/bihTest.pm Thu Oct 04 10:37:14 2018 -0400
[
@@ -0,0 +1,106 @@
+package lib::bihTest ;
+
+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( map_pfjson_bankobject_Test parse_bank_interest_Test db_pforest_get_clean_range_Test check_interval_Test format_manual_list_values_Testvalues format_manual_list_values_Testids manage_mode_TestvalH manage_mode_Testionization mz_delta_conversion_Testmin mz_delta_conversion_Testmax dichotomi_search_Test );
+our %EXPORT_TAGS = ( ALL => [qw( map_pfjson_bankobject_Test parse_bank_interest_Test db_pforest_get_clean_range_Test check_interval_Test format_manual_list_values_Testvalues format_manual_list_values_Testids manage_mode_TestvalH manage_mode_Testionization mz_delta_conversion_Testmin mz_delta_conversion_Testmax dichotomi_search_Test )] );
+
+use lib '/Users/fgiacomoni/Inra/labs/perl/galaxy_tools/tool-bank_inhouse' ;
+use lib::bih qw( :ALL ) ;
+use lib::json qw( :ALL ) ;
+use lib::csv qw( :ALL ) ;
+
+sub check_interval_Test {
+ my ( $value, $min, $max ) = @_ ;
+ my $oBih = lib::bih->new() ;
+ my ($message) = $oBih->check_interval($value, $min, $max) ;
+ return($message) ;
+}
+
+sub format_manual_list_values_Testvalues {
+ my ( $value, $sep ) = @_ ;
+ my $oBih = lib::bih->new() ;
+ my ($values, $ids) = $oBih->format_manual_list_values($value, $sep) ;
+ return ($values) ;
+}
+
+sub format_manual_list_values_Testids {
+ my ( $value, $sep ) = @_ ;
+ my $oBih = lib::bih->new() ;
+ my ($values, $ids) = $oBih->format_manual_list_values($value, $sep) ;
+ return ($ids) ;
+}
+
+sub mz_delta_conversion_Testmin {
+ my ( $mass, $delta_type, $mz_delta ) = @_ ;
+ my $oBih = lib::bih->new() ;
+ my ($min, $max) = $oBih->mz_delta_conversion(\$mass, \$delta_type, \$mz_delta) ;
+ return($$min) ;
+}
+
+sub mz_delta_conversion_Testmax {
+ my ( $mass, $delta_type, $mz_delta ) = @_ ;
+ my $oBih = lib::bih->new() ;
+ my ($min, $max) = $oBih->mz_delta_conversion(\$mass, \$delta_type, \$mz_delta) ;
+ return($$max) ;
+}
+
+sub dichotomi_search_Test {
+ my ( $tab, $search ) = @_ ;
+ my $oBih = lib::bih->new() ;
+ my ($position) = $oBih->dichotomi_search($tab, \$search) ;
+ return($$position) ;
+}
+
+## SUB TEST for 
+sub db_pforest_get_clean_range_Test {
+    # get values
+    my ( $host, $query, $min, $max, $mode ) = @_;
+    my $json = undef ;
+    
+    my $oBih = lib::bih->new() ;
+    $json = $oBih->db_pforest_get_clean_range($host, $query, $min, $max, $mode ) ;
+    
+    return($json) ;
+}
+## End SUB
+
+## SUB TEST for 
+sub parse_bank_interest_Test {
+    # get values
+    my ( $file, $col_interest ) = @_;
+    
+    my $ocsv_input  = lib::csv->new() ;
+ my $ocsv = $ocsv_input->get_csv_object( "\t" ) ;
+    
+    my $oBih = lib::bih->new() ;
+    my ($bank, $bank_header) = $oBih->parse_bank_interest($ocsv, \$file, $col_interest) ;
+    
+#    print Dumper $bank ;
+    
+    return($bank) ;
+}
+## End SUB
+
+
+sub map_pfjson_bankobject_Test {
+ # get values
+    my ( $json ) = @_;
+    
+    my ($bank, $headers) = (undef, undef) ;
+    
+    my $oBih = lib::bih->new() ;
+    ($bank, $headers) = $oBih->map_pfjson_bankobject($json) ;
+#    print Dumper $headers ;
+    return($bank, $headers) ;
+}
+
+
+1 ;
\ No newline at end of file
b
diff -r 000000000000 -r be582bcd6585 test-data/in_test2.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/in_test2.tabular Thu Oct 04 10:37:14 2018 -0400
b
@@ -0,0 +1,7 @@
+id masses
+C19H18O11 422.0849114
+H2O 18.0105647
+C18H45N7O11 535.3181236
+Bismuth 209.987659
+Halothane 98.952389
+Picolinic acid 199.951068
b
diff -r 000000000000 -r be582bcd6585 test-data/out_test1.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out_test1.tabular Thu Oct 04 10:37:14 2018 -0400
[
@@ -0,0 +1,55 @@
+MASS_Submit DELTA_mass(0.005Da) MASS_Result ENTRY NAME FORMULA MASS PATHWAYS SOURCE MODE TISSUES
+422.0849114 0.0024114 422.0825 C00689 alpha,alpha'-Trehalose 6-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C02591 Sucrose 6-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C02995 Maltose 6'-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C04534 6-Phospho-beta-D-glucosyl-(1,4)-D-glucose C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C05396 Lactose 6-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C16688 Sucrose-6-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C16689 poly-cis-Polyprenyl diphosphate longer by one C5 unit C11H22O7P2 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C16690 5-L-Glutamyl-D-glutamyl-peptide C10H16N3O6R 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C16691 DNA 2,6-diamino-5-formamido-3,4-dihydro-4-oxopyrimidine C10H16N5O8P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C18050 beta-D-Fructofuranosyl-alpha-D-mannopyranoside 6F-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0023704 422.082541 MJ059635 1,1'-Di-myo-inosityl phosphate  C12H23O14P 422.082541 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MJ059636 alpha,alpha'-Trehalose 6-phosphate  C12H23O14P 422.082542 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MJ059637 Lactose 6-phosphate  C12H23O14P 422.082542 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MJ059638 Maltose 6'-phosphate  C12H23O14P 422.082542 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MJ059639 Sugar 1-phosphate  C12H23O14P 422.082542 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03484 6-phospho-&beta;-D-glucosyl-(1,4)-D-glucose [] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03485 maltose 6'-phosphate [] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03486 trehalose 6-phosphate [&alpha;,&alpha;-trehalose 6-phosphate;] C12H23O14P1 422.082542 4484-88-2 metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03487 sucrose-6-phosphate [sucrose 6F-phosphate;sucrose-6-P;] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03488 lactose 6'-phosphate [] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03489 6-phospho-&beta;-D-glucosyl-(1,4)-D-glucose [] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023614 422.08255 HMDB01124 Trehalose 6-phosphate C12H23O14P 422.08255 http://www.hmdb.ca/metabolites/HMDB01124 HMDB NA NA
+422.0849114 0.0023614 422.08255 HMDB06789 Lactose 6-phosphate C12H23O14P 422.08255 http://www.hmdb.ca/metabolites/HMDB06789 HMDB NA NA
+422.0849114 0.0023614 422.08255 HMDB01124 Trehalose 6-phosphate C12H23O14P 422.08255 HMDB01124 PFEM_hmdb_metabocards_official NA NA
+422.0849114 0.0023614 422.08255 HMDB06789 Lactose 6-phosphate C12H23O14P 422.08255 HMDB06789 PFEM_hmdb_metabocards_official NA NA
+422.0849114 0.0023614 422.08255 HMDB01124 Trehalose 6-phosphate C12H23O14P 422.08255 NA HMDB2010 NA NA
+422.0849114 0.0023614 422.08255 HMDB06789 Lactose 6-phosphate C12H23O14P 422.08255 NA HMDB2010 NA NA
+422.0849114 0.0000114 422.0849 C10077 Mangiferin C19H18O11 422.0849 NA KEGG NA NA
+422.0849114 0.0000114 422.0849 C10089 Norswertianolin C19H18O11 422.0849 NA KEGG NA NA
+422.0849114 0.0000114 422.0849 C10095 Tripteroside C19H18O11 422.0849 NA KEGG NA NA
+422.0849114 0.0000114 422.0849 C16979 Isomangiferin C19H18O11 422.0849 NA KEGG NA NA
+422.0849114 0.0000004 422.084911 MJ059640 1,2,6,8-Tetrahydroxyxanthone; 1-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059641 1,2,6,8-Tetrahydroxyxanthone; 8-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059642 1,3,5,6-Tetrahydroxyxanthone; 3-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059643 1,3,5,8-Tetrahydroxyxanthone; 8-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059644 1,3,6,7-Tetrahydroxyxanthone; 6-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059645 2-Glucosyl-1,3,5,6-tetrahydroxyxanthone  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059646 Chrysograyanone  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059647 Dilatatin  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059648 Isomangiferin  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059649 Mangiferin  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059650 Nigricanside  C19H18O11 422.084911 NA MeJP NA NA
+18.0105647 0.0000057 18.010559 HMDB02111 Water H2O 18.010559 NA HMDB2010 NA NA
+18.0105647 0.0000047 18.01056 HMDB02111 Water H2O 18.01056 http://www.hmdb.ca/metabolites/HMDB02111 HMDB NA NA
+18.0105647 0.0000047 18.01056 HMDB02111 Water H2O 18.01056 HMDB02111 PFEM_hmdb_metabocards_official NA NA
+18.0105647 0.0000007 18.010564 MJ000004 Water  H2O 18.010564 NA MeJP NA NA
+18.0105647 0.0000007 18.010564 MJ000005 H2O  H2O 18.010564 NA MeJP NA NA
+18.0105647 0.0000003 18.010565 MetaCyc00008 H2O [H20;hydrogen oxide;water;] H2O1 18.010565 7732-18-5 metacyc NA NA
+18.0105647 0.0000353 18.0106 C00001 H2O H2O 18.0106 NA KEGG NA NA
+535.3181236 0.0036066 535.314517 MJ078445 Labiatamide A  C29H45NO8 535.314517 NA MeJP NA NA
+535.3181236 0.0036066 535.314517 MJ078446 Neoline; O8,O14-Di-Ac, O1-Me  C29H45NO8 535.314517 NA MeJP NA NA
+535.3181236 0.0036066 535.314517 MJ078447 Zygadenine; O3-Ac  C29H45NO8 535.314517 NA MeJP NA NA
+209.987659 0.000604 209.987055 MJ008190 Zinc(II) propanoate  C6H10O4Zn 209.987055 NA MeJP NA NA
+98.952389 no results found
b
diff -r 000000000000 -r be582bcd6585 test-data/out_test2a.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out_test2a.tabular Thu Oct 04 10:37:14 2018 -0400
[
@@ -0,0 +1,7 @@
+id masses BiH_internal_bank_(DELTA_mass(0.005Da)#MASS_Result#ENTRY#NAME#FORMULA#MASS#PATHWAYS#SOURCE#MODE#TISSUES)
+C19H18O11 422.0849114 "0.0024114#422.0825#C00689#alpha,alpha'-Trehalose 6-phosphate#C12H23O14P#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C02591#Sucrose 6-phosphate#C12H23O14P#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C02995#Maltose 6'-phosphate#C12H23O14P#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C04534#6-Phospho-beta-D-glucosyl-(1,4)-D-glucose#C12H23O14P#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C05396#Lactose 6-phosphate#C12H23O14P#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C16688#Sucrose-6-phosphate#C12H23O14P#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C16689#poly-cis-Polyprenyl diphosphate longer by one C5 unit#C11H22O7P2#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C16690#5-L-Glutamyl-D-glutamyl-peptide#C10H16N3O6R#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C16691#DNA 2,6-diamino-5-formamido-3,4-dihydro-4-oxopyrimidine#C10H16N5O8P#422.0825#NA#KEGG#NA#NA|0.0024114#422.0825#C18050#beta-D-Fructofuranosyl-alpha-D-mannopyranoside 6F-phosphate#C12H23O14P#422.0825#NA#KEGG#NA#NA|0.0023704#422.082541#MJ059635#1,1'-Di-myo-inosityl phosphate #C12H23O14P#422.082541#NA#MeJP#NA#NA|0.0023694#422.082542#MJ059636#alpha,alpha'-Trehalose 6-phosphate #C12H23O14P#422.082542#NA#MeJP#NA#NA|0.0023694#422.082542#MJ059637#Lactose 6-phosphate #C12H23O14P#422.082542#NA#MeJP#NA#NA|0.0023694#422.082542#MJ059638#Maltose 6'-phosphate #C12H23O14P#422.082542#NA#MeJP#NA#NA|0.0023694#422.082542#MJ059639#Sugar 1-phosphate #C12H23O14P#422.082542#NA#MeJP#NA#NA|0.0023694#422.082542#MetaCyc03484#6-phospho-&beta;-D-glucosyl-(1,4)-D-glucose []#C12H23O14P1#422.082542#NA#metacyc#NA#NA|0.0023694#422.082542#MetaCyc03485#maltose 6'-phosphate []#C12H23O14P1#422.082542#NA#metacyc#NA#NA|0.0023694#422.082542#MetaCyc03486#trehalose 6-phosphate [&alpha;,&alpha;-trehalose 6-phosphate;]#C12H23O14P1#422.082542#4484-88-2#metacyc#NA#NA|0.0023694#422.082542#MetaCyc03487#sucrose-6-phosphate [sucrose 6F-phosphate;sucrose-6-P;]#C12H23O14P1#422.082542#NA#metacyc#NA#NA|0.0023694#422.082542#MetaCyc03488#lactose 6'-phosphate []#C12H23O14P1#422.082542#NA#metacyc#NA#NA|0.0023694#422.082542#MetaCyc03489#6-phospho-&beta;-D-glucosyl-(1,4)-D-glucose []#C12H23O14P1#422.082542#NA#metacyc#NA#NA|0.0023614#422.08255#HMDB01124#Trehalose 6-phosphate#C12H23O14P#422.08255#http://www.hmdb.ca/metabolites/HMDB01124#HMDB#NA#NA|0.0023614#422.08255#HMDB06789#Lactose 6-phosphate#C12H23O14P#422.08255#http://www.hmdb.ca/metabolites/HMDB06789#HMDB#NA#NA|0.0023614#422.08255#HMDB01124#Trehalose 6-phosphate#C12H23O14P#422.08255#HMDB01124#PFEM_hmdb_metabocards_official#NA#NA|0.0023614#422.08255#HMDB06789#Lactose 6-phosphate#C12H23O14P#422.08255#HMDB06789#PFEM_hmdb_metabocards_official#NA#NA|0.0023614#422.08255#HMDB01124#Trehalose 6-phosphate#C12H23O14P#422.08255#NA#HMDB2010#NA#NA|0.0023614#422.08255#HMDB06789#Lactose 6-phosphate#C12H23O14P#422.08255#NA#HMDB2010#NA#NA|0.0000114#422.0849#C10077#Mangiferin#C19H18O11#422.0849#NA#KEGG#NA#NA|0.0000114#422.0849#C10089#Norswertianolin#C19H18O11#422.0849#NA#KEGG#NA#NA|0.0000114#422.0849#C10095#Tripteroside#C19H18O11#422.0849#NA#KEGG#NA#NA|0.0000114#422.0849#C16979#Isomangiferin#C19H18O11#422.0849#NA#KEGG#NA#NA|0.0000004#422.084911#MJ059640#1,2,6,8-Tetrahydroxyxanthone; 1-O-?-D-Glucopyranoside #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059641#1,2,6,8-Tetrahydroxyxanthone; 8-O-?-D-Glucopyranoside #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059642#1,3,5,6-Tetrahydroxyxanthone; 3-O-?-D-Glucopyranoside #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059643#1,3,5,8-Tetrahydroxyxanthone; 8-O-?-D-Glucopyranoside #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059644#1,3,6,7-Tetrahydroxyxanthone; 6-O-?-D-Glucopyranoside #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059645#2-Glucosyl-1,3,5,6-tetrahydroxyxanthone #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059646#Chrysograyanone #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059647#Dilatatin #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059648#Isomangiferin #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059649#Mangiferin #C19H18O11#422.084911#NA#MeJP#NA#NA|0.0000004#422.084911#MJ059650#Nigricanside #C19H18O11#422.084911#NA#MeJP#NA#NA"
+H2O 18.0105647 "0.0000057#18.010559#HMDB02111#Water#H2O#18.010559#NA#HMDB2010#NA#NA|0.0000047#18.01056#HMDB02111#Water#H2O#18.01056#http://www.hmdb.ca/metabolites/HMDB02111#HMDB#NA#NA|0.0000047#18.01056#HMDB02111#Water#H2O#18.01056#HMDB02111#PFEM_hmdb_metabocards_official#NA#NA|0.0000007#18.010564#MJ000004#Water #H2O#18.010564#NA#MeJP#NA#NA|0.0000007#18.010564#MJ000005#H2O #H2O#18.010564#NA#MeJP#NA#NA|0.0000003#18.010565#MetaCyc00008#H2O [H20;hydrogen oxide;water;]#H2O1#18.010565#7732-18-5#metacyc#NA#NA|0.0000353#18.0106#C00001#H2O#H2O#18.0106#NA#KEGG#NA#NA"
+C18H45N7O11 535.3181236 "0.0036066#535.314517#MJ078445#Labiatamide A #C29H45NO8#535.314517#NA#MeJP#NA#NA|0.0036066#535.314517#MJ078446#Neoline; O8,O14-Di-Ac, O1-Me #C29H45NO8#535.314517#NA#MeJP#NA#NA|0.0036066#535.314517#MJ078447#Zygadenine; O3-Ac #C29H45NO8#535.314517#NA#MeJP#NA#NA"
+Bismuth 209.987659 "0.000604#209.987055#MJ008190#Zinc(II) propanoate #C6H10O4Zn#209.987055#NA#MeJP#NA#NA"
+Halothane 98.952389 No_result_found_in_bank_inhouse
+"Picolinic acid" 199.951068 "0.003776#199.947292#MJ006975#3-Bromo-4-hydroxybenzaldehyde #C7H5BrO2#199.947292#NA#MeJP#NA#NA|0.003776#199.947292#MJ006976#3-Bromobenzoic acid #C7H5BrO2#199.947292#NA#MeJP#NA#NA"
b
diff -r 000000000000 -r be582bcd6585 test-data/out_test2b.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out_test2b.tabular Thu Oct 04 10:37:14 2018 -0400
[
@@ -0,0 +1,57 @@
+MASS_Submit DELTA_mass(0.005Da) MASS_Result ENTRY NAME FORMULA MASS PATHWAYS SOURCE MODE TISSUES
+422.0849114 0.0024114 422.0825 C00689 alpha,alpha'-Trehalose 6-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C02591 Sucrose 6-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C02995 Maltose 6'-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C04534 6-Phospho-beta-D-glucosyl-(1,4)-D-glucose C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C05396 Lactose 6-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C16688 Sucrose-6-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C16689 poly-cis-Polyprenyl diphosphate longer by one C5 unit C11H22O7P2 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C16690 5-L-Glutamyl-D-glutamyl-peptide C10H16N3O6R 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C16691 DNA 2,6-diamino-5-formamido-3,4-dihydro-4-oxopyrimidine C10H16N5O8P 422.0825 NA KEGG NA NA
+422.0849114 0.0024114 422.0825 C18050 beta-D-Fructofuranosyl-alpha-D-mannopyranoside 6F-phosphate C12H23O14P 422.0825 NA KEGG NA NA
+422.0849114 0.0023704 422.082541 MJ059635 1,1'-Di-myo-inosityl phosphate  C12H23O14P 422.082541 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MJ059636 alpha,alpha'-Trehalose 6-phosphate  C12H23O14P 422.082542 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MJ059637 Lactose 6-phosphate  C12H23O14P 422.082542 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MJ059638 Maltose 6'-phosphate  C12H23O14P 422.082542 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MJ059639 Sugar 1-phosphate  C12H23O14P 422.082542 NA MeJP NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03484 6-phospho-&beta;-D-glucosyl-(1,4)-D-glucose [] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03485 maltose 6'-phosphate [] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03486 trehalose 6-phosphate [&alpha;,&alpha;-trehalose 6-phosphate;] C12H23O14P1 422.082542 4484-88-2 metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03487 sucrose-6-phosphate [sucrose 6F-phosphate;sucrose-6-P;] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03488 lactose 6'-phosphate [] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023694 422.082542 MetaCyc03489 6-phospho-&beta;-D-glucosyl-(1,4)-D-glucose [] C12H23O14P1 422.082542 NA metacyc NA NA
+422.0849114 0.0023614 422.08255 HMDB01124 Trehalose 6-phosphate C12H23O14P 422.08255 http://www.hmdb.ca/metabolites/HMDB01124 HMDB NA NA
+422.0849114 0.0023614 422.08255 HMDB06789 Lactose 6-phosphate C12H23O14P 422.08255 http://www.hmdb.ca/metabolites/HMDB06789 HMDB NA NA
+422.0849114 0.0023614 422.08255 HMDB01124 Trehalose 6-phosphate C12H23O14P 422.08255 HMDB01124 PFEM_hmdb_metabocards_official NA NA
+422.0849114 0.0023614 422.08255 HMDB06789 Lactose 6-phosphate C12H23O14P 422.08255 HMDB06789 PFEM_hmdb_metabocards_official NA NA
+422.0849114 0.0023614 422.08255 HMDB01124 Trehalose 6-phosphate C12H23O14P 422.08255 NA HMDB2010 NA NA
+422.0849114 0.0023614 422.08255 HMDB06789 Lactose 6-phosphate C12H23O14P 422.08255 NA HMDB2010 NA NA
+422.0849114 0.0000114 422.0849 C10077 Mangiferin C19H18O11 422.0849 NA KEGG NA NA
+422.0849114 0.0000114 422.0849 C10089 Norswertianolin C19H18O11 422.0849 NA KEGG NA NA
+422.0849114 0.0000114 422.0849 C10095 Tripteroside C19H18O11 422.0849 NA KEGG NA NA
+422.0849114 0.0000114 422.0849 C16979 Isomangiferin C19H18O11 422.0849 NA KEGG NA NA
+422.0849114 0.0000004 422.084911 MJ059640 1,2,6,8-Tetrahydroxyxanthone; 1-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059641 1,2,6,8-Tetrahydroxyxanthone; 8-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059642 1,3,5,6-Tetrahydroxyxanthone; 3-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059643 1,3,5,8-Tetrahydroxyxanthone; 8-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059644 1,3,6,7-Tetrahydroxyxanthone; 6-O-?-D-Glucopyranoside  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059645 2-Glucosyl-1,3,5,6-tetrahydroxyxanthone  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059646 Chrysograyanone  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059647 Dilatatin  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059648 Isomangiferin  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059649 Mangiferin  C19H18O11 422.084911 NA MeJP NA NA
+422.0849114 0.0000004 422.084911 MJ059650 Nigricanside  C19H18O11 422.084911 NA MeJP NA NA
+18.0105647 0.0000057 18.010559 HMDB02111 Water H2O 18.010559 NA HMDB2010 NA NA
+18.0105647 0.0000047 18.01056 HMDB02111 Water H2O 18.01056 http://www.hmdb.ca/metabolites/HMDB02111 HMDB NA NA
+18.0105647 0.0000047 18.01056 HMDB02111 Water H2O 18.01056 HMDB02111 PFEM_hmdb_metabocards_official NA NA
+18.0105647 0.0000007 18.010564 MJ000004 Water  H2O 18.010564 NA MeJP NA NA
+18.0105647 0.0000007 18.010564 MJ000005 H2O  H2O 18.010564 NA MeJP NA NA
+18.0105647 0.0000003 18.010565 MetaCyc00008 H2O [H20;hydrogen oxide;water;] H2O1 18.010565 7732-18-5 metacyc NA NA
+18.0105647 0.0000353 18.0106 C00001 H2O H2O 18.0106 NA KEGG NA NA
+535.3181236 0.0036066 535.314517 MJ078445 Labiatamide A  C29H45NO8 535.314517 NA MeJP NA NA
+535.3181236 0.0036066 535.314517 MJ078446 Neoline; O8,O14-Di-Ac, O1-Me  C29H45NO8 535.314517 NA MeJP NA NA
+535.3181236 0.0036066 535.314517 MJ078447 Zygadenine; O3-Ac  C29H45NO8 535.314517 NA MeJP NA NA
+209.987659 0.000604 209.987055 MJ008190 Zinc(II) propanoate  C6H10O4Zn 209.987055 NA MeJP NA NA
+98.952389 no results found
+199.951068 0.003776 199.947292 MJ006975 3-Bromo-4-hydroxybenzaldehyde  C7H5BrO2 199.947292 NA MeJP NA NA
+199.951068 0.003776 199.947292 MJ006976 3-Bromobenzoic acid  C7H5BrO2 199.947292 NA MeJP NA NA
b
diff -r 000000000000 -r be582bcd6585 test-data/out_test_pf1.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out_test_pf1.tabular Thu Oct 04 10:37:14 2018 -0400
b
@@ -0,0 +1,12 @@
+MASS_Submit DELTA_mass(0.05Da) MASS_Result id mz
+154.0499 0 154.0499 584 154.0499
+154.0499 0.0123 154.0622 1845 154.0622
+152.0352 0.0055 152.0297 1212 152.0297
+152.0352 0.003252804903 152.031947195097 1444 152.031947195097
+152.0352 0 152.0352 584 152.0352
+152.0352 0.012 152.0472 1941 152.0472
+152.0352 0.0185 152.0537 1851 152.0537
+152.0352 0.0212 152.0564 1114 152.0564
+152.0352 0.0355 152.0707 1841 152.0707
+123.45 no results found
+124.96 no results found
\ No newline at end of file
b
diff -r 000000000000 -r be582bcd6585 test-data/out_test_pf2a.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out_test_pf2a.tabular Thu Oct 04 10:37:14 2018 -0400
b
@@ -0,0 +1,7 @@
+id masses BiH_PeakForest_(DELTA_mass(0.005Da)#MASS_Result#id#mz)
+C19H18O11 422.0849114 No_result_found_in_bank_inhouse
+H2O 18.0105647 No_result_found_in_bank_inhouse
+C18H45N7O11 535.3181236 No_result_found_in_bank_inhouse
+Bismuth 209.987659 No_result_found_in_bank_inhouse
+Halothane 98.952389 No_result_found_in_bank_inhouse
+"Picolinic acid" 199.951068 No_result_found_in_bank_inhouse
b
diff -r 000000000000 -r be582bcd6585 test-data/out_test_pf2b.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out_test_pf2b.tabular Thu Oct 04 10:37:14 2018 -0400
b
@@ -0,0 +1,7 @@
+MASS_Submit DELTA_mass(0.005Da) MASS_Result id mz
+422.0849114 no results found
+18.0105647 no results found
+535.3181236 no results found
+209.987659 no results found
+98.952389 no results found
+199.951068 no results found