From 7bece8f8237d7d8bc4de705d50a6c22785582389 Mon Sep 17 00:00:00 2001 From: John Brestelli Date: Tue, 14 Apr 2026 15:33:52 -0400 Subject: [PATCH 1/7] Add .worktrees to .gitignore Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a56646eb2..3c07ee7fb 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ target # JBrowse /Model/lib/jbrowse/auto_generated/ +.worktrees From f17d66e757960dbcabf61aa7cc95781ebd37c04a Mon Sep 17 00:00:00 2001 From: John Brestelli Date: Tue, 14 Apr 2026 17:08:04 -0400 Subject: [PATCH 2/7] Add 5 EDA DST templates for antibody array WDK support New templates appended to antibodyArray.dst: - antibodyArrayEdaAttributeQueriesNumeric: crosstab sqlQuery + meta sqlQuery pivoting on sample_stable_id for normalized intensities - antibodyArrayEdaAttributeRef: attributeQueryRef injection into transcriptRecord.xml - antibodyArrayEdaAttributeCategory: TSV ontology rows for individuals.txt - antibodyArrayEdaGeneTableSql: UNION clause linking gene ids via VEUPATHDB_GENE_ID - antibodyArrayDataTableGeneTableSql: UNION clause for full data table with all attributes Co-Authored-By: Claude Sonnet 4.6 --- Model/lib/dst/antibodyArray.dst | 138 ++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/Model/lib/dst/antibodyArray.dst b/Model/lib/dst/antibodyArray.dst index a8284edd8..65a4abb47 100644 --- a/Model/lib/dst/antibodyArray.dst +++ b/Model/lib/dst/antibodyArray.dst @@ -226,3 +226,141 @@ Note that changing the sample subset will reset any group assignments you have a >templateTextEnd< + + +[templateStart] +name=antibodyArrayEdaAttributeQueriesNumeric +anchorFile=ApiCommonModel/Model/lib/wdk/model/records/transcriptAttributeQueries.xml +prop=datasetName +prop=edaStudyStableId +prop=edaEntityAbbrev +prop=includeProjects +>templateTextStart< + + + + + + + + + + + + + + + + + + + + + + + +>templateTextEnd< + + +[templateStart] +name=antibodyArrayEdaAttributeRef +anchorFile=ApiCommonModel/Model/lib/wdk/model/records/transcriptRecord.xml +prop=datasetName +prop=includeProjects +>templateTextStart< + + +>templateTextEnd< + + +[templateStart] +name=antibodyArrayEdaAttributeCategory +anchorFile=ApiCommonModel/Model/lib/wdk/ontology/individuals.txt +prop=datasetName +prop=datasetDisplayName +>templateTextStart< +AntibodyArrayDataset_${datasetName} http://edamontology.org/topic_3360 Immunology DatasetRecordClasses.DatasetRecordClass dataset ${datasetName} ${datasetDisplayName} results +TranscriptAttributes.MetaAntibodyArrayIntensities${datasetName} AntibodyArrayDataset_${datasetName} TranscriptRecordClasses.TranscriptRecordClass attributeMetaQuery MetaAntibodyArrayIntensities${datasetName} gene results download +>templateTextEnd< + + +[templateStart] +name=antibodyArrayEdaGeneTableSql +anchorFile=ApiCommonModel/Model/lib/wdk/model/records/geneTableQueries.xml +prop=datasetName +prop=edaStudyStableId +prop=edaEntityAbbrev +>templateTextStart< + UNION + SELECT '${datasetName}' AS dataset_name , string_value AS source_id + FROM eda.ATTRIBUTEvalue_${edaStudyStableId}_${edaEntityAbbrev} av + WHERE av.attribute_stable_id = 'VEUPATHDB_GENE_ID' +>templateTextEnd< + + +[templateStart] +name=antibodyArrayDataTableGeneTableSql +anchorFile=ApiCommonModel/Model/lib/wdk/model/records/geneTableQueries.xml +prop=datasetName +prop=edaStudyStableId +prop=edaEntityAbbrev +>templateTextStart< +UNION +SELECT genes.string_value AS gene, + ag.display_name AS variable, + av.string_value, + av.number_value, + av.date_value, + '${datasetName}' AS dataset_id +FROM eda.attributevalue_${edaStudyStableId}_${edaEntityAbbrev} av, + eda.attributegraph_${edaStudyStableId}_${edaEntityAbbrev} ag, + (SELECT av.${edaEntityAbbrev}_stable_id, MIN(gi.gene) as string_value + FROM eda.attributevalue_${edaStudyStableId}_${edaEntityAbbrev} av + JOIN apidbtuning.GeneId gi ON gi.id = av.string_value + WHERE av.attribute_stable_id = 'VEUPATHDB_GENE_ID' + GROUP BY av.${edaEntityAbbrev}_stable_id) genes +WHERE av.attribute_stable_id = ag.stable_id + AND av.${edaEntityAbbrev}_stable_id = genes.${edaEntityAbbrev}_stable_id + AND av.attribute_stable_id != 'VEUPATHDB_GENE_ID' +>templateTextEnd< From adf12571de96fa309ceefc74e8997ee6327ae1be Mon Sep 17 00:00:00 2001 From: John Brestelli Date: Tue, 14 Apr 2026 17:09:16 -0400 Subject: [PATCH 3/7] Add antibodyArrayEdaAttributeRef TEMPLATE_ANCHOR to transcriptRecord.xml --- Model/lib/wdk/model/records/transcriptRecord.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Model/lib/wdk/model/records/transcriptRecord.xml b/Model/lib/wdk/model/records/transcriptRecord.xml index 946385a18..c0fbefb5f 100644 --- a/Model/lib/wdk/model/records/transcriptRecord.xml +++ b/Model/lib/wdk/model/records/transcriptRecord.xml @@ -733,6 +733,8 @@ + + From 4d4f09178940abf7715226a6c2525526debd737b Mon Sep 17 00:00:00 2001 From: John Brestelli Date: Tue, 14 Apr 2026 17:11:14 -0400 Subject: [PATCH 4/7] Add EdaAntibodyArrayDatasets and EdaAntibodyArrayGraphsDataTable sqlQuery blocks Add two new gene record graph table queries for antibody array EDA datasets targeting PlasmoDB and UniDB. Follows the same pattern as existing EDA phenotype queries but without the tgonGT1 special case, using category 'Immunology' and assay_type 'Antibody Array'. Includes TEMPLATE_ANCHOR placeholders for both the gene table SQL and the data table SQL. Co-Authored-By: Claude Sonnet 4.6 --- .../wdk/model/records/geneTableQueries.xml | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/Model/lib/wdk/model/records/geneTableQueries.xml b/Model/lib/wdk/model/records/geneTableQueries.xml index 309b2a94b..d92be1e3a 100644 --- a/Model/lib/wdk/model/records/geneTableQueries.xml +++ b/Model/lib/wdk/model/records/geneTableQueries.xml @@ -1135,6 +1135,111 @@ from ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 7a50b6db1ebda322f6bda8249cd707c43828dd35 Mon Sep 17 00:00:00 2001 From: John Brestelli Date: Tue, 14 Apr 2026 17:12:28 -0400 Subject: [PATCH 5/7] Add EdaAntibodyArrayDatasets and EdaAntibodyArrayGraphsDataTable definitions to geneRecord.xml --- Model/lib/wdk/model/records/geneRecord.xml | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Model/lib/wdk/model/records/geneRecord.xml b/Model/lib/wdk/model/records/geneRecord.xml index af8f7b216..1ad349dca 100644 --- a/Model/lib/wdk/model/records/geneRecord.xml +++ b/Model/lib/wdk/model/records/geneRecord.xml @@ -1343,6 +1343,46 @@ name" internal="true"/> + + + + + + + + + + + + + + + + + + + + + + + true +
+ + + + + + +
+ Date: Wed, 15 Apr 2026 10:50:35 -0400 Subject: [PATCH 6/7] wip --- Model/lib/dst/antibodyArray.dst | 6 +++--- Model/lib/wdk/model/records/transcriptAttributeQueries.xml | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Model/lib/dst/antibodyArray.dst b/Model/lib/dst/antibodyArray.dst index 65a4abb47..320e0a200 100644 --- a/Model/lib/dst/antibodyArray.dst +++ b/Model/lib/dst/antibodyArray.dst @@ -250,7 +250,7 @@ prop=includeProjects LEFT OUTER JOIN ( SELECT * FROM public.crosstab( 'SELECT gene_ids.gene_id, - CONCAT(''${edaStudyStableId}_'', anc.sample_stable_id) AS sample_col, + REPLACE(CONCAT(''${edaStudyStableId}_'', anc.sample_stable_id), ''.'', ''_'') AS sample_col, av_int.number_value AS intensity FROM eda.attributevalue_${edaStudyStableId}_${edaEntityAbbrev} av_int JOIN eda.ancestors_${edaStudyStableId}_${edaEntityAbbrev} anc @@ -263,7 +263,7 @@ prop=includeProjects ON gene_ids.${edaEntityAbbrev}_stable_id = av_int.${edaEntityAbbrev}_stable_id WHERE av_int.attribute_stable_id = ''NORMALIZED_INTENSITY'' ORDER BY 1, 2', - 'SELECT CONCAT(''${edaStudyStableId}_'', sample_stable_id) AS sample_col + 'SELECT REPLACE(CONCAT(''${edaStudyStableId}_'', sample_stable_id), ''.'', ''_'') AS sample_col FROM (SELECT DISTINCT sample_stable_id FROM eda.ancestors_${edaStudyStableId}_${edaEntityAbbrev}) s ORDER BY sample_col' @@ -285,7 +285,7 @@ prop=includeProjects + + From 642b3c9d00e75f4fe107b7c7907d544444982177 Mon Sep 17 00:00:00 2001 From: John Brestelli Date: Wed, 15 Apr 2026 17:09:34 -0400 Subject: [PATCH 7/7] Add ByDataset antibody array EDA templates and fix individuals.txt category anchors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add antibodyArrayEdaAttributeQueriesNumericByDataset, antibodyArrayEdaAttributeRefByDataset, and antibodyArrayEdaAttributeCategoryByDataset DST templates for datasets split by sub-dataset - Add TEMPLATE_ANCHOR entries in transcriptAttributeQueries.xml and transcriptRecord.xml for ByDataset variants - Add TEMPLATE_ANCHOR antibodyArrayEdaAttributeCategory and antibodyArrayEdaAttributeCategoryByDataset to individuals.txt — these were missing, causing per-sample intensity columns to have no UI category - Fix column alignment in antibodyArrayEdaAttributeCategory individuals.txt template Co-Authored-By: Claude Sonnet 4.6 --- Model/lib/dst/antibodyArray.dst | 436 +++++++++++------- .../records/transcriptAttributeQueries.xml | 2 + .../wdk/model/records/transcriptRecord.xml | 2 + Model/lib/wdk/ontology/individuals.txt | 2 + 4 files changed, 281 insertions(+), 161 deletions(-) diff --git a/Model/lib/dst/antibodyArray.dst b/Model/lib/dst/antibodyArray.dst index 320e0a200..55340f10e 100644 --- a/Model/lib/dst/antibodyArray.dst +++ b/Model/lib/dst/antibodyArray.dst @@ -5,15 +5,15 @@ prop=datasetName prop=projectName >templateTextStart< - - - - - - + + + + + + >templateTextEnd< @@ -40,70 +40,70 @@ prop=includeProjectsExcludeEuPathDB >templateTextStart< + displayName="${organismAbbrevDisplay} ${datasetDisplayName} Antibody Array (p-value)" + shortDisplayName="${datasetShortDisplayName} (p-val)" + searchCategory="Host Response" + queryRef="GeneId.GenesByTTestWithMetadata" + recordClassRef="TranscriptRecordClasses.TranscriptRecordClass"> - + '${function}' + sorting="p_value asc" /> - - - - - - - - ${optionalQuestionDescription} - ]]> - - - - - Display the histogram of the values of this attribute - float - + summary="organism,gene_product,p_value, avg_group_two,avg_group_one" + sorting="p_value asc" + /> + + + + + + + + ${optionalQuestionDescription} + ]]> + + + + + Display the histogram of the values of this attribute + float + - - - Display the histogram of the values of this attribute - int - + + + Display the histogram of the values of this attribute + int + - - - Display the histogram of the values of this attribute - int - + + + Display the histogram of the values of this attribute + int + - - - - ]]> - - - + + + + ]]> + + + @@ -123,11 +123,11 @@ prop=includeProjectsExcludeEuPathDB displayName="${datasetShortDisplayName} - Intensity Graph" inReportMaker="false" truncateTo="100000" sortable="false" includeProjects="${includeProjectsExcludeEuPathDB}"> - - - ]]> - + + + ]]> + >templateTextEnd< @@ -137,7 +137,7 @@ anchorFile=ApiCommonModel/Model/lib/wdk/model/questions/categories.xml prop=datasetName prop=includeProjects >templateTextStart< - GeneQuestions.GenesByAntibodyArray${datasetName} + GeneQuestions.GenesByAntibodyArray${datasetName} >templateTextEnd< [templateStart] @@ -152,27 +152,27 @@ prop=includeProjects prop=antibodyArrayWdkAttributes >templateTextStart< + displayName="${datasetDisplayName} Antibody Array" + shortDisplayName="${datasetShortDisplayName} (QAA)" + queryRef="GeneId.GenesByEdaVizWithCompute" + recordClassRef="TranscriptRecordClasses.TranscriptRecordClass"> - - + + - - antibodyArrayNotebook - + + antibodyArrayNotebook + - + - + Find genes with differential expression in antibody array data based on EDA analysis. + ]]> + Removing outliers: If the PCA plot reveals samples that cluster away from the rest (potential outliers or contaminated arrays), you can exclude them using the Select Samples step at the top of the notebook. Apply a filter on the sample identifier or a metadata variable to remove those samples before running Limma. Note that changing the sample subset will reset any group assignments you have already made in the Limma step, so it is best to check the PCA first before defining your groups. - ]]> - - - - - Display the histogram of the values of this attribute - float - - - - - Display the histogram of the values of this attribute - float - - - + ]]> + + + + + Display the histogram of the values of this attribute + float + + + + + Display the histogram of the values of this attribute + float + + + >templateTextEnd< @@ -236,69 +236,69 @@ prop=edaStudyStableId prop=edaEntityAbbrev prop=includeProjects >templateTextStart< - - - - - - + + + + + - - + ]]> + + - - - - - - - - - - - - + + + + + + + + + + + + >templateTextEnd< @@ -309,8 +309,98 @@ anchorFile=ApiCommonModel/Model/lib/wdk/model/records/transcriptRecord.xml prop=datasetName prop=includeProjects >templateTextStart< - - + + +>templateTextEnd< + + +[templateStart] +name=antibodyArrayEdaAttributeQueriesNumericByDataset +anchorFile=ApiCommonModel/Model/lib/wdk/model/records/transcriptAttributeQueries.xml +prop=datasetName +prop=edaStudyStableId +prop=edaEntityAbbrev +prop=includeProjects +prop=subDatasetSuffix +prop=subDatasetFilterValue +prop=subDatasetAttributeStableId +>templateTextStart< + + + + + + + + + + + + + + + + + + + + + + + >templateTextEnd< @@ -320,8 +410,32 @@ anchorFile=ApiCommonModel/Model/lib/wdk/ontology/individuals.txt prop=datasetName prop=datasetDisplayName >templateTextStart< -AntibodyArrayDataset_${datasetName} http://edamontology.org/topic_3360 Immunology DatasetRecordClasses.DatasetRecordClass dataset ${datasetName} ${datasetDisplayName} results -TranscriptAttributes.MetaAntibodyArrayIntensities${datasetName} AntibodyArrayDataset_${datasetName} TranscriptRecordClasses.TranscriptRecordClass attributeMetaQuery MetaAntibodyArrayIntensities${datasetName} gene results download +AntibodyArrayDataset_${datasetName} http://edamontology.org/topic_3360 Immunology DatasetRecordClasses.DatasetRecordClass dataset ${datasetName} ${datasetDisplayName} results +TranscriptAttributes.MetaAntibodyArrayIntensities${datasetName} AntibodyArrayDataset_${datasetName} TranscriptRecordClasses.TranscriptRecordClass attributeMetaQuery MetaAntibodyArrayIntensities${datasetName} gene results download +>templateTextEnd< + + +[templateStart] +name=antibodyArrayEdaAttributeRefByDataset +anchorFile=ApiCommonModel/Model/lib/wdk/model/records/transcriptRecord.xml +prop=datasetName +prop=subDatasetSuffix +prop=includeProjects +>templateTextStart< + + +>templateTextEnd< + + +[templateStart] +name=antibodyArrayEdaAttributeCategoryByDataset +anchorFile=ApiCommonModel/Model/lib/wdk/ontology/individuals.txt +prop=datasetName +prop=datasetDisplayName +prop=subDatasetSuffix +>templateTextStart< +AntibodyArrayDataset_${datasetName}_${subDatasetSuffix} http://edamontology.org/topic_3360 Immunology DatasetRecordClasses.DatasetRecordClass dataset ${datasetName} ${datasetDisplayName} (${subDatasetSuffix}) results +TranscriptAttributes.MetaAntibodyArrayIntensities${datasetName}_${subDatasetSuffix} AntibodyArrayDataset_${datasetName}_${subDatasetSuffix} TranscriptRecordClasses.TranscriptRecordClass attributeMetaQuery MetaAntibodyArrayIntensities${datasetName}_${subDatasetSuffix} gene results download >templateTextEnd< diff --git a/Model/lib/wdk/model/records/transcriptAttributeQueries.xml b/Model/lib/wdk/model/records/transcriptAttributeQueries.xml index 1819b760f..a761760a2 100644 --- a/Model/lib/wdk/model/records/transcriptAttributeQueries.xml +++ b/Model/lib/wdk/model/records/transcriptAttributeQueries.xml @@ -194,6 +194,8 @@ + + diff --git a/Model/lib/wdk/model/records/transcriptRecord.xml b/Model/lib/wdk/model/records/transcriptRecord.xml index c0fbefb5f..2bbcd4726 100644 --- a/Model/lib/wdk/model/records/transcriptRecord.xml +++ b/Model/lib/wdk/model/records/transcriptRecord.xml @@ -735,6 +735,8 @@ + + diff --git a/Model/lib/wdk/ontology/individuals.txt b/Model/lib/wdk/ontology/individuals.txt index 8d3a2aa60..916ea2d34 100644 --- a/Model/lib/wdk/ontology/individuals.txt +++ b/Model/lib/wdk/ontology/individuals.txt @@ -916,6 +916,8 @@ derisi_timeseries_pie http://purl.obolibrary.org/obo/OBI_0001985 PathwayRecordC ## TEMPLATE_ANCHOR profileMinMaxAttributesRnaAntisenseCategory ## TEMPLATE_ANCHOR phenotypeEdaAttributeCategory ## TEMPLATE_ANCHOR cellularLocalizationEdaAttributeCategory +## TEMPLATE_ANCHOR antibodyArrayEdaAttributeCategory +## TEMPLATE_ANCHOR antibodyArrayEdaAttributeCategoryByDataset ## TEMPLATE_ANCHOR metaboliteGraphTextAttributeCategory ## TEMPLATE_ANCHOR graphTextAttributeCategoryPathwayRecord