From 443a44342f8869cc17f23f9ca219e121be84802c Mon Sep 17 00:00:00 2001 From: Bindu Gajria Date: Thu, 29 Jan 2026 08:45:47 -0500 Subject: [PATCH 1/8] add subTrackAttr property to cature in injector --- .../org/apidb/apicommon/model/datasetInjector/ChIPChip.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Model/src/main/java/org/apidb/apicommon/model/datasetInjector/ChIPChip.java b/Model/src/main/java/org/apidb/apicommon/model/datasetInjector/ChIPChip.java index 74647b65fd..2c40958523 100644 --- a/Model/src/main/java/org/apidb/apicommon/model/datasetInjector/ChIPChip.java +++ b/Model/src/main/java/org/apidb/apicommon/model/datasetInjector/ChIPChip.java @@ -57,7 +57,9 @@ public void addModelReferences() { // second column is for documentation @Override public String[][] getPropertiesDeclaration() { - String[][] propertiesDeclaration = {}; + String[][] propertiesDeclaration = { + { "subTrackAttr", "sub tracks for the dataset" } + }; return propertiesDeclaration; } From 9d40929829f8537669ea86d665d2b3b0a8213407 Mon Sep 17 00:00:00 2001 From: Bindu Gajria Date: Thu, 29 Jan 2026 08:46:33 -0500 Subject: [PATCH 2/8] fix addChipChipTracks --- Model/lib/perl/JbrowseOrgSpecificNaTracks.pm | 98 ++++++++------------ 1 file changed, 38 insertions(+), 60 deletions(-) diff --git a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm index 6b837cf192..4350d45052 100644 --- a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm +++ b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm @@ -66,7 +66,7 @@ sub processOrganism { &addSynteny($applicationType, $dbh, $result, $organismAbbrev); &addDatasets($dbh, \%datasets, \%strain) unless($isApollo); - &addChipChipTracks($dbh, $result, $datasetProperties, $organismAbbrev, $applicationType); + &addChipChipTracks($dbh, $result, $datasetProperties, $organismAbbrev, $nameForFileNames, $applicationType); &addSmallNcRnaSeq($datasetProperties, $projectName, $buildNumber, $nameForFileNames, $applicationType, $result); &addLowComplexity($result, $datasetProps, $webservicesDir, $nameForFileNames, $projectName, $applicationType, $buildNumber); @@ -739,78 +739,56 @@ sub addUnifiedMassSpec { sub addChipChipTracks { - my ($dbh, $result, $datasetProperties, $organismAbbrev, $applicationType) = @_; + my ($dbh, $result, $datasetProperties, $organismAbbrev, $nameForFileNames, $applicationType) = @_; my $chipChipSeqDatasets = $datasetProperties->{chipchip} ? $datasetProperties->{chipchip} : {}; - my $sql = "select d.name, s.name, pan.name, pan.protocol_app_node_id -from study.study s - , SRES.EXTERNALDATABASERELEASE r - , SRES.EXTERNALDATABASE d - , study.protocolappnode pan - , study.studylink sl -where d.name like '${organismAbbrev}%_chipChipExper_%' -and s.EXTERNAL_DATABASE_RELEASE_ID = r.EXTERNAL_DATABASE_RELEASE_ID -and r.EXTERNAL_DATABASE_ID = d.EXTERNAL_DATABASE_ID -and s.study_id = sl.study_id -and sl.protocol_app_node_id = pan.PROTOCOL_APP_NODE_ID -and s.investigation_id is null"; - - - my $sh = $dbh->prepare($sql); - $sh->execute(); + foreach my $dataset (keys %$chipChipSeqDatasets){ + #@print STDERR "XXXX addChipChipTracks dataset: " + $dataset + " <<<<\n";; + next unless($dataset =~ /chipChipExper/); - while(my ($dataset, $study, $panName, $panId) = $sh->fetchrow_array()) { + my $peakTrack = &makeChipChipPeak($dataset, $datasetProperties, $nameForFileNames, $applicationType); + push @{$result->{tracks}}, $peakTrack; - if($panName =~ /_peaks \(ChIP-chip\)/) { - my $peakTrack = &makeChipChipPeak($dataset, $study, $panName, $panId, $datasetProperties, $chipChipSeqDatasets, $applicationType); - push @{$result->{tracks}}, $peakTrack; - } - if($panName =~ /_smoothed \(ChIP-chip\)/) { - my $track = &makeChipChipSmoothed($dataset, $study, $panName, $panId, $datasetProperties, $chipChipSeqDatasets, $applicationType); - push @{$result->{tracks}}, $track; - } + # my $track = &makeChipChipSmoothed($dataset, $datasetProperties, $nameForFileNames, $applicationType); + # push @{$result->{tracks}}, $track; } - $sh->finish(); } - + #BB + sub makeChipChipPeak { - my ($dataset, $study, $panName, $panId, $datasetProperties, $chipChipSeqDatasets, $applicationType) = @_; - - my $datasetDisplayName = $chipChipSeqDatasets->{$dataset}->{datasetDisplayName}; - my $summary = $chipChipSeqDatasets->{$dataset}->{summary}; - $summary =~ s/\n/ /g; - my $shortAttribution = $chipChipSeqDatasets->{$dataset}->{shortAttribution}; - my $datasetPresenterId = $chipChipSeqDatasets->{$dataset}->{presenterId}; - - my $key = $panName; - my $subTrackAttr = $chipChipSeqDatasets->{$dataset}->{subTrackAttr}; + my ($dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; + my $chipChipSeqDatasets = $datasetProperties->{chipchip}; + my $datasetName = $chipChipSeqDatasets->{$dataset}->{datasetName}; + my $datasetDisplayName = $chipChipSeqDatasets->{$dataset}->{datasetDisplayName}; + my $datasetPresenterId = $chipChipSeqDatasets->{$dataset}->{datasetPresenterId}; + my $summary = $chipChipSeqDatasets->{$dataset}->{summary}; + $summary =~ s/\n/ /g; + my $shortAttribution = $chipChipSeqDatasets->{$dataset}->{shortAttribution}; + +# BB +# my $key = $panName; my $cutoff = $datasetProperties->{$dataset}->{cutoff} || 0; my $colorFunction = $cutoff ? "colorSegmentByScore" : "chipColor"; - my $queryParams = { - 'exp' => $dataset, - 'sub' => $subTrackAttr, - 'cutoff' => $cutoff, - 'panId' => $panId, - }; - - my $peaks = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipPeakTrackConfig->new({ - dataset_name => $dataset, - attribution => $shortAttribution, - study_display_name => $datasetDisplayName, - description => $summary, - query_params => $queryParams, - application_type => $applicationType, - label => $key, - key => $key, - pan_name => $panName, - dataset_presenter_id => $datasetPresenterId, - summary => $summary, - })->getConfigurationObject(); - return $peaks; + my $subTrackAttr = $chipChipSeqDatasets->{$dataset}->{subTrackAttr}; + my @tracks = split(/\;/, $_); + + foreach my $t (@tracks) { + my $relativePath = "${nameForFileNames}/chipChip/bed/${datasetName}.bed.gz"; + my $peaks = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipPeakTrackConfig->new({ + dataset_name => $dataset, + attribution => $shortAttribution, + description => $summary, + application_type => $applicationType, + label => $datasetDisplayName, + key => $datasetDisplayName, + dataset_presenter_id => $datasetPresenterId, + summary => $summary })->getConfigurationObject(); + return $peaks; + } } From 1238a5e6fccfc319f7108fb17df5ad24db6ac0b5 Mon Sep 17 00:00:00 2001 From: Bindu Gajria Date: Mon, 2 Feb 2026 11:01:22 -0500 Subject: [PATCH 3/8] use of GFFStore and other fixes for ChipChip modules --- .../ChipChipPeakTrackConfig.pm | 49 ++++++++++++------- .../ChipChipSmoothedTrackConfig.pm | 49 +++++++------------ 2 files changed, 47 insertions(+), 51 deletions(-) diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm index 867a4c6f5a..58ffb1f7bb 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm @@ -3,9 +3,10 @@ use base qw(ApiCommonModel::Model::JBrowseTrackConfig::Segments); use strict; use warnings; -use ApiCommonModel::Model::JBrowseTrackConfig::RestStore; +use ApiCommonModel::Model::JBrowseTrackConfig::GFFStore; -use JSON; +sub getGlyph {$_[0]->{glyph} } +sub setGlyph {$_[0]->{glyph} = $_[1]} sub new { my ($class, $args) = @_; @@ -17,51 +18,61 @@ sub new { $datasetConfig->setCategory("Epigenomics"); $datasetConfig->setSubcategory("ChIP chip"); - $self->setId($args->{pan_name}); - $self->setLabel($args->{pan_name}); + $self->setId($args->{key}); + $self->setLabel($args->{label}); + $self->setGlyph($args->{glyph}); - $self->setDisplayMode(undef); - $self->setGlyph(undef); +# $self->setDisplayMode(undef); +# $self->setGlyph(undef); my $store; if($self->getApplicationType() eq 'jbrowse' || $self->getApplicationType() eq 'apollo') { - $store = ApiCommonModel::Model::JBrowseTrackConfig::RestStore->new($args); - $store->setQuery("ChIP:ChIPchip_peaksjbrowse"); - $store->setQueryParamsHash($args->{query_params}); + $store = ApiCommonModel::Model::JBrowseTrackConfig::GFFStore->new($args); } else { # TODO + $store = ApiCommonModel::Model::JBrowseTrackConfig::GFFStore->new($args); } $self->setStore($store); - + $self->setGlyph("JBrowse/View/FeatureGlyph/Segments") unless(defined $self->getGlyph()); + my $detailsFunction = "{peakTitleChipSeqFxn}"; $self->setOnClickContent($detailsFunction); $self->setViewDetailsContent($detailsFunction); - return $self; } +sub getJBrowseStyle { + my $self = shift; -sub getMetadata { - my $self = shift; - my $metadata = $self->SUPER::getMetadata(); + my $jbrowseStyle = $self->SUPER::getJBrowseStyle(); - $metadata->{attribution} = undef; - return $metadata; +# $jbrowseStyle->{color} = ""; +# $jbrowseStyle->{label} = "Sample,sample,name"; + return $jbrowseStyle; } +sub getJBrowseObject{ + my $self = shift; + + my $jbrowseObject = $self->SUPER::getJBrowseObject(); + + + return $jbrowseObject; + } + # TODO: sub getJBrowse2Object{ - my $self = shift; + my $self = shift; - my $jbrowse2Object = $self->SUPER::getJBrowse2Object(); + my $jbrowse2Object = $self->SUPER::getJBrowse2Object(); - return $jbrowse2Object; + return $jbrowse2Object; } diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm index 9574f39424..e956670139 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm @@ -3,15 +3,11 @@ use base qw(ApiCommonModel::Model::JBrowseTrackConfig::CoverageTrackConfig); use strict; use warnings; -use ApiCommonModel::Model::JBrowseTrackConfig::RestStore; -use JSON; +use ApiCommonModel::Model::JBrowseTrackConfig::GFFStore; -sub getPanName {$_[0]->{pan_name}} -sub setPanName {$_[0]->{pan_name} = $_[1]} - -sub getBorderColor {$_[0]->{border_color}} -sub setBorderColor {$_[0]->{border_color} = $_[1]} +sub getGlyph {$_[0]->{glyph} } +sub setGlyph {$_[0]->{glyph} = $_[1]} sub new { @@ -22,27 +18,28 @@ sub new { $datasetConfig->setCategory("Epigenomics"); $datasetConfig->setSubcategory("ChIP chip"); - $self->setPanName($args->{pan_name}); - my $panName = $self->getPanName(); - $self->setId($panName); - $self->setLabel($panName); + $self->setId($args->{key}); + $self->setLabel($args->{label}); + $self->setGlyph($args->{glyph}); + +# $self->setDisplayMode(undef); +# $self->setGlyph(undef); + $self->setCovMaxScoreDefault($args->{cov_max_score_default}); $self->setCovMinScoreDefault($args->{cov_min_score_default}); #TODO - $self->setTrackTypeDisplay("XYPlot"); + #$self->setTrackTypeDisplay("XYPlot"); ### $self->setDisplayType("JBrowse/View/Track/CanvasFeatures"); my $store; if($self->getApplicationType() eq 'jbrowse' || $self->getApplicationType() eq 'apollo') { - $store = ApiCommonModel::Model::JBrowseTrackConfig::RestStore->new($args); - $store->setQuery("ChIP:ChIPchip_smoothedjbrowse"); - $store->setQueryParamsHash($args->{query_params}); - + $store = ApiCommonModel::Model::JBrowseTrackConfig::GFFStore->new($args); } else { # TODO + $store = ApiCommonModel::Model::JBrowseTrackConfig::GFFStore->new($args); } $self->setStore($store); @@ -53,7 +50,7 @@ sub new { sub getJBrowseStyle { my $self = shift; - my $jbrowseStyle = {}; + my $jbrowseStyle = $self->SUPER::getJBrowseStyle(); $jbrowseStyle->{height} = 40; $jbrowseStyle->{neg_color} = "{chipColor}"; @@ -62,17 +59,6 @@ sub getJBrowseStyle { return $jbrowseStyle; } -sub getMetadata { - my $self = shift; - - my $metadata = $self->SUPER::getMetadata(); - - $metadata->{attribution} = undef; - - - return $metadata; -} - sub getJBrowseObject{ my $self = shift; @@ -83,18 +69,17 @@ sub getJBrowseObject{ # $jbrowseObject->{scale} = undef; return $jbrowseObject; - } # TODO: sub getJBrowse2Object{ - my $self = shift; + my $self = shift; - my $jbrowse2Object = $self->SUPER::getJBrowse2Object(); + my $jbrowse2Object = $self->SUPER::getJBrowse2Object(); - return $jbrowse2Object; + return $jbrowse2Object; } From e31f3fcc00a3754bc95fff24dc351b4faa21291d Mon Sep 17 00:00:00 2001 From: Bindu Gajria Date: Wed, 11 Feb 2026 21:05:16 -0500 Subject: [PATCH 4/8] chipChip smooth track to use BigWigStore --- .../JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm index e956670139..77ec2fa246 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm @@ -4,7 +4,7 @@ use strict; use warnings; -use ApiCommonModel::Model::JBrowseTrackConfig::GFFStore; +use ApiCommonModel::Model::JBrowseTrackConfig::BigWigStore; sub getGlyph {$_[0]->{glyph} } sub setGlyph {$_[0]->{glyph} = $_[1]} @@ -25,8 +25,8 @@ sub new { # $self->setDisplayMode(undef); # $self->setGlyph(undef); - $self->setCovMaxScoreDefault($args->{cov_max_score_default}); - $self->setCovMinScoreDefault($args->{cov_min_score_default}); + $self->setCovMaxScoreDefault(defined $args->{cov_max_score_default} ? $args->{cov_max_score_default} : 1000); + $self->setCovMinScoreDefault(defined $args->{cov_min_score_default} ? $args->{cov_min_score_default} : 0); #TODO #$self->setTrackTypeDisplay("XYPlot"); @@ -35,11 +35,11 @@ sub new { my $store; if($self->getApplicationType() eq 'jbrowse' || $self->getApplicationType() eq 'apollo') { - $store = ApiCommonModel::Model::JBrowseTrackConfig::GFFStore->new($args); + $store = ApiCommonModel::Model::JBrowseTrackConfig::BigWigStore->new($args); } else { # TODO - $store = ApiCommonModel::Model::JBrowseTrackConfig::GFFStore->new($args); + $store = ApiCommonModel::Model::JBrowseTrackConfig::BigWigStore->new($args); } $self->setStore($store); From 03504e6ff10fb058ac088b5042f82da8370a793b Mon Sep 17 00:00:00 2001 From: Bindu Gajria Date: Wed, 11 Feb 2026 21:06:05 -0500 Subject: [PATCH 5/8] chipChip peak track to use BedStore --- .../lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm index 58ffb1f7bb..977699b73b 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm @@ -3,7 +3,7 @@ use base qw(ApiCommonModel::Model::JBrowseTrackConfig::Segments); use strict; use warnings; -use ApiCommonModel::Model::JBrowseTrackConfig::GFFStore; +use ApiCommonModel::Model::JBrowseTrackConfig::BedStore; sub getGlyph {$_[0]->{glyph} } sub setGlyph {$_[0]->{glyph} = $_[1]} @@ -28,11 +28,11 @@ sub new { my $store; if($self->getApplicationType() eq 'jbrowse' || $self->getApplicationType() eq 'apollo') { - $store = ApiCommonModel::Model::JBrowseTrackConfig::GFFStore->new($args); + $store = ApiCommonModel::Model::JBrowseTrackConfig::BedStore->new($args); } else { # TODO - $store = ApiCommonModel::Model::JBrowseTrackConfig::GFFStore->new($args); + $store = ApiCommonModel::Model::JBrowseTrackConfig::BedStore->new($args); } $self->setStore($store); From 7089ffb4061397ba9c6a3f9abb16e071136ed7a4 Mon Sep 17 00:00:00 2001 From: Bindu Gajria Date: Wed, 11 Feb 2026 21:06:53 -0500 Subject: [PATCH 6/8] edit makeChipChipPeak for peak and smooth tracks --- Model/lib/perl/JbrowseOrgSpecificNaTracks.pm | 111 ++++++++++--------- 1 file changed, 57 insertions(+), 54 deletions(-) diff --git a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm index 4350d45052..f75b642967 100644 --- a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm +++ b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm @@ -744,19 +744,17 @@ sub addChipChipTracks { my $chipChipSeqDatasets = $datasetProperties->{chipchip} ? $datasetProperties->{chipchip} : {}; foreach my $dataset (keys %$chipChipSeqDatasets){ - #@print STDERR "XXXX addChipChipTracks dataset: " + $dataset + " <<<<\n";; next unless($dataset =~ /chipChipExper/); - my $peakTrack = &makeChipChipPeak($dataset, $datasetProperties, $nameForFileNames, $applicationType); - push @{$result->{tracks}}, $peakTrack; + my @peakTracks = &makeChipChipPeak($dataset, $datasetProperties, $nameForFileNames, $applicationType); + push @{$result->{tracks}}, @peakTracks; - # my $track = &makeChipChipSmoothed($dataset, $datasetProperties, $nameForFileNames, $applicationType); - # push @{$result->{tracks}}, $track; + my @smoothedTracks = &makeChipChipSmoothed($dataset, $datasetProperties, $nameForFileNames, $applicationType); + push @{$result->{tracks}}, @smoothedTracks; } } - #BB sub makeChipChipPeak { my ($dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; @@ -768,27 +766,69 @@ sub makeChipChipPeak { $summary =~ s/\n/ /g; my $shortAttribution = $chipChipSeqDatasets->{$dataset}->{shortAttribution}; -# BB -# my $key = $panName; my $cutoff = $datasetProperties->{$dataset}->{cutoff} || 0; my $colorFunction = $cutoff ? "colorSegmentByScore" : "chipColor"; my $subTrackAttr = $chipChipSeqDatasets->{$dataset}->{subTrackAttr}; - my @tracks = split(/\;/, $_); + my @subTracks = split(/\;/, $subTrackAttr); + my @peakTracks; + + foreach my $subTrackName (@subTracks) { # Loop through sub-tracks + my $relativePath = "${nameForFileNames}/chipChip/bed/${datasetName}/${subTrackName}_peaks.bed.gz"; + #print Dumper "PEAK PATH $relativePath"; - foreach my $t (@tracks) { - my $relativePath = "${nameForFileNames}/chipChip/bed/${datasetName}.bed.gz"; my $peaks = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipPeakTrackConfig->new({ - dataset_name => $dataset, + dataset_name => $dataset, + attribution => $shortAttribution, + description => $summary, + application_type => $applicationType, + label => "$datasetDisplayName - $subTrackName Peaks", + key => "${datasetDisplayName}_${subTrackName}_Peaks", + dataset_presenter_id => $datasetPresenterId, + summary => $summary, + relative_path_to_file => $relativePath + })->getConfigurationObject(); + push @peakTracks, $peaks; + } + return @peakTracks; +} + + +sub makeChipChipSmoothed { + my ($dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; + my $chipChipSeqDatasets = $datasetProperties->{chipchip}; + my $datasetName = $chipChipSeqDatasets->{$dataset}->{datasetName}; + my $datasetDisplayName = $chipChipSeqDatasets->{$dataset}->{datasetDisplayName}; + my $datasetPresenterId = $chipChipSeqDatasets->{$dataset}->{presenterId}; + my $summary = $chipChipSeqDatasets->{$dataset}->{summary}; + $summary =~ s/\n/ /g; + my $shortAttribution = $chipChipSeqDatasets->{$dataset}->{shortAttribution}; + + my $subTrackAttr = $chipChipSeqDatasets->{$dataset}->{subTrackAttr}; + my @subTracks = split(/\;/, $subTrackAttr); + my @smoothedTracks; + + foreach my $subTrackName (@subTracks) { # Loop through sub-tracks + my $relativePath = "${nameForFileNames}/chipChip/bigwig/${datasetName}/${subTrackName}.bw"; + #print Dumper "SMOOTH PATH $relativePath\n"; + + my $smoothed = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipSmoothedTrackConfig->new({ + dataset_name => $dataset, attribution => $shortAttribution, + study_display_name => $datasetDisplayName, description => $summary, application_type => $applicationType, - label => $datasetDisplayName, - key => $datasetDisplayName, - dataset_presenter_id => $datasetPresenterId, - summary => $summary })->getConfigurationObject(); - return $peaks; + label => "$datasetDisplayName - $subTrackName Smoothed", + key => "${datasetDisplayName}_${subTrackName}_Smoothed", + summary => $summary, + relative_path_to_file => $relativePath, + cov_max_score_default => 1000, # default + cov_min_score_default => 0 # default + })->getConfigurationObject(); + + push @smoothedTracks, $smoothed; } + return @smoothedTracks; } @@ -824,43 +864,6 @@ order by pan.name"; } -sub makeChipChipSmoothed { - my ($dataset, $study, $panName, $panId, $datasetProperties, $chipChipSeqDatasets, $applicationType) = @_; - - my $datasetDisplayName = $chipChipSeqDatasets->{$dataset}->{datasetDisplayName}; - my $summary = $chipChipSeqDatasets->{$dataset}->{summary}; - $summary =~ s/\n/ /g; - my $shortAttribution = $chipChipSeqDatasets->{$dataset}->{shortAttribution}; - - my $datasetKey = $datasetProperties->{$dataset}->{key}; - my $key = $panName; - my $subTrackAttr = $chipChipSeqDatasets->{$dataset}->{subTrackAttr}; - - my $queryParams = { - 'exp' => $dataset, - 'sub' => $subTrackAttr, - 'panId' => $panId, - }; - - my $smoothed = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipSmoothedTrackConfig->new({ - dataset_name => $dataset, - attribution => $shortAttribution, - study_display_name => $datasetDisplayName, - description => $summary, - query_params => $queryParams, - application_type => $applicationType, - pan_name => $panName, - cov_max_score_default => 3, - cov_min_score_default => 3, - label => $key, - key => $key, - summary => $summary, - })->getConfigurationObject(); - - return $smoothed; -} - - sub addNrdbProteinAlignments { my ($result, $datasetProperties, $nameForFileNames, $organismAbbrev, $projectName, $buildNumber, $applicationType, $datasetProps, $webservicesDir) = @_; my $proteinAlignTrack; From 6b8cb160ab8fa9600f2b48ca7c8c6d1cb5246d38 Mon Sep 17 00:00:00 2001 From: Bindu Gajria Date: Tue, 17 Feb 2026 17:20:17 -0500 Subject: [PATCH 7/8] numerous fixes for ChipChip peak and smoothed tracks --- .../ChipChipPeakTrackConfig.pm | 5 + .../ChipChipSmoothedTrackConfig.pm | 4 +- Model/lib/perl/JbrowseOrgSpecificNaTracks.pm | 132 ++++++++++-------- 3 files changed, 79 insertions(+), 62 deletions(-) diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm index 977699b73b..edc4a498e7 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm @@ -8,6 +8,10 @@ use ApiCommonModel::Model::JBrowseTrackConfig::BedStore; sub getGlyph {$_[0]->{glyph} } sub setGlyph {$_[0]->{glyph} = $_[1]} +sub getUrl {$_[0]->{url} } +sub setUrl {$_[0]->{url} = $_[1]} + + sub new { my ($class, $args) = @_; my $self = $class->SUPER::new($args); @@ -21,6 +25,7 @@ sub new { $self->setId($args->{key}); $self->setLabel($args->{label}); $self->setGlyph($args->{glyph}); + $self->setUrl($args->{relative_path_to_file}); # $self->setDisplayMode(undef); # $self->setGlyph(undef); diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm index 77ec2fa246..f9e2ad626c 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm @@ -29,8 +29,8 @@ sub new { $self->setCovMinScoreDefault(defined $args->{cov_min_score_default} ? $args->{cov_min_score_default} : 0); #TODO - #$self->setTrackTypeDisplay("XYPlot"); - ### $self->setDisplayType("JBrowse/View/Track/CanvasFeatures"); + $self->setTrackTypeDisplay("XYPlot"); + $self->setDisplayType("JBrowse/View/Track/CanvasFeatures"); my $store; diff --git a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm index f75b642967..c2a96f0133 100644 --- a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm +++ b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm @@ -66,7 +66,7 @@ sub processOrganism { &addSynteny($applicationType, $dbh, $result, $organismAbbrev); &addDatasets($dbh, \%datasets, \%strain) unless($isApollo); - &addChipChipTracks($dbh, $result, $datasetProperties, $organismAbbrev, $nameForFileNames, $applicationType); + &addChipChipTracks($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber,$nameForFileNames, $applicationType); &addSmallNcRnaSeq($datasetProperties, $projectName, $buildNumber, $nameForFileNames, $applicationType, $result); &addLowComplexity($result, $datasetProps, $webservicesDir, $nameForFileNames, $projectName, $applicationType, $buildNumber); @@ -738,26 +738,52 @@ sub addUnifiedMassSpec { } +# my $hasScaffold = $datasetProps->{hasScaffold} ? $datasetProps->{hasScaffold} : {}; + sub addChipChipTracks { - my ($dbh, $result, $datasetProperties, $organismAbbrev, $nameForFileNames, $applicationType) = @_; + my ($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType) = @_; my $chipChipSeqDatasets = $datasetProperties->{chipchip} ? $datasetProperties->{chipchip} : {}; + # get sample names for each dataset + my $dataFile = "/var/www/Common/apiSiteFilesMirror/webServices/$projectName/build-${buildNumber}/${nameForFileNames}/genomeBrowser/config/jbrowse.conf"; + my %cc_data; #to store sample names for each dataset + + open my $fh, '<', $dataFile or die "Could not open file '$dataFile': $!"; + while (my $line = <$fh>) { + chomp $line; + if ($line =~ /^chipchip::/ && $line =~ /::panName=/) { + my @parts = split(/::/, $line); + my $dataset_key = $parts[1]; + my $pan_name_part = $parts[-1]; + my $sample_name; + if ($pan_name_part =~ /^panName=(.*)$/) { + $sample_name = $1; + $sample_name =~ s/_peaks\s+\(ChIP-chip\)$//; + push @{$cc_data{$dataset_key}}, $sample_name; + } + } + } + close $fh; + #print Dumper \%cc_data; + + # get data from auto_generated prop file foreach my $dataset (keys %$chipChipSeqDatasets){ next unless($dataset =~ /chipChipExper/); - my @peakTracks = &makeChipChipPeak($dataset, $datasetProperties, $nameForFileNames, $applicationType); - push @{$result->{tracks}}, @peakTracks; + foreach my $sample (@{$cc_data{$dataset}}) { # for each + my @peakTracks = &makeChipChipPeak($result, $sample, $dataset, $datasetProperties, $nameForFileNames, $applicationType); + push @{$result->{tracks}}, @peakTracks; - my @smoothedTracks = &makeChipChipSmoothed($dataset, $datasetProperties, $nameForFileNames, $applicationType); - push @{$result->{tracks}}, @smoothedTracks; + my @smoothedTracks = &makeChipChipSmoothed($result, $sample, $dataset, $datasetProperties, $nameForFileNames, $applicationType); + push @{$result->{tracks}}, @smoothedTracks; + } } - } - + sub makeChipChipPeak { - my ($dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; + my ($result, $sample, $dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; my $chipChipSeqDatasets = $datasetProperties->{chipchip}; my $datasetName = $chipChipSeqDatasets->{$dataset}->{datasetName}; my $datasetDisplayName = $chipChipSeqDatasets->{$dataset}->{datasetDisplayName}; @@ -769,66 +795,52 @@ sub makeChipChipPeak { my $cutoff = $datasetProperties->{$dataset}->{cutoff} || 0; my $colorFunction = $cutoff ? "colorSegmentByScore" : "chipColor"; - my $subTrackAttr = $chipChipSeqDatasets->{$dataset}->{subTrackAttr}; - my @subTracks = split(/\;/, $subTrackAttr); - my @peakTracks; - - foreach my $subTrackName (@subTracks) { # Loop through sub-tracks - my $relativePath = "${nameForFileNames}/chipChip/bed/${datasetName}/${subTrackName}_peaks.bed.gz"; - #print Dumper "PEAK PATH $relativePath"; - - my $peaks = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipPeakTrackConfig->new({ - dataset_name => $dataset, - attribution => $shortAttribution, - description => $summary, - application_type => $applicationType, - label => "$datasetDisplayName - $subTrackName Peaks", - key => "${datasetDisplayName}_${subTrackName}_Peaks", - dataset_presenter_id => $datasetPresenterId, - summary => $summary, - relative_path_to_file => $relativePath - })->getConfigurationObject(); - push @peakTracks, $peaks; - } - return @peakTracks; -} + my $relativePath = "${nameForFileNames}/chipChip/bed/${datasetName}/${sample}.bed.gz"; + + my $peaks = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipPeakTrackConfig->new({ + dataset_name => $dataset, + study_display_name => $datasetDisplayName, + attribution => $shortAttribution, + description => $summary, + application_type => $applicationType, + label => "$sample Peaks", + key => "$sample Peaks", + dataset_presenter_id => $datasetPresenterId, + summary => $summary, + relative_path_to_file => $relativePath + })->getConfigurationObject(); + push @{$result->{tracks}}, $peaks; + +} sub makeChipChipSmoothed { - my ($dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; + my ($result, $sample, $dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; my $chipChipSeqDatasets = $datasetProperties->{chipchip}; my $datasetName = $chipChipSeqDatasets->{$dataset}->{datasetName}; my $datasetDisplayName = $chipChipSeqDatasets->{$dataset}->{datasetDisplayName}; my $datasetPresenterId = $chipChipSeqDatasets->{$dataset}->{presenterId}; my $summary = $chipChipSeqDatasets->{$dataset}->{summary}; $summary =~ s/\n/ /g; - my $shortAttribution = $chipChipSeqDatasets->{$dataset}->{shortAttribution}; - - my $subTrackAttr = $chipChipSeqDatasets->{$dataset}->{subTrackAttr}; - my @subTracks = split(/\;/, $subTrackAttr); - my @smoothedTracks; - - foreach my $subTrackName (@subTracks) { # Loop through sub-tracks - my $relativePath = "${nameForFileNames}/chipChip/bigwig/${datasetName}/${subTrackName}.bw"; - #print Dumper "SMOOTH PATH $relativePath\n"; - - my $smoothed = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipSmoothedTrackConfig->new({ - dataset_name => $dataset, - attribution => $shortAttribution, - study_display_name => $datasetDisplayName, - description => $summary, - application_type => $applicationType, - label => "$datasetDisplayName - $subTrackName Smoothed", - key => "${datasetDisplayName}_${subTrackName}_Smoothed", - summary => $summary, - relative_path_to_file => $relativePath, - cov_max_score_default => 1000, # default - cov_min_score_default => 0 # default - })->getConfigurationObject(); - - push @smoothedTracks, $smoothed; - } - return @smoothedTracks; + my $shortAttribution = $chipChipSeqDatasets->{$dataset}->{shortAttribution}; + + my $relativePath = "${nameForFileNames}/chipChip/bigwig/${datasetName}/${sample}.bw"; + + my $smoothed = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipSmoothedTrackConfig->new({ + dataset_name => $dataset, + study_display_name => $datasetDisplayName, + attribution => $shortAttribution, + study_display_name => $datasetDisplayName, + description => $summary, + application_type => $applicationType, + label => $sample, + key => $sample, + summary => $summary, + relative_path_to_file => $relativePath, + cov_max_score_default => 1000, # default + cov_min_score_default => 0 # default + })->getConfigurationObject(); + push @{$result->{tracks}}, $smoothed; } From 40418ff2c6736c8c52964496cdfe3eb7b27e6142 Mon Sep 17 00:00:00 2001 From: Bindu Gajria Date: Thu, 19 Feb 2026 09:04:16 -0500 Subject: [PATCH 8/8] minor changes, and debugging --- .../JBrowseTrackConfig/ChipChipPeakTrackConfig.pm | 6 +++++- .../ChipChipSmoothedTrackConfig.pm | 10 +++++++++- Model/lib/perl/JbrowseOrgSpecificNaTracks.pm | 12 ++++++------ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm index edc4a498e7..8d0d71e7c5 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm @@ -2,6 +2,7 @@ package ApiCommonModel::Model::JBrowseTrackConfig::ChipChipPeakTrackConfig; use base qw(ApiCommonModel::Model::JBrowseTrackConfig::Segments); use strict; use warnings; +use Data::Dumper; use ApiCommonModel::Model::JBrowseTrackConfig::BedStore; @@ -25,8 +26,11 @@ sub new { $self->setId($args->{key}); $self->setLabel($args->{label}); $self->setGlyph($args->{glyph}); - $self->setUrl($args->{relative_path_to_file}); + $self->setUrl($args->{relative_path_to_file}); + my $uu = $self->getUrl(); + #print Dumper "PEAK CCPT url = $uu"; + # $self->setDisplayMode(undef); # $self->setGlyph(undef); diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm index f9e2ad626c..84e05a73cb 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm @@ -2,13 +2,16 @@ package ApiCommonModel::Model::JBrowseTrackConfig::ChipChipSmoothedTrackConfig; use base qw(ApiCommonModel::Model::JBrowseTrackConfig::CoverageTrackConfig); use strict; use warnings; - +use Data::Dumper; use ApiCommonModel::Model::JBrowseTrackConfig::BigWigStore; sub getGlyph {$_[0]->{glyph} } sub setGlyph {$_[0]->{glyph} = $_[1]} +sub getUrl {$_[0]->{url} } +sub setUrl {$_[0]->{url} = $_[1]} + sub new { my ($class, $args) = @_; @@ -22,6 +25,11 @@ sub new { $self->setLabel($args->{label}); $self->setGlyph($args->{glyph}); + $self->setUrl($args->{relative_path_to_file}); + my $uu = $self->getUrl(); + #print Dumper "SMOOTH CCST url = $uu"; + + # $self->setDisplayMode(undef); # $self->setGlyph(undef); diff --git a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm index c2a96f0133..c8057e0349 100644 --- a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm +++ b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm @@ -772,10 +772,10 @@ sub addChipChipTracks { next unless($dataset =~ /chipChipExper/); foreach my $sample (@{$cc_data{$dataset}}) { # for each - my @peakTracks = &makeChipChipPeak($result, $sample, $dataset, $datasetProperties, $nameForFileNames, $applicationType); + my @peakTracks = &makeChipChipPeak($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType, $sample, $dataset); push @{$result->{tracks}}, @peakTracks; - my @smoothedTracks = &makeChipChipSmoothed($result, $sample, $dataset, $datasetProperties, $nameForFileNames, $applicationType); + my @smoothedTracks = &makeChipChipSmoothed($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType, $sample, $dataset); push @{$result->{tracks}}, @smoothedTracks; } } @@ -783,7 +783,7 @@ sub addChipChipTracks { sub makeChipChipPeak { - my ($result, $sample, $dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; + my ($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType, $sample, $dataset) = @_; my $chipChipSeqDatasets = $datasetProperties->{chipchip}; my $datasetName = $chipChipSeqDatasets->{$dataset}->{datasetName}; my $datasetDisplayName = $chipChipSeqDatasets->{$dataset}->{datasetDisplayName}; @@ -794,7 +794,7 @@ sub makeChipChipPeak { my $cutoff = $datasetProperties->{$dataset}->{cutoff} || 0; my $colorFunction = $cutoff ? "colorSegmentByScore" : "chipColor"; - + #print Dumper "PEAK nameForFileNames $nameForFileNames"; my $relativePath = "${nameForFileNames}/chipChip/bed/${datasetName}/${sample}.bed.gz"; my $peaks = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipPeakTrackConfig->new({ @@ -815,7 +815,7 @@ sub makeChipChipPeak { } sub makeChipChipSmoothed { - my ($result, $sample, $dataset, $datasetProperties, $nameForFileNames, $applicationType) = @_; + my ($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType, $sample, $dataset) = @_; my $chipChipSeqDatasets = $datasetProperties->{chipchip}; my $datasetName = $chipChipSeqDatasets->{$dataset}->{datasetName}; my $datasetDisplayName = $chipChipSeqDatasets->{$dataset}->{datasetDisplayName}; @@ -823,7 +823,7 @@ sub makeChipChipSmoothed { my $summary = $chipChipSeqDatasets->{$dataset}->{summary}; $summary =~ s/\n/ /g; my $shortAttribution = $chipChipSeqDatasets->{$dataset}->{shortAttribution}; - + #print Dumper "SMOOTHED nameForFileNames $nameForFileNames"; my $relativePath = "${nameForFileNames}/chipChip/bigwig/${datasetName}/${sample}.bw"; my $smoothed = ApiCommonModel::Model::JBrowseTrackConfig::ChipChipSmoothedTrackConfig->new({