/usr/share/perl5/Circos/Track/Highlight.pm is in circos 0.64-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | package Circos::Track::Highlight;
=pod
=head1 NAME
Circos::Track::Link - routines for highlight tracks in Circos
=head1 SYNOPSIS
This module is not meant to be used directly.
=head1 DESCRIPTION
Circos is an application for the generation of publication-quality,
circularly composited renditions of genomic data and related
annotations.
Circos is particularly suited for visualizing alignments, conservation
and intra and inter-chromosomal relationships. However, Circos can be
used to plot any kind of 2D data in a circular layout - its use is not
limited to genomics. Circos' use of lines to relate position pairs
(ribbons add a thickness parameter to each end) is effective to
display relationships between objects or positions on one or more
scales.
All documentation is in the form of tutorials at L<http://www.circos.ca>.
=cut
# -------------------------------------------------------------------
use strict;
use warnings;
use base 'Exporter';
our @EXPORT = qw();
use Carp qw( carp confess croak );
use FindBin;
use GD::Image;
use Params::Validate qw(:all);
use lib "$FindBin::RealBin";
use lib "$FindBin::RealBin/../lib";
use lib "$FindBin::RealBin/lib";
use Circos::Configuration; # qw(%CONF $DIMS);
use Circos::Constants;
#use Circos::Colors;
use Circos::Debug;
use Circos::Image;
use Circos::Error;
#use Circos::Font;
#use Circos::Geometry;
#use Circos::SVG;
#use Circos::Image;
use Circos::Unit;
use Circos::Utils;
use Circos::URL;
use Memoize;
for my $f ( qw ( ) ) {
memoize($f);
}
# -------------------------------------------------------------------
sub draw_highlights {
# Draw hilight data for a given chromosome. If a test
# is included, then only highlights whose options pass
# the test will be drawn.
#
# The test is a hash of variable=>value pairs.
my ( $tracks, $default, $chr, $set, $ideogram, $test ) = @_;
for my $track ( sort { $a->{z} <=> $b->{z} } @$tracks ) {
my @param_path = ($track,$default);
next unless $track->{__data};
my $track_id = $track->{id};
Circos::printsvg(qq{<g id="highlight$track_id">}) if $SVG_MAKE;
# create a working list of highlights at a given z-depth
for my $datum ( sort {$a->{param}{z} <=> $b->{param}{z} } @{$track->{__data}} ) {
next unless $datum->{data}[0]{chr} eq $chr;
my $intersection = $datum->{data}[0]{set}->intersect( $Circos::KARYOTYPE->{$chr}{chr}{display_region}{accept} );
# call to old routine
#my $intersection = Circos::filter_data($datum->{data}[0]{set},$chr);
next unless $intersection->cardinality;
my $r0 = seek_parameter( "r0", $datum, @param_path );
my $r1 = seek_parameter( "r1", $datum, @param_path );
$r0 = unit_parse( $r0, $ideogram );
$r1 = unit_parse( $r1, $ideogram );
my $accept = 1;
if ($test) {
for my $param ( keys %$test ) {
my $value = seek_parameter( $param, $datum, @param_path ) || 0;
$accept &&= $value == $test->{$param};
}
}
next unless $accept;
if ( seek_parameter( "ideogram", $datum, @param_path ) ) {
$r0 = $DIMS->{ideogram}{ $ideogram->{tag} }{radius_inner};
$r1 = $DIMS->{ideogram}{ $ideogram->{tag} }{radius_outer};
} else {
my $offset = seek_parameter( "offset", $datum, @param_path );
$r0 += $offset if $offset;
$r1 += $offset if $offset;
}
my $url = seek_parameter( "url", $datum, @param_path );
$url = format_url(url=>$url,param_path=>[ $datum, @param_path]);
for my $subset ( $intersection->sets) {
Circos::slice(
image => $IM,
start => $subset->min,
end => $subset->max,
chr => $datum->{data}[0]{chr},
radius_from => $r0,
radius_to => $r1,
edgecolor => seek_parameter("stroke_color", $datum, @param_path),
edgestroke => seek_parameter("stroke_thickness", $datum, @param_path),
fillcolor => seek_parameter("fill_color", $datum, @param_path),
mapoptions => { url => $url },
);
}
}
Circos::printsvg(qq{</g>}) if $SVG_MAKE;
}
}
1;
|