diff --git a/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_metabolite_features_standardized.tsv b/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_metabolite_features_standardized.tsv new file mode 100644 index 0000000..8f5f888 --- /dev/null +++ b/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_metabolite_features_standardized.tsv @@ -0,0 +1,123 @@ +feature_id putative_metabolite_name annotation_confidence_level metabolite_class log2FC pvalue padj lfcSE analysis_method +PUFAs:AA AA 2 unknown 10.716882592479 2.58147085880211e-09 2.84237940274455e-07 0.221270838257676 targeted_MS_limma_moderated_t +PUFAs:DHA DHA 2 unknown 10.2675634030565 6.98945754773251e-09 2.84237940274455e-07 0.248576284324186 targeted_MS_limma_moderated_t +PUFAs:Eicosapentaenoic Acid Eicosapentaenoic Acid 2 unknown 9.80085181393519 5.036929809124531e-09 2.84237940274455e-07 0.225169604707912 targeted_MS_limma_moderated_t +PUFAs:12-HEPE 12-HEPE 2 unknown 6.65286010257743 3.14704237663146e-07 5.48484528498626e-06 0.296620752332671 targeted_MS_limma_moderated_t +PUFAs:15-HETE 15-HETE 2 unknown 5.80351640375843 2.42984759169995e-07 5.48484528498626e-06 0.248195355263022 targeted_MS_limma_moderated_t +PUFAs:8-HETE 8-HETE 2 unknown 6.28883272146158 1.91716704371008e-07 5.48484528498626e-06 0.258886650419828 targeted_MS_limma_moderated_t +PUFAs:Lyso-PAF Lyso-PAF 2 unknown 8.22180951621831 3.0667768551909e-07 5.48484528498626e-06 0.365050285708252 targeted_MS_limma_moderated_t +PUFAs:9-HODE 9-HODE 2 unknown 6.8299343307448 3.64169305885791e-07 5.55358191475831e-06 0.311765492898079 targeted_MS_limma_moderated_t +PUFAs:11-HETE 11-HETE 2 unknown 6.14155336003814 4.56941729786099e-07 6.12893102657869e-06 0.290793905981451 targeted_MS_limma_moderated_t +PUFAs:12-HETE 12-HETE 2 unknown 6.1790277255639 5.02371395621204e-07 6.12893102657869e-06 0.297077927203158 targeted_MS_limma_moderated_t +PUFAs:16-HDoHE 16-HDoHE 2 unknown 4.47739766978135 9.93689950013784e-07 1.10209249001529e-05 0.240359905438174 targeted_MS_limma_moderated_t +PUFAs:13-HODE 13-HODE 2 unknown 7.16606267552122 1.25903692181036e-06 1.18155772662203e-05 0.399732837678073 targeted_MS_limma_moderated_t +PUFAs:20-HDoHE 20-HDoHE 2 unknown 5.25052756955446 1.21543569689018e-06 1.18155772662203e-05 0.291213165111199 targeted_MS_limma_moderated_t +PUFAs:10-HDoHE 10-HDoHE 2 unknown 5.012567144035 1.53156490248421e-06 1.33464941502195e-05 0.288637259584148 targeted_MS_limma_moderated_t +PUFAs:PGD2 PGD2 2 unknown 7.81593783850536 2.87143901870595e-06 2.33543706854751e-05 0.49849435610101 targeted_MS_limma_moderated_t +PUFAs:14-HDoHE 14-HDoHE 2 unknown 5.2133719225408 3.37288513492921e-06 2.57182491538352e-05 0.341346237147143 targeted_MS_limma_moderated_t +PUFAs:15-HEPE 15-HEPE 2 unknown 4.38432324463598 4.58479761109985e-06 2.94392267660096e-05 0.301824785290994 targeted_MS_limma_moderated_t +PUFAs:18-HEPE 18-HEPE 2 unknown 5.11335549715505 4.17175381971717e-06 2.94392267660096e-05 0.346621576514679 targeted_MS_limma_moderated_t +PUFAs:5-HEPE 5-HEPE 2 unknown 5.79171333299166 4.40047381119288e-06 2.94392267660096e-05 0.396045889328387 targeted_MS_limma_moderated_t +PUFAs:PGE2-d4 PGE2-d4 2 unknown 3.08322640515281 5.74746543811726e-06 3.50595391725153e-05 0.220254851766653 targeted_MS_limma_moderated_t +GM:Methionine sulfoxide Methionine sulfoxide 2 unknown -5.24309152793764 8.0567516655754e-06 4.68058906285809e-05 0.395895151724105 targeted_MS_limma_moderated_t +GM:Glutamic acid Glutamic acid 2 unknown -3.48583323297051 9.28285156791161e-06 5.14776314220553e-05 0.269413550536752 targeted_MS_limma_moderated_t +GM:4-Aminobutyric acid 4-Aminobutyric acid 2 unknown 3.21210082355671 5.03717766900122e-05 0.0002671894241818 0.328940830143546 targeted_MS_limma_moderated_t +PUFAs:12-KETE 12-KETE 2 unknown 6.25551712340059 8.45825679364313e-05 0.0004299613870101 0.57833866664616 targeted_MS_limma_moderated_t +PUFAs:13-HDoHE 13-HDoHE 2 unknown 5.23329475168623 0.0001052221367901 0.0005134840275361 0.505126378955826 targeted_MS_limma_moderated_t +GM:Fumaric Acid Fumaric Acid 2 unknown -2.80542628627883 0.0001101994782367 0.0005170898594186 0.32815614692399 targeted_MS_limma_moderated_t +PUFAs:Stearidonic Acid Stearidonic Acid 2 unknown 2.47847566535131 0.0001339496461637 0.0006052539567397 0.299793103645021 targeted_MS_limma_moderated_t +GM:Adenosine Adenosine 2 unknown 3.93012978336075 0.0001578634278684 0.000687833507141 0.489046260868454 targeted_MS_limma_moderated_t +GM:Niacinamide Niacinamide 2 unknown 2.37601645221479 0.000184270780835 0.0007752081124783 0.303689348807984 targeted_MS_limma_moderated_t +PUFAs:17,18-EpETE 17,18-EpETE 2 unknown -2.09622491731636 0.00023842956505 0.0009696135645368 0.28023216687943 targeted_MS_limma_moderated_t +GM:Histamine Histamine 2 unknown 3.88200205374831 0.0002608839444117 0.0010267045554266 0.527209125799994 targeted_MS_limma_moderated_t +GM:Adenosine 3',5'-cyclic monophosphate Adenosine 3',5'-cyclic monophosphate 2 unknown 2.25323102063888 0.0003422976953854 0.001305009963657 0.32100903409198 targeted_MS_limma_moderated_t +NUCs:GMP GMP 2 unknown 3.20631909373342 0.0005902114475705 0.0021819938364729 0.503531815987004 targeted_MS_limma_moderated_t +GM:Adenylsuccinic acid Adenylsuccinic acid 2 unknown 3.25243637532261 0.0006758646612037 0.0023558711047672 0.523476859020538 targeted_MS_limma_moderated_t +GM:Uric acid Uric acid 2 unknown 1.90337927685478 0.0006739340706908 0.0023558711047672 0.306187996000983 targeted_MS_limma_moderated_t +TCA:Fumaric acid Fumaric acid 2 unknown 1.79624999961691 0.0007456376578648 0.0025268831738754 0.294326967495058 targeted_MS_limma_moderated_t +TCA:Alpha-ketoglutaric acid Alpha-ketoglutaric acid 2 unknown 1.78924470006823 0.0008147180062999 0.0026863674802323 0.297971274440616 targeted_MS_limma_moderated_t +GM:Adenine Adenine 2 unknown 2.94093298806094 0.000970327835973 0.0030607132723305 0.505787857360892 targeted_MS_limma_moderated_t +PUFAs:OEA OEA 2 unknown 3.8852303609564 0.0009784247345974 0.0030607132723305 0.589026132574493 targeted_MS_limma_moderated_t +GM:Glutamine Glutamine 2 unknown -1.94139619245614 0.0013057882305621 0.0039826541032146 0.352883438182077 targeted_MS_limma_moderated_t +GM:NAD NAD 2 unknown 1.80876819180838 0.0014690194643303 0.0043712286499586 0.336157458125779 targeted_MS_limma_moderated_t +GM:Histidine Histidine 2 unknown -1.75764268684211 0.0020921602643753 0.0060772274346139 0.349503505178784 targeted_MS_limma_moderated_t +GM:Acetylcarnitine Acetylcarnitine 2 unknown 1.57244430116776 0.0025864636882175 0.007338338836338 0.325863512435196 targeted_MS_limma_moderated_t +GM:S-Adenosylhomocysteine S-Adenosylhomocysteine 2 unknown 2.85351583332972 0.0030643764101416 0.0084966800463017 0.611475532311571 targeted_MS_limma_moderated_t +TCA:Citric acid Citric acid 2 unknown 2.48147128713734 0.0041182218065683 0.0111649568978076 0.564308185524133 targeted_MS_limma_moderated_t +NUCs:UDP UDP 2 unknown -1.00919961138136 0.0044423815416921 0.0117819684366618 0.233078972331746 targeted_MS_limma_moderated_t +GM:Carnitine Carnitine 2 unknown 1.24167845819072 0.005184676508304 0.0134580964683637 0.296059336355194 targeted_MS_limma_moderated_t +GM:Cystathionine Cystathionine 2 unknown -1.18066822219403 0.0053151930898646 0.0135094491034059 0.282971972252639 targeted_MS_limma_moderated_t +GM:Nicotinic acid Nicotinic acid 2 unknown 1.38239118836646 0.0059742811546565 0.0148747408340428 0.339530176383309 targeted_MS_limma_moderated_t +GM:Guanosine Guanosine 2 unknown 2.56504413585885 0.0063119141275301 0.0152888790965423 0.637360059356079 targeted_MS_limma_moderated_t +GM:Uridine Uridine 2 unknown 1.71065424762261 0.0063912527370791 0.0152888790965423 0.426188674849473 targeted_MS_limma_moderated_t +GM:Cytidine Cytidine 2 unknown 1.33676618955516 0.0067067135333773 0.0157349817513852 0.336467510611299 targeted_MS_limma_moderated_t +GM:Thymidine Thymidine 2 unknown 2.65926171440026 0.008218629953956 0.0189183557430686 0.699310173435706 targeted_MS_limma_moderated_t +GM:Inosine Inosine 2 unknown 2.2856509500787 0.009230704477226 0.0202604366010299 0.61656575311814 targeted_MS_limma_moderated_t +NUCs:TMP TMP 2 unknown -1.59408587234631 0.0089724226208938 0.0202604366010299 0.427331088662962 targeted_MS_limma_moderated_t +TCA:L-proline L-proline 2 unknown 1.31410858006652 0.0092998725381776 0.0202604366010299 0.355072377430301 targeted_MS_limma_moderated_t +GM:Guanosine monophosphate Guanosine monophosphate 2 unknown 2.20821476222099 0.0094899934786774 0.020311915866643 0.599337560052013 targeted_MS_limma_moderated_t +GM:Hypoxanthine Hypoxanthine 2 unknown 1.71842409403814 0.0108743303082257 0.0225098621305978 0.480805599605714 targeted_MS_limma_moderated_t +NUCs:GTP GTP 2 unknown -0.840664038194246 0.0108859169320104 0.0225098621305978 0.23526960328421 targeted_MS_limma_moderated_t +TCA:Glutamic acid Glutamic acid 2 unknown 1.23330217948203 0.0111240314598994 0.0226188639684621 0.34684290686032 targeted_MS_limma_moderated_t +GM:Creatinine Creatinine 2 unknown 2.64728139488704 0.0116381600957698 0.0232763201915397 0.752157997476278 targeted_MS_limma_moderated_t +GM:Taurine Taurine 2 unknown 0.879402598319962 0.0141111850742089 0.0277671706298949 0.261190691742681 targeted_MS_limma_moderated_t +GM:Creatine Creatine 2 unknown 1.97898090137824 0.0150776638412046 0.0291980156924914 0.596971548789315 targeted_MS_limma_moderated_t +GM:Acetylcholine Acetylcholine 2 unknown 1.14196170675196 0.0172175380044815 0.0328209318210428 0.355523885259638 targeted_MS_limma_moderated_t +GM:Asparagine Asparagine 2 unknown -1.0304837181663 0.0192459709681635 0.0361232070479376 0.329592238633513 targeted_MS_limma_moderated_t +GM:Cysteine Cysteine 2 unknown 1.18408665727394 0.0250191469327028 0.0462475140271173 0.404380606170924 targeted_MS_limma_moderated_t +GM:Proline Proline 2 unknown 0.976442353912823 0.0259514506244355 0.0472548802415095 0.336611819200161 targeted_MS_limma_moderated_t +GM:Aspartic acid Aspartic acid 2 unknown 0.760506655205198 0.0267643058585231 0.0480183134520561 0.264267148509056 targeted_MS_limma_moderated_t +GM:Citric Acid Citric Acid 2 unknown 1.38763604356125 0.0302352412698065 0.0534594121002376 0.497835295437903 targeted_MS_limma_moderated_t +GM:Pantothenic acid Pantothenic acid 2 unknown 1.3579499309219 0.0340746813605985 0.0593873017999003 0.503061973691277 targeted_MS_limma_moderated_t +GM:Tyrosine Tyrosine 2 unknown 1.1329070258887 0.0390175692897633 0.0670442739908608 0.435655505242781 targeted_MS_limma_moderated_t +GM:Isoleucine Isoleucine 2 unknown 1.09655550661509 0.0509996824129041 0.0840805574915447 0.455567715092866 targeted_MS_limma_moderated_t +GM:Ornitine Ornitine 2 unknown -0.725744463813562 0.0508173003052558 0.0840805574915447 0.301191157497743 targeted_MS_limma_moderated_t +TCA:Valine Valine 2 unknown 0.898479545062405 0.0497240913984247 0.0840805574915447 0.37047605692537 targeted_MS_limma_moderated_t +TCA:Malic acid Malic acid 2 unknown 1.48372303358911 0.0557896725517693 0.0907512006842115 0.633344600969182 targeted_MS_limma_moderated_t +NUCs:UMP UMP 2 unknown -1.20409883334151 0.0585981625083465 0.0940654713949773 0.521802999740592 targeted_MS_limma_moderated_t +TCA:L-serine 1 L-serine 1 2 unknown 1.17812076849617 0.0688959787260713 0.109159862397152 0.537405773280544 targeted_MS_limma_moderated_t +GM:Lactic Acid Lactic Acid 2 unknown 0.945695007027222 0.0770454687041569 0.120507015152656 0.447591486745703 targeted_MS_limma_moderated_t +GM:Choline Choline 2 unknown 0.757928175176714 0.0910114584690403 0.140549340926872 0.379953679496755 targeted_MS_limma_moderated_t +NUCs:GDP GDP 2 unknown 2.52074988198351 0.100555968426153 0.153347851849883 1.31005778919224 targeted_MS_limma_moderated_t +PUFAs:PGE2 PGE2 2 unknown 5.43348816691175 0.104100475943066 0.155589101075742 2.8603218366078 targeted_MS_limma_moderated_t +TCA:Succinic acid Succinic acid 2 unknown 1.03872432556306 0.104576281050909 0.155589101075742 0.547741825669602 targeted_MS_limma_moderated_t +PUFAs:PGH2 PGH2 2 unknown 5.32680320696729 0.115742904738382 0.17012812503714 2.91970187154093 targeted_MS_limma_moderated_t +GM:Kynurenine Kynurenine 2 unknown 1.0381511167988 0.120437092484454 0.174920539084564 0.577968083273754 targeted_MS_limma_moderated_t +GM:Leucine Leucine 2 unknown 0.782101952553358 0.124685702447278 0.178960655277269 0.44147299200109 targeted_MS_limma_moderated_t +GM:Cystine Cystine 2 unknown -0.693030252089923 0.132607519271701 0.188117643617994 0.401118216400123 targeted_MS_limma_moderated_t +GM:Adenosine monophosphate Adenosine monophosphate 2 unknown 1.07613945680345 0.138300336796176 0.193938403323374 0.633848329729829 targeted_MS_limma_moderated_t +GM:Alanine Alanine 2 unknown -0.587910409992106 0.146917783896953 0.203681473129866 0.355314363041371 targeted_MS_limma_moderated_t +GM:Ophthalmic acid Ophthalmic acid 2 unknown 0.679800433570709 0.149272778518296 0.204621112126203 0.413693834876678 targeted_MS_limma_moderated_t +TCA:Aspartic acid Aspartic acid 2 unknown -0.779871276923428 0.160931818108894 0.218152020103168 0.490692391502233 targeted_MS_limma_moderated_t +PUFAs:13-KODE 13-KODE 2 unknown 3.35314793055292 0.165894557207473 0.222408087684744 2.13918114139752 targeted_MS_limma_moderated_t +GM:Asymmetric dimethylarginine Asymmetric dimethylarginine 2 unknown 0.721163949388961 0.179885899853551 0.236023186744771 0.477885887211138 targeted_MS_limma_moderated_t +TCA:Threonine Threonine 2 unknown -0.791807896294668 0.179919314485768 0.236023186744771 0.524745471215548 targeted_MS_limma_moderated_t +GM:Serine Serine 2 unknown -0.4317527787006 0.202211655339157 0.262444914376353 0.303186839668462 targeted_MS_limma_moderated_t +GM:Succinic acid Succinic acid 2 unknown 1.09776136067049 0.216012102457513 0.277405015787543 0.79797180046025 targeted_MS_limma_moderated_t +GM:Symmetric dimethylarginine Symmetric dimethylarginine 2 unknown 0.661078495940456 0.219852850038016 0.279396330256645 0.485114246370737 targeted_MS_limma_moderated_t +GM:Tryptophan Tryptophan 2 unknown -0.719944219470029 0.234804508881 0.295321134881258 0.547851088263981 targeted_MS_limma_moderated_t +GM:3-Hydroxy-D_L-Kynurenine 3-Hydroxy-D_L-Kynurenine 2 unknown 0.808708992445137 0.25528720965965 0.317806526310993 0.633824378551514 targeted_MS_limma_moderated_t +PUFAs:9-KODE 9-KODE 2 unknown 3.32553335110693 0.280412103314114 0.345558349538605 2.76585168138431 targeted_MS_limma_moderated_t +GM:Valine Valine 2 unknown 0.457571941990089 0.318959845635845 0.38913101167573 0.422785055595249 targeted_MS_limma_moderated_t +GM:Threonine Threonine 2 unknown 0.333361013286269 0.348014834398215 0.417204352319124 0.32871184088629 targeted_MS_limma_moderated_t +PUFAs:PGF2a PGF2a 2 unknown 2.56564322348497 0.348810196201235 0.417204352319124 2.53435970271596 targeted_MS_limma_moderated_t +GM:Uracil Uracil 2 unknown 0.478016787848006 0.368088333828254 0.435988123563563 0.49296344776987 targeted_MS_limma_moderated_t +GM:Arginine Arginine 2 unknown -0.343347641276987 0.390173756651507 0.457703829918114 0.372034156841767 targeted_MS_limma_moderated_t +GM:4-Hydroxyproline 4-Hydroxyproline 2 unknown -0.287172539212441 0.410240282685972 0.476660137977986 0.325554745229879 targeted_MS_limma_moderated_t +GM:Lysine Lysine 2 unknown 0.322242341693984 0.415260637207679 0.477941488106952 0.369488294368934 targeted_MS_limma_moderated_t +GM:Glutathione reduced Glutathione reduced 2 unknown 0.279296129562741 0.431048675295593 0.491476059682826 0.331964393808272 targeted_MS_limma_moderated_t +GM:Cytidine monophosphate Cytidine monophosphate 2 unknown -0.175019779689715 0.513120712005549 0.57431859508878 0.252546197930263 targeted_MS_limma_moderated_t +GM:Dopamine Dopamine 2 unknown -0.20972761035129 0.511590862291271 0.57431859508878 0.301492072721354 targeted_MS_limma_moderated_t +NUCs:AMP AMP 2 unknown -0.235070012843192 0.560215785169184 0.621330234460368 0.382258035645825 targeted_MS_limma_moderated_t +NUCs:ADP ADP 2 unknown -0.144356244028679 0.578423697854546 0.635744965209501 0.246401839999929 targeted_MS_limma_moderated_t +NUCs:ATP ATP 2 unknown -0.233852319441281 0.598490027067677 0.651926636627291 0.421802726124555 targeted_MS_limma_moderated_t +GM:2-Aminobutyric acid 2-Aminobutyric acid 2 unknown -0.169482802139229 0.616540352222494 0.665645336027826 0.321822230231077 targeted_MS_limma_moderated_t +PUFAs:AEA AEA 2 unknown 0.367193437224462 0.655922855280618 0.701952529335398 0.785397483516909 targeted_MS_limma_moderated_t +GM:Malic Acid Malic Acid 2 unknown -0.175465622645335 0.684015444657018 0.725651167375271 0.411442242591883 targeted_MS_limma_moderated_t +GM:Anthranilic Acid Anthranilic Acid 2 unknown 0.275213705473952 0.699302278381291 0.735473085883771 0.680444753868484 targeted_MS_limma_moderated_t +GM:Serotonin Serotonin 2 unknown 0.118597781114976 0.712343759171898 0.74278580016215 0.30735653140064 targeted_MS_limma_moderated_t +GM:Phenylalanine Phenylalanine 2 unknown 0.0878290259211732 0.876449207920316 0.906159350561683 0.542382349316447 targeted_MS_limma_moderated_t +GM:Glutathione oxidazed Glutathione oxidazed 2 unknown 0.0383868037274954 0.928885638202189 0.952302923198883 0.413245032309095 targeted_MS_limma_moderated_t +GM:Glycine Glycine 2 unknown -0.0160590479557846 0.957567325221766 0.973526780642129 0.29004713061585 targeted_MS_limma_moderated_t +GM:Argininosuccinic acid Argininosuccinic acid 2 unknown -0.0057015703861044 0.986651378157663 0.986651378157663 0.327520865187038 targeted_MS_limma_moderated_t +GM:Citicoline Citicoline 2 unknown 0.0101381506701546 0.980112828779818 0.986651378157663 0.390872953664547 targeted_MS_limma_moderated_t diff --git a/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_metabolomics_report.html b/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_metabolomics_report.html new file mode 100644 index 0000000..df36da7 --- /dev/null +++ b/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_metabolomics_report.html @@ -0,0 +1,3817 @@ + + + + + + + + + +AREE Metabolomics Workflow Report + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

AREE Metabolomics Workflow Report

+

DUPERRET2025_POMS_STARVE / starved_vs_fed_0hpc

+
+ + + +
+ + + + +
+ + + +
+ + +
+

Run summary

+

This report was generated by the AREE metabolomics workflow scaffold (workflows/metabolomics/). It is rendered from the standardized feature table and the accompanying provenance manifest — it does not re-derive any numbers, it only visualizes what those two files already contain.

+
    +
  • Study: DUPERRET2025_POMS_STARVE
  • +
  • Comparison: starved_vs_fed_0hpc
  • +
  • Mode: raw_reanalysis
  • +
  • Date generated: 2026-10-16T14:30:03.531649+00:00
  • +
+
+
+

Annotation confidence breakdown

+

Simplified MSI-style scale: 1 = confirmed by standard, 2 = putatively annotated (spectral match), 3 = putative class, 4 = unknown.

+
+
+ + + + + + + + + + + + + +
Annotation confidence levelN features
2122
+
+
+
+
+
+
+

+
+
+
+
+
+
+

Metabolite class summary

+
+
+ + + + + + + + + + + + + +
Metabolite classN features
unknown122
+
+
+
+
+

Normalization / QC metrics (upstream)

+

QC metrics captured from upstream intake/annotation/normalization steps (raw mode) are embedded in the manifest under qc_metrics.upstream_step_qc; in processed-results mode this section is typically empty (see note above).

+
    +
  • N features: 122
  • +
  • N features at annotation confidence 1 or 2: 122 (100%)
  • +
  • Tested 122 of 310 features on 3 vs 3 replicates (units: tank); not tested: 2 detected_too_rarely_in_both_arms, 14 detected_too_rarely_in_control, 23 detected_too_rarely_in_treatment, 149 not_detected (full list in the missingness report)
  • +
  • Normalization: log2_then_internal_standard_per_platform; detection limit 0.001; 2124 value(s) below detection; 10 internal standard(s) excluded from testing
  • +
+
+
+

Volcano plot

+
+
+
+
+

+
+
+
+
+
+
+

Top differential features

+
+
+ +++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
feature_idputative_metabolite_nameannotation_confidence_levelmetabolite_classlog2FCpvaluepadj
PUFAs:AAAA2unknown10.7168830.0e+003.00e-07
PUFAs:Eicosapentaenoic AcidEicosapentaenoic Acid2unknown9.8008520.0e+003.00e-07
PUFAs:DHADHA2unknown10.2675630.0e+003.00e-07
PUFAs:8-HETE8-HETE2unknown6.2888332.0e-075.50e-06
PUFAs:15-HETE15-HETE2unknown5.8035162.0e-075.50e-06
PUFAs:Lyso-PAFLyso-PAF2unknown8.2218103.0e-075.50e-06
PUFAs:12-HEPE12-HEPE2unknown6.6528603.0e-075.50e-06
PUFAs:9-HODE9-HODE2unknown6.8299344.0e-075.60e-06
PUFAs:11-HETE11-HETE2unknown6.1415535.0e-076.10e-06
PUFAs:12-HETE12-HETE2unknown6.1790285.0e-076.10e-06
PUFAs:16-HDoHE16-HDoHE2unknown4.4773981.0e-061.10e-05
PUFAs:20-HDoHE20-HDoHE2unknown5.2505281.2e-061.18e-05
PUFAs:13-HODE13-HODE2unknown7.1660631.3e-061.18e-05
PUFAs:10-HDoHE10-HDoHE2unknown5.0125671.5e-061.33e-05
PUFAs:PGD2PGD22unknown7.8159382.9e-062.34e-05
PUFAs:14-HDoHE14-HDoHE2unknown5.2133723.4e-062.57e-05
PUFAs:18-HEPE18-HEPE2unknown5.1133554.2e-062.94e-05
PUFAs:5-HEPE5-HEPE2unknown5.7917134.4e-062.94e-05
PUFAs:15-HEPE15-HEPE2unknown4.3843234.6e-062.94e-05
PUFAs:PGE2-d4PGE2-d42unknown3.0832265.7e-063.51e-05
+
+
+
+
+

Provenance

+
    +
  • Workflow: aree-metabolomics (0.1.0-scaffold)
  • +
  • Generated by: automated:aree-metabolomics@0.1.0-scaffold
  • +
+
+

This report and the workflow that produced it are part of the AREE (Aquaculture Resilience Evidence Engine) metabolomics scaffold. It is an unexecuted structural template in this build — see workflows/metabolomics/README.md for what has and has not been run.

+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_missingness.tsv b/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_missingness.tsv new file mode 100644 index 0000000..88e6c44 --- /dev/null +++ b/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_missingness.tsv @@ -0,0 +1,311 @@ +feature_id putative_metabolite_name annotation_confidence_level platform n_replicates_control n_detected_control n_replicates_treatment n_detected_treatment status +GM:2-Aminobutyric acid 2-Aminobutyric acid 2 GM 3 3 3 3 tested +GM:2-Ketoglutaric acid 2-Ketoglutaric acid 2 GM 3 0 3 0 not_detected +GM:Taurine Taurine 2 GM 3 3 3 3 tested +GM:3-Hydroxy-D_L-Kynurenine 3-Hydroxy-D_L-Kynurenine 2 GM 3 3 3 2 tested +GM:4-Aminobutyric acid 4-Aminobutyric acid 2 GM 3 3 3 3 tested +GM:4-Hydroxyproline 4-Hydroxyproline 2 GM 3 3 3 3 tested +GM:5-Glutamylcysteine 5-Glutamylcysteine 2 GM 3 3 3 0 detected_too_rarely_in_treatment +GM:Acetylcarnitine Acetylcarnitine 2 GM 3 3 3 3 tested +GM:Acetylcholine Acetylcholine 2 GM 3 3 3 3 tested +GM:Aconitic acid Aconitic acid 2 GM 3 0 3 0 not_detected +GM:Adenine Adenine 2 GM 3 3 3 3 tested +GM:Adenosine 3',5'-cyclic monophosphate Adenosine 3',5'-cyclic monophosphate 2 GM 3 3 3 3 tested +GM:Adenosine monophosphate Adenosine monophosphate 2 GM 3 3 3 3 tested +GM:Adenosine Adenosine 2 GM 3 3 3 3 tested +GM:Adenylsuccinic acid Adenylsuccinic acid 2 GM 3 3 3 3 tested +GM:Alanine Alanine 2 GM 3 3 3 3 tested +GM:Allantoin Allantoin 2 GM 3 0 3 0 not_detected +GM:Anthranilic Acid Anthranilic Acid 2 GM 3 3 3 3 tested +GM:Arginine Arginine 2 GM 3 3 3 3 tested +GM:Argininosuccinic acid Argininosuccinic acid 2 GM 3 3 3 3 tested +GM:Asparagine Asparagine 2 GM 3 3 3 3 tested +GM:Aspartic acid Aspartic acid 2 GM 3 3 3 3 tested +GM:Asymmetric dimethylarginine Asymmetric dimethylarginine 2 GM 3 3 3 3 tested +GM:Carnitine Carnitine 2 GM 3 3 3 3 tested +GM:Carnosine Carnosine 2 GM 3 1 3 1 detected_too_rarely_in_both_arms +GM:Cholic Acid (CA) Cholic Acid (CA) 2 GM 3 0 3 0 not_detected +GM:Choline Choline 2 GM 3 3 3 3 tested +GM:Citicoline Citicoline 2 GM 3 3 3 3 tested +GM:Citric Acid Citric Acid 2 GM 3 3 3 3 tested +GM:Citrulline Citrulline 2 GM 3 3 3 0 detected_too_rarely_in_treatment +GM:Creatine Creatine 2 GM 3 3 3 3 tested +GM:Creatinine Creatinine 2 GM 3 3 3 3 tested +GM:Cystathionine Cystathionine 2 GM 3 3 3 3 tested +GM:Cysteamine Cysteamine 2 GM 3 0 3 0 not_detected +GM:Cysteine Cysteine 2 GM 3 3 3 3 tested +GM:Cystine Cystine 2 GM 3 3 3 3 tested +GM:Cytidine 3',5'-cyclic monophosphate Cytidine 3',5'-cyclic monophosphate 2 GM 3 0 3 0 not_detected +GM:Cytidine monophosphate Cytidine monophosphate 2 GM 3 3 3 3 tested +GM:Cytidine Cytidine 2 GM 3 3 3 3 tested +GM:Cytosine Cytosine 2 GM 3 3 3 0 detected_too_rarely_in_treatment +GM:Dimethylglycine Dimethylglycine 2 GM 3 3 3 0 detected_too_rarely_in_treatment +GM:Dopa Dopa 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:Dopamine Dopamine 2 GM 3 3 3 3 tested +GM:Epinephrine Epinephrine 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:FAD FAD 2 GM 3 3 3 0 detected_too_rarely_in_treatment +GM:FMN FMN 2 GM 3 0 3 0 not_detected +GM:Fumaric Acid Fumaric Acid 2 GM 3 3 3 3 tested +GM:Glutamic acid Glutamic acid 2 GM 3 3 3 3 tested +GM:Glutamine Glutamine 2 GM 3 3 3 3 tested +GM:Glutathione oxidazed Glutathione oxidazed 2 GM 3 3 3 3 tested +GM:Glutathione reduced Glutathione reduced 2 GM 3 3 3 3 tested +GM:Glycine Glycine 2 GM 3 3 3 3 tested +GM:Guanine Guanine 2 GM 3 3 3 0 detected_too_rarely_in_treatment +GM:Guanosine 3',5'-cyclic monophosphate Guanosine 3',5'-cyclic monophosphate 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:Guanosine monophosphate Guanosine monophosphate 2 GM 3 3 3 3 tested +GM:Guanosine Guanosine 2 GM 3 3 3 3 tested +GM:Histamine Histamine 2 GM 3 3 3 3 tested +GM:Histidine Histidine 2 GM 3 3 3 3 tested +GM:Homocysteine Homocysteine 2 GM 3 0 3 0 not_detected +GM:Homocystine Homocystine 2 GM 3 0 3 2 detected_too_rarely_in_control +GM:Hypoxanthine Hypoxanthine 2 GM 3 3 3 3 tested +GM:Inosine Inosine 2 GM 3 3 3 3 tested +GM:Isocitric Acid Isocitric Acid 2 GM 3 0 3 0 not_detected +GM:Isoleucine Isoleucine 2 GM 3 3 3 3 tested +GM:Kynurenic Acid Kynurenic Acid 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:Kynurenine Kynurenine 2 GM 3 3 3 3 tested +GM:Lactic Acid Lactic Acid 2 GM 3 3 3 3 tested +GM:Leucine Leucine 2 GM 3 3 3 3 tested +GM:L-Hydroorotic Acid L-Hydroorotic Acid 2 GM 3 0 3 0 not_detected +GM:Lysine Lysine 2 GM 3 3 3 3 tested +GM:Malic Acid Malic Acid 2 GM 3 3 3 3 tested +GM:Methionine sulfone Methionine sulfone 2 GM 3 3 3 0 detected_too_rarely_in_treatment +GM:Methionine sulfoxide Methionine sulfoxide 2 GM 3 3 3 3 tested +GM:Methionine Methionine 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:NAD NAD 2 GM 3 3 3 3 tested +GM:Niacinamide Niacinamide 2 GM 3 3 3 3 tested +GM:Nicotinic acid Nicotinic acid 2 GM 3 3 3 3 tested +GM:Norepinephrine Norepinephrine 2 GM 3 3 3 0 detected_too_rarely_in_treatment +GM:Ophthalmic acid Ophthalmic acid 2 GM 3 3 3 3 tested +GM:Ornitine Ornitine 2 GM 3 3 3 3 tested +GM:Orotic Acid Pos Orotic Acid Pos 2 GM 3 0 3 0 not_detected +GM:Pantothenic acid Pantothenic acid 2 GM 3 3 3 3 tested +GM:Phenylalanine Phenylalanine 2 GM 3 3 3 3 tested +GM:Picolinic Acid Picolinic Acid 2 GM 3 0 3 0 not_detected +GM:Proline Proline 2 GM 3 3 3 3 tested +GM:S-Adenosylhomocysteine S-Adenosylhomocysteine 2 GM 3 3 3 3 tested +GM:S-Adenosylmethionine S-Adenosylmethionine 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:Serine Serine 2 GM 3 3 3 3 tested +GM:Serotonin Serotonin 2 GM 3 3 3 3 tested +GM:Spermidine Spermidine 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:Spermine Spermine 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:Succinic acid Succinic acid 2 GM 3 3 3 3 tested +GM:Symmetric dimethylarginine Symmetric dimethylarginine 2 GM 3 3 3 3 tested +GM:Threonine Threonine 2 GM 3 3 3 3 tested +GM:Thymidine Thymidine 2 GM 3 3 3 3 tested +GM:Thymine Thymine 2 GM 3 0 3 3 detected_too_rarely_in_control +GM:Tryptophan Tryptophan 2 GM 3 3 3 3 tested +GM:Tyrosine Tyrosine 2 GM 3 3 3 3 tested +GM:Uracil Uracil 2 GM 3 3 3 3 tested +GM:Uric acid Uric acid 2 GM 3 3 3 3 tested +GM:Uridine Uridine 2 GM 3 3 3 3 tested +GM:Valine Valine 2 GM 3 3 3 3 tested +GM:Xanthine Xanthine 2 GM 3 3 3 0 detected_too_rarely_in_treatment +NUCs:ADP ADP 2 NUCs 3 3 3 3 tested +NUCs:AMP AMP 2 NUCs 3 3 3 3 tested +NUCs:Ap3A_Mono Ap3A_Mono 2 NUCs 3 0 3 0 not_detected +NUCs:Ap3A Ap3A 2 NUCs 3 0 3 0 not_detected +NUCs:Ap4A Ap4A 2 NUCs 3 0 3 0 not_detected +NUCs:ATP ATP 2 NUCs 3 3 3 3 tested +NUCs:CDP CDP 2 NUCs 3 0 3 0 not_detected +NUCs:cGAMP cGAMP 2 NUCs 3 0 3 0 not_detected +NUCs:CMP CMP 2 NUCs 3 0 3 0 not_detected +NUCs:CTP CTP 2 NUCs 3 0 3 0 not_detected +NUCs:dUMP dUMP 2 NUCs 3 0 3 0 not_detected +NUCs:GDP GDP 2 NUCs 3 3 3 3 tested +NUCs:GMP GMP 2 NUCs 3 3 3 3 tested +NUCs:GTP GTP 2 NUCs 3 3 3 3 tested +NUCs:TDP TDP 2 NUCs 3 0 3 0 not_detected +NUCs:TMP TMP 2 NUCs 3 3 3 3 tested +NUCs:TTP TTP 2 NUCs 3 0 3 0 not_detected +NUCs:UDP UDP 2 NUCs 3 3 3 3 tested +NUCs:UMP UMP 2 NUCs 3 3 3 3 tested +NUCs:UTP UTP 2 NUCs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:10,17-DiHDoHE 10,17-DiHDoHE 2 PUFAs 3 0 3 0 not_detected +PUFAs:10-HDoHE 10-HDoHE 2 PUFAs 3 3 3 3 tested +PUFAs:11,12-DHET 11,12-DHET 2 PUFAs 3 0 3 0 not_detected +PUFAs:11,12-EET 11,12-EET 2 PUFAs 3 0 3 0 not_detected +PUFAs:11,12-EET-EA 11,12-EET-EA 2 PUFAs 3 0 3 0 not_detected +PUFAs:11-beta-13,14-dihydro-15-keto-PGF2a 11-beta-13,14-dihydro-15-keto-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:11-beta-PGF2a 11-beta-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:11-dehydro-TXB2 11-dehydro-TXB2 2 PUFAs 3 0 3 0 not_detected +PUFAs:11-HDoHE 11-HDoHE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:11-HETE 11-HETE 2 PUFAs 3 3 3 3 tested +PUFAs:11-trans-LTC4 11-trans-LTC4 2 PUFAs 3 0 3 0 not_detected +PUFAs:11-trans-LTE4 11-trans-LTE4 2 PUFAs 3 0 3 0 not_detected +PUFAs:12,13-DiHOME 12,13-DiHOME 2 PUFAs 3 0 3 0 not_detected +PUFAs:12,13-EpOME 12,13-EpOME 2 PUFAs 3 0 3 0 not_detected +PUFAs:12-HEPE 12-HEPE 2 PUFAs 3 3 3 3 tested +PUFAs:12-HETE 12-HETE 2 PUFAs 3 3 3 3 tested +PUFAs:12-HHT 12-HHT 2 PUFAs 3 0 3 0 not_detected +PUFAs:12-HpEPE 12-HpEPE 2 PUFAs 3 0 3 0 not_detected +PUFAs:12-HpETE 12-HpETE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:12-KETE 12-KETE 2 PUFAs 3 3 3 2 tested +PUFAs:12-keto-LTB4 12-keto-LTB4 2 PUFAs 3 0 3 0 not_detected +PUFAs:13,14-dihydro-15-keto PGJ2 13,14-dihydro-15-keto PGJ2 2 PUFAs 3 0 3 0 not_detected +PUFAs:13,14-dihydro-15-keto-PGD2 13,14-dihydro-15-keto-PGD2 2 PUFAs 3 0 3 0 not_detected +PUFAs:13,14-dihydro-15-keto-PGE2 13,14-dihydro-15-keto-PGE2 2 PUFAs 3 0 3 0 not_detected +PUFAs:13,14-dihydro-15-keto-PGF2a 13,14-dihydro-15-keto-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:13,14-dihydro-15-keto-tetranor-PGD2 13,14-dihydro-15-keto-tetranor-PGD2 2 PUFAs 3 0 3 0 not_detected +PUFAs:13,14-dihydro-15-keto-tetranor-PGE2 13,14-dihydro-15-keto-tetranor-PGE2 2 PUFAs 3 0 3 0 not_detected +PUFAs:13,14-dihydro-15-keto-tetranor-PGF1a 13,14-dihydro-15-keto-tetranor-PGF1a 2 PUFAs 3 0 3 0 not_detected +PUFAs:13,14-dihydro-15-keto-tetranor-PGF1b 13,14-dihydro-15-keto-tetranor-PGF1b 2 PUFAs 3 0 3 0 not_detected +PUFAs:13-HDoHE 13-HDoHE 2 PUFAs 3 3 3 2 tested +PUFAs:13-HODE 13-HODE 2 PUFAs 3 3 3 3 tested +PUFAs:13-HOTrE 13-HOTrE 2 PUFAs 3 0 3 0 not_detected +PUFAs:13-HpODE 13-HpODE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:13-KODE 13-KODE 2 PUFAs 3 3 3 3 tested +PUFAs:14,15-DHET 14,15-DHET 2 PUFAs 3 0 3 0 not_detected +PUFAs:14,15-DiHETE 14,15-DiHETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:14,15-EET 14,15-EET 2 PUFAs 3 0 3 0 not_detected +PUFAs:14,15-EET-EA 14,15-EET-EA 2 PUFAs 3 0 3 0 not_detected +PUFAs:14,15-LTC4 14,15-LTC4 2 PUFAs 3 0 3 0 not_detected +PUFAs:14,15-LTE4 14,15-LTE4 2 PUFAs 3 0 3 0 not_detected +PUFAs:14-HDoHE 14-HDoHE 2 PUFAs 3 3 3 3 tested +PUFAs:15-deoxy-delta-12,14-PGJ2 15-deoxy-delta-12,14-PGJ2 2 PUFAs 3 0 3 0 not_detected +PUFAs:15-HEDE 15-HEDE 2 PUFAs 3 0 3 0 not_detected +PUFAs:15-HEPE 15-HEPE 2 PUFAs 3 3 3 3 tested +PUFAs:15-HETE 15-HETE 2 PUFAs 3 3 3 3 tested +PUFAs:15-HETE-d8-not present in the mix 15-HETE-d8-not present in the mix 2 PUFAs 3 0 3 0 not_detected +PUFAs:15-HETrE 15-HETrE 2 PUFAs 3 0 3 0 not_detected +PUFAs:15-HpEPE 15-HpEPE 2 PUFAs 3 0 3 0 not_detected +PUFAs:15-HpETE 15-HpETE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:15-KEDE 15-KEDE 2 PUFAs 3 0 3 3 detected_too_rarely_in_control +PUFAs:15-keto-PGE2 15-keto-PGE2 2 PUFAs 3 0 3 0 not_detected +PUFAs:15-keto-PGF2a 15-keto-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:16-HDoHE 16-HDoHE 2 PUFAs 3 3 3 3 tested +PUFAs:16-HETE 16-HETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:17,18-DiHETE 17,18-DiHETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:17,18-EpETE 17,18-EpETE 2 PUFAs 3 3 3 3 tested +PUFAs:17-HDoHE 17-HDoHE 2 PUFAs 3 0 3 0 not_detected +PUFAs:17-HETE 17-HETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:18-carboxy-dinor-LTB4 18-carboxy-dinor-LTB4 2 PUFAs 3 0 3 0 not_detected +PUFAs:18-HEPE 18-HEPE 2 PUFAs 3 3 3 3 tested +PUFAs:18-HETE 18-HETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:19-HETE 19-HETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:1a1b-dihomo-PGF2a 1a1b-dihomo-PGF2a 2 PUFAs 3 0 3 3 detected_too_rarely_in_control +PUFAs:2,3-dinor-8-iso-PGF2a 2,3-dinor-8-iso-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:20-carboxy-AA 20-carboxy-AA 2 PUFAs 3 0 3 0 not_detected +PUFAs:20-carboxy-LTB4 20-carboxy-LTB4 2 PUFAs 3 0 3 0 not_detected +PUFAs:20-HDoHE 20-HDoHE 2 PUFAs 3 3 3 3 tested +PUFAs:20-HETE 20-HETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:20-hydroxy-LTB4 20-hydroxy-LTB4 2 PUFAs 3 0 3 0 not_detected +PUFAs:20-hydroxy-PGE2 20-hydroxy-PGE2 2 PUFAs 3 0 3 0 not_detected +PUFAs:20-hydroxy-PGF2a 20-hydroxy-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:4-HDoHE 4-HDoHE 2 PUFAs 3 3 3 1 detected_too_rarely_in_treatment +PUFAs:5,15-DiHETE 5,15-DiHETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:5,6-DHET 5,6-DHET 2 PUFAs 3 0 3 0 not_detected +PUFAs:5,6-DHET-lactone 5,6-DHET-lactone 2 PUFAs 3 0 3 0 not_detected +PUFAs:5,6-DiHETE 5,6-DiHETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:5,6-EET 5,6-EET 2 PUFAs 3 0 3 0 not_detected +PUFAs:5,6-EET-EA 5,6-EET-EA 2 PUFAs 3 0 3 0 not_detected +PUFAs:5-HEPE 5-HEPE 2 PUFAs 3 3 3 3 tested +PUFAs:5-HETE 5-HETE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:5-HETE-d8 5-HETE-d8 2 PUFAs 3 0 3 0 not_detected +PUFAs:5-HpEPE 5-HpEPE 2 PUFAs 3 0 3 0 not_detected +PUFAs:5-HpETE 5-HpETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:5-iPF2a-VI 5-iPF2a-VI 2 PUFAs 3 0 3 0 not_detected +PUFAs:5-KETE 5-KETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:5S,14R-LXB4 5S,14R-LXB4 2 PUFAs 3 0 3 0 not_detected +PUFAs:5S,6R-LXA4 5S,6R-LXA4 2 PUFAs 3 0 3 0 not_detected +PUFAs:5S,6S-LXA4 5S,6S-LXA4 2 PUFAs 3 0 3 0 not_detected +PUFAs:6,15-diketo-13,14-dihydro-PGF1a 6,15-diketo-13,14-dihydro-PGF1a 2 PUFAs 3 0 3 0 not_detected +PUFAs:6-keto-PGF1a 6-keto-PGF1a 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:6-trans-LTB4 6-trans-LTB4 2 PUFAs 3 0 3 0 not_detected +PUFAs:7,17-hydroxy-DPA 7,17-hydroxy-DPA 2 PUFAs 3 0 3 0 not_detected +PUFAs:7-HDoHE 7-HDoHE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:8,12-iso-iPF2a-VI-1,5-lactone 8,12-iso-iPF2a-VI-1,5-lactone 2 PUFAs 3 0 3 0 not_detected +PUFAs:8,15-DiHETE 8,15-DiHETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:8,9-DHET 8,9-DHET 2 PUFAs 3 0 3 0 not_detected +PUFAs:8,9-EET 8,9-EET 2 PUFAs 3 0 3 0 not_detected +PUFAs:8,9-EET-EA 8,9-EET-EA 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-HDoHE 8-HDoHE 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-HETE 8-HETE 2 PUFAs 3 3 3 3 tested +PUFAs:8-iso-13,14-dihydro-15-keto-PGF2a 8-iso-13,14-dihydro-15-keto-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-iso-15(R)-PGF2a 8-iso-15(R)-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-iso-15-keto-PGF2a 8-iso-15-keto-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-iso-PGA1 8-iso-PGA1 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-iso-PGA2 8-iso-PGA2 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-iso-PGE1 8-iso-PGE1 2 PUFAs 3 0 3 1 detected_too_rarely_in_both_arms +PUFAs:8-iso-PGE2 8-iso-PGE2 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-iso-PGF1a 8-iso-PGF1a 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-iso-PGF2a 8-iso-PGF2a 2 PUFAs 3 0 3 0 not_detected +PUFAs:8-iso-PGF3a 8-iso-PGF3a 2 PUFAs 3 0 3 0 not_detected +PUFAs:9,10-DiHOME 9,10-DiHOME 2 PUFAs 3 0 3 0 not_detected +PUFAs:9,10-EpOME 9,10-EpOME 2 PUFAs 3 0 3 0 not_detected +PUFAs:9-HETE 9-HETE 2 PUFAs 3 0 3 0 not_detected +PUFAs:9-HODE 9-HODE 2 PUFAs 3 3 3 3 tested +PUFAs:9-HOTrE 9-HOTrE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:9-HpODE 9-HpODE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:9-KODE 9-KODE 2 PUFAs 3 3 3 2 tested +PUFAs:AA AA 2 PUFAs 3 3 3 3 tested +PUFAs:AA-d8 AA-d8 2 PUFAs 3 0 3 0 not_detected +PUFAs:15-KETE 15-KETE 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:PGH2 PGH2 2 PUFAs 3 3 3 3 tested +PUFAs:Adrenic Acid Adrenic Acid 2 PUFAs 3 0 3 0 not_detected +PUFAs:AEA AEA 2 PUFAs 3 3 3 3 tested +PUFAs:Azelaoyl-PAF Azelaoyl-PAF 2 PUFAs 3 0 3 2 detected_too_rarely_in_control +PUFAs:PGI2 PGI2 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:DHA-d5 DHA-d5 2 PUFAs 3 0 3 0 not_detected +PUFAs:Dihomo-gamma-Linoleic Acid Dihomo-gamma-Linoleic Acid 2 PUFAs 3 0 3 0 not_detected +PUFAs:DHA DHA 2 PUFAs 3 3 3 3 tested +PUFAs:Docosapentaenoic Acid Docosapentaenoic Acid 2 PUFAs 3 0 3 0 not_detected +PUFAs:Eicosapentaenoic Acid Eicosapentaenoic Acid 2 PUFAs 3 3 3 3 tested +PUFAs:EPA-d5 EPA-d5 2 PUFAs 3 0 3 0 not_detected +PUFAs:iPF2a-IV iPF2a-IV 2 PUFAs 3 0 3 0 not_detected +PUFAs:Linoleic Acid Linoleic Acid 2 PUFAs 3 0 3 0 not_detected +PUFAs:Linolenic Acid Linolenic Acid 2 PUFAs 3 0 3 0 not_detected +PUFAs:LTB4 LTB4 2 PUFAs 3 0 3 0 not_detected +PUFAs:LTB4-EA LTB4-EA 2 PUFAs 3 0 3 0 not_detected +PUFAs:LTC4 LTC4 2 PUFAs 3 0 3 0 not_detected +PUFAs:LTC4-d5 LTC4-d5 2 PUFAs 3 0 3 0 not_detected +PUFAs:LTD4 LTD4 2 PUFAs 3 0 3 0 not_detected +PUFAs:LTE4 LTE4 2 PUFAs 3 0 3 3 detected_too_rarely_in_control +PUFAs:LTF4 LTF4 2 PUFAs 3 0 3 0 not_detected +PUFAs:LXA5 LXA5 2 PUFAs 3 0 3 0 not_detected +PUFAs:Lyso-PAF Lyso-PAF 2 PUFAs 3 3 3 3 tested +PUFAs:Maresin1 Maresin1 2 PUFAs 3 0 3 0 not_detected +PUFAs:N-acetyl-LTE4 N-acetyl-LTE4 2 PUFAs 3 0 3 0 not_detected +PUFAs:OEA OEA 2 PUFAs 3 3 3 2 tested +PUFAs:PAF PAF 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGA1 PGA1 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGA2 PGA2 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGB2 PGB2 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGD1 PGD1 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGD2 PGD2 2 PUFAs 3 3 3 3 tested +PUFAs:PGD2-EA PGD2-EA 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGD3 PGD3 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGE1 PGE1 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGE1-EA PGE1-EA 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGE2 PGE2 2 PUFAs 3 3 3 3 tested +PUFAs:PGE2-d4 PGE2-d4 2 PUFAs 3 3 3 3 tested +PUFAs:PGE2-EA PGE2-EA 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGE3 PGE3 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGF2a PGF2a 2 PUFAs 3 3 3 3 tested +PUFAs:PGF2a-d4 PGF2a-d4 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGF2a-EA PGF2a-EA 2 PUFAs 3 3 3 0 detected_too_rarely_in_treatment +PUFAs:PGF3a PGF3a 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGJ2 PGJ2 2 PUFAs 3 0 3 0 not_detected +PUFAs:PGK2 PGK2 2 PUFAs 3 0 3 0 not_detected +PUFAs:Resolvin D1 Resolvin D1 2 PUFAs 3 0 3 0 not_detected +PUFAs:Resolvin D2 Resolvin D2 2 PUFAs 3 0 3 0 not_detected +PUFAs:Stearidonic Acid Stearidonic Acid 2 PUFAs 3 3 3 3 tested +PUFAs:tetranor-PGDM tetranor-PGDM 2 PUFAs 3 0 3 0 not_detected +PUFAs:tetranor-PGEM tetranor-PGEM 2 PUFAs 3 0 3 0 not_detected +PUFAs:tetranor-PGEM-d6 tetranor-PGEM-d6 2 PUFAs 3 0 3 0 not_detected +PUFAs:tetranor-PGFM tetranor-PGFM 2 PUFAs 3 0 3 0 not_detected +PUFAs:TXB1 TXB1 2 PUFAs 3 0 3 0 not_detected +PUFAs:TXB2 TXB2 2 PUFAs 3 0 3 0 not_detected +PUFAs:TXB3 TXB3 2 PUFAs 3 0 3 0 not_detected +TCA:Alpha-ketoglutaric acid Alpha-ketoglutaric acid 2 TCA 3 3 3 3 tested +TCA:Aspartic acid Aspartic acid 2 TCA 3 3 3 3 tested +TCA:Citric acid Citric acid 2 TCA 3 3 3 3 tested +TCA:Fumaric acid Fumaric acid 2 TCA 3 3 3 3 tested +TCA:Glutamic acid Glutamic acid 2 TCA 3 3 3 3 tested +TCA:L-proline L-proline 2 TCA 3 3 3 3 tested +TCA:L-serine 1 L-serine 1 2 TCA 3 3 3 3 tested +TCA:Malic acid Malic acid 2 TCA 3 3 3 3 tested +TCA:Succinic acid Succinic acid 2 TCA 3 3 3 3 tested +TCA:Threonine Threonine 2 TCA 3 3 3 3 tested +TCA:Valine Valine 2 TCA 3 3 3 3 tested diff --git a/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_workflow_manifest.json b/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_workflow_manifest.json new file mode 100644 index 0000000..96ff6fa --- /dev/null +++ b/data/studies/DUPERRET2025_POMS_STARVE/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_workflow_manifest.json @@ -0,0 +1,214 @@ +{ + "comparison_id": "starved_vs_fed_0hpc", + "container_engine": null, + "date_generated": "2026-10-16T14:30:03.531649+00:00", + "generated_by": "automated:aree-metabolomics@0.1.0-scaffold", + "input_checksums_sha256": { + "DUPERRET2025_POMS_STARVE_features.tsv": "50d484845bb175015205ff70cb5c488a628ee15efa249a2c3f6d6351f2dd2850", + "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_metabolite_features_standardized.tsv": "e8c9bdf4f74f34923f6fedefb476e628986a7f33784e5a4a177c937ed2d7af9b", + "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_samplesheet.tsv": "54c3d1973e47f1915ada7a64874eb83d98dc8aca944f89f102f246596736c52c" + }, + "mode": "raw_reanalysis", + "parameters": { + "metabolomics": { + "acquisition": "targeted", + "comparison_id": "starved_vs_fed_0hpc", + "detection_limit": "0.001", + "metabolite_annotation_map": null, + "metabolite_class_map": null, + "min_detected_per_arm": 2, + "normalization": "internal_standard", + "processed_results": null, + "qc_cv_threshold": 0.3, + "raw_feature_table": "/private/tmp/claude-501/-Users-sr320-Documents-GitHub-AREE/da27bc79-7896-49a5-a57e-211d9b51e10b/scratchpad/duperret_staging/DUPERRET2025_POMS_STARVE_features.tsv", + "replicate_unit": "tank", + "sample_sheet": "/private/tmp/claude-501/-Users-sr320-Documents-GitHub-AREE/da27bc79-7896-49a5-a57e-211d9b51e10b/scratchpad/duperret_staging/DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_samplesheet.tsv", + "study_id": "DUPERRET2025_POMS_STARVE" + }, + "mode": "raw_reanalysis" + }, + "provenance_level": "infra-level (see docs/design.md section 4); per-row evidence-level provenance is stamped separately by src/harmonize/metabolomics.py", + "qc_metrics": { + "n_annotation_confidence_level_1_or_2": 122, + "n_features": 122, + "pct_annotation_confidence_level_1_or_2": 100.0, + "upstream_step_qc": { + "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_annotation_qc.json": { + "comparison_id": "starved_vs_fed_0hpc", + "level_counts": { + "2": 320 + }, + "n_confidence_from_annotation_map": 0, + "n_confidence_from_input_table": 320, + "n_defaulted_to_unknown_level_4": 0, + "n_features": 320, + "study_id": "DUPERRET2025_POMS_STARVE" + }, + "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_diffabundance_qc.json": { + "analysis_method": "targeted_MS_limma_moderated_t", + "comparison_id": "starved_vs_fed_0hpc", + "limma_df_prior": 2.2742, + "min_detected_per_arm": 2, + "n_features_in": 310, + "n_features_not_tested": { + "detected_too_rarely_in_both_arms": 2, + "detected_too_rarely_in_control": 14, + "detected_too_rarely_in_treatment": 23, + "not_detected": 149 + }, + "n_features_tested": 122, + "n_padj_below_0.05": 68, + "n_replicates_control": 3, + "n_replicates_treatment": 3, + "replicate_unit": "tank", + "study_id": "DUPERRET2025_POMS_STARVE" + }, + "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_intake_qc.json": { + "comparison_id": "starved_vs_fed_0hpc", + "n_features_in": 320, + "n_features_out": 320, + "n_intensity_values_coerced_to_nan": 0, + "n_qc_pool_samples": 0, + "n_samples": 12, + "study_id": "DUPERRET2025_POMS_STARVE", + "warnings": [] + }, + "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_normalization_qc.json": { + "comparison_id": "starved_vs_fed_0hpc", + "detection_limit": 0.001, + "internal_standards": [ + "GM:2-Morpholinoethansulfonic Acid", + "NUCs:MES", + "PUFAs:12-HETE-d8", + "PUFAs:6-keto-PGF1a-d4", + "PUFAs:LTB4 d4", + "PUFAs:OEA-d4", + "PUFAs:PAF-d4", + "PUFAs:PGD2-d4", + "PUFAs:TXB2-d4", + "TCA:d27-Myristic acid" + ], + "n_features": 310, + "n_internal_standards_excluded": 10, + "n_samples_normalized": 12, + "n_values_below_detection": 2124, + "normalization_method": "log2_then_internal_standard_per_platform", + "qc_pool_metric": { + "cv_threshold": 0.3, + "n_features_passing_cv_threshold": "not_applicable", + "n_qc_pool_samples": 0, + "note": "fewer than 2 QC pooled samples available; pooled-sample CV QC not computed", + "pct_features_passing_cv_threshold": "not_applicable" + }, + "sample_scaling": { + "GM": { + "F11N-3-0-1": 0.890623, + "F11N-3-0-2": 0.923147, + "F11N-3-0-3": 0.788103, + "F11N-5-0-1": -1.130991, + "F11N-5-0-2": -0.600499, + "F11N-5-0-3": -0.56437, + "F14R-3-0-1": 1.135785, + "F14R-3-0-2": 0.738342, + "F14R-3-0-3": 0.739291, + "F14R-5-0-1": -0.458354, + "F14R-5-0-2": -1.712521, + "F14R-5-0-3": -0.748556 + }, + "NUCs": { + "F11N-3-0-1": -0.591641, + "F11N-3-0-2": -0.520478, + "F11N-3-0-3": -0.607879, + "F11N-5-0-1": 0.041641, + "F11N-5-0-2": 0.443017, + "F11N-5-0-3": 0.787359, + "F14R-3-0-1": -0.404634, + "F14R-3-0-2": -0.278673, + "F14R-3-0-3": -0.059998, + "F14R-5-0-1": 0.722384, + "F14R-5-0-2": -0.036222, + "F14R-5-0-3": 0.505124 + }, + "PUFAs": { + "F11N-3-0-1": 0.102382, + "F11N-3-0-2": 0.179724, + "F11N-3-0-3": 0.21972, + "F11N-5-0-1": -0.100647, + "F11N-5-0-2": -0.285857, + "F11N-5-0-3": -0.045098, + "F14R-3-0-1": 0.214262, + "F14R-3-0-2": 0.296287, + "F14R-3-0-3": 0.353261, + "F14R-5-0-1": -0.391221, + "F14R-5-0-2": -0.314716, + "F14R-5-0-3": -0.228097 + }, + "TCA": { + "F11N-3-0-1": 1.382674, + "F11N-3-0-2": 1.071901, + "F11N-3-0-3": 1.065395, + "F11N-5-0-1": -0.73956, + "F11N-5-0-2": -1.328085, + "F11N-5-0-3": -1.076107, + "F14R-3-0-1": 1.211194, + "F14R-3-0-2": 0.347044, + "F14R-3-0-3": 0.826102, + "F14R-5-0-1": -0.183821, + "F14R-5-0-2": -1.186918, + "F14R-5-0-3": -1.389821 + } + }, + "study_id": "DUPERRET2025_POMS_STARVE" + }, + "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_pathway_mapping_qc.json": { + "comparison_id": "starved_vs_fed_0hpc", + "metabolite_class_counts": { + "unknown": 122 + }, + "metabolite_class_map_used": null, + "n_features": 122, + "n_matched_via_map": 0, + "n_unmatched_defaulted_to_unknown": 122, + "study_id": "DUPERRET2025_POMS_STARVE" + } + } + }, + "software_versions": { + "ANNOTATION_CONFIDENCE": { + "pandas": "2.3.3", + "python": "3.9.6" + }, + "DIFFERENTIAL_ABUNDANCE": { + "bioconductor-limma": "3.58.1", + "r-base": "4.3.2", + "r-jsonlite": "1.8.9" + }, + "EMIT_MANIFEST": { + "python": "3.9.6" + }, + "FEATURE_TABLE_INTAKE": { + "pandas": "2.3.3", + "python": "3.9.6" + }, + "NORMALIZE_QC": { + "numpy": "2.0.2", + "pandas": "2.3.3", + "python": "3.9.6" + }, + "PATHWAY_MAPPING": { + "pandas": "2.3.3", + "python": "3.9.6" + }, + "STANDARDIZE_OUTPUT": { + "pandas": "2.3.3", + "python": "3.9.6" + } + }, + "software_versions_not_captured": { + "RENDER_REPORT": "renders this manifest, so it runs afterwards" + }, + "study_id": "DUPERRET2025_POMS_STARVE", + "warnings": [], + "workflow_name": "aree-metabolomics", + "workflow_version": "0.1.0-scaffold" +} \ No newline at end of file diff --git a/data/studies/DUPERRET2025_POMS_STARVE/build_feature_table.py b/data/studies/DUPERRET2025_POMS_STARVE/build_feature_table.py new file mode 100644 index 0000000..de0f9c6 --- /dev/null +++ b/data/studies/DUPERRET2025_POMS_STARVE/build_feature_table.py @@ -0,0 +1,200 @@ +"""Build the metabolomics workflow inputs for DUPERRET2025_POMS_STARVE from Table S12. + +MetaboLights MTBLS13313 has no abundance values (its MAFs are empty), but the +paper's Table S12 (mmc13.xlsx, "Raw metabolomic data") holds per-sample peak +areas for all four targeted platforms. The paper is CC BY-NC-ND 4.0, so the +table is NOT committed: this script fetches the supplement from Europe PMC, +checks its SHA-256, and writes the workflow inputs to a staging directory. +What is committed is this script and the provenance JSON it writes. + + python -I data/studies/DUPERRET2025_POMS_STARVE/build_feature_table.py --download STAGING_DIR + +writes, in STAGING_DIR: + + mmc13.xlsx the supplement, checksum-verified + DUPERRET2025_POMS_STARVE_features.tsv feature x sample peak areas, 48 samples + DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_samplesheet.tsv + the 12 samples of the 0 hpc contrast + +and data/studies/DUPERRET2025_POMS_STARVE/table_s12_provenance.json. + +The reshaping is mechanical. Values are copied unchanged, including the 0.0001 +and 0 below-detection placeholders (blank cells stay missing): the workflow's --metabolomics.detection_limit +turns them into missing values. Internal standards are the rows the authors +filled green ("In green are the internal standard"); the fill and a list of +the expected names must agree, or the script stops. +""" +from __future__ import annotations + +import argparse +import hashlib +import io +import json +import sys +import urllib.request +import zipfile +from datetime import date +from pathlib import Path + +import openpyxl +import pandas as pd + +STUDY_ID = "DUPERRET2025_POMS_STARVE" +COMPARISON_ID = "starved_vs_fed_0hpc" +HERE = Path(__file__).resolve().parent + +SUPPLEMENT_URL = "https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12803857/supplementaryFiles" +MEMBER = "mmc13.xlsx" +SHA256 = "451eb13e2da9db56ac984ee432632af2ced6ef9fc483183c62ba38c7c7f9c61d" + +# Block header in Table S12 -> platform code used in the registry and sample sheet. +PLATFORMS = { + "General Metabolites": "GM", + "Nucleotides": "NUCs", + "PUFAs": "PUFAs", + "Krebs cycle": "TCA", +} +# The ten green rows, per the Methods (MES and the PUFA ISTD mix in the +# extraction solvent; d27-myristic acid for GC-MS). +INTERNAL_STANDARDS = { + ("GM", "2-Morpholinoethansulfonic Acid"), + ("NUCs", "MES"), + ("PUFAs", "12-HETE-d8"), ("PUFAs", "6-keto-PGF1a-d4"), ("PUFAs", "LTB4 d4"), + ("PUFAs", "OEA-d4"), ("PUFAs", "PAF-d4"), ("PUFAs", "PGD2-d4"), ("PUFAs", "TXB2-d4"), + ("TCA", "d27-Myristic acid"), +} +# Named by the targeted dMRM / GC-MS method; the deposit confirms no identity +# against an authentic standard and gives no database identifier, so MSI +# level 2 (putatively annotated) rather than 1. +ANNOTATION_LEVEL = 2 + + +def _sha256(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def download(staging: Path) -> Path: + with urllib.request.urlopen(SUPPLEMENT_URL, timeout=120) as resp: + archive = zipfile.ZipFile(io.BytesIO(resp.read())) + out = staging / MEMBER + out.write_bytes(archive.read(MEMBER)) + return out + + +def _is_green(cell) -> bool: + fill = cell.fill + return fill.fill_type == "solid" and fill.fgColor.type == "theme" + + +def parse_table_s12(path: Path) -> pd.DataFrame: + ws = openpyxl.load_workbook(path).worksheets[0] + rows, platform, samples = [], None, None + for row in ws.iter_rows(): + name = row[0].value + values = [c.value for c in row[1:]] + if name in PLATFORMS: + platform = PLATFORMS[name] + samples = [v for v in values if v] + continue + if platform is None or name is None or values[0] == "Area": + continue + areas = values[: len(samples)] + # A blank cell is missing (TXB3 has three, in 12 hpc samples), never 0. + if not all(v is None or isinstance(v, (int, float)) for v in areas): + raise SystemExit(f"{platform} {name!r}: non-numeric peak area") + areas = [float("nan") if v is None else v for v in areas] + rows.append({ + "feature_id": f"{platform}:{name}", + "putative_metabolite_name": str(name).strip(), + "annotation_confidence_level": ANNOTATION_LEVEL, + "platform": platform, + "is_internal_standard": _is_green(row[0]), + **dict(zip(samples, areas)), + }) + df = pd.DataFrame(rows) + flagged = {(r.platform, r.putative_metabolite_name) for r in df.itertuples() if r.is_internal_standard} + if flagged != INTERNAL_STANDARDS: + raise SystemExit(f"green rows {sorted(flagged)} differ from the expected internal standards") + if df["feature_id"].duplicated().any(): + raise SystemExit(f"duplicate features: {df.loc[df.feature_id.duplicated(), 'feature_id'].tolist()}") + return df + + +def comparison_sheet() -> pd.DataFrame: + """The 12 samples of starved_vs_fed_0hpc, with the tank as replicate unit. + + Replicate n is the tank (inferred, as for DUPERRET2025_STARVE_RNASEQ): each + diet had three tanks holding both families. + """ + sheet = pd.read_csv(HERE / "samplesheet.tsv", sep="\t", dtype=str) + sheet = sheet[sheet["timepoint_hpc"] == "0"].copy() + sheet["source_condition"] = sheet["condition"] + sheet["condition"] = sheet["condition"].map({"fed": "control", "starved": "treatment"}) + sheet["tank"] = sheet["source_condition"] + "_t" + sheet["replicate"] + return sheet[["sample_id", "condition", "source_condition", "family", "tank"]] + + +def main(argv=None) -> int: + ap = argparse.ArgumentParser(description=__doc__.split("\n\n")[0]) + ap.add_argument("staging", type=Path, help="directory for the supplement and workflow inputs") + ap.add_argument("--download", action="store_true", help=f"fetch {MEMBER} from Europe PMC first") + args = ap.parse_args(argv) + args.staging.mkdir(parents=True, exist_ok=True) + + source = download(args.staging) if args.download else args.staging / MEMBER + if _sha256(source) != SHA256: + raise SystemExit(f"{source}: SHA-256 {_sha256(source)} != expected {SHA256}") + + features = parse_table_s12(source) + sheet = comparison_sheet() + registered = pd.read_csv(HERE / "samplesheet.tsv", sep="\t", dtype=str)["sample_id"] + sample_cols = [c for c in features.columns if c in set(registered)] + if sorted(sample_cols) != sorted(registered): + raise SystemExit("Table S12 sample columns do not match samplesheet.tsv") + + feat_path = args.staging / f"{STUDY_ID}_features.tsv" + sheet_path = args.staging / f"{STUDY_ID}_{COMPARISON_ID}_samplesheet.tsv" + features.to_csv(feat_path, sep="\t", index=False) + sheet.to_csv(sheet_path, sep="\t", index=False) + + metabolites = features[~features["is_internal_standard"]] + areas = metabolites[sample_cols] + provenance = { + "study_id": STUDY_ID, + "date_generated": date.today().isoformat(), + "converter": "data/studies/DUPERRET2025_POMS_STARVE/build_feature_table.py", + "source": { + "description": "Table S12. Raw metabolomic data: General Metabolites, Nucleotides, " + "PUFAs and Krebs cycle (peak areas)", + "file": MEMBER, + "url": SUPPLEMENT_URL, + "article": "https://doi.org/10.1016/j.isci.2025.114333 (PMC12803857)", + "license": "CC BY-NC-ND 4.0: not redistributed; fetched and checksum-verified by this script", + "sha256": SHA256, + }, + "outputs_sha256": {feat_path.name: _sha256(feat_path), sheet_path.name: _sha256(sheet_path)}, + "n_samples": len(sample_cols), + "n_features": int(len(features)), + "n_internal_standards": int(features["is_internal_standard"].sum()), + "internal_standards": sorted(features.loc[features.is_internal_standard, "feature_id"]), + "n_metabolites_by_platform": metabolites.groupby("platform").size().to_dict(), + "n_metabolite_values_at_or_below_0.001": int((areas <= 0.001).sum().sum()), + "n_metabolite_values": int(areas.size), + "blank_cells": {fid: [c for c in sample_cols if pd.isna(row[c])] + for fid, row in metabolites.set_index("feature_id").iterrows() + if row[sample_cols].isna().any()}, + "annotation_confidence_level": ANNOTATION_LEVEL, + "comparison": { + "comparison_id": COMPARISON_ID, + "samples": sheet["sample_id"].tolist(), + "replicate_unit": "tank (= _t; inferred, as in DUPERRET2025_STARVE_RNASEQ)", + }, + } + (HERE / "table_s12_provenance.json").write_text(json.dumps(provenance, indent=2) + "\n") + print(f"{len(features)} features ({provenance['n_internal_standards']} internal standards) x " + f"{len(sample_cols)} samples -> {feat_path}; {len(sheet)} samples -> {sheet_path}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/data/studies/DUPERRET2025_POMS_STARVE/normalization_sensitivity.tsv b/data/studies/DUPERRET2025_POMS_STARVE/normalization_sensitivity.tsv new file mode 100644 index 0000000..cf70fbd --- /dev/null +++ b/data/studies/DUPERRET2025_POMS_STARVE/normalization_sensitivity.tsv @@ -0,0 +1,123 @@ +feature_id platform putative_metabolite_name log2FC_internal_standard padj_internal_standard log2FC_median padj_median same_direction significant_under_both +GM:2-Aminobutyric acid GM 2-Aminobutyric acid -0.1695 0.6656 -1.2974 0.002359 True False +GM:3-Hydroxy-D_L-Kynurenine GM 3-Hydroxy-D_L-Kynurenine 0.8087 0.3178 -0.6937 0.05426 False False +GM:4-Aminobutyric acid GM 4-Aminobutyric acid 3.2121 0.0002672 2.0842 0.00159 True True +GM:4-Hydroxyproline GM 4-Hydroxyproline -0.2872 0.4767 -1.4151 0.003795 True False +GM:Acetylcarnitine GM Acetylcarnitine 1.5724 0.007338 0.4445 0.2125 True False +GM:Acetylcholine GM Acetylcholine 1.142 0.03282 0.014 0.9581 True False +GM:Adenine GM Adenine 2.9409 0.003061 1.5263 0.0006788 True True +GM:Adenosine GM Adenosine 3.9301 0.0006878 2.8022 5.911e-05 True True +GM:Adenosine 3',5'-cyclic monophosphate GM Adenosine 3',5'-cyclic monophosphate 2.2532 0.001305 1.1253 0.002838 True True +GM:Adenosine monophosphate GM Adenosine monophosphate 1.0761 0.1939 -0.0518 0.9053 False False +GM:Adenylsuccinic acid GM Adenylsuccinic acid 3.2524 0.002356 2.1245 0.0009323 True True +GM:Alanine GM Alanine -0.5879 0.2037 -1.7159 0.0004136 True False +GM:Anthranilic Acid GM Anthranilic Acid 0.2752 0.7355 -1.1578 0.002503 False False +GM:Arginine GM Arginine -0.3433 0.4577 -1.4713 0.0006788 True False +GM:Argininosuccinic acid GM Argininosuccinic acid -0.0057 0.9867 -1.1336 0.02855 True False +GM:Asparagine GM Asparagine -1.0305 0.03612 -2.1584 0.0002201 True True +GM:Aspartic acid GM Aspartic acid 0.7605 0.04802 -0.3674 0.3233 False False +GM:Asymmetric dimethylarginine GM Asymmetric dimethylarginine 0.7212 0.236 -0.4068 0.1687 False False +GM:Carnitine GM Carnitine 1.2417 0.01346 0.1137 0.7184 True False +GM:Choline GM Choline 0.7579 0.1405 -0.37 0.1829 False False +GM:Citicoline GM Citicoline 0.0101 0.9867 -1.1178 0.001663 False False +GM:Citric Acid GM Citric Acid 1.3876 0.05346 0.2597 0.6697 True False +GM:Creatine GM Creatine 1.979 0.0292 0.7022 0.2686 True False +GM:Creatinine GM Creatinine 2.6473 0.02328 1.5193 0.04486 True True +GM:Cystathionine GM Cystathionine -1.1807 0.01351 -2.3086 0.003081 True True +GM:Cysteine GM Cysteine 1.1841 0.04625 0.0561 0.8308 True False +GM:Cystine GM Cystine -0.693 0.1881 -1.821 0.0001832 True False +GM:Cytidine GM Cytidine 1.3368 0.01573 0.2088 0.4348 True False +GM:Cytidine monophosphate GM Cytidine monophosphate -0.175 0.5743 -1.303 0.007266 True False +GM:Dopamine GM Dopamine -0.2097 0.5743 -1.3377 0.006122 True False +GM:Fumaric Acid GM Fumaric Acid -2.8054 0.0005171 -3.6466 0.0002068 True True +GM:Glutamic acid GM Glutamic acid -3.4858 5.148e-05 -4.6138 5.47e-06 True True +GM:Glutamine GM Glutamine -1.9414 0.003983 -3.0693 1.224e-05 True True +GM:Glutathione oxidazed GM Glutathione oxidazed 0.0384 0.9523 -1.0896 0.006015 False False +GM:Glutathione reduced GM Glutathione reduced 0.2793 0.4915 -0.8486 0.01586 False False +GM:Glycine GM Glycine -0.0161 0.9735 -1.144 0.006065 True False +GM:Guanosine GM Guanosine 2.565 0.01529 1.4371 0.006752 True True +GM:Guanosine monophosphate GM Guanosine monophosphate 2.2082 0.02031 1.0803 0.01475 True True +GM:Histamine GM Histamine 3.882 0.001027 2.7541 0.0007512 True True +GM:Histidine GM Histidine -1.7576 0.006077 -2.8856 5.461e-05 True True +GM:Hypoxanthine GM Hypoxanthine 1.7184 0.02251 0.5905 0.05026 True False +GM:Inosine GM Inosine 2.2857 0.02026 1.1577 0.0185 True True +GM:Isoleucine GM Isoleucine 1.0966 0.08408 -0.0314 0.9175 False False +GM:Kynurenine GM Kynurenine 1.0382 0.1749 -0.0898 0.8296 False False +GM:Lactic Acid GM Lactic Acid 0.9457 0.1205 -0.1822 0.5482 False False +GM:Leucine GM Leucine 0.7821 0.179 -0.3458 0.2125 False False +GM:Lysine GM Lysine 0.3222 0.4779 -0.8057 0.009134 False False +GM:Malic Acid GM Malic Acid -0.1755 0.7257 -1.3034 0.06958 True False +GM:Methionine sulfoxide GM Methionine sulfoxide -5.2431 4.681e-05 -6.371 3.484e-07 True True +GM:NAD GM NAD 1.8088 0.004371 0.6808 0.03828 True True +GM:Niacinamide GM Niacinamide 2.376 0.0007752 1.2481 0.002854 True True +GM:Nicotinic acid GM Nicotinic acid 1.3824 0.01487 0.2544 0.4505 True False +GM:Ophthalmic acid GM Ophthalmic acid 0.6798 0.2046 -0.4481 0.1207 False False +GM:Ornitine GM Ornitine -0.7257 0.08408 -1.8537 0.0006788 True False +GM:Pantothenic acid GM Pantothenic acid 1.3579 0.05939 0.23 0.4348 True False +GM:Phenylalanine GM Phenylalanine 0.0878 0.9062 -1.0401 0.008355 False False +GM:Proline GM Proline 0.9764 0.04725 -0.1515 0.7058 False False +GM:S-Adenosylhomocysteine GM S-Adenosylhomocysteine 2.8535 0.008497 1.7256 0.001204 True True +GM:Serine GM Serine -0.4318 0.2624 -1.5597 0.002533 True False +GM:Serotonin GM Serotonin 0.1186 0.7428 -1.0093 0.01079 False False +GM:Succinic acid GM Succinic acid 1.0978 0.2774 -0.0302 0.9581 False False +GM:Symmetric dimethylarginine GM Symmetric dimethylarginine 0.6611 0.2794 -0.4669 0.1186 False False +GM:Taurine GM Taurine 0.8794 0.02777 -0.2485 0.4618 False False +GM:Threonine GM Threonine 0.3334 0.4172 -0.7946 0.03049 False False +GM:Thymidine GM Thymidine 2.6593 0.01892 1.2446 0.03156 True True +GM:Tryptophan GM Tryptophan -0.7199 0.2953 -1.8479 0.0005286 True False +GM:Tyrosine GM Tyrosine 1.1329 0.06704 0.005 0.9826 True False +GM:Uracil GM Uracil 0.478 0.436 -0.6499 0.1337 False False +GM:Uric acid GM Uric acid 1.9034 0.002356 0.7754 0.02834 True True +GM:Uridine GM Uridine 1.7107 0.01529 0.5827 0.05738 True False +GM:Valine GM Valine 0.4576 0.3891 -0.6704 0.02963 False False +NUCs:ADP NUCs ADP -0.1444 0.6357 0.7103 0.02827 False False +NUCs:AMP NUCs AMP -0.2351 0.6213 0.6196 0.05128 False False +NUCs:ATP NUCs ATP -0.2339 0.6519 0.6208 0.3249 False False +NUCs:GDP NUCs GDP 2.5207 0.1533 3.3754 0.03602 True False +NUCs:GMP NUCs GMP 3.2063 0.002182 4.061 8.838e-05 True True +NUCs:GTP NUCs GTP -0.8407 0.02251 -0.1504 0.7518 True False +NUCs:TMP NUCs TMP -1.5941 0.02026 -0.7394 0.04483 True True +NUCs:UDP NUCs UDP -1.0092 0.01178 -0.1545 0.5995 True False +NUCs:UMP NUCs UMP -1.2041 0.09407 -0.3494 0.3692 True False +PUFAs:10-HDoHE PUFAs 10-HDoHE 5.0126 1.335e-05 -2.2131 0.0002535 False True +PUFAs:11-HETE PUFAs 11-HETE 6.1416 6.129e-06 -1.0842 0.009791 False True +PUFAs:12-HEPE PUFAs 12-HEPE 6.6529 5.485e-06 -0.5729 0.05474 False False +PUFAs:12-HETE PUFAs 12-HETE 6.179 6.129e-06 -1.0467 0.009262 False True +PUFAs:12-KETE PUFAs 12-KETE 6.2555 0.00043 -1.2775 0.03875 False True +PUFAs:13-HDoHE PUFAs 13-HDoHE 5.2333 0.0005135 -2.2078 0.001964 False True +PUFAs:13-HODE PUFAs 13-HODE 7.1661 1.182e-05 -0.0596 0.903 False False +PUFAs:13-KODE PUFAs 13-KODE 3.3531 0.2224 -1.1133 0.01495 False False +PUFAs:14-HDoHE PUFAs 14-HDoHE 5.2134 2.572e-05 -2.0123 0.0005286 False True +PUFAs:15-HEPE PUFAs 15-HEPE 4.3843 2.944e-05 -2.8414 0.0002372 False True +PUFAs:15-HETE PUFAs 15-HETE 5.8035 5.485e-06 -1.4222 0.0009077 False True +PUFAs:16-HDoHE PUFAs 16-HDoHE 4.4774 1.102e-05 -2.7483 5.461e-05 False True +PUFAs:17,18-EpETE PUFAs 17,18-EpETE -2.0962 0.0009696 -0.9524 0.005005 True True +PUFAs:18-HEPE PUFAs 18-HEPE 5.1134 2.944e-05 -2.1124 0.001964 False True +PUFAs:20-HDoHE PUFAs 20-HDoHE 5.2505 1.182e-05 -1.9139 0.001406 False True +PUFAs:5-HEPE PUFAs 5-HEPE 5.7917 2.944e-05 -1.4935 0.004321 False True +PUFAs:8-HETE PUFAs 8-HETE 6.2888 5.485e-06 -0.9369 0.008941 False True +PUFAs:9-HODE PUFAs 9-HODE 6.8299 5.554e-06 -0.3958 0.1829 False False +PUFAs:9-KODE PUFAs 9-KODE 3.3255 0.3456 -1.0463 0.02548 False False +PUFAs:AA PUFAs AA 10.7169 2.842e-07 3.4912 5.208e-06 True True +PUFAs:AEA PUFAs AEA 0.3672 0.702 1.4498 0.1475 True False +PUFAs:DHA PUFAs DHA 10.2676 2.842e-07 3.0419 1.224e-05 True True +PUFAs:Eicosapentaenoic Acid PUFAs Eicosapentaenoic Acid 9.8009 2.842e-07 2.5751 5.911e-05 True True +PUFAs:Lyso-PAF PUFAs Lyso-PAF 8.2218 5.485e-06 0.9961 0.03429 True True +PUFAs:OEA PUFAs OEA 3.8852 0.003061 4.7218 0.0005286 True True +PUFAs:PGD2 PUFAs PGD2 7.8159 2.335e-05 0.5902 0.2873 True False +PUFAs:PGE2 PUFAs PGE2 5.4335 0.1556 1.065 0.1829 True False +PUFAs:PGE2-d4 PUFAs PGE2-d4 3.0832 3.506e-05 -4.1425 4.684e-06 False True +PUFAs:PGF2a PUFAs PGF2a 2.5656 0.4172 0.9564 0.1006 True False +PUFAs:PGH2 PUFAs PGH2 5.3268 0.1701 0.9583 0.2561 True False +PUFAs:Stearidonic Acid PUFAs Stearidonic Acid 2.4785 0.0006053 -4.7472 4.684e-06 False True +TCA:Alpha-ketoglutaric acid TCA Alpha-ketoglutaric acid 1.7892 0.002686 0.8131 0.1475 True False +TCA:Aspartic acid TCA Aspartic acid -0.7799 0.2182 -1.756 0.002256 True False +TCA:Citric acid TCA Citric acid 2.4815 0.01116 1.5053 0.03874 True True +TCA:Fumaric acid TCA Fumaric acid 1.7962 0.002527 0.8201 0.05309 True False +TCA:Glutamic acid TCA Glutamic acid 1.2333 0.02262 0.2571 0.491 True False +TCA:L-proline TCA L-proline 1.3141 0.02026 0.3379 0.4348 True False +TCA:L-serine 1 TCA L-serine 1 1.1781 0.1092 0.202 0.73 True False +TCA:Malic acid TCA Malic acid 1.4837 0.09075 0.5076 0.4788 True False +TCA:Succinic acid TCA Succinic acid 1.0387 0.1556 0.0626 0.9175 True False +TCA:Threonine TCA Threonine -0.7918 0.236 -1.768 0.001111 True False +TCA:Valine TCA Valine 0.8985 0.08408 -0.0777 0.7695 False False diff --git a/data/studies/DUPERRET2025_POMS_STARVE/table_s12_provenance.json b/data/studies/DUPERRET2025_POMS_STARVE/table_s12_provenance.json new file mode 100644 index 0000000..5c907a9 --- /dev/null +++ b/data/studies/DUPERRET2025_POMS_STARVE/table_s12_provenance.json @@ -0,0 +1,66 @@ +{ + "study_id": "DUPERRET2025_POMS_STARVE", + "date_generated": "2026-10-16", + "converter": "data/studies/DUPERRET2025_POMS_STARVE/build_feature_table.py", + "source": { + "description": "Table S12. Raw metabolomic data: General Metabolites, Nucleotides, PUFAs and Krebs cycle (peak areas)", + "file": "mmc13.xlsx", + "url": "https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12803857/supplementaryFiles", + "article": "https://doi.org/10.1016/j.isci.2025.114333 (PMC12803857)", + "license": "CC BY-NC-ND 4.0: not redistributed; fetched and checksum-verified by this script", + "sha256": "451eb13e2da9db56ac984ee432632af2ced6ef9fc483183c62ba38c7c7f9c61d" + }, + "outputs_sha256": { + "DUPERRET2025_POMS_STARVE_features.tsv": "50d484845bb175015205ff70cb5c488a628ee15efa249a2c3f6d6351f2dd2850", + "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc_samplesheet.tsv": "54c3d1973e47f1915ada7a64874eb83d98dc8aca944f89f102f246596736c52c" + }, + "n_samples": 48, + "n_features": 320, + "n_internal_standards": 10, + "internal_standards": [ + "GM:2-Morpholinoethansulfonic Acid", + "NUCs:MES", + "PUFAs:12-HETE-d8", + "PUFAs:6-keto-PGF1a-d4", + "PUFAs:LTB4 d4", + "PUFAs:OEA-d4", + "PUFAs:PAF-d4", + "PUFAs:PGD2-d4", + "PUFAs:TXB2-d4", + "TCA:d27-Myristic acid" + ], + "n_metabolites_by_platform": { + "GM": 103, + "NUCs": 20, + "PUFAs": 176, + "TCA": 11 + }, + "n_metabolite_values_at_or_below_0.001": 8519, + "n_metabolite_values": 14880, + "blank_cells": { + "PUFAs:TXB3": [ + "F11N-3-12-1", + "F11N-3-12-2", + "F11N-3-12-3" + ] + }, + "annotation_confidence_level": 2, + "comparison": { + "comparison_id": "starved_vs_fed_0hpc", + "samples": [ + "F14R-5-0-1", + "F14R-5-0-2", + "F14R-5-0-3", + "F11N-5-0-1", + "F11N-5-0-2", + "F11N-5-0-3", + "F14R-3-0-1", + "F14R-3-0-2", + "F14R-3-0-3", + "F11N-3-0-1", + "F11N-3-0-2", + "F11N-3-0-3" + ], + "replicate_unit": "tank (= _t; inferred, as in DUPERRET2025_STARVE_RNASEQ)" + } +} diff --git a/registry/studies/DUPERRET2025_POMS_STARVE.yaml b/registry/studies/DUPERRET2025_POMS_STARVE.yaml index 6621e3b..afbb97d 100644 --- a/registry/studies/DUPERRET2025_POMS_STARVE.yaml +++ b/registry/studies/DUPERRET2025_POMS_STARVE.yaml @@ -6,10 +6,11 @@ # CC0) and the published paper, Duperret et al. 2025, iScience 29:114333 # (PMID 41541659, open access PMC12803857). # -# THE PROCESSED TABLES ARE EMPTY, as in DECICOMP2025_POMS_AGE. The four +# THE MetaboLights TABLES ARE EMPTY, as in DECICOMP2025_POMS_AGE. The four # Metabolite Assignment Files list 328 metabolites but hold no abundance -# values. Only Agilent targeted-dMRM raw files (.d, zipped) are deposited, and -# no AREE workflow reads them. Nothing can be harmonized yet. +# values, and the deposited raw files are Agilent targeted-dMRM .d files no +# AREE workflow reads. The paper's Table S12 (mmc13.xlsx) does hold per-sample +# peak areas, and the study was reanalyzed from it on 2026-10-16 (below). # # DIET IS FULLY CONFOUNDED WITH MS BATCH. On all four platforms the fed and # starved samples were acquired in separate runs months apart, with no @@ -32,6 +33,31 @@ # copy (still 0 abundance values), and the MetaboLights files API lists the # same four MAFs. The other three MAFs could not be re-fetched (EBI FTP # unreachable that day). +# +# REANALYZED FROM TABLE S12 (2026-10-16), QC FAILED. Table S12 ("Raw +# metabolomic data") gives peak areas for 310 metabolites and 10 internal +# standards (green in the sheet) in all 48 samples. The paper is CC BY-NC-ND +# 4.0, so the table is not committed: build_feature_table.py fetches it from +# Europe PMC, checks its SHA-256 and writes the workflow inputs +# (table_s12_provenance.json). The 0 hpc contrast was run with the metabolomics +# workflow in raw_reanalysis mode: internal-standard normalization within each +# platform (the authors' own first step), 0.0001/0 placeholders as below +# detection, families averaged within tank (3 vs 3 tanks), limma. 122 of 310 +# metabolites were detected often enough to test; 68 have padj < 0.05. +# +# Why it fails QC. The internal standards themselves differ by diet, i.e. by MS +# batch: on GM the per-sample IS offset is about +0.8 log2 in fed and -0.9 in +# starved samples, and on NUCs, which uses the same MES spike, the shift has +# the opposite sign. Re-running with median normalization ranks metabolites +# identically within GM, NUCs and TCA (r = 1.00) but shifts every log2FC by +# about 1 (GM +1.14, NUCs -0.84, TCA +0.98), and on PUFAs the two disagree +# outright (r = 0.40, mean shift 5.9). Only 61% of tested metabolites keep +# their direction across the two normalizations (normalization_sensitivity.tsv). +# A starved-vs-fed direction cannot be separated from the batch, and direction +# is what an evidence record asserts. QC decision (2026-10-16, sr320): mark +# qc_status failed, keep results_file null, do not harmonize or pool. The +# standardized table, missingness report, manifest, report and sensitivity +# table are committed as provenance for the decision. study_id: DUPERRET2025_POMS_STARVE simulated: false @@ -65,10 +91,11 @@ data_availability: raw_data_available: true processed_data_available: false status: "available" - access_notes: "MetaboLights MTBLS13313 is public under CC0 1.0. Vendor raw files (Agilent .d, zipped) are under FILES/RAW_FILES/{GM_RAW,NUCs_RAW,PUFAs_RAW,TCA_RAW}/, one per sample per platform (192 files). The four MAFs name 328 metabolites but contain no abundance values; checked 2026-10-11, and the GM MAF re-checked unchanged 2026-10-13. No metabolite has a database identifier or MSI reliability level. The authors' processed data (internal-standard normalized, IQR filtered, quantile normalized, log10 in MetaboAnalystR 4.0.0) are described in the paper but are not in MetaboLights; check the paper's supplementary tables before re-integrating raw files." + access_notes: "MetaboLights MTBLS13313 is public under CC0 1.0. Vendor raw files (Agilent .d, zipped) are under FILES/RAW_FILES/{GM_RAW,NUCs_RAW,PUFAs_RAW,TCA_RAW}/, one per sample per platform (192 files). The four MAFs name 328 metabolites but contain no abundance values; checked 2026-10-11, and the GM MAF re-checked unchanged 2026-10-13. No metabolite has a database identifier or MSI reliability level. The authors' processed data (internal-standard normalized, IQR filtered, quantile normalized, log10 in MetaboAnalystR 4.0.0) are not deposited. The paper's Table S12 (mmc13.xlsx, CC BY-NC-ND 4.0) has the un-normalized peak areas for all 48 samples and four platforms; it is fetched from Europe PMC (PMC12803857 supplementary files) by data/studies/DUPERRET2025_POMS_STARVE/build_feature_table.py, not committed." -qc_status: "not_started" -analysis_status: "not_started" +# See the 2026-10-16 note at the top: direction is confounded with MS batch. +qc_status: "failed" +analysis_status: "in_progress" # --------------------------------------------------------------------------- # DESIGN AS DEPOSITED. 48 samples = 2 families (F11N, F14R) x 2 diets @@ -130,9 +157,14 @@ limitations: > 2024, in separate runs, so the diet effect cannot be separated from batch or instrument drift. Internal-standard and quantile normalization reduce but do not remove this. AREE has no quality flag for batch confounding - yet; it is recorded here. (2) No usable processed data: the MAFs hold no - abundance values, and the raw files are vendor targeted-MRM data that no - AREE workflow reads. (3) Replication is 3 tanks per diet. Each sample is + yet; it is recorded here. The 2026-10-16 reanalysis shows the consequence: + the internal standards themselves shift with diet, and internal-standard and + median normalization disagree on the direction of 39% of tested metabolites + (normalization_sensitivity.tsv), so the study failed QC and is not + harmonized. (2) The MAFs hold no abundance values; the analyzable data are + the paper's Table S12 peak areas, which are not redistributable (CC BY-NC-ND + 4.0) and are fetched by build_feature_table.py. 188 of 310 metabolites + were below detection in too many tanks to test (missingness report). (3) Replication is 3 tanks per diet. Each sample is a pool of 10 oysters, so between-oyster variance is averaged away and the replicate unit is the tank (replicate = tank is inferred). (4) Starvation is a strong physiological manipulation. Metabolite differences at 0 hpc @@ -150,8 +182,11 @@ limitations: > Its 0 hpc diet contrast calls 38% of genes DE, mostly fasting response, and this study's metabolites will share that interpretation. (7) Targeted panel of about 330 metabolites - with no database identifiers or MSI levels in the deposit. Mapping is - held at unresolved. + with no database identifiers or MSI levels in the deposit. The + reanalysis records them as MSI level 2 (named by the targeted method, + identity not confirmed in the deposit). No metabolite maps to a gene, so + even a usable result would not link to DUPERRET2025_STARVE_RNASEQ's genes + without a metabolite-to-enzyme map. provenance: registered_by: sr320 @@ -174,10 +209,27 @@ provenance: registered (the paper's own metabolomic contrast), flagged meta_analysis_primary before any result was computed. Fed is the reference level, so positive effects mean higher in starved oysters. + 2026-10-16 reanalysis: Table S12 (mmc13.xlsx, SHA-256 + 451eb13e2da9db56ac984ee432632af2ced6ef9fc483183c62ba38c7c7f9c61d) fetched + from the Europe PMC supplementary-files API (PMC's direct file link does + not serve the file to scripts) and converted by build_feature_table.py + (table_s12_provenance.json). Internal standards are the ten green rows, + checked against the names in the Methods. One blank cell triple (TXB3, the + three F11N fed 12 hpc samples) is kept missing; those samples are not in + the 0 hpc contrast. Workflow run on Hete with -profile local: + --mode raw_reanalysis --metabolomics.normalization internal_standard + --metabolomics.detection_limit 0.001 --metabolomics.replicate_unit tank + --metabolomics.acquisition targeted (min_detected_per_arm 2, the + default); the sample sheet maps fed to control and starved to treatment + and sets tank = _t. Sensitivity: the same run with + --metabolomics.normalization median, compared per metabolite in + normalization_sensitivity.tsv. QC decision (2026-10-16, sr320): failed, + for the batch confounding described at the top of this file. source_links: - "https://www.ebi.ac.uk/metabolights/MTBLS13313" - "https://ftp.ebi.ac.uk/pub/databases/metabolights/studies/public/MTBLS13313/" - "https://doi.org/10.1016/j.isci.2025.114333" - "https://pmc.ncbi.nlm.nih.gov/articles/PMC12803857/" + - "https://www.ebi.ac.uk/europepmc/webservices/rest/PMC12803857/supplementaryFiles" - "https://www.ebi.ac.uk/ena/browser/view/PRJEB86618" - "https://www.ebi.ac.uk/ena/browser/view/PRJEB86525" diff --git a/tests/test_duperret2025_study.py b/tests/test_duperret2025_study.py index 0ad7ba3..a960cb1 100644 --- a/tests/test_duperret2025_study.py +++ b/tests/test_duperret2025_study.py @@ -123,3 +123,67 @@ def test_paired_rnaseq_study_owns_the_accessions_and_matching_contrast(study): ours = {c["comparison_id"] for c in study["comparisons"]} theirs = {c["comparison_id"] for c in rnaseq["comparisons"]} assert "starved_vs_fed_0hpc" in ours & theirs + + +# --------------------------------------------------------------------------- # +# 2026-10-16 reanalysis from Table S12: run, then failed QC +# --------------------------------------------------------------------------- # + +STEM = "DUPERRET2025_POMS_STARVE_starved_vs_fed_0hpc" + + +@pytest.fixture(scope="module") +def table_s12(): + return json.loads((STUDY_DIR / "table_s12_provenance.json").read_text()) + + +def test_table_s12_is_fetched_and_checked_not_committed(table_s12): + src = table_s12["source"] + assert src["sha256"] == "451eb13e2da9db56ac984ee432632af2ced6ef9fc483183c62ba38c7c7f9c61d" + assert "CC BY-NC-ND" in src["license"] + # The NC-ND table and the feature table derived from it stay out of the repo. + assert not list(STUDY_DIR.glob("*.xlsx")) + assert not (STUDY_DIR / "DUPERRET2025_POMS_STARVE_features.tsv").exists() + assert table_s12["n_samples"] == 48 + assert table_s12["n_internal_standards"] == 10 + assert sum(table_s12["n_metabolites_by_platform"].values()) == 310 + + +def test_run_used_internal_standards_detection_limit_and_tank_units(): + manifest = json.loads((STUDY_DIR / f"{STEM}_workflow_manifest.json").read_text()) + params = manifest["parameters"]["metabolomics"] + assert manifest["mode"] == "raw_reanalysis" + assert params["normalization"] == "internal_standard" + assert float(params["detection_limit"]) == 0.001 + assert params["replicate_unit"] == "tank" + assert params["acquisition"] == "targeted" + da = next(v for k, v in manifest["qc_metrics"]["upstream_step_qc"].items() if "diffabundance_qc" in k) + assert (da["n_replicates_control"], da["n_replicates_treatment"]) == (3, 3) + assert (da["n_features_in"], da["n_features_tested"]) == (310, 122) + + +def test_every_metabolite_is_accounted_for(table_s12): + import pandas as pd + + results = pd.read_csv(STUDY_DIR / f"{STEM}_metabolite_features_standardized.tsv", sep="\t") + missing = pd.read_csv(STUDY_DIR / f"{STEM}_missingness.tsv", sep="\t") + assert len(missing) == 310 + assert set(results["feature_id"]) == set(missing.loc[missing.status == "tested", "feature_id"]) + assert results["lfcSE"].notna().all() + standards = set(table_s12["internal_standards"]) + assert len(standards) == 10 + assert not standards & (set(results["feature_id"]) | set(missing["feature_id"])) + + +def test_direction_depends_on_normalization_which_is_why_qc_failed(study): + import pandas as pd + + sens = pd.read_csv(STUDY_DIR / "normalization_sensitivity.tsv", sep="\t") + assert len(sens) == 122 + # The batch-confounded offset flips the direction of a large share of + # metabolites; if a re-run ever made the two agree, the decision should be + # revisited rather than left standing. + assert sens["same_direction"].mean() < 0.7 + assert study["qc_status"] == "failed" + assert study["comparisons"][0]["results_file"] is None + assert "normalization_sensitivity.tsv" in study["limitations"]