diff --git a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm index 867a4c6f5..8d0d71e7c 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipPeakTrackConfig.pm @@ -2,10 +2,16 @@ package ApiCommonModel::Model::JBrowseTrackConfig::ChipChipPeakTrackConfig; use base qw(ApiCommonModel::Model::JBrowseTrackConfig::Segments); use strict; use warnings; +use Data::Dumper; -use ApiCommonModel::Model::JBrowseTrackConfig::RestStore; +use ApiCommonModel::Model::JBrowseTrackConfig::BedStore; + +sub getGlyph {$_[0]->{glyph} } +sub setGlyph {$_[0]->{glyph} = $_[1]} + +sub getUrl {$_[0]->{url} } +sub setUrl {$_[0]->{url} = $_[1]} -use JSON; sub new { my ($class, $args) = @_; @@ -17,51 +23,65 @@ 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->setUrl($args->{relative_path_to_file}); + my $uu = $self->getUrl(); + #print Dumper "PEAK CCPT url = $uu"; + +# $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::BedStore->new($args); } else { # TODO + $store = ApiCommonModel::Model::JBrowseTrackConfig::BedStore->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 9574f3942..84e05a73c 100644 --- a/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm +++ b/Model/lib/perl/JBrowseTrackConfig/ChipChipSmoothedTrackConfig.pm @@ -2,16 +2,15 @@ package ApiCommonModel::Model::JBrowseTrackConfig::ChipChipSmoothedTrackConfig; use base qw(ApiCommonModel::Model::JBrowseTrackConfig::CoverageTrackConfig); use strict; use warnings; +use Data::Dumper; -use ApiCommonModel::Model::JBrowseTrackConfig::RestStore; +use ApiCommonModel::Model::JBrowseTrackConfig::BigWigStore; -use JSON; +sub getGlyph {$_[0]->{glyph} } +sub setGlyph {$_[0]->{glyph} = $_[1]} -sub getPanName {$_[0]->{pan_name}} -sub setPanName {$_[0]->{pan_name} = $_[1]} - -sub getBorderColor {$_[0]->{border_color}} -sub setBorderColor {$_[0]->{border_color} = $_[1]} +sub getUrl {$_[0]->{url} } +sub setUrl {$_[0]->{url} = $_[1]} sub new { @@ -22,27 +21,33 @@ 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->setCovMaxScoreDefault($args->{cov_max_score_default}); - $self->setCovMinScoreDefault($args->{cov_min_score_default}); + $self->setId($args->{key}); + $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); + + $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"); - ### $self->setDisplayType("JBrowse/View/Track/CanvasFeatures"); + $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::BigWigStore->new($args); } else { # TODO + $store = ApiCommonModel::Model::JBrowseTrackConfig::BigWigStore->new($args); } $self->setStore($store); @@ -53,7 +58,7 @@ sub new { sub getJBrowseStyle { my $self = shift; - my $jbrowseStyle = {}; + my $jbrowseStyle = $self->SUPER::getJBrowseStyle(); $jbrowseStyle->{height} = 40; $jbrowseStyle->{neg_color} = "{chipColor}"; @@ -62,17 +67,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 +77,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; } diff --git a/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm b/Model/lib/perl/JbrowseOrgSpecificNaTracks.pm index 6b837cf19..c8057e034 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($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber,$nameForFileNames, $applicationType); &addSmallNcRnaSeq($datasetProperties, $projectName, $buildNumber, $nameForFileNames, $applicationType, $result); &addLowComplexity($result, $datasetProps, $webservicesDir, $nameForFileNames, $projectName, $applicationType, $buildNumber); @@ -738,79 +738,109 @@ sub addUnifiedMassSpec { } +# my $hasScaffold = $datasetProps->{hasScaffold} ? $datasetProps->{hasScaffold} : {}; + sub addChipChipTracks { - my ($dbh, $result, $datasetProperties, $organismAbbrev, $applicationType) = @_; + my ($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $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"; + # 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 $sh = $dbh->prepare($sql); - $sh->execute(); - - while(my ($dataset, $study, $panName, $panId) = $sh->fetchrow_array()) { + foreach my $sample (@{$cc_data{$dataset}}) { # for each + my @peakTracks = &makeChipChipPeak($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType, $sample, $dataset); + push @{$result->{tracks}}, @peakTracks; - 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 @smoothedTracks = &makeChipChipSmoothed($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType, $sample, $dataset); + push @{$result->{tracks}}, @smoothedTracks; } } - - $sh->finish(); } 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 ($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType, $sample, $dataset) = @_; + 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}; - my $key = $panName; - my $subTrackAttr = $chipChipSeqDatasets->{$dataset}->{subTrackAttr}; my $cutoff = $datasetProperties->{$dataset}->{cutoff} || 0; my $colorFunction = $cutoff ? "colorSegmentByScore" : "chipColor"; - - my $queryParams = { - 'exp' => $dataset, - 'sub' => $subTrackAttr, - 'cutoff' => $cutoff, - 'panId' => $panId, - }; + #print Dumper "PEAK nameForFileNames $nameForFileNames"; + my $relativePath = "${nameForFileNames}/chipChip/bed/${datasetName}/${sample}.bed.gz"; 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; + 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 ($result, $datasetProperties, $webservicesDir, $projectName, $buildNumber, $nameForFileNames, $applicationType, $sample, $dataset) = @_; + 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}; + #print Dumper "SMOOTHED nameForFileNames $nameForFileNames"; + 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; } @@ -846,43 +876,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; 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 74647b65f..2c4095852 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; }