├── DensityMap.pl ├── LICENSE ├── Manual DensityMap.pdf ├── README.md ├── colours.txt ├── dmel ├── dmel.gff3.gz ├── egn.svg └── te.svg ├── install.sh ├── scaleColorDrawer.pl └── scales.svg /DensityMap.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | 3 | use strict; 4 | use diagnostics; 5 | use warnings; 6 | use Getopt::Long; 7 | #use Term::ANSIColor; 8 | #use Data::Dumper; 9 | use GD::SVG; 10 | use POSIX; 11 | use Cwd 'abs_path'; 12 | use File::Basename; 13 | 14 | #> Setting Parameters 15 | 16 | 17 | ##> Define outputs colors 18 | #print STDOUT color 'blue'; 19 | #print STDERR color 'red'; 20 | 21 | 22 | ##> Define options 23 | my %config; 24 | GetOptions (\%config, 25 | 'input=s', 26 | 'region_file=s', 27 | 'type_to_draw=s', 28 | 'output_img_name=s', 29 | 'rounding_method=s', 30 | 'show_scale=i', 31 | 'str_width=i', 32 | 'str_space=i', 33 | 'space_chr=i', 34 | 'scale_factor=i', 35 | 'auto_scale_factor=i', 36 | 'background=s', 37 | 'transparency=s', 38 | 'lmargin=i', 39 | 'rmargin=i', 40 | 'tmargin=i', 41 | 'bmargin=i', 42 | 'label_strand_rotation=i', 43 | 'title=s', 44 | 'force', 45 | 'win_size=i', 46 | 'verbose', 47 | 'debug', 48 | 'colour_scale=i', 49 | 'gc=i', 50 | 'ft_family=s', 51 | 'ft_size=i'); 52 | 53 | 54 | ##> Print USAGE if --help 55 | if ($config{help}) {printUsage(1);} 56 | 57 | 58 | ##> Check if gff file exist, if no mandatory parameter are missing 59 | if (!exists $config{input} or 60 | !exists $config{output_img_name} or 61 | !exists $config{type_to_draw}) {printError ("\n!!!!gff, output_img_name, type_to_draw options are MANDATORY !!!!! \n\n\n", 0); printUsage(1);} 62 | #if (! -e $config{input}) {printError ("gff $config{input} not exist ! \n"); printUsage(1);} 63 | 64 | ##> Setting Global Variables 65 | my $paternType = "("; 66 | my $scaleAddWidth = 100; 67 | my $numMaxTicks; 68 | my $numTicks; 69 | my $chr_length; 70 | my $chr_length_reel; 71 | my $scale_factor; 72 | my $strand_width; 73 | my $strand_space; 74 | my $label_strand_rotation; 75 | my $picHeight; 76 | my $picWidth; 77 | my $colour_scale; 78 | my $count = 0; 79 | my $countGff = -1; 80 | my $win_size; 81 | my $rounding_method; 82 | my $gc_cs; 83 | my $font; 84 | my $fts = 16; 85 | my $space_chr; 86 | 87 | my %color; 88 | my %gffTypes; 89 | my %margin; 90 | my %order; 91 | $order{'-'} = "-"; 92 | $order{'+'} = "+"; 93 | $order{'both'} = "-;+"; 94 | $order{'fused'} = "-+"; 95 | $order{'all'} = "-;-+;+"; 96 | my %rand; 97 | my %offset; 98 | $offset{'x'} = 0; 99 | $offset{'y'} = 0; 100 | $offset{'x1'} = 0; 101 | $offset{'y1'} = 0; 102 | $offset{'x2'} = 0; 103 | $offset{'y2'} = 0; 104 | 105 | 106 | $| = 1; 107 | 108 | 109 | if (!exists $config{show_scale}) {$numMaxTicks = 50;} 110 | else {$numMaxTicks = $config{show_scale};} 111 | 112 | if (!exists $config{str_width}) {$strand_width = 50;} 113 | else {$strand_width = $config{str_width};} 114 | 115 | if (!exists $config{str_space}) {$strand_space = 50;} 116 | else {$strand_space = $config{str_space};} 117 | 118 | if (!exists $config{space_chr}) {$space_chr = 50;} 119 | else {$space_chr = $config{space_chr};} 120 | 121 | if ($config{auto_scale_factor}) {$scale_factor = 1;} 122 | elsif (!exists $config{scale_factor}) {$scale_factor = 1000;} 123 | else {$scale_factor = $config{scale_factor};} 124 | 125 | if (!exists $config{lmargin}) {$margin{l} = 50;} 126 | else {$margin{l} = $config{lmargin};} 127 | 128 | if (!exists $config{rmargin}) {$margin{r} = 50;} 129 | else {$margin{r} = $config{rmargin};} 130 | 131 | if (!exists $config{tmargin}) {$margin{t} = 50;} 132 | else {$margin{t} = $config{tmargin};} 133 | 134 | if (!exists $config{bmargin}) {$margin{b} = 50;} 135 | else {$margin{b} = $config{bmargin};} 136 | 137 | if (!exists $config{label_strand_rotation}) {$label_strand_rotation = 0;} 138 | else {$label_strand_rotation = $config{label_strand_rotation};} 139 | 140 | if (!exists $config{colour_scale}) {$colour_scale = 7;} 141 | else {$colour_scale = $config{colour_scale};} 142 | 143 | if (!exists $config{gc}) {$gc_cs = 7;} 144 | else {$gc_cs = $config{gc};} 145 | 146 | if (!exists $config{win_size}) {$win_size = 1;} 147 | else {$win_size = $config{win_size};} 148 | 149 | if (!exists $config{rounding_method}) {$rounding_method = "floor";} 150 | else {$rounding_method = $config{rounding_method};} 151 | 152 | if (!exists $config{ft_size}) {$fts = 16;} 153 | else {$fts = $config{ft_size};} 154 | 155 | print "gffs : $config{input}\n" if $config{verbose}; 156 | print "output_img_name : $config{output_img_name}\n" if $config{verbose}; 157 | ##> Setting parameters 158 | 159 | 160 | # -1. Load region if defined 161 | my %region; 162 | if ($config{region_file}) { 163 | open(REGION, "<$config{region_file}") or die "Can not open $config{region_file} ! "; 164 | while () { 165 | chomp; 166 | my @bed = split("\t"); 167 | $region{$bed[0]}{length} = $bed[2]-$bed[1]; 168 | $region{$bed[0]}{start} = $bed[1]; 169 | $region{$bed[0]}{end} = $bed[2]; 170 | } 171 | close REGION; 172 | } 173 | 174 | 175 | # 1. Get Image size 176 | ## 1.1 Height (+Check GFF validity) 177 | print "Searching Max Sequence Length ... \n" if $config{debug}; 178 | 179 | my $numOfGff = 0; 180 | my %listChr; 181 | my $maxSequenceLength = 0; 182 | 183 | open(GFF, "<$config{input}") or printError("Could not open $config{input}\n", 1); 184 | my $initHeadSeq; 185 | my $initSeq; 186 | my $switchInitFasta = 0; 187 | 188 | while () { 189 | chomp; 190 | if (/##sequence-region\s+(\S+)\s+\d+\s+(\d+)/) { 191 | $numOfGff++; 192 | $initHeadSeq = $1; 193 | $listChr{$initHeadSeq}{length} = $2; 194 | } 195 | if (/>(.+)/) { 196 | $initHeadSeq = $1; 197 | $switchInitFasta = 1; 198 | } 199 | elsif ($switchInitFasta) { 200 | $listChr{$initHeadSeq}{seq} .= $_; 201 | } 202 | } 203 | close GFF; 204 | 205 | if ($config{region_file}) { 206 | foreach my $k (keys %region){ 207 | $maxSequenceLength = ($region{$k}{length} > $maxSequenceLength) ? $region{$k}{length} : $maxSequenceLength; 208 | } 209 | } 210 | else { 211 | foreach my $k (keys %listChr){ 212 | $maxSequenceLength = ($listChr{$k}{length} > $maxSequenceLength) ? $listChr{$k}{length} : $maxSequenceLength; 213 | } 214 | } 215 | #foreach my $file (split(/;/, $config{input})){ 216 | # print "\tLooking at $file \n" if $config{debug}; 217 | # 218 | # open(GFF, "<$file") or die "Can not open $file ! \n"; 219 | # $numOfGff++; 220 | # 221 | # my $first_line = ; 222 | # printError ("Not GFF3 format ! (1)\n", 1) if $first_line !~ /##gff-version 3/; 223 | # 224 | # $first_line = ; 225 | # printError ("Not GFF3 format ! (2)\n", 1) if $first_line !~ /##sequence-region\s+[^\s]+\s+\d+\s+(\d+)/; 226 | # 227 | # $maxSequenceLength = ($1 > $maxSequenceLength) ? $1 : $maxSequenceLength; 228 | # close GFF; 229 | #} 230 | 231 | if ($config{title}) {$margin{'t'} += 40}; 232 | if ($config{auto_scale_factor}) { 233 | while (1) { 234 | $picHeight = $margin{'t'} 235 | + $margin{'b'} 236 | + (floor(($maxSequenceLength/$scale_factor)*$win_size)); 237 | last if ($picHeight < $config{auto_scale_factor}); 238 | $scale_factor *= 10; 239 | } 240 | print "Selected Scale Factor = $scale_factor\n"; 241 | } 242 | else{ 243 | $picHeight = $margin{'t'} 244 | + $margin{'b'} 245 | + (floor(($maxSequenceLength/$scale_factor)*$win_size)); 246 | } 247 | 248 | ## 1.2 Width (+Check type option) 249 | my $numOfStrand = 0; 250 | 251 | my @type_array; 252 | foreach (split(/;/, $config{'type_to_draw'})){ 253 | if($_=~ /([^=]+)=([^=]+)/){ 254 | push @type_array, $1; 255 | 256 | if ($2 eq "-" or $2 eq "+" or $2 eq "fused") {$numOfStrand++;} 257 | elsif($2 eq "both") {$numOfStrand += 2;} 258 | elsif($2 eq "all") {$numOfStrand += 3;} 259 | else {printError("Type option : INVALID STRAND FORMAT, check help please.\n", 1);} 260 | } 261 | else {printError("Type option : INVALID FORMAT, check help please.\n", 1);} 262 | } 263 | 264 | $margin{'l'} = $margin{'l'} + $scaleAddWidth if ($config{show_scale}); 265 | $picWidth = $margin{'l'} 266 | + $margin{'r'} 267 | + (($numOfGff * $numOfStrand ) * $strand_width) 268 | #+ (($numOfGff * $numOfStrand - 1) * $strand_space); 269 | + (($numOfGff * ($numOfStrand - 1)) * $strand_space) 270 | + (($numOfGff - 1) * $space_chr); 271 | 272 | if ($config{gc}){ 273 | $picWidth += ($numOfGff * $strand_width) 274 | + ($numOfGff * $strand_space); 275 | } 276 | 277 | ## 1.3 Ask if image size is OK 278 | if (!$config{force}) { 279 | while (1) { 280 | print "Is the picture size will be ok ? ($picWidth px x $picHeight px) [y/n] : "; 281 | chomp (my $response = ); 282 | if ($response eq "n") {exit;} 283 | elsif ($response eq "y") {last;} 284 | } 285 | } 286 | 287 | # 2 Create picture 288 | print "Create Picture ...\n" if $config{'verbose'}; 289 | my $image = GD::SVG::Image->new($picWidth, $picHeight); 290 | 291 | 292 | # 3 Loading colors from colours.txt 293 | print "Load colours ...\n" if $config{'verbose'}; 294 | open(COLOR, "<".dirname(abs_path($0))."/colours.txt") or die "Can not open colours.txt"; 295 | while () { 296 | next if /^#/; 297 | /([\d\w]+);(\d+);(\d+);(\d+)/; 298 | $color{lc($1)} = $image->colorAllocate($2,$3,$4); 299 | } 300 | close COLOR; 301 | 302 | # 4 Draw Background 303 | if ($config{'background'}) { 304 | print "Draw background ...\n" if $config{'verbose'}; 305 | $image->filledRectangle(0, 0, $picWidth, $picHeight, $color{$config{'background'}}); 306 | } 307 | 308 | 309 | # 5 Drawing Title and Scale 310 | if ($config{title}){ 311 | if ($config{show_scale}) { 312 | $image->string( gdLargeFont, 313 | $scaleAddWidth + ($picWidth - $scaleAddWidth) / 2 - ((gdLargeFont->width * length $config{title})/2), 314 | 20 - ((gdLargeFont->height) / 2), 315 | $config{title}, 316 | $color{'black'}); 317 | } 318 | else { 319 | $image->string( gdLargeFont, 320 | $picWidth / 2 - ((gdLargeFont->width * length $config{title})/2), 321 | 20 - ((gdLargeFont->height) / 2), 322 | $config{title}, 323 | $color{'black'}); 324 | } 325 | } 326 | if ($config{show_scale}) { 327 | print "Drawing Scale ...\n" if $config{verbose}; 328 | my $scale_size = floor($maxSequenceLength/$scale_factor); 329 | print "Scale_size : $scale_size\n" if $config{debug}; 330 | drawScale(\$image, $scale_size, $maxSequenceLength, $scaleAddWidth, $scale_factor, $numMaxTicks, $margin{'t'}, $win_size); 331 | } 332 | 333 | 334 | # 6 Get Type/Strand 335 | foreach (split(/;/, $config{'type_to_draw'})){ 336 | $_=~ /([^=]+)=([^=]+)=?(\d*)/; 337 | 338 | print "type = $1\tstrand = $2\n" if $config{debug}; 339 | 340 | if ($3) {$gffTypes{$1}{colour} = $3;} 341 | else {$gffTypes{$1}{colour} = $colour_scale;} 342 | $gffTypes{$1}{strand} = $2; 343 | $gffTypes{$1}{'-'} = []; 344 | $gffTypes{$1}{'+'} = []; 345 | $gffTypes{$1}{'-+'} = []; 346 | 347 | $paternType .= $1.'|'; 348 | } 349 | #$paternType =~ s/\|$//g; 350 | $paternType .= 'centromere)'; 351 | print "Patern Regexp = $paternType\n" if $config{debug}; 352 | 353 | 354 | # 7 Foreach file draw strand(s) 355 | open(GFF, "<$config{input}") or printError("Could not open $config{input}\n", 1); 356 | my $seqName; 357 | my $switchFirstSetLoaded = 0; 358 | my %centromere; 359 | 360 | 361 | my $csv = $config{output_img_name}; 362 | $csv =~ s/.svg/.csv/g; 363 | open(CSV, ">$csv") or die "Can not open $csv ! "; 364 | print CSV "sequence\tfeature\tstart\tend\tdensity\n"; 365 | 366 | while () { 367 | if (/##sequence-region\s+(\S+)\s+\d+\s+(\d+)/) { 368 | if ($switchFirstSetLoaded){ 369 | processData(); 370 | $countGff++; 371 | } 372 | 373 | $switchFirstSetLoaded = 1; 374 | $seqName = $1; 375 | $chr_length_reel = $2; 376 | $chr_length = floor($chr_length_reel/$scale_factor); 377 | 378 | # 7.1 Load GFF 379 | print "Loading $seqName ...\n" if $config{verbose}; 380 | 381 | foreach (keys(%gffTypes)){ 382 | $gffTypes{$_}{'-'} = []; 383 | $gffTypes{$_}{'+'} = []; 384 | $gffTypes{$_}{'-+'} = []; 385 | } 386 | 387 | %centromere = (); 388 | 389 | } 390 | elsif ($seqName && /^$seqName/) { 391 | my @line = split(/\t/); 392 | 393 | next if $line[2] !~ /$paternType/; 394 | 395 | if ($line[2] eq "centromere") { 396 | $centromere{start} = $line[3]; 397 | $centromere{end} = $line[4]; 398 | next; 399 | } 400 | 401 | my $ref_tabM = $gffTypes{$line[2]}{'-'}; 402 | my $ref_tabP = $gffTypes{$line[2]}{'+'}; 403 | my $ref_tabMP = $gffTypes{$line[2]}{'-+'}; 404 | 405 | if ($line[6] eq "-") {push(@{$ref_tabM}, [$line[3], $line[4]]);} 406 | elsif ($line[6] eq "+") {push(@{$ref_tabP}, [$line[3], $line[4]]);} 407 | push(@{$ref_tabMP}, [$line[3], $line[4]]); 408 | } 409 | elsif(/##FASTA/) {last;} 410 | 411 | } 412 | close GFF; 413 | 414 | processData(); 415 | close CSV; 416 | 417 | # 8 Applying rotation to labels and Saving picture 418 | open(IMG, ">$config{output_img_name}") or die "Can not open $config{output_img_name} ! "; 419 | binmode IMG; 420 | my @text = split("\t", $image->svg); 421 | #if (!$config{transparency}) { 422 | my $switchRotate = 0; 423 | foreach (@text){ 424 | if ($config{label_strand_rotation} and //) {$switchRotate++;} 425 | elsif ($config{label_strand_rotation} and /<\/g>/ and $switchRotate) {$switchRotate--;} 426 | 427 | if ($switchRotate) {s/x="([\d\.]+)" y="([\d\.]+)"/x="$1" y="$2" transform="rotate($label_strand_rotation, $1, $2)"/;} 428 | 429 | if ($config{ft_family}) {s/font="Helvetica"/font-family="$config{ft_family}"/;} 430 | if ($fts != 16) {s/font-size="16"/font-size="$fts"/;} 431 | #s/stroke-opacity: 1.0; stroke-width: 1/stroke: none/g; 432 | #s/stroke-opacity: 1.0;/stroke: none;/g; 433 | s/stroke-opacity: 1.0;?//g; 434 | s/stroke-width: 1;?//g; 435 | s/stroke: rgb\(\d+,\d+,\d+\);?//g; 436 | s/ +/ /g; 437 | s/style=" /style="/g; 438 | s/;? " width/" width/g; 439 | print IMG $_; 440 | } 441 | #} 442 | 443 | #WAS USED FOR ADDING TRANSPARENCY ON MERGED TRACKS 444 | #else { 445 | # my $switch = 0; 446 | # my $switchRotate = 0; 447 | # 448 | # foreach (@text){ 449 | # #s/stroke\-width\: 1/stroke\-width\: 0/g; 450 | # s/stroke-opacity: 1.0; stroke-width: 1/stroke: none/g; 451 | # if (//) {$switch++;} 452 | # elsif (/<\/g>/ and $switch) {$switch--;} 453 | # 454 | # if (//) {$switchRotate++;} 455 | # elsif (/<\/g>/ and $switchRotate) {$switchRotate--;} 456 | # 457 | # if ($switch) { 458 | # s/fill-opacity: 1.0/fill-opacity: $config{transparency}/g; 459 | # s/stroke-opacity: 1.0; stroke-width: 1/stroke: none/g; 460 | # } 461 | # if ($switchRotate) {s/x="(\d+)" y="(\d+)"/x="$1" y="$2" transform="rotate(-45, $1, $2)"/;} 462 | # print IMG $_; 463 | # } 464 | #} 465 | 466 | close IMG; 467 | print "Image saved ! \n"; 468 | 469 | 470 | ########################################################################### 471 | ################################ Fonctions ################################ 472 | ########################################################################### 473 | sub processData{ 474 | # 7.2 Sorting intervals 475 | foreach (keys(%gffTypes)){ 476 | 477 | my $ref_tabM = $gffTypes{$_}{'-'}; 478 | my $ref_tabP = $gffTypes{$_}{'+'}; 479 | my $ref_tabMP = $gffTypes{$_}{'-+'}; 480 | 481 | @{$ref_tabM} = sort {$a->[0] <=> $b->[0]} @{$ref_tabM}; 482 | @{$ref_tabP} = sort {$a->[0] <=> $b->[0]} @{$ref_tabP}; 483 | @{$ref_tabMP} = sort {$a->[0] <=> $b->[0]} @{$ref_tabMP}; 484 | } 485 | 486 | # 7.3 Reducing intervals 487 | foreach (keys(%gffTypes)){ 488 | $gffTypes{$_}{'-'} = removeIntervalRedundancy(@{$gffTypes{$_}{'-'}}); 489 | $gffTypes{$_}{'+'} = removeIntervalRedundancy(@{$gffTypes{$_}{'+'}}); 490 | $gffTypes{$_}{'-+'} = removeIntervalRedundancy(@{$gffTypes{$_}{'-+'}}); 491 | } 492 | 493 | # 7.4 Set Offset 494 | foreach (@type_array){ 495 | if ($gffTypes{$_}{'strand'} eq "-") { 496 | $offset{$_}{'-'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 497 | $offset{$_}{'-'}{'y'} = $margin{'t'}; 498 | $count++; 499 | 500 | print "x = $offset{$_}{'-'}{'x'}\ny = $offset{$_}{'-'}{'y'}\n" if $config{debug}; 501 | } 502 | elsif ($gffTypes{$_}{'strand'} eq "+") { 503 | $offset{$_}{'+'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 504 | $offset{$_}{'+'}{'y'} = $margin{'t'}; 505 | $count++; 506 | 507 | print "+ = $offset{$_}{'+'}{'x'}\n+ = $offset{$_}{'+'}{'y'}\n" if $config{debug}; 508 | } 509 | elsif ($gffTypes{$_}{'strand'} eq "both") { 510 | $offset{$_}{'-'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 511 | $offset{$_}{'-'}{'y'} = $margin{'t'}; 512 | $count++; 513 | 514 | $offset{$_}{'+'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 515 | $offset{$_}{'+'}{'y'} = $margin{'t'}; 516 | $count++; 517 | 518 | print "+ = $offset{$_}{'-'}{'x'}\n+ = $offset{$_}{'-'}{'y'}\n- = $offset{$_}{'+'}{'x'}\n- = $offset{$_}{'+'}{'y'}\n" if $config{debug}; 519 | } 520 | elsif ($gffTypes{$_}{'strand'} eq "fused") { 521 | $offset{$_}{'-+'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 522 | $offset{$_}{'-+'}{'y'} = $margin{'t'}; 523 | $count++; 524 | 525 | print "f = $offset{$_}{'-+'}{'x'}\nf = $offset{$_}{'-+'}{'y'}\n" if $config{debug}; 526 | } 527 | elsif ($gffTypes{$_}{'strand'} eq "all") { 528 | $offset{$_}{'-'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 529 | $offset{$_}{'-'}{'y'} = $margin{'t'}; 530 | $count++; 531 | 532 | $offset{$_}{'-+'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 533 | $offset{$_}{'-+'}{'y'} = $margin{'t'}; 534 | $count++; 535 | 536 | $offset{$_}{'+'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 537 | $offset{$_}{'+'}{'y'} = $margin{'t'}; 538 | $count++; 539 | 540 | print "- = $offset{$_}{'-'}{'x'}\n- = $offset{$_}{'-'}{'y'}\nf = $offset{$_}{'-+'}{'x'}\nf = $offset{$_}{'-+'}{'y'}\n+ = $offset{$_}{'+'}{'x'}\n+ = $offset{$_}{'+'}{'y'}\n" if $config{debug}; 541 | } 542 | } 543 | 544 | if ($config{gc}){ 545 | $offset{'gc'}{'x'} = $margin{'l'} + ($count * $strand_width) + ($count * $strand_space) - ($countGff * $strand_space) + ($countGff * $space_chr); 546 | $offset{'gc'}{'y'} = $margin{'t'}; 547 | $count++; 548 | } 549 | 550 | foreach my $typeToDraw (@type_array){ 551 | print "typeToDraw = $typeToDraw\n" if $config{'debug'}; 552 | 553 | foreach my $strand (split(";", $order{$gffTypes{$typeToDraw}{'strand'}})){ 554 | print "strand = $strand\n" if $config{'debug'}; 555 | 556 | my $ref_tab = $gffTypes{$typeToDraw}{$strand}; 557 | my $cs = $gffTypes{$typeToDraw}{colour}; 558 | 559 | drawPixels(\$image, \%rand, $cs, $seqName, $chr_length, $scale_factor, $typeToDraw, $strand, $strand, \%centromere, $ref_tab, $win_size); 560 | } 561 | } 562 | 563 | if ($config{gc}){ 564 | printError("Fasta sequence is not in the gff file ! ", 1) if (!$listChr{$seqName}{seq}); 565 | drawPixelsGC(\$image, \%rand, $gc_cs, $seqName, $chr_length, $scale_factor, $win_size, \$listChr{$seqName}{seq}); 566 | } 567 | } 568 | ########################################################################### 569 | sub removeIntervalRedundancy{ 570 | 571 | # The purpose of this function is to remove or merging the feature of the gff 572 | # Input : sorted array of start - end array 573 | # Output : sorted array of start - end array without crossing intervals 574 | 575 | #my ($ref_intervalsFused, @gff) = @_; 576 | my (@gff) = @_; 577 | my @reduced_gff; 578 | my $bool_firstInterval = 1; 579 | 580 | print "Start removeIntervalRedundancy ... \n" if $config{'verbose'}; 581 | 582 | print "\tStarting gff size = ".@gff."\n" if $config{'verbose'}; 583 | 584 | 585 | foreach my $annot (@gff) { 586 | 587 | # The intervals of the gff have been sorted by 'start' before using this function 588 | # so only three case are possebles : 589 | # #1 Previous and current intervals crossing 590 | # #2 Current interval included in previous interval 591 | # #3 Current interval not inclued in previous interval 592 | 593 | ####################################################### 594 | ################### Possibles Cases ################### 595 | ####################################################### x + <- Current start/end interval 596 | # Start End # <-<-<- Previous interval 597 | ####################################################### 598 | #1 | x ] + # Intervales chevauchants 599 | #2 | x + ] # Intervales inclu dans le précédent 600 | #3 | | x + # Intervales non-chevauchants 601 | ####################################################### 602 | 603 | print "\t---> Current interval = $annot->[0], $annot->[1]\n" if $config{insaneDebugMode}; 604 | 605 | #Load first interval 606 | if ($bool_firstInterval) { 607 | print "\nLoad first interval\n" if $config{'insaneDebugMode'}; 608 | 609 | push(@reduced_gff, [$annot->[0], $annot->[1]]); 610 | $bool_firstInterval--; 611 | 612 | print "\tannot = $annot\n" if $config{insaneDebugMode}; 613 | print "\t\$annot->[0], \$annot->[1] = $annot->[0], $annot->[1]\n" if $config{insaneDebugMode}; 614 | print "\t\@reduced_gff size = ".@reduced_gff."\n\n" if $config{insaneDebugMode}; 615 | 616 | next; 617 | } 618 | 619 | if ($annot->[0] <= $reduced_gff[$#reduced_gff]->[1] and #1 620 | $annot->[1] > $reduced_gff[$#reduced_gff]->[1]) { 621 | # Replace previous end 622 | $reduced_gff[$#reduced_gff]->[1] = $annot->[1]; 623 | } 624 | elsif ($annot->[0] <= $reduced_gff[$#reduced_gff]->[1] and #2 625 | $annot->[1] <= $reduced_gff[$#reduced_gff]->[1]) { 626 | # Go to next interval 627 | next; 628 | } 629 | else { #3 630 | # Insert interval in reduced gff 631 | push(@reduced_gff, [$annot->[0], $annot->[1]]); 632 | } 633 | } #End foreach (@gff) 634 | 635 | print "\tFinal gff size = ".@reduced_gff."\n" if $config{'verbose'}; 636 | print "Finished\n" if $config{'verbose'}; 637 | 638 | return \@reduced_gff; 639 | } 640 | 641 | ########################################################################### 642 | sub drawScale{ 643 | 644 | # Drawing the scale on the left side of graph 645 | # Input : 646 | # - $ref_img -> reference of the image 647 | # - $chr_size -> chromosome/sequence size divided by scale_factor 648 | # - $chr_size_reel -> chromosome/sequence size 649 | # - $widthScale -> Width of the scale 650 | # - $basesPerPixel -> Number of bases per pixels (scale_factor) 651 | # - $maxTicks -> Number Max of ticks 652 | # - $marginTop -> size of top margin 653 | # Output : none 654 | 655 | my ($ref_img, $chr_size, $chr_size_reel, $widthScale, $basesPerPixel, $maxTicks, $marginTop, $win_size) = @_; 656 | my $basesPerTicks = 10; 657 | 658 | # Search the number of tick to use 659 | print "Start searching num ticks\n" if $config{debug}; 660 | while (1) { 661 | $numTicks = floor($chr_size/$basesPerTicks); 662 | print "basesPerTicks = $basesPerTicks \t numTicks = $numTicks\n" if $config{debug}; 663 | last if ($numTicks <= $maxTicks); 664 | $basesPerTicks*=10; 665 | } 666 | print "Found num ticks\n" if $config{debug}; 667 | 668 | # Define the 10^x bases to use as unit 669 | my $power = floor(log10($basesPerTicks*$basesPerPixel)); 670 | 671 | # Add label unit 672 | my $string = "(x10e$power bases)"; 673 | $$ref_img->string(gdSmallFont, 674 | $widthScale - 15 - (gdSmallFont->width * length $string), 675 | $marginTop - 5, 676 | $string, 677 | $color{'black'}); 678 | 679 | #Add ratio pixel base label (2 lines) 680 | $string = "(1 win = "; 681 | $$ref_img->string(gdSmallFont, 682 | $widthScale - 15 - (gdSmallFont->width * length "$basesPerPixel bases)"), 683 | $marginTop - 5 + gdSmallFont->height, 684 | $string, 685 | $color{'black'}); 686 | 687 | $string = "$basesPerPixel bases)"; 688 | $$ref_img->string(gdSmallFont, 689 | $widthScale - 15 - (gdSmallFont->width * length $string), 690 | $marginTop - 5 + (gdSmallFont->height * 2), 691 | $string, 692 | $color{'black'}); 693 | 694 | # Draw scale 695 | print "\$\$ref_img->filledRectangle($widthScale - 10, $marginTop, $widthScale - 8, $marginTop + $chr_size, \$color{'black'})\;\n" if $config{debug}; 696 | $$ref_img->filledRectangle($widthScale - 10, 697 | $marginTop, 698 | $widthScale - 8, 699 | $marginTop + $chr_size * $win_size, 700 | $color{'black'}); 701 | 702 | # Draw scale last tick 703 | $string = sprintf("%.2f", $chr_size_reel/(10**$power)); 704 | $$ref_img->string(gdLargeFont, 705 | #$widthScale - 15 - (gdLargeFont->width * length $string), 706 | $widthScale - 15, 707 | #$marginTop + $chr_size - 8, 708 | $marginTop + $chr_size * $win_size, 709 | $string, 710 | $color{'black'}); 711 | print "\$\$ref_img->filledRectangle($widthScale - 10, $marginTop + $chr_size - 1, $widthScale, $marginTop + $chr_size, \$color{'black'})\;\n" if $config{debug}; 712 | $$ref_img->filledRectangle($widthScale - 10, 713 | $marginTop + $chr_size * $win_size - 1, 714 | $widthScale, 715 | $marginTop + $chr_size * $win_size, 716 | $color{'black'}); 717 | 718 | #Draw scale other ticks 719 | for (my $currentTick = 0 ; $currentTick <= $numTicks ; $currentTick++) { 720 | $string = sprintf("%.2f", ((($basesPerTicks * $currentTick) * $basesPerPixel) /10**$power)); 721 | $string = 0 if ($currentTick == 0); 722 | $$ref_img->string(gdLargeFont, 723 | $widthScale - 15 -(gdLargeFont->width * length $string), 724 | $marginTop + ($basesPerTicks * $currentTick) * $win_size - 8, 725 | $string, 726 | $color{'black'}); 727 | 728 | print "\$\$ref_img->filledRectangle($widthScale - 10, $marginTop + ($basesPerTicks * $currentTick), $widthScale, $marginTop + ($basesPerTicks * $currentTick) + 1, \$color{'black'})\;\n" if $config{debug}; 729 | $$ref_img->filledRectangle($widthScale - 10, 730 | $marginTop + ($basesPerTicks * $currentTick) * $win_size, 731 | $widthScale, 732 | $marginTop + ($basesPerTicks * $currentTick) * $win_size + 1, 733 | $color{'black'}); 734 | } 735 | } 736 | 737 | ########################################################################### 738 | sub drawPixels{ 739 | 740 | # Draw each pixel of strand 741 | # Input : 742 | # - $ref_img -> ref of the image 743 | # - $ref_rand -> ref on the hash of random numbers 744 | # - $ref_colour_scale -> colour_scale to use for colors 745 | # - $chr_size -> Chromosome/Sequence size 746 | # - $scaleFactor -> Scale_factor 747 | # - $type -> current to draw (label) 748 | # - $strand -> current strand in process (label) 749 | # - $strandColor -> color to use with strand 750 | # - $ref_gff -> ref of the cureent strand gff 751 | # Ouput : none 752 | 753 | print "Start Drawing pixels ...\n" if $config{'verbose'}; 754 | 755 | my ($ref_img, $ref_rand, $cs, $seqName, $chr_size, $scaleFactor, $type, $strand, $strandColor, $ref_centromere, $ref_gff, $win_size) = @_; 756 | my @gff = @{$ref_gff}; 757 | my %centro = %{$ref_centromere}; 758 | my $randNum; 759 | my %intervals; 760 | my @previousBases = (0); 761 | 762 | # Search a unique random number 763 | while (1) { 764 | $randNum = int rand(1000); 765 | redo if $$ref_rand{$randNum}++; 766 | last; 767 | } 768 | 769 | print "\tchr_size = $chr_size\n" if $config{'debug'}; 770 | print "\tscaleFactor = $scaleFactor\n" if $config{'debug'}; 771 | print "\ttype = $type\n" if $config{'debug'}; 772 | print "\tstrand = $strand\n" if $config{'debug'}; 773 | 774 | # Open chromosome/sequence group 775 | $$ref_img->startGroup("${strand}_${randNum}"); 776 | 777 | # For each pixel of the chromosome/sequence 778 | my $posPic = 0; 779 | for (my $pos = 0 ; $pos <= $chr_size ; $pos++) { 780 | 781 | next if ($config{region_file} && (($pos*$scaleFactor) < $region{$seqName}{start} || ($pos*$scaleFactor+$scaleFactor) > $region{$seqName}{end})); 782 | $posPic++; 783 | 784 | # Get number of base covered by the previous on pixel crosssing interval 785 | my $basesCoverred = shift @previousBases; 786 | $basesCoverred = 0 if (!defined $basesCoverred); # if @previousBases is empty 787 | 788 | print "pos = $pos\n" if $config{'debug'}; 789 | print "basesCoverred Tab = -".join(" ", @previousBases)."-\n" if $config{'debug'}; 790 | print "basesCoverred = $basesCoverred (previous shift)\n" if $config{'debug'}; 791 | print "Start while\n" if $config{'debug'}; 792 | print "\$gff[0]->[0] = $gff[0]->[0]\n" if $config{'debug'}; 793 | #printError( "\$gff[0]->[0] undef ! \n") if(!defined($gff[0]->[0])); 794 | 795 | # while the end of gff is not reached and the next start is in the current pixel 796 | while (defined($gff[0]->[0]) and $gff[0]->[0] < ($pos * $scaleFactor)) { 797 | my $ref_interval= shift(@gff); 798 | 799 | last if (!defined $ref_interval->[0]); # = defined($gff[0]->[0]) avoid warnings 800 | 801 | # get clearly start and end 802 | $intervals{'start_reel'} = $ref_interval->[0]; 803 | $intervals{'end_reel'} = $ref_interval->[1]; 804 | 805 | print "\tstart_reel = $intervals{'start_reel'}\n" if $config{'debug'}; 806 | print "\tend_reel = $intervals{'end_reel'}\n" if $config{'debug'}; 807 | print "\tcheck position\n" if $config{'debug'}; 808 | 809 | # feature end is on current pixel 810 | if ($intervals{'end_reel'} < ($pos * $scaleFactor) ){ 811 | print "\tCase 1 : \$basesCoverred += $intervals{'end_reel'} - $intervals{'start_reel'}\n" if $config{'debug'}; 812 | print "\tCase 1 : \$basesCoverred += ".($intervals{'end_reel'} - $intervals{'start_reel'})."\n" if $config{'debug'}; 813 | $basesCoverred += $intervals{'end_reel'} - $intervals{'start_reel'}; # increment the base counting 814 | } 815 | 816 | # feature end is on next pixels 817 | else{ 818 | # determine on how much pixel the interval is crossing 819 | my $numPixelImpliy = floor(($intervals{'end_reel'} - $intervals{'start_reel'} - (($pos * $scaleFactor) - $intervals{'start_reel'}))/$scaleFactor); 820 | 821 | # Treating current position 822 | $basesCoverred += ($pos * $scaleFactor) - $intervals{'start_reel'}; 823 | print "\tCase 2 : \$basesCoverred += ($pos * $scaleFactor) - $intervals{'start_reel'}\n" if $config{'debug'}; 824 | 825 | # Treating the next full pixels 826 | for (my $i = 0 ; $i < $numPixelImpliy ; $i++){ 827 | print "\tCase 2 : \$previousBases[$i] += $scaleFactor\n" if $config{'debug'}; 828 | $previousBases[$i] += $scaleFactor; 829 | } 830 | 831 | # Treat the last not full pixel 832 | $previousBases[$numPixelImpliy] += (($intervals{'end_reel'} - $intervals{'start_reel'} - (($pos * $scaleFactor) - $intervals{'start_reel'}))%$scaleFactor); 833 | print "\tCase 2 : \$previousBases[$numPixelImpliy] += (($intervals{'end_reel'} - $intervals{'start_reel'} - (($pos * $scaleFactor) - $intervals{'start_reel'}))%$scaleFactor);\n" if $config{'debug'}; 834 | 835 | }# feature end is on next pixels 836 | 837 | print "\tbasesCoverred = $basesCoverred\n" if $config{'debug'}; 838 | 839 | }# while ($intervalsTabM[0]->[0] < ($pos * $scaleFactor)) 840 | 841 | print "Stop while\n" if $config{'debug'}; 842 | 843 | # Compute percentage of base coverage 844 | my $percentage; 845 | if ($rounding_method eq "floor") {$percentage = floor(($basesCoverred/$scaleFactor) * 100);} 846 | elsif ($rounding_method eq "ceil" ) {$percentage = ceil (($basesCoverred/$scaleFactor) * 100);} 847 | 848 | print "percentage = $basesCoverred/$scaleFactor = ".($basesCoverred/$scaleFactor)."\n" if $config{'debug'}; 849 | print "percentage = $percentage % \n\n" if $config{'debug'}; 850 | print "$pos = ${cs}_heatmap$percentage\n" if $config{insaneDebugMode}; 851 | 852 | # kill if more than 100 % 853 | if ($percentage > 100) {printError("Higher than 100 % ($percentage % )", 1);} 854 | 855 | # Draw the current pixel 856 | if ($config{region_file}) { 857 | $$ref_img->filledRectangle($offset{$type}{$strand}{'x'}, $offset{$type}{$strand}{'y'} + $posPic * $win_size, 858 | $offset{$type}{$strand}{'x'} + $strand_width, $offset{$type}{$strand}{'y'} + $posPic * $win_size + $win_size, 859 | $color{"${cs}_heatmap$percentage"}); 860 | } 861 | else { 862 | $$ref_img->filledRectangle($offset{$type}{$strand}{'x'}, $offset{$type}{$strand}{'y'} + $pos * $win_size, 863 | $offset{$type}{$strand}{'x'} + $strand_width, $offset{$type}{$strand}{'y'} + $pos * $win_size + $win_size, 864 | $color{"${cs}_heatmap$percentage"}); 865 | } 866 | 867 | my $st = $pos * $scaleFactor; 868 | my $en = $pos * $scaleFactor + $scaleFactor; 869 | print CSV "$seqName\t$type\t$st\t$en\t$percentage\n"; 870 | 871 | }# End # For each pixel of the chromosome/sequence 872 | 873 | # Draw Centromere 874 | if (defined($centro{start})) { 875 | #Left Triangle 876 | my $poly = new GD::Polygon; 877 | $poly->addPt($offset{$type}{$strand}{'x'} - 1, ($offset{$type}{$strand}{'y'} + $$ref_centromere{start}/$scaleFactor)); 878 | $poly->addPt($offset{$type}{$strand}{'x'} - 1, ($offset{$type}{$strand}{'y'} + $$ref_centromere{end} /$scaleFactor)); 879 | $poly->addPt(($offset{$type}{$strand}{'x'} + $strand_width/2), ($offset{$type}{$strand}{'y'} + ($$ref_centromere{start}/$scaleFactor + $$ref_centromere{end}/$scaleFactor)/2)); 880 | $$ref_img->filledPolygon($poly, $color{$config{'background'}}); 881 | 882 | #Right Triangle 883 | $poly = new GD::Polygon; 884 | $poly->addPt($offset{$type}{$strand}{'x'} + $strand_width + 1, ($offset{$type}{$strand}{'y'} + $$ref_centromere{start}/$scaleFactor)); 885 | $poly->addPt($offset{$type}{$strand}{'x'} + $strand_width + 1, ($offset{$type}{$strand}{'y'} + $$ref_centromere{end} /$scaleFactor)); 886 | $poly->addPt(($offset{$type}{$strand}{'x'} + $strand_width/2), ($offset{$type}{$strand}{'y'} + ($$ref_centromere{start}/$scaleFactor + $$ref_centromere{end}/$scaleFactor)/2)); 887 | $$ref_img->filledPolygon($poly, $color{$config{'background'}}); 888 | } 889 | 890 | # Open label group for next rotation 891 | $$ref_img->startGroup("rotate_$randNum"); 892 | 893 | # Draw label Sequence Name 894 | $$ref_img->string(gdLargeFont, 895 | $offset{$type}{$strand}{'x'} + (($strand_width/2) - (length($seqName) * gdLargeFont->width)/2), 896 | $offset{$type}{$strand}{'y'} - (3 * gdLargeFont->height), 897 | $seqName, 898 | $color{'black'}); 899 | 900 | # Draw label type 901 | $$ref_img->string(gdLargeFont, 902 | $offset{$type}{$strand}{'x'} + (($strand_width/2) - (length($type) * gdLargeFont->width)/2), 903 | $offset{$type}{$strand}{'y'} - (2 * gdLargeFont->height), 904 | $type, 905 | $color{'black'}); 906 | # Close label group for next rotation 907 | $$ref_img->endGroup; 908 | 909 | # Draw strand label 910 | $$ref_img->string(gdLargeFont, 911 | $offset{$type}{$strand}{'x'} + (($strand_width/2) - (length($strand) * gdLargeFont->width)/2), 912 | $offset{$type}{$strand}{'y'} - gdLargeFont->height, 913 | $strand, 914 | $color{'black'}); 915 | 916 | # close chromosome/sequence group 917 | $$ref_img->endGroup; 918 | print "Finish Drawing pixels.\n" if $config{'verbose'}; 919 | } 920 | 921 | ########################################################################### 922 | sub drawPixelsGC{ 923 | 924 | # Draw each pixel of strand 925 | # Input : 926 | # - $ref_img -> ref of the image 927 | # - $ref_rand -> ref on the hash of random numbers 928 | # - $cs -> colour_scale to use for colors 929 | # - $seqName -> Name of the annotated sequence 930 | # - $chr_size -> Chromosome/Sequence size 931 | # - $scaleFactor -> Scale_factor 932 | # - $win_size -> Size of the printed window in pixel 933 | # - $ref_sequence -> sequence of the chromosome 934 | # Ouput : none 935 | 936 | print "Start Drawing pixels GC ...\n" if $config{'verbose'}; 937 | 938 | my ($ref_img, $ref_rand, $cs, $seqName, $chr_size, $scaleFactor, $win_size, $ref_sequence) = @_; 939 | my $randNum; 940 | 941 | # Search a unique random number 942 | while (1) { 943 | $randNum = int rand(1000); 944 | redo if $$ref_rand{$randNum}++; 945 | last; 946 | } 947 | 948 | print "\tchr_size = $chr_size\n" if $config{'debug'}; 949 | print "\tscaleFactor = $scaleFactor\n" if $config{'debug'}; 950 | 951 | # Open chromosome/sequence group 952 | $$ref_img->startGroup("+-_${randNum}"); 953 | 954 | # For each pixel of the chromosome/sequence 955 | my $posPic = 0; 956 | for (my $pos = 0 ; $pos <= $chr_size ; $pos++) { 957 | #Get next window sequence 958 | my $win_seq = substr $$ref_sequence, 0, $scaleFactor, ''; 959 | 960 | next if ($config{region_file} && (($pos*$scaleFactor) < $region{$seqName}{start} || ($pos*$scaleFactor+$scaleFactor) > $region{$seqName}{end})); 961 | $posPic++; 962 | 963 | #Count GC bases 964 | my $gcBases = $win_seq =~ tr/GC//; 965 | 966 | # Compute percentage of base coverage 967 | my $percentage; 968 | if ($rounding_method eq "floor") {$percentage = floor(($gcBases/$scaleFactor) * 100);} 969 | elsif ($rounding_method eq "ceil" ) {$percentage = ceil (($gcBases/$scaleFactor) * 100);} 970 | 971 | # kill if more than 100 % 972 | if ($percentage > 100) {printError("Higher than 100 % ($percentage % )", 1);} 973 | 974 | # Draw the current pixel 975 | if ($config{region_file}) { 976 | $$ref_img->filledRectangle($offset{gc}{'x'}, $offset{gc}{'y'} + $posPic * $win_size, 977 | $offset{gc}{'x'} + $strand_width, $offset{gc}{'y'} + $posPic * $win_size + $win_size, 978 | $color{"${cs}_heatmap$percentage"}); 979 | } 980 | else { 981 | $$ref_img->filledRectangle($offset{gc}{'x'}, $offset{gc}{'y'} + $pos * $win_size, 982 | $offset{gc}{'x'} + $strand_width, $offset{gc}{'y'} + $pos * $win_size + $win_size, 983 | $color{"${cs}_heatmap$percentage"}); 984 | } 985 | 986 | my $st = $pos * $scaleFactor; 987 | my $en = $pos * $scaleFactor + $scaleFactor; 988 | 989 | print CSV "$seqName\tGC%\t$st\t$en\t$percentage\n"; 990 | 991 | }# End # For each pixel of the chromosome/sequence 992 | 993 | # Open label group for next rotation 994 | $$ref_img->startGroup("rotate_$randNum"); 995 | 996 | # Draw label Sequence Name 997 | $$ref_img->string(gdLargeFont, 998 | $offset{gc}{'x'} + (($strand_width/2) - (length($seqName) * gdLargeFont->width)/2), 999 | $offset{gc}{'y'} - (3 * gdLargeFont->height), 1000 | $seqName, 1001 | $color{'black'}); 1002 | 1003 | # Draw label type 1004 | $$ref_img->string(gdLargeFont, 1005 | $offset{gc}{'x'} + (($strand_width/2) - (length("GC%") * gdLargeFont->width)/2), 1006 | $offset{gc}{'y'} - (2 * gdLargeFont->height), 1007 | "GC%", 1008 | $color{'black'}); 1009 | # Close label group for next rotation 1010 | $$ref_img->endGroup; 1011 | 1012 | # Draw strand label 1013 | $$ref_img->string(gdLargeFont, 1014 | $offset{gc}{'x'} + (($strand_width/2) - (length("-+") * gdLargeFont->width)/2), 1015 | $offset{gc}{'y'} - gdLargeFont->height, 1016 | "-+", 1017 | $color{'black'}); 1018 | 1019 | # close chromosome/sequence group 1020 | $$ref_img->endGroup; 1021 | print "Finish Drawing pixels.\n" if $config{'verbose'}; 1022 | } 1023 | 1024 | ########################################################################### 1025 | sub printError{ 1026 | my $string = shift; 1027 | my $exit = shift; 1028 | 1029 | print STDERR $string; 1030 | exit if $exit; 1031 | } 1032 | 1033 | ########################################################################### 1034 | sub printUsage{ 1035 | my $exit = shift; 1036 | 1037 | print STDOUT 1038 | "USAGE: DensityMap.pl -i chromosome.gff3 -ty 'match=all' -o Chromosome 1039 | 1040 | Options: 1041 | -i | input string Gff file (version gff3 only !) (Mandatory) 1042 | -re | region_file string A bed file describing the regions to plot 1043 | for each sequence to plot. Allow to plot 1044 | sepecific region and not whole sequence. 1045 | Exemple: 1046 | seq1\t100000\t200000 1047 | seq2\t200000\t350000 1048 | Format: file.gff or \"file1.gff;file2.gff\" 1049 | -o | output_img_name string Name of the output image (Mandatory) 1050 | -ty | type_to_draw string List of type (column 3 of gff) (Mandatory) 1051 | to draw, strand to use and color scale 1052 | Type: match, gene, CDS, ... 1053 | Strand: - - -> strand - 1054 | - + -> strand + 1055 | - both -> strand - and strand + 1056 | - fused -> Combination of strand - and strand + 1057 | - all -> strand - and strand + and fused 1058 | Format: \"match=all;gene=both;CDS=fused\" or 1059 | \"match=all=7;gene=both=7;CDS=fused=10\" 1060 | 1061 | Generic options: 1062 | -for | force Automaticaly answer yes to picture size validation 1063 | -v | verbose MORE text dude !!!! 1064 | -h | help This help 1065 | 1066 | Density options: 1067 | -c | colour_scale int Color scale to use (Default = 7) 1068 | -sc | scale_factor int = window length in bp (Default = 1000) 1069 | -a | auto_scale_factor int Max picture height in pixel 1070 | -ro | rounding_method string floor or ceil (Default = floor) 1071 | -gc | gc integer if set, add a density map of the GC% 1072 | 1073 | Graphical options: 1074 | -ti | title string Title to print on the picture 1075 | -w | win_size int Height of window in pixel (Default = 1) 1076 | -sh | show_scale int Draw scale, the integer indicate the maximum 1077 | tick to print on the scale (Default = 50) 1078 | -str_w | str_width int Strand width in pixel (Default = 50) 1079 | -str_s | str_space int Space between strands in pixel (Default = 50) 1080 | -sp | space_chr int Space between chromsomes (Default = 50) 1081 | -lm | lmargin int Left margin in pixel (Default = 50) 1082 | -rm | rmargin int Rigth margin in pixel (Default = 50) 1083 | -tm | tmargin int Top margin in pixel (Default = 50) 1084 | -bm | bmargin int Bottom margin in pixel (Default = 50) 1085 | -ba | background color Fill Background (Default = no Background) 1086 | -la | label_strand_rotation int Rotation degree of strand label (Default = 0) 1087 | -ft_f | ft-family string Font to use for text (Default = Helvetica) 1088 | -ft_s | ft-size int Size of the font (Default = 16) 1089 | 1090 | 1091 | This program is free software: you can redistribute it and/or modify 1092 | it under the terms of the GNU General Public License as published by 1093 | the Free Software Foundation, either version 3 of the License, or 1094 | any later version. 1095 | 1096 | This program is distributed in the hope that it will be useful, 1097 | but WITHOUT ANY WARRANTY; without even the implied warranty of 1098 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1099 | GNU General Public License for more details. 1100 | 1101 | You should have received a copy of the GNU General Public License 1102 | along with this program. If not, see . 1103 | \n\n"; 1104 | 1105 | # -d | debug Display debug info 1106 | # -i | insaneDebugMode So much prints !!!! 1107 | # -tr | transparency n Set transparency, integer between 0 and 1 included 1108 | 1109 | exit if $exit; 1110 | } 1111 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | {one line to give the program's name and a brief idea of what it does.} 635 | Copyright (C) {year} {name of author} 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | {project} Copyright (C) {year} {fullname} 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | 676 | -------------------------------------------------------------------------------- /Manual DensityMap.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sguizard/DensityMap/300fda3b1a142e3f4a06e66ae78d84fae2f2ba3d/Manual DensityMap.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DensityMap 2 | DensityMap is perl tool for the visualization of features density along chromosomes 3 | 4 | [DensityMap GUI](http://chicken-repeats.inra.fr/launchDM_form.php) 5 | 6 | [Study using DensityMap](http://chicken-repeats.inra.fr) 7 | -------------------------------------------------------------------------------- /colours.txt: -------------------------------------------------------------------------------- 1 | Grey;84;84;84 2 | Silver;192;192;192 3 | Greyb;190;190;190 4 | LightGray;211;211;211 5 | LightSlateGrey;119;136;153 6 | SlateGray;112;128;144 7 | SlateGray1;198;226;255 8 | SlateGray2;185;211;238 9 | SlateGray3;159;182;205 10 | SlateGray4;108;123;139 11 | black;0;0;0 12 | grey0;0;0;0 13 | grey1;3;3;3 14 | grey2;5;5;5 15 | grey3;8;8;8 16 | grey4;10;10;10 17 | grey5;13;13;13 18 | grey6;15;15;15 19 | grey7;18;18;18 20 | grey8;20;20;20 21 | grey9;23;23;23 22 | grey10;26;26;26 23 | grey11;28;28;28 24 | grey12;31;31;31 25 | grey13;33;33;33 26 | grey13b;34;34;34 27 | grey14;36;36;36 28 | grey15;38;38;38 29 | grey16;41;41;41 30 | grey17;43;43;43 31 | grey18;46;46;46 32 | grey19;48;48;48 33 | grey20;51;51;51 34 | grey21;54;54;54 35 | grey22;56;56;56 36 | grey23;59;59;59 37 | grey24;61;61;61 38 | grey25;64;64;64 39 | grey26;66;66;66 40 | grey27;69;69;69 41 | grey28;71;71;71 42 | grey29;74;74;74 43 | grey30;77;77;77 44 | grey31;79;79;79 45 | grey32;82;82;82 46 | grey33;84;84;84 47 | grey33;85;85;85 48 | grey34;87;87;87 49 | grey35;89;89;89 50 | grey36;92;92;92 51 | grey37;94;94;94 52 | grey38;97;97;97 53 | grey39;99;99;99 54 | grey40;102;102;102 55 | grey41;105;105;105 56 | grey42;107;107;107 57 | grey43;110;110;110 58 | grey44;112;112;112 59 | grey45;115;115;115 60 | grey46;117;117;117 61 | grey46b;119;119;119 62 | grey47;120;120;120 63 | grey48;122;122;122 64 | grey49;125;125;125 65 | grey50;127;127;127 66 | grey51;130;130;130 67 | grey52;133;133;133 68 | grey53;135;135;135 69 | grey53b;136;136;136 70 | grey54;138;138;138 71 | grey55;140;140;140 72 | grey56;143;143;143 73 | grey57;145;145;145 74 | grey58;148;148;148 75 | grey59;150;150;150 76 | grey60;153;153;153 77 | grey61;156;156;156 78 | grey62;158;158;158 79 | grey63;161;161;161 80 | grey64;163;163;163 81 | grey65;166;166;166 82 | grey66;168;168;168 83 | grey67;171;171;171 84 | grey68;173;173;173 85 | grey69;176;176;176 86 | grey70;179;179;179 87 | grey71;181;181;181 88 | grey72;184;184;184 89 | grey72b;187;187;187 90 | grey73;186;186;186 91 | grey74;189;189;189 92 | grey75;191;191;191 93 | grey76;194;194;194 94 | grey77;196;196;196 95 | grey78;199;199;199 96 | grey79;201;201;201 97 | grey80;204;204;204 98 | grey81;207;207;207 99 | grey82;209;209;209 100 | grey83;212;212;212 101 | grey84;214;214;214 102 | grey85;217;217;217 103 | grey86;219;219;219 104 | grey87;222;222;222 105 | grey87b;221;221;221 106 | grey88;224;224;224 107 | grey89;227;227;227 108 | grey90;229;229;229 109 | grey91;232;232;232 110 | grey92;235;235;235 111 | grey93;237;237;237 112 | grey93b;238;238;238 113 | grey94;240;240;240 114 | grey95;242;242;242 115 | grey96;245;245;245 116 | grey97;247;247;247 117 | grey98;250;250;250 118 | grey99;252;252;252 119 | White;255;255;255 120 | Dark_Slate_Grey;47;79;79 121 | Dim_Grey;84;84;84 122 | Very_Light_Grey;205;205;205 123 | Free_Speech_Grey;99;86;136 124 | Shades_of_Blue; 125 | AliceBlue;240;248;255 126 | BlueViolet;138;43;226 127 | Cadet_Blue;95;159;159 128 | CadetBlue;95;158;160 129 | CadetBlue;95;158;160 130 | CadetBlue1;152;245;255 131 | CadetBlue2;142;229;238 132 | CadetBlue3;122;197;205 133 | CadetBlue4;83;134;139 134 | Corn_Flower_Blue;66;66;111 135 | CornflowerBlue;100;149;237 136 | DarkSlateBlue;72;61;139 137 | DarkTurquoise;0;206;209 138 | DeepSkyBlue;0;191;255 139 | DeepSkyBlue1;0;191;255 140 | DeepSkyBlue2;0;178;238 141 | DeepSkyBlue3;0;154;205 142 | DeepSkyBlue4;0;104;139 143 | DodgerBlue;30;144;255 144 | DodgerBlue1;30;144;255 145 | DodgerBlue2;28;134;238 146 | DodgerBlue3;24;116;205 147 | DodgerBlue4;16;78;139 148 | LightBlue;173;216;230 149 | LightBlue1;191;239;255 150 | LightBlue2;178;223;238 151 | LightBlue3;154;192;205 152 | LightBlue4;104;131;139 153 | LightCyan;224;255;255 154 | LightCyan1;224;255;255 155 | LightCyan2;209;238;238 156 | LightCyan3;180;205;205 157 | LightCyan4;122;139;139 158 | LightSkyBlue;135;206;250 159 | LightSkyBlue1;176;226;255 160 | LightSkyBlue2;164;211;238 161 | LightSkyBlue3;141;182;205 162 | LightSkyBlue4;96;123;139 163 | LightSlateBlue;132;112;255 164 | LightSteelBlue;176;196;222 165 | LightSteelBlue1;202;225;255 166 | LightSteelBlue2;188;210;238 167 | LightSteelBlue3;162;181;205 168 | LightSteelBlue4;110;123;139 169 | Aquamarine;112;219;147 170 | MediumBlue;0;0;205 171 | MediumSlateBlue;123;104;238 172 | MediumTurquoise;72;209;204 173 | MidnightBlue;25;25;112 174 | NavyBlue;0;0;128 175 | PaleTurquoise;175;238;238 176 | PaleTurquoise1;187;255;255 177 | PaleTurquoise2;174;238;238 178 | PaleTurquoise3;150;205;205 179 | PaleTurquoise4;102;139;139 180 | PowderBlue;176;224;230 181 | RoyalBlue;65;105;225 182 | RoyalBlue1;72;118;255 183 | RoyalBlue2;67;110;238 184 | RoyalBlue3;58;95;205 185 | RoyalBlue4;39;64;139 186 | RoyalBlue5;0;34;102 187 | SkyBlue;135;206;235 188 | SkyBlue1;135;206;255 189 | SkyBlue2;126;192;238 190 | SkyBlue3;108;166;205 191 | SkyBlue4;74;112;139 192 | SlateBlue;106;90;205 193 | SlateBlue1;131;111;255 194 | SlateBlue2;122;103;238 195 | SlateBlue3;105;89;205 196 | SlateBlue4;71;60;139 197 | SteelBlue;70;130;180 198 | SteelBlue1;99;184;255 199 | SteelBlue2;92;172;238 200 | SteelBlue3;79;148;205 201 | SteelBlue4;54;100;139 202 | aquamarine;127;255;212 203 | aquamarine1;127;255;212 204 | aquamarine2;118;238;198 205 | aquamarine3;102;205;170 206 | aquamarine4;69;139;116 207 | azure;240;255;255 208 | azure1;240;255;255 209 | azure2;224;238;238 210 | azure3;193;205;205 211 | azure4;131;139;139 212 | blue;0;0;255 213 | blue1;0;0;255 214 | blue2;0;0;238 215 | blue3;0;0;205 216 | blue4;0;0;139 217 | aqua;0;255;255 218 | Iris_Blue;3;180;204 219 | cyan;0;255;255 220 | cyan1;0;255;255 221 | cyan2;0;238;238 222 | cyan3;0;205;205 223 | cyan4;0;139;139 224 | navy;0;0;128 225 | teal;0;128;128 226 | turquoise;64;224;208 227 | turquoise1;0;245;255 228 | turquoise2;0;229;238 229 | turquoise3;0;197;205 230 | turquoise4;0;134;139 231 | DarkSlateGray;47;79;79 232 | DarkSlateGray1;151;255;255 233 | DarkSlateGray2;141;238;238 234 | DarkSlateGray3;121;205;205 235 | DarkSlateGray4;82;139;139 236 | Dark_Slate_Blue;36;24;130 237 | Dark_Turquoise;112;147;219 238 | Medium_Slate_Blue;127;0;255 239 | Medium_Turquoise;112;219;219 240 | Midnight_Blue;47;47;79 241 | Navy_Blue;35;35;142 242 | Neon_Blue;77;77;255 243 | New_Midnight_Blue;0;0;156 244 | Rich_Blue;89;89;171 245 | Sky_Blue;50;153;204 246 | Slate_Blue;0;127;255 247 | Summer_Sky;56;176;222 248 | Iris_Blue;3;180;200 249 | Free_Speech_Blue;65;86;197 250 | RosyBrown;188;143;143 251 | RosyBrown1;255;193;193 252 | RosyBrown2;238;180;180 253 | RosyBrown3;205;155;155 254 | RosyBrown4;139;105;105 255 | SaddleBrown;139;69;19 256 | SandyBrown;244;164;96 257 | beige;245;245;220 258 | brown;165;42;42 259 | brown;166;42;42 260 | brown1;255;64;64 261 | brown2;238;59;59 262 | brown3;205;51;51 263 | brown4;139;35;35 264 | dark_brown;92;64;51 265 | burlywood;222;184;135 266 | burlywood1;255;211;155 267 | burlywood2;238;197;145 268 | burlywood3;205;170;125 269 | burlywood4;139;115;85 270 | baker's_chocolate;92;51;23 271 | chocolate;210;105;30 272 | chocolate1;255;127;36 273 | chocolate2;238;118;33 274 | chocolate3;205;102;29 275 | chocolate4;139;69;19 276 | peru;205;133;63 277 | tan;210;180;140 278 | tan1;255;165;79 279 | tan2;238;154;73 280 | tan3;205;133;63 281 | tan4;139;90;43 282 | Dark_Tan;151;105;79 283 | Dark_Wood;133;94;66 284 | Light_Wood;133;99;99 285 | Medium_Wood;166;128;100 286 | New_Tan;235;199;158 287 | Semi-Sweet_Chocolate;107;66;38 288 | Sienna;142;107;35 289 | Tan;219;147;112 290 | Very_Dark_Brown;92;64;51 291 | Dark_Green;47;79;47 292 | DarkGreen;0;100;0 293 | dark_green_copper;74;118;110 294 | DarkKhaki;189;183;107 295 | DarkOliveGreen;85;107;47 296 | DarkOliveGreen1;202;255;112 297 | DarkOliveGreen2;188;238;104 298 | DarkOliveGreen3;162;205;90 299 | DarkOliveGreen4;110;139;61 300 | olive;128;128;0 301 | DarkSeaGreen;143;188;143 302 | DarkSeaGreen1;193;255;193 303 | DarkSeaGreen2;180;238;180 304 | DarkSeaGreen3;155;205;155 305 | DarkSeaGreen4;105;139;105 306 | ForestGreen;34;139;34 307 | GreenYellow;173;255;47 308 | LawnGreen;124;252;0 309 | LightSeaGreen;32;178;170 310 | LimeGreen;50;205;50 311 | MediumSeaGreen;60;179;113 312 | MediumSpringGreen;0;250;154 313 | MintCream;245;255;250 314 | OliveDrab;107;142;35 315 | OliveDrab1;192;255;62 316 | OliveDrab2;179;238;58 317 | OliveDrab3;154;205;50 318 | OliveDrab4;105;139;34 319 | PaleGreen;152;251;152 320 | PaleGreen1;154;255;154 321 | PaleGreen2;144;238;144 322 | PaleGreen3;124;205;124 323 | PaleGreen4;84;139;84 324 | SeaGreen4;46;139;87 325 | SeaGreen1;84;255;159 326 | SeaGreen2;78;238;148 327 | SeaGreen3;67;205;128 328 | SpringGreen;0;255;127 329 | SpringGreen1;0;255;127 330 | SpringGreen2;0;238;118 331 | SpringGreen3;0;205;102 332 | SpringGreen4;0;139;69 333 | YellowGreen;154;205;50 334 | chartreuse;127;255;0 335 | chartreuse1;127;255;0 336 | chartreuse2;118;238;0 337 | chartreuse3;102;205;0 338 | chartreuse4;69;139;0 339 | green;0;255;0 340 | green;0;128;0 341 | lime;0;255;0 342 | green1;0;255;0 343 | green2;0;238;0 344 | green3;0;205;0 345 | green4;0;139;0 346 | khaki;240;230;140 347 | khaki1;255;246;143 348 | khaki2;238;230;133 349 | khaki3;205;198;115 350 | khaki4;139;134;78 351 | Dark_Olive_Green;79;79;47 352 | Green_Yellow;209;146;117 353 | Hunter_Green;142;35;35 354 | Forest_Green;35;142;35 355 | Medium_Forest_Green;219;219;112 356 | Medium_Sea_Green;66;111;66 357 | Medium_Spring_Green;127;255;0 358 | Pale_Green;143;188;143 359 | Sea_Green;35;142;104 360 | Spring_Green;0;255;127 361 | Free_Speech_Green;9;249;17 362 | Free_Speech_Aquamarine;2;157;116 363 | DarkOrange;255;140;0 364 | DarkOrange1;255;127;0 365 | DarkOrange2;238;118;0 366 | DarkOrange3;205;102;0 367 | DarkOrange4;139;69;0 368 | DarkSalmon;233;150;122 369 | LightCoral;240;128;128 370 | LightSalmon;255;160;122 371 | LightSalmon1;255;160;122 372 | LightSalmon2;238;149;114 373 | LightSalmon3;205;129;98 374 | LightSalmon4;139;87;66 375 | PeachPuff;255;218;185 376 | PeachPuff1;255;218;185 377 | PeachPuff2;238;203;173 378 | PeachPuff3;205;175;149 379 | PeachPuff4;139;119;101 380 | bisque;255;228;196 381 | bisque1;255;228;196 382 | bisque2;238;213;183 383 | bisque3;205;183;158 384 | bisque4;139;125;107 385 | coral;255;127;0 386 | coral;255;127;80 387 | coral1;255;114;86 388 | coral2;238;106;80 389 | coral3;205;91;69 390 | coral4;139;62;47 391 | honeydew;240;255;240 392 | honeydew1;240;255;240 393 | honeydew2;224;238;224 394 | honeydew3;193;205;193 395 | honeydew4;131;139;131 396 | orange;255;165;0 397 | orange1;255;165;0 398 | orange2;238;154;0 399 | orange3;205;133;0 400 | orange4;139;90;0 401 | salmon;250;128;114 402 | salmon1;255;140;105 403 | salmon2;238;130;98 404 | salmon3;205;112;84 405 | salmon4;139;76;57 406 | sienna;160;82;45 407 | sienna1;255;130;71 408 | sienna2;238;121;66 409 | sienna3;205;104;57 410 | sienna4;139;71;38 411 | Mandarian_Orange;142;35;35 412 | Orange;255;127;0 413 | Orange_Red;255;36;0 414 | DeepPink;255;20;147 415 | DeepPink1;255;20;147 416 | DeepPink2;238;18;137 417 | DeepPink3;205;16;118 418 | DeepPink4;139;10;80 419 | HotPink;255;105;180 420 | HotPink1;255;110;180 421 | HotPink2;238;106;167 422 | HotPink3;205;96;144 423 | HotPink4;139;58;98 424 | IndianRed;205;92;92 425 | IndianRed1;255;106;106 426 | IndianRed2;238;99;99 427 | IndianRed3;205;85;85 428 | IndianRed4;139;58;58 429 | LightPink;255;182;193 430 | LightPink1;255;174;185 431 | LightPink2;238;162;173 432 | LightPink3;205;140;149 433 | LightPink4;139;95;101 434 | MediumVioletRed;199;21;133 435 | MistyRose;255;228;225 436 | MistyRose1;255;228;225 437 | MistyRose2;238;213;210 438 | MistyRose3;205;183;181 439 | MistyRose4;139;125;123 440 | OrangeRed;255;69;0 441 | OrangeRed1;255;69;0 442 | OrangeRed2;238;64;0 443 | OrangeRed3;205;55;0 444 | OrangeRed4;139;37;0 445 | PaleVioletRed;219;112;147 446 | PaleVioletRed1;255;130;171 447 | PaleVioletRed2;238;121;159 448 | PaleVioletRed3;205;104;137 449 | PaleVioletRed4;139;71;93 450 | VioletRed;208;32;144 451 | VioletRed1;255;62;150 452 | VioletRed2;238;58;140 453 | VioletRed3;205;50;120 454 | VioletRed4;139;34;82 455 | firebrick;178;34;34 456 | firebrick1;255;48;48 457 | firebrick2;238;44;44 458 | firebrick3;205;38;38 459 | firebrick4;139;26;26 460 | pink;255;192;203 461 | pink1;255;181;197 462 | pink2;238;169;184 463 | pink3;205;145;158 464 | pink4;139;99;108 465 | Flesh;245;204;176 466 | Feldspar;209;146;117 467 | red;255;0;0 468 | red1;255;0;0 469 | red2;238;0;0 470 | red3;205;0;0 471 | red4;139;0;0 472 | tomato;255;99;71 473 | tomato1;255;99;71 474 | tomato2;238;92;66 475 | tomato3;205;79;57 476 | tomato4;139;54;38 477 | Dusty_Rose;133;99;99 478 | Firebrick;142;35;35 479 | Indian_Red;245;204;176 480 | Pink;188;143;143 481 | Salmon;111;66;66 482 | Scarlet;140;23;23 483 | Spicy_Pink;255;28;174 484 | Free_Speech_Magenta;227;91;216 485 | Free_Speech_Red;192;0;0 486 | DarkOrchid;153;50;204 487 | DarkOrchid1;191;62;255 488 | DarkOrchid2;178;58;238 489 | DarkOrchid3;154;50;205 490 | DarkOrchid4;104;34;139 491 | DarkViolet;148;0;211 492 | LavenderBlush;255;240;245 493 | LavenderBlush1;255;240;245 494 | LavenderBlush2;238;224;229 495 | LavenderBlush3;205;193;197 496 | LavenderBlush4;139;131;134 497 | MediumOrchid;186;85;211 498 | MediumOrchid1;224;102;255 499 | MediumOrchid2;209;95;238 500 | MediumOrchid3;180;82;205 501 | MediumOrchid4;122;55;139 502 | MediumPurple;147;112;219 503 | Medium_Orchid;147;112;219 504 | MediumPurple1;171;130;255 505 | Dark_Orchid;153;50;205 506 | MediumPurple2;159;121;238 507 | MediumPurple3;137;104;205 508 | MediumPurple4;93;71;139 509 | lavender;230;230;250 510 | magenta;255;0;255 511 | fuchsia;255;0;255 512 | magenta1;255;0;255 513 | magenta2;238;0;238 514 | magenta3;205;0;205 515 | magenta4;139;0;139 516 | maroon;176;48;96 517 | maroon1;255;52;179 518 | maroon2;238;48;167 519 | maroon3;205;41;144 520 | maroon4;139;28;98 521 | orchid;218;112;214 522 | Orchid;219;112;219 523 | orchid1;255;131;250 524 | orchid2;238;122;233 525 | orchid3;205;105;201 526 | orchid4;139;71;137 527 | plum;221;160;221 528 | plum1;255;187;255 529 | plum2;238;174;238 530 | plum3;205;150;205 531 | plum4;139;102;139 532 | purple;160;32;240 533 | purple;128;0;128 534 | purple1;155;48;255 535 | purple2;145;44;238 536 | purple3;125;38;205 537 | purple4;85;26;139 538 | thistle;216;191;216 539 | thistle1;255;225;255 540 | thistle2;238;210;238 541 | thistle3;205;181;205 542 | thistle4;139;123;139 543 | violet;238;130;238 544 | violet_blue;159;95;159 545 | Dark_Purple;135;31;120 546 | Maroon;128;0;0 547 | Medium_Violet_Red;219;112;147 548 | Neon_Pink;255;110;199 549 | Plum;234;173;234 550 | Thistle;216;191;216 551 | Turquoise;173;234;234 552 | Violet;79;47;79 553 | Violet_Red;204;50;153 554 | AntiqueWhite;250;235;215 555 | AntiqueWhite1;255;239;219 556 | AntiqueWhite2;238;223;204 557 | AntiqueWhite3;205;192;176 558 | AntiqueWhite4;139;131;120 559 | FloralWhite;255;250;240 560 | GhostWhite;248;248;255 561 | NavajoWhite;255;222;173 562 | NavajoWhite1;255;222;173 563 | NavajoWhite2;238;207;161 564 | NavajoWhite3;205;179;139 565 | NavajoWhite4;139;121;94 566 | OldLace;253;245;230 567 | WhiteSmoke;245;245;245 568 | gainsboro;220;220;220 569 | ivory;255;255;240 570 | ivory1;255;255;240 571 | ivory2;238;238;224 572 | ivory3;205;205;193 573 | ivory4;139;139;131 574 | linen;250;240;230 575 | seashell;255;245;238 576 | seashell1;255;245;238 577 | seashell2;238;229;222 578 | seashell3;205;197;191 579 | seashell4;139;134;130 580 | snow;255;250;250 581 | snow1;255;250;250 582 | snow2;238;233;233 583 | snow3;205;201;201 584 | snow4;139;137;137 585 | wheat;245;222;179 586 | wheat1;255;231;186 587 | wheat2;238;216;174 588 | wheat3;205;186;150 589 | wheat4;139;126;102 590 | white;255;255;255 591 | Quartz;217;217;243 592 | Wheat;216;216;191 593 | BlanchedAlmond;255;235;205 594 | DarkGoldenrod;184;134;11 595 | DarkGoldenrod1;255;185;15 596 | DarkGoldenrod2;238;173;14 597 | DarkGoldenrod3;205;149;12 598 | DarkGoldenrod4;139;101;8 599 | LemonChiffon;255;250;205 600 | LemonChiffon1;255;250;205 601 | LemonChiffon2;238;233;191 602 | LemonChiffon3;205;201;165 603 | LemonChiffon4;139;137;112 604 | LightGoldenrod;238;221;130 605 | LightGoldenrod1;255;236;139 606 | LightGoldenrod2;238;220;130 607 | LightGoldenrod3;205;190;112 608 | LightGoldenrod4;139;129;76 609 | LightGoldenrodYellow;250;250;210 610 | LightYellow;255;255;224 611 | LightYellow1;255;255;224 612 | LightYellow2;238;238;209 613 | LightYellow3;205;205;180 614 | LightYellow4;139;139;122 615 | PaleGoldenrod;238;232;170 616 | PapayaWhip;255;239;213 617 | cornsilk;255;248;220 618 | cornsilk1;255;248;220 619 | cornsilk2;238;232;205 620 | cornsilk3;205;200;177 621 | cornsilk4;139;136;120 622 | goldenrod;218;165;32 623 | goldenrod1;255;193;37 624 | goldenrod2;238;180;34 625 | goldenrod3;205;155;29 626 | goldenrod4;139;105;20 627 | moccasin;255;228;181 628 | yellow;255;255;0 629 | yellow1;255;255;0 630 | yellow2;238;238;0 631 | yellow3;205;205;0 632 | yellow4;139;139;0 633 | gold;255;215;0 634 | gold1;255;215;0 635 | gold2;238;201;0 636 | gold3;205;173;0 637 | gold4;139;117;0 638 | Goldenrod;219;219;112 639 | Medium_Goldenrod;234;234;174 640 | Yellow_Green;153;204;50 641 | copper;184;115;51 642 | cool_copper;217;135;25 643 | Green_Copper;133;99;99 644 | brass;181;166;66 645 | bronze;140;120;83 646 | bronze_II;166;125;61 647 | bright_gold;217;217;25 648 | Old_Gold;207;181;59 649 | CSS_Gold;204;153;0 650 | gold;205;127;50 651 | silver;230;232;250 652 | Light_Steel_Blue;84;84;84 653 | Steel_Blue;35;107;142 654 | 1_heatmap0;0;250;0 655 | 1_heatmap1;0;245;0 656 | 1_heatmap2;0;240;0 657 | 1_heatmap3;0;235;0 658 | 1_heatmap4;0;230;0 659 | 1_heatmap5;0;225;0 660 | 1_heatmap6;0;220;0 661 | 1_heatmap7;0;215;0 662 | 1_heatmap8;0;210;0 663 | 1_heatmap9;0;205;0 664 | 1_heatmap10;0;200;0 665 | 1_heatmap11;0;195;0 666 | 1_heatmap12;0;190;0 667 | 1_heatmap13;0;185;0 668 | 1_heatmap14;0;180;0 669 | 1_heatmap15;0;175;0 670 | 1_heatmap16;0;170;0 671 | 1_heatmap17;0;165;0 672 | 1_heatmap18;0;160;0 673 | 1_heatmap19;0;155;0 674 | 1_heatmap20;0;150;0 675 | 1_heatmap21;0;145;0 676 | 1_heatmap22;0;140;0 677 | 1_heatmap23;0;135;0 678 | 1_heatmap24;0;130;0 679 | 1_heatmap25;0;125;0 680 | 1_heatmap26;0;120;0 681 | 1_heatmap27;0;115;0 682 | 1_heatmap28;0;110;0 683 | 1_heatmap29;0;105;0 684 | 1_heatmap30;0;100;0 685 | 1_heatmap31;0;95;0 686 | 1_heatmap32;0;90;0 687 | 1_heatmap33;0;85;0 688 | 1_heatmap34;0;80;0 689 | 1_heatmap35;0;75;0 690 | 1_heatmap36;0;70;0 691 | 1_heatmap37;0;65;0 692 | 1_heatmap38;0;60;0 693 | 1_heatmap39;0;55;0 694 | 1_heatmap40;0;50;0 695 | 1_heatmap41;0;45;0 696 | 1_heatmap42;0;40;0 697 | 1_heatmap43;0;35;0 698 | 1_heatmap44;0;30;0 699 | 1_heatmap45;0;25;0 700 | 1_heatmap46;0;20;0 701 | 1_heatmap47;0;15;0 702 | 1_heatmap48;0;10;0 703 | 1_heatmap49;0;5;0 704 | 1_heatmap50;0;0;0 705 | 1_heatmap51;5;0;0 706 | 1_heatmap52;10;0;0 707 | 1_heatmap53;15;0;0 708 | 1_heatmap54;20;0;0 709 | 1_heatmap55;25;0;0 710 | 1_heatmap56;30;0;0 711 | 1_heatmap57;35;0;0 712 | 1_heatmap58;40;0;0 713 | 1_heatmap59;45;0;0 714 | 1_heatmap60;50;0;0 715 | 1_heatmap61;55;0;0 716 | 1_heatmap62;60;0;0 717 | 1_heatmap63;65;0;0 718 | 1_heatmap64;70;0;0 719 | 1_heatmap65;75;0;0 720 | 1_heatmap66;80;0;0 721 | 1_heatmap67;85;0;0 722 | 1_heatmap68;90;0;0 723 | 1_heatmap69;95;0;0 724 | 1_heatmap70;100;0;0 725 | 1_heatmap71;105;0;0 726 | 1_heatmap72;110;0;0 727 | 1_heatmap73;115;0;0 728 | 1_heatmap74;120;0;0 729 | 1_heatmap75;125;0;0 730 | 1_heatmap76;130;0;0 731 | 1_heatmap77;135;0;0 732 | 1_heatmap78;140;0;0 733 | 1_heatmap79;145;0;0 734 | 1_heatmap80;150;0;0 735 | 1_heatmap81;155;0;0 736 | 1_heatmap82;160;0;0 737 | 1_heatmap83;165;0;0 738 | 1_heatmap84;170;0;0 739 | 1_heatmap85;175;0;0 740 | 1_heatmap86;180;0;0 741 | 1_heatmap87;185;0;0 742 | 1_heatmap88;190;0;0 743 | 1_heatmap89;195;0;0 744 | 1_heatmap90;200;0;0 745 | 1_heatmap91;205;0;0 746 | 1_heatmap92;210;0;0 747 | 1_heatmap93;215;0;0 748 | 1_heatmap94;220;0;0 749 | 1_heatmap95;225;0;0 750 | 1_heatmap96;230;0;0 751 | 1_heatmap97;235;0;0 752 | 1_heatmap98;240;0;0 753 | 1_heatmap99;245;0;0 754 | 1_heatmap100;250;0;0 755 | 2_heatmap0;255;255;255 756 | 2_heatmap1;255;254;254 757 | 2_heatmap2;255;253;253 758 | 2_heatmap3;255;252;252 759 | 2_heatmap4;255;251;251 760 | 2_heatmap5;255;250;250 761 | 2_heatmap6;255;249;249 762 | 2_heatmap7;255;248;248 763 | 2_heatmap8;255;247;247 764 | 2_heatmap9;255;246;246 765 | 2_heatmap10;255;245;245 766 | 2_heatmap11;255;244;244 767 | 2_heatmap12;255;243;243 768 | 2_heatmap13;255;242;242 769 | 2_heatmap14;255;241;241 770 | 2_heatmap15;255;240;240 771 | 2_heatmap16;255;239;239 772 | 2_heatmap17;255;238;238 773 | 2_heatmap18;255;237;237 774 | 2_heatmap19;255;236;236 775 | 2_heatmap20;255;235;235 776 | 2_heatmap21;255;234;234 777 | 2_heatmap22;255;233;233 778 | 2_heatmap23;255;232;232 779 | 2_heatmap24;255;231;231 780 | 2_heatmap25;255;230;230 781 | 2_heatmap26;255;229;229 782 | 2_heatmap27;255;228;228 783 | 2_heatmap28;255;227;227 784 | 2_heatmap29;255;226;226 785 | 2_heatmap30;255;223;223 786 | 2_heatmap31;255;220;220 787 | 2_heatmap32;255;217;217 788 | 2_heatmap33;255;214;214 789 | 2_heatmap34;255;211;211 790 | 2_heatmap35;255;208;208 791 | 2_heatmap36;255;205;205 792 | 2_heatmap37;255;202;202 793 | 2_heatmap38;255;199;199 794 | 2_heatmap39;255;196;196 795 | 2_heatmap40;255;193;193 796 | 2_heatmap41;255;190;190 797 | 2_heatmap42;255;187;187 798 | 2_heatmap43;255;184;184 799 | 2_heatmap44;255;181;181 800 | 2_heatmap45;255;178;178 801 | 2_heatmap46;255;175;175 802 | 2_heatmap47;255;172;172 803 | 2_heatmap48;255;169;169 804 | 2_heatmap49;255;166;166 805 | 2_heatmap50;255;163;163 806 | 2_heatmap51;255;160;160 807 | 2_heatmap52;255;157;157 808 | 2_heatmap53;255;154;154 809 | 2_heatmap54;255;151;151 810 | 2_heatmap55;255;148;148 811 | 2_heatmap56;255;145;145 812 | 2_heatmap57;255;142;142 813 | 2_heatmap58;255;139;139 814 | 2_heatmap59;255;136;136 815 | 2_heatmap60;255;133;133 816 | 2_heatmap61;255;130;130 817 | 2_heatmap62;255;127;127 818 | 2_heatmap63;255;124;124 819 | 2_heatmap64;255;121;121 820 | 2_heatmap65;255;118;118 821 | 2_heatmap66;255;115;115 822 | 2_heatmap67;255;112;112 823 | 2_heatmap68;255;109;109 824 | 2_heatmap69;255;106;106 825 | 2_heatmap70;255;103;103 826 | 2_heatmap71;255;100;100 827 | 2_heatmap72;255;97;97 828 | 2_heatmap73;255;94;94 829 | 2_heatmap74;255;91;91 830 | 2_heatmap75;255;88;88 831 | 2_heatmap76;255;85;85 832 | 2_heatmap77;255;82;82 833 | 2_heatmap78;255;79;79 834 | 2_heatmap79;255;76;76 835 | 2_heatmap80;255;73;73 836 | 2_heatmap81;255;69;69 837 | 2_heatmap82;255;65;65 838 | 2_heatmap83;255;61;61 839 | 2_heatmap84;255;57;57 840 | 2_heatmap85;255;53;53 841 | 2_heatmap86;255;49;49 842 | 2_heatmap87;255;45;45 843 | 2_heatmap88;255;41;41 844 | 2_heatmap89;255;37;37 845 | 2_heatmap90;255;33;33 846 | 2_heatmap91;255;29;29 847 | 2_heatmap92;255;25;25 848 | 2_heatmap93;255;21;21 849 | 2_heatmap94;255;17;17 850 | 2_heatmap95;255;13;13 851 | 2_heatmap96;255;9;9 852 | 2_heatmap97;255;5;5 853 | 2_heatmap98;255;4;4 854 | 2_heatmap99;255;3;3 855 | 2_heatmap100;255;0;0 856 | 3_heatmap0;255;255;255 857 | 3_heatmap1;254;255;254 858 | 3_heatmap2;253;255;253 859 | 3_heatmap3;252;255;252 860 | 3_heatmap4;251;255;251 861 | 3_heatmap5;250;255;250 862 | 3_heatmap6;249;255;249 863 | 3_heatmap7;248;255;248 864 | 3_heatmap8;247;255;247 865 | 3_heatmap9;246;255;246 866 | 3_heatmap10;245;255;245 867 | 3_heatmap11;244;255;244 868 | 3_heatmap12;243;255;243 869 | 3_heatmap13;242;255;242 870 | 3_heatmap14;241;255;241 871 | 3_heatmap15;240;255;240 872 | 3_heatmap16;239;255;239 873 | 3_heatmap17;238;255;238 874 | 3_heatmap18;237;255;237 875 | 3_heatmap19;236;255;236 876 | 3_heatmap20;235;255;235 877 | 3_heatmap21;234;255;234 878 | 3_heatmap22;233;255;233 879 | 3_heatmap23;232;255;232 880 | 3_heatmap24;231;255;231 881 | 3_heatmap25;230;255;230 882 | 3_heatmap26;229;255;229 883 | 3_heatmap27;228;255;228 884 | 3_heatmap28;227;255;227 885 | 3_heatmap29;226;255;226 886 | 3_heatmap30;223;255;223 887 | 3_heatmap31;220;255;220 888 | 3_heatmap32;217;255;217 889 | 3_heatmap33;214;255;214 890 | 3_heatmap34;211;255;211 891 | 3_heatmap35;208;255;208 892 | 3_heatmap36;205;255;205 893 | 3_heatmap37;202;255;202 894 | 3_heatmap38;199;255;199 895 | 3_heatmap39;196;255;196 896 | 3_heatmap40;193;255;193 897 | 3_heatmap41;190;255;190 898 | 3_heatmap42;187;255;187 899 | 3_heatmap43;184;255;184 900 | 3_heatmap44;181;255;181 901 | 3_heatmap45;178;255;178 902 | 3_heatmap46;175;255;175 903 | 3_heatmap47;172;255;172 904 | 3_heatmap48;169;255;169 905 | 3_heatmap49;166;255;166 906 | 3_heatmap50;163;255;163 907 | 3_heatmap51;160;255;160 908 | 3_heatmap52;157;255;157 909 | 3_heatmap53;154;255;154 910 | 3_heatmap54;151;255;151 911 | 3_heatmap55;148;255;148 912 | 3_heatmap56;145;255;145 913 | 3_heatmap57;142;255;142 914 | 3_heatmap58;139;255;139 915 | 3_heatmap59;136;255;136 916 | 3_heatmap60;133;255;133 917 | 3_heatmap61;130;255;130 918 | 3_heatmap62;127;255;127 919 | 3_heatmap63;124;255;124 920 | 3_heatmap64;121;255;121 921 | 3_heatmap65;118;255;118 922 | 3_heatmap66;115;255;115 923 | 3_heatmap67;112;255;112 924 | 3_heatmap68;109;255;109 925 | 3_heatmap69;106;255;106 926 | 3_heatmap70;103;255;103 927 | 3_heatmap71;100;255;100 928 | 3_heatmap72;97;255;97 929 | 3_heatmap73;94;255;94 930 | 3_heatmap74;91;255;91 931 | 3_heatmap75;88;255;88 932 | 3_heatmap76;85;255;85 933 | 3_heatmap77;82;255;82 934 | 3_heatmap78;79;255;79 935 | 3_heatmap79;76;255;76 936 | 3_heatmap80;73;255;73 937 | 3_heatmap81;69;255;69 938 | 3_heatmap82;65;255;65 939 | 3_heatmap83;61;255;61 940 | 3_heatmap84;57;255;57 941 | 3_heatmap85;53;255;53 942 | 3_heatmap86;49;255;49 943 | 3_heatmap87;45;255;45 944 | 3_heatmap88;41;255;41 945 | 3_heatmap89;37;255;37 946 | 3_heatmap90;33;255;33 947 | 3_heatmap91;29;255;29 948 | 3_heatmap92;25;255;25 949 | 3_heatmap93;21;255;21 950 | 3_heatmap94;17;255;17 951 | 3_heatmap95;13;255;13 952 | 3_heatmap96;9;255;9 953 | 3_heatmap97;5;255;5 954 | 3_heatmap98;4;255;4 955 | 3_heatmap99;3;255;3 956 | 3_heatmap100;0;255;0 957 | 4_heatmap0;255;255;255 958 | 4_heatmap1;254;254;255 959 | 4_heatmap2;253;253;255 960 | 4_heatmap3;252;252;255 961 | 4_heatmap4;251;251;255 962 | 4_heatmap5;250;250;255 963 | 4_heatmap6;249;249;255 964 | 4_heatmap7;248;248;255 965 | 4_heatmap8;247;247;255 966 | 4_heatmap9;246;246;255 967 | 4_heatmap10;245;245;255 968 | 4_heatmap11;244;244;255 969 | 4_heatmap12;243;243;255 970 | 4_heatmap13;242;242;255 971 | 4_heatmap14;241;241;255 972 | 4_heatmap15;240;240;255 973 | 4_heatmap16;239;239;255 974 | 4_heatmap17;238;238;255 975 | 4_heatmap18;237;237;255 976 | 4_heatmap19;236;236;255 977 | 4_heatmap20;235;235;255 978 | 4_heatmap21;234;234;255 979 | 4_heatmap22;233;233;255 980 | 4_heatmap23;232;232;255 981 | 4_heatmap24;231;231;255 982 | 4_heatmap25;230;230;255 983 | 4_heatmap26;229;229;255 984 | 4_heatmap27;228;228;255 985 | 4_heatmap28;227;227;255 986 | 4_heatmap29;226;226;255 987 | 4_heatmap30;223;223;255 988 | 4_heatmap31;220;220;255 989 | 4_heatmap32;217;217;255 990 | 4_heatmap33;214;214;255 991 | 4_heatmap34;211;211;255 992 | 4_heatmap35;208;208;255 993 | 4_heatmap36;205;205;255 994 | 4_heatmap37;202;202;255 995 | 4_heatmap38;199;199;255 996 | 4_heatmap39;196;196;255 997 | 4_heatmap40;193;193;255 998 | 4_heatmap41;190;190;255 999 | 4_heatmap42;187;187;255 1000 | 4_heatmap43;184;184;255 1001 | 4_heatmap44;181;181;255 1002 | 4_heatmap45;178;178;255 1003 | 4_heatmap46;175;175;255 1004 | 4_heatmap47;172;172;255 1005 | 4_heatmap48;169;169;255 1006 | 4_heatmap49;166;166;255 1007 | 4_heatmap50;163;163;255 1008 | 4_heatmap51;160;160;255 1009 | 4_heatmap52;157;157;255 1010 | 4_heatmap53;154;154;255 1011 | 4_heatmap54;151;151;255 1012 | 4_heatmap55;148;148;255 1013 | 4_heatmap56;145;145;255 1014 | 4_heatmap57;142;142;255 1015 | 4_heatmap58;139;139;255 1016 | 4_heatmap59;136;136;255 1017 | 4_heatmap60;133;133;255 1018 | 4_heatmap61;130;130;255 1019 | 4_heatmap62;127;127;255 1020 | 4_heatmap63;124;124;255 1021 | 4_heatmap64;121;121;255 1022 | 4_heatmap65;118;118;255 1023 | 4_heatmap66;115;115;255 1024 | 4_heatmap67;112;112;255 1025 | 4_heatmap68;109;109;255 1026 | 4_heatmap69;106;106;255 1027 | 4_heatmap70;103;103;255 1028 | 4_heatmap71;100;100;255 1029 | 4_heatmap72;97;97;255 1030 | 4_heatmap73;94;94;255 1031 | 4_heatmap74;91;91;255 1032 | 4_heatmap75;88;88;255 1033 | 4_heatmap76;85;85;255 1034 | 4_heatmap77;82;82;255 1035 | 4_heatmap78;79;79;255 1036 | 4_heatmap79;76;76;255 1037 | 4_heatmap80;73;73;255 1038 | 4_heatmap81;69;69;255 1039 | 4_heatmap82;65;65;255 1040 | 4_heatmap83;61;61;255 1041 | 4_heatmap84;57;57;255 1042 | 4_heatmap85;53;53;255 1043 | 4_heatmap86;49;49;255 1044 | 4_heatmap87;45;45;255 1045 | 4_heatmap88;41;41;255 1046 | 4_heatmap89;37;37;255 1047 | 4_heatmap90;33;33;255 1048 | 4_heatmap91;29;29;255 1049 | 4_heatmap92;25;25;255 1050 | 4_heatmap93;21;21;255 1051 | 4_heatmap94;17;17;255 1052 | 4_heatmap95;13;13;255 1053 | 4_heatmap96;9;9;255 1054 | 4_heatmap97;5;5;255 1055 | 4_heatmap98;4;4;255 1056 | 4_heatmap99;3;3;255 1057 | 4_heatmap100;0;0;255 1058 | 5_heatmap0;255;255;0 1059 | 5_heatmap1;255;255;0 1060 | 5_heatmap2;255;255;0 1061 | 5_heatmap3;255;255;0 1062 | 5_heatmap4;255;255;0 1063 | 5_heatmap5;255;255;0 1064 | 5_heatmap6;255;255;0 1065 | 5_heatmap7;255;255;0 1066 | 5_heatmap8;255;255;0 1067 | 5_heatmap9;255;255;0 1068 | 5_heatmap10;255;255;0 1069 | 5_heatmap11;255;230;0 1070 | 5_heatmap12;255;230;0 1071 | 5_heatmap13;255;230;0 1072 | 5_heatmap14;255;230;0 1073 | 5_heatmap15;255;230;0 1074 | 5_heatmap16;255;230;0 1075 | 5_heatmap17;255;230;0 1076 | 5_heatmap18;255;230;0 1077 | 5_heatmap19;255;230;0 1078 | 5_heatmap20;255;230;0 1079 | 5_heatmap21;255;205;0 1080 | 5_heatmap22;255;205;0 1081 | 5_heatmap23;255;205;0 1082 | 5_heatmap24;255;205;0 1083 | 5_heatmap25;255;205;0 1084 | 5_heatmap26;255;205;0 1085 | 5_heatmap27;255;205;0 1086 | 5_heatmap28;255;205;0 1087 | 5_heatmap29;255;205;0 1088 | 5_heatmap30;255;205;0 1089 | 5_heatmap31;255;180;0 1090 | 5_heatmap32;255;180;0 1091 | 5_heatmap33;255;180;0 1092 | 5_heatmap34;255;180;0 1093 | 5_heatmap35;255;180;0 1094 | 5_heatmap36;255;180;0 1095 | 5_heatmap37;255;180;0 1096 | 5_heatmap38;255;180;0 1097 | 5_heatmap39;255;180;0 1098 | 5_heatmap40;255;180;0 1099 | 5_heatmap41;255;155;0 1100 | 5_heatmap42;255;155;0 1101 | 5_heatmap43;255;155;0 1102 | 5_heatmap44;255;155;0 1103 | 5_heatmap45;255;155;0 1104 | 5_heatmap46;255;155;0 1105 | 5_heatmap47;255;155;0 1106 | 5_heatmap48;255;155;0 1107 | 5_heatmap49;255;155;0 1108 | 5_heatmap50;255;155;0 1109 | 5_heatmap51;255;130;0 1110 | 5_heatmap52;255;130;0 1111 | 5_heatmap53;255;130;0 1112 | 5_heatmap54;255;130;0 1113 | 5_heatmap55;255;130;0 1114 | 5_heatmap56;255;130;0 1115 | 5_heatmap57;255;130;0 1116 | 5_heatmap58;255;130;0 1117 | 5_heatmap59;255;130;0 1118 | 5_heatmap60;255;130;0 1119 | 5_heatmap61;255;105;0 1120 | 5_heatmap62;255;105;0 1121 | 5_heatmap63;255;105;0 1122 | 5_heatmap64;255;105;0 1123 | 5_heatmap65;255;105;0 1124 | 5_heatmap66;255;105;0 1125 | 5_heatmap67;255;105;0 1126 | 5_heatmap68;255;105;0 1127 | 5_heatmap69;255;105;0 1128 | 5_heatmap70;255;105;0 1129 | 5_heatmap71;255;80;0 1130 | 5_heatmap72;255;80;0 1131 | 5_heatmap73;255;80;0 1132 | 5_heatmap74;255;80;0 1133 | 5_heatmap75;255;80;0 1134 | 5_heatmap76;255;80;0 1135 | 5_heatmap77;255;80;0 1136 | 5_heatmap78;255;80;0 1137 | 5_heatmap79;255;80;0 1138 | 5_heatmap80;255;80;0 1139 | 5_heatmap81;255;55;0 1140 | 5_heatmap82;255;55;0 1141 | 5_heatmap83;255;55;0 1142 | 5_heatmap84;255;55;0 1143 | 5_heatmap85;255;55;0 1144 | 5_heatmap86;255;55;0 1145 | 5_heatmap87;255;55;0 1146 | 5_heatmap88;255;55;0 1147 | 5_heatmap89;255;55;0 1148 | 5_heatmap90;255;55;0 1149 | 5_heatmap91;255;30;0 1150 | 5_heatmap92;255;30;0 1151 | 5_heatmap93;255;30;0 1152 | 5_heatmap94;255;30;0 1153 | 5_heatmap95;255;30;0 1154 | 5_heatmap96;255;30;0 1155 | 5_heatmap97;255;30;0 1156 | 5_heatmap98;255;30;0 1157 | 5_heatmap99;255;30;0 1158 | 5_heatmap100;255;30;0 1159 | 6_heatmap0;0;0;255 1160 | 6_heatmap1;0;0;255 1161 | 6_heatmap2;0;0;255 1162 | 6_heatmap3;0;0;255 1163 | 6_heatmap4;0;0;255 1164 | 6_heatmap5;0;0;255 1165 | 6_heatmap6;255;255;255 1166 | 6_heatmap7;252;252;252 1167 | 6_heatmap8;249;249;249 1168 | 6_heatmap9;246;246;246 1169 | 6_heatmap10;243;243;243 1170 | 6_heatmap11;240;240;240 1171 | 6_heatmap12;237;237;237 1172 | 6_heatmap13;234;234;234 1173 | 6_heatmap14;231;231;231 1174 | 6_heatmap15;228;228;228 1175 | 6_heatmap16;225;225;225 1176 | 6_heatmap17;222;222;222 1177 | 6_heatmap18;219;219;219 1178 | 6_heatmap19;216;216;216 1179 | 6_heatmap20;213;213;213 1180 | 6_heatmap21;210;210;210 1181 | 6_heatmap22;207;207;207 1182 | 6_heatmap23;204;204;204 1183 | 6_heatmap24;201;201;201 1184 | 6_heatmap25;198;198;198 1185 | 6_heatmap26;195;195;195 1186 | 6_heatmap27;192;192;192 1187 | 6_heatmap28;189;189;189 1188 | 6_heatmap29;186;186;186 1189 | 6_heatmap30;183;183;183 1190 | 6_heatmap31;180;180;180 1191 | 6_heatmap32;177;177;177 1192 | 6_heatmap33;174;174;174 1193 | 6_heatmap34;171;171;171 1194 | 6_heatmap35;168;168;168 1195 | 6_heatmap36;165;165;165 1196 | 6_heatmap37;162;162;162 1197 | 6_heatmap38;159;159;159 1198 | 6_heatmap39;156;156;156 1199 | 6_heatmap40;153;153;153 1200 | 6_heatmap41;150;150;150 1201 | 6_heatmap42;147;147;147 1202 | 6_heatmap43;144;144;144 1203 | 6_heatmap44;141;141;141 1204 | 6_heatmap45;138;138;138 1205 | 6_heatmap46;135;135;135 1206 | 6_heatmap47;132;132;132 1207 | 6_heatmap48;129;129;129 1208 | 6_heatmap49;126;126;126 1209 | 6_heatmap50;123;123;123 1210 | 6_heatmap51;120;120;120 1211 | 6_heatmap52;117;117;117 1212 | 6_heatmap53;114;114;114 1213 | 6_heatmap54;111;111;111 1214 | 6_heatmap55;108;108;108 1215 | 6_heatmap56;105;105;105 1216 | 6_heatmap57;102;102;102 1217 | 6_heatmap58;99;99;99 1218 | 6_heatmap59;96;96;96 1219 | 6_heatmap60;93;93;93 1220 | 6_heatmap61;90;90;90 1221 | 6_heatmap62;87;87;87 1222 | 6_heatmap63;84;84;84 1223 | 6_heatmap64;81;81;81 1224 | 6_heatmap65;78;78;78 1225 | 6_heatmap66;75;75;75 1226 | 6_heatmap67;72;72;72 1227 | 6_heatmap68;69;69;69 1228 | 6_heatmap69;66;66;66 1229 | 6_heatmap70;63;63;63 1230 | 6_heatmap71;60;60;60 1231 | 6_heatmap72;57;57;57 1232 | 6_heatmap73;54;54;54 1233 | 6_heatmap74;51;51;51 1234 | 6_heatmap75;48;48;48 1235 | 6_heatmap76;45;45;45 1236 | 6_heatmap77;42;42;42 1237 | 6_heatmap78;39;39;39 1238 | 6_heatmap79;36;36;36 1239 | 6_heatmap80;33;33;33 1240 | 6_heatmap81;30;30;30 1241 | 6_heatmap82;27;27;27 1242 | 6_heatmap83;24;24;24 1243 | 6_heatmap84;21;21;21 1244 | 6_heatmap85;18;18;18 1245 | 6_heatmap86;15;15;15 1246 | 6_heatmap87;12;12;12 1247 | 6_heatmap88;9;9;9 1248 | 6_heatmap89;6;6;6 1249 | 6_heatmap90;255;0;0 1250 | 6_heatmap91;255;0;0 1251 | 6_heatmap92;255;0;0 1252 | 6_heatmap93;255;0;0 1253 | 6_heatmap94;255;0;0 1254 | 6_heatmap95;255;0;0 1255 | 6_heatmap96;255;0;0 1256 | 6_heatmap97;255;0;0 1257 | 6_heatmap98;255;0;0 1258 | 6_heatmap99;255;0;0 1259 | 6_heatmap100;255;0;0 1260 | 7_heatmap0;5;48;97 1261 | 7_heatmap1;5;48;97 1262 | 7_heatmap2;5;48;97 1263 | 7_heatmap3;5;48;97 1264 | 7_heatmap4;5;48;97 1265 | 7_heatmap5;5;48;97 1266 | 7_heatmap6;5;48;97 1267 | 7_heatmap7;5;48;97 1268 | 7_heatmap8;5;48;97 1269 | 7_heatmap9;5;48;97 1270 | 7_heatmap10;5;48;97 1271 | 7_heatmap11;33;102;172 1272 | 7_heatmap12;33;102;172 1273 | 7_heatmap13;33;102;172 1274 | 7_heatmap14;33;102;172 1275 | 7_heatmap15;33;102;172 1276 | 7_heatmap16;33;102;172 1277 | 7_heatmap17;33;102;172 1278 | 7_heatmap18;33;102;172 1279 | 7_heatmap19;33;102;172 1280 | 7_heatmap20;33;102;172 1281 | 7_heatmap21;67;147;195 1282 | 7_heatmap22;67;147;195 1283 | 7_heatmap23;67;147;195 1284 | 7_heatmap24;67;147;195 1285 | 7_heatmap25;67;147;195 1286 | 7_heatmap26;67;147;195 1287 | 7_heatmap27;67;147;195 1288 | 7_heatmap28;67;147;195 1289 | 7_heatmap29;67;147;195 1290 | 7_heatmap30;67;147;195 1291 | 7_heatmap31;146;197;222 1292 | 7_heatmap32;146;197;222 1293 | 7_heatmap33;146;197;222 1294 | 7_heatmap34;146;197;222 1295 | 7_heatmap35;146;197;222 1296 | 7_heatmap36;146;197;222 1297 | 7_heatmap37;146;197;222 1298 | 7_heatmap38;146;197;222 1299 | 7_heatmap39;146;197;222 1300 | 7_heatmap40;146;197;222 1301 | 7_heatmap41;209;229;240 1302 | 7_heatmap42;209;229;240 1303 | 7_heatmap43;209;229;240 1304 | 7_heatmap44;209;229;240 1305 | 7_heatmap45;209;229;240 1306 | 7_heatmap46;209;229;240 1307 | 7_heatmap47;209;229;240 1308 | 7_heatmap48;209;229;240 1309 | 7_heatmap49;209;229;240 1310 | 7_heatmap50;209;229;240 1311 | 7_heatmap51;253;219;199 1312 | 7_heatmap52;253;219;199 1313 | 7_heatmap53;253;219;199 1314 | 7_heatmap54;253;219;199 1315 | 7_heatmap55;253;219;199 1316 | 7_heatmap56;253;219;199 1317 | 7_heatmap57;253;219;199 1318 | 7_heatmap58;253;219;199 1319 | 7_heatmap59;253;219;199 1320 | 7_heatmap60;253;219;199 1321 | 7_heatmap61;244;165;130 1322 | 7_heatmap62;244;165;130 1323 | 7_heatmap63;244;165;130 1324 | 7_heatmap64;244;165;130 1325 | 7_heatmap65;244;165;130 1326 | 7_heatmap66;244;165;130 1327 | 7_heatmap67;244;165;130 1328 | 7_heatmap68;244;165;130 1329 | 7_heatmap69;244;165;130 1330 | 7_heatmap70;244;165;130 1331 | 7_heatmap71;214;96;77 1332 | 7_heatmap72;214;96;77 1333 | 7_heatmap73;214;96;77 1334 | 7_heatmap74;214;96;77 1335 | 7_heatmap75;214;96;77 1336 | 7_heatmap76;214;96;77 1337 | 7_heatmap77;214;96;77 1338 | 7_heatmap78;214;96;77 1339 | 7_heatmap79;214;96;77 1340 | 7_heatmap80;214;96;77 1341 | 7_heatmap81;178;24;43 1342 | 7_heatmap82;178;24;43 1343 | 7_heatmap83;178;24;43 1344 | 7_heatmap84;178;24;43 1345 | 7_heatmap85;178;24;43 1346 | 7_heatmap86;178;24;43 1347 | 7_heatmap87;178;24;43 1348 | 7_heatmap88;178;24;43 1349 | 7_heatmap89;178;24;43 1350 | 7_heatmap90;178;24;43 1351 | 7_heatmap91;103;0;31 1352 | 7_heatmap92;103;0;31 1353 | 7_heatmap93;103;0;31 1354 | 7_heatmap94;103;0;31 1355 | 7_heatmap95;103;0;31 1356 | 7_heatmap96;103;0;31 1357 | 7_heatmap97;103;0;31 1358 | 7_heatmap98;103;0;31 1359 | 7_heatmap99;103;0;31 1360 | 7_heatmap100;103;0;31 1361 | 8_heatmap100;0;0;0 1362 | 8_heatmap99;2;2;2 1363 | 8_heatmap98;5;5;5 1364 | 8_heatmap97;7;7;7 1365 | 8_heatmap96;10;10;10 1366 | 8_heatmap95;12;12;12 1367 | 8_heatmap94;15;15;15 1368 | 8_heatmap93;17;17;17 1369 | 8_heatmap92;20;20;20 1370 | 8_heatmap91;22;22;22 1371 | 8_heatmap90;25;25;25 1372 | 8_heatmap89;27;27;27 1373 | 8_heatmap88;30;30;30 1374 | 8_heatmap87;32;32;32 1375 | 8_heatmap86;35;35;35 1376 | 8_heatmap85;37;37;37 1377 | 8_heatmap84;40;40;40 1378 | 8_heatmap83;42;42;42 1379 | 8_heatmap82;45;45;45 1380 | 8_heatmap81;47;47;47 1381 | 8_heatmap80;50;50;50 1382 | 8_heatmap79;52;52;52 1383 | 8_heatmap78;55;55;55 1384 | 8_heatmap77;57;57;57 1385 | 8_heatmap76;60;60;60 1386 | 8_heatmap75;62;62;62 1387 | 8_heatmap74;65;65;65 1388 | 8_heatmap73;67;67;67 1389 | 8_heatmap72;70;70;70 1390 | 8_heatmap71;72;72;72 1391 | 8_heatmap70;75;75;75 1392 | 8_heatmap69;77;77;77 1393 | 8_heatmap68;80;80;80 1394 | 8_heatmap67;82;82;82 1395 | 8_heatmap66;85;85;85 1396 | 8_heatmap65;87;87;87 1397 | 8_heatmap64;90;90;90 1398 | 8_heatmap63;92;92;92 1399 | 8_heatmap62;95;95;95 1400 | 8_heatmap61;97;97;97 1401 | 8_heatmap60;100;100;100 1402 | 8_heatmap59;102;102;102 1403 | 8_heatmap58;105;105;105 1404 | 8_heatmap57;107;107;107 1405 | 8_heatmap56;110;110;110 1406 | 8_heatmap55;112;112;112 1407 | 8_heatmap54;115;115;115 1408 | 8_heatmap53;117;117;117 1409 | 8_heatmap52;120;120;120 1410 | 8_heatmap51;122;122;122 1411 | 8_heatmap50;125;125;125 1412 | 8_heatmap49;127;127;127 1413 | 8_heatmap48;130;130;130 1414 | 8_heatmap47;132;132;132 1415 | 8_heatmap46;135;135;135 1416 | 8_heatmap45;137;137;137 1417 | 8_heatmap44;140;140;140 1418 | 8_heatmap43;142;142;142 1419 | 8_heatmap42;145;145;145 1420 | 8_heatmap41;147;147;147 1421 | 8_heatmap40;150;150;150 1422 | 8_heatmap39;152;152;152 1423 | 8_heatmap38;155;155;155 1424 | 8_heatmap37;157;157;157 1425 | 8_heatmap36;160;160;160 1426 | 8_heatmap35;162;162;162 1427 | 8_heatmap34;165;165;165 1428 | 8_heatmap33;167;167;167 1429 | 8_heatmap32;170;170;170 1430 | 8_heatmap31;172;172;172 1431 | 8_heatmap30;175;175;175 1432 | 8_heatmap29;177;177;177 1433 | 8_heatmap28;180;180;180 1434 | 8_heatmap27;182;182;182 1435 | 8_heatmap26;185;185;185 1436 | 8_heatmap25;187;187;187 1437 | 8_heatmap24;190;190;190 1438 | 8_heatmap23;192;192;192 1439 | 8_heatmap22;195;195;195 1440 | 8_heatmap21;197;197;197 1441 | 8_heatmap20;200;200;200 1442 | 8_heatmap19;202;202;202 1443 | 8_heatmap18;205;205;205 1444 | 8_heatmap17;207;207;207 1445 | 8_heatmap16;210;210;210 1446 | 8_heatmap15;212;212;212 1447 | 8_heatmap14;215;215;215 1448 | 8_heatmap13;217;217;217 1449 | 8_heatmap12;220;220;220 1450 | 8_heatmap11;222;222;222 1451 | 8_heatmap10;225;225;225 1452 | 8_heatmap9;227;227;227 1453 | 8_heatmap8;230;230;230 1454 | 8_heatmap7;232;232;232 1455 | 8_heatmap6;235;235;235 1456 | 8_heatmap5;237;237;237 1457 | 8_heatmap4;240;240;240 1458 | 8_heatmap3;242;242;242 1459 | 8_heatmap2;245;245;245 1460 | 8_heatmap1;247;247;247 1461 | 8_heatmap0;250;250;250 1462 | 9_heatmap100;250;0;0 1463 | 9_heatmap99;250;0;0 1464 | 9_heatmap98;250;0;0 1465 | 9_heatmap97;250;0;0 1466 | 9_heatmap96;250;0;0 1467 | 9_heatmap95;250;0;0 1468 | 9_heatmap94;250;0;0 1469 | 9_heatmap93;250;0;0 1470 | 9_heatmap92;250;0;0 1471 | 9_heatmap91;250;0;0 1472 | 9_heatmap90;250;0;0 1473 | 9_heatmap89;250;0;0 1474 | 9_heatmap88;250;0;0 1475 | 9_heatmap87;250;0;0 1476 | 9_heatmap86;250;0;0 1477 | 9_heatmap85;250;0;0 1478 | 9_heatmap84;250;0;0 1479 | 9_heatmap83;250;0;0 1480 | 9_heatmap82;250;0;0 1481 | 9_heatmap81;250;0;0 1482 | 9_heatmap80;250;0;0 1483 | 9_heatmap79;250;0;0 1484 | 9_heatmap78;250;0;0 1485 | 9_heatmap77;250;0;0 1486 | 9_heatmap76;250;0;0 1487 | 9_heatmap75;250;0;0 1488 | 9_heatmap74;250;0;0 1489 | 9_heatmap73;250;0;0 1490 | 9_heatmap72;250;0;0 1491 | 9_heatmap71;250;0;0 1492 | 9_heatmap70;250;0;0 1493 | 9_heatmap69;250;0;0 1494 | 9_heatmap68;250;0;0 1495 | 9_heatmap67;250;0;0 1496 | 9_heatmap66;250;0;0 1497 | 9_heatmap65;250;0;0 1498 | 9_heatmap64;250;0;0 1499 | 9_heatmap63;250;0;0 1500 | 9_heatmap62;250;0;0 1501 | 9_heatmap61;250;0;0 1502 | 9_heatmap60;250;0;0 1503 | 9_heatmap59;250;0;0 1504 | 9_heatmap58;250;0;0 1505 | 9_heatmap57;250;0;0 1506 | 9_heatmap56;250;0;0 1507 | 9_heatmap55;250;0;0 1508 | 9_heatmap54;250;0;0 1509 | 9_heatmap53;250;0;0 1510 | 9_heatmap52;250;0;0 1511 | 9_heatmap51;250;0;0 1512 | 9_heatmap50;250;0;0 1513 | 9_heatmap49;250;0;0 1514 | 9_heatmap48;250;0;0 1515 | 9_heatmap47;250;0;0 1516 | 9_heatmap46;250;0;0 1517 | 9_heatmap45;250;0;0 1518 | 9_heatmap44;250;0;0 1519 | 9_heatmap43;250;0;0 1520 | 9_heatmap42;250;0;0 1521 | 9_heatmap41;250;0;0 1522 | 9_heatmap40;250;0;0 1523 | 9_heatmap39;250;0;0 1524 | 9_heatmap38;250;0;0 1525 | 9_heatmap37;250;0;0 1526 | 9_heatmap36;250;0;0 1527 | 9_heatmap35;250;0;0 1528 | 9_heatmap34;250;0;0 1529 | 9_heatmap33;250;0;0 1530 | 9_heatmap32;250;0;0 1531 | 9_heatmap31;250;0;0 1532 | 9_heatmap30;250;0;0 1533 | 9_heatmap29;250;0;0 1534 | 9_heatmap28;250;0;0 1535 | 9_heatmap27;250;0;0 1536 | 9_heatmap26;250;0;0 1537 | 9_heatmap25;250;0;0 1538 | 9_heatmap24;250;0;0 1539 | 9_heatmap23;250;0;0 1540 | 9_heatmap22;250;0;0 1541 | 9_heatmap21;250;0;0 1542 | 9_heatmap20;250;0;0 1543 | 9_heatmap19;250;0;0 1544 | 9_heatmap18;250;0;0 1545 | 9_heatmap17;250;0;0 1546 | 9_heatmap16;250;0;0 1547 | 9_heatmap15;250;0;0 1548 | 9_heatmap14;250;0;0 1549 | 9_heatmap13;250;0;0 1550 | 9_heatmap12;250;0;0 1551 | 9_heatmap11;250;0;0 1552 | 9_heatmap10;250;0;0 1553 | 9_heatmap9;250;0;0 1554 | 9_heatmap8;250;0;0 1555 | 9_heatmap7;250;0;0 1556 | 9_heatmap6;250;0;0 1557 | 9_heatmap5;250;0;0 1558 | 9_heatmap4;250;0;0 1559 | 9_heatmap3;250;0;0 1560 | 9_heatmap2;250;0;0 1561 | 9_heatmap1;250;0;0 1562 | 9_heatmap0;175;175;175 1563 | 10_heatmap100;158;1;66 1564 | 10_heatmap99;158;1;66 1565 | 10_heatmap98;158;1;66 1566 | 10_heatmap97;158;1;66 1567 | 10_heatmap96;158;1;66 1568 | 10_heatmap95;158;1;66 1569 | 10_heatmap94;158;1;66 1570 | 10_heatmap93;158;1;66 1571 | 10_heatmap92;158;1;66 1572 | 10_heatmap91;158;1;66 1573 | 10_heatmap90;158;1;66 1574 | 10_heatmap89;158;1;66 1575 | 10_heatmap88;158;1;66 1576 | 10_heatmap87;158;1;66 1577 | 10_heatmap86;158;1;66 1578 | 10_heatmap85;158;1;66 1579 | 10_heatmap84;158;1;66 1580 | 10_heatmap83;158;1;66 1581 | 10_heatmap82;158;1;66 1582 | 10_heatmap81;158;1;66 1583 | 10_heatmap80;158;1;66 1584 | 10_heatmap79;158;1;66 1585 | 10_heatmap78;158;1;66 1586 | 10_heatmap77;158;1;66 1587 | 10_heatmap76;158;1;66 1588 | 10_heatmap75;158;1;66 1589 | 10_heatmap74;158;1;66 1590 | 10_heatmap73;158;1;66 1591 | 10_heatmap72;158;1;66 1592 | 10_heatmap71;158;1;66 1593 | 10_heatmap70;158;1;66 1594 | 10_heatmap69;158;1;66 1595 | 10_heatmap68;158;1;66 1596 | 10_heatmap67;158;1;66 1597 | 10_heatmap66;158;1;66 1598 | 10_heatmap65;158;1;66 1599 | 10_heatmap64;158;1;66 1600 | 10_heatmap63;158;1;66 1601 | 10_heatmap62;158;1;66 1602 | 10_heatmap61;158;1;66 1603 | 10_heatmap60;158;1;66 1604 | 10_heatmap59;158;1;66 1605 | 10_heatmap58;158;1;66 1606 | 10_heatmap57;158;1;66 1607 | 10_heatmap56;158;1;66 1608 | 10_heatmap55;158;1;66 1609 | 10_heatmap54;158;1;66 1610 | 10_heatmap53;158;1;66 1611 | 10_heatmap52;158;1;66 1612 | 10_heatmap51;158;1;66 1613 | 10_heatmap50;158;1;66 1614 | 10_heatmap49;158;1;66 1615 | 10_heatmap48;158;1;66 1616 | 10_heatmap47;158;1;66 1617 | 10_heatmap46;158;1;66 1618 | 10_heatmap45;158;1;66 1619 | 10_heatmap44;158;1;66 1620 | 10_heatmap43;158;1;66 1621 | 10_heatmap42;158;1;66 1622 | 10_heatmap41;158;1;66 1623 | 10_heatmap40;158;1;66 1624 | 10_heatmap39;158;1;66 1625 | 10_heatmap38;158;1;66 1626 | 10_heatmap37;158;1;66 1627 | 10_heatmap36;158;1;66 1628 | 10_heatmap35;158;1;66 1629 | 10_heatmap34;158;1;66 1630 | 10_heatmap33;158;1;66 1631 | 10_heatmap32;158;1;66 1632 | 10_heatmap31;158;1;66 1633 | 10_heatmap30;158;1;66 1634 | 10_heatmap29;158;1;66 1635 | 10_heatmap28;158;1;66 1636 | 10_heatmap27;158;1;66 1637 | 10_heatmap26;158;1;66 1638 | 10_heatmap25;158;1;66 1639 | 10_heatmap24;158;1;66 1640 | 10_heatmap23;158;1;66 1641 | 10_heatmap22;158;1;66 1642 | 10_heatmap21;158;1;66 1643 | 10_heatmap20;158;1;66 1644 | 10_heatmap19;158;1;66 1645 | 10_heatmap18;158;1;66 1646 | 10_heatmap17;158;1;66 1647 | 10_heatmap16;158;1;66 1648 | 10_heatmap15;158;1;66 1649 | 10_heatmap14;158;1;66 1650 | 10_heatmap13;158;1;66 1651 | 10_heatmap12;158;1;66 1652 | 10_heatmap11;158;1;66 1653 | 10_heatmap10;158;1;66 1654 | 10_heatmap9;213;62;79 1655 | 10_heatmap8;244;109;67 1656 | 10_heatmap7;253;174;97 1657 | 10_heatmap6;254;224;139 1658 | 10_heatmap5;230;245;152 1659 | 10_heatmap4;171;221;164 1660 | 10_heatmap3;102;194;165 1661 | 10_heatmap2;50;136;189 1662 | 10_heatmap1;94;79;162 1663 | 10_heatmap0;175;175;175 1664 | 11_heatmap100;130;0;30 1665 | 11_heatmap99;130;0;30 1666 | 11_heatmap98;130;0;30 1667 | 11_heatmap97;130;0;30 1668 | 11_heatmap96;130;0;30 1669 | 11_heatmap95;130;0;30 1670 | 11_heatmap94;130;0;30 1671 | 11_heatmap93;130;0;30 1672 | 11_heatmap92;130;0;30 1673 | 11_heatmap91;130;0;30 1674 | 11_heatmap90;130;0;30 1675 | 11_heatmap89;130;0;30 1676 | 11_heatmap88;130;0;30 1677 | 11_heatmap87;130;0;30 1678 | 11_heatmap86;130;0;30 1679 | 11_heatmap85;130;0;30 1680 | 11_heatmap84;130;0;30 1681 | 11_heatmap83;130;0;30 1682 | 11_heatmap82;130;0;30 1683 | 11_heatmap81;130;0;30 1684 | 11_heatmap80;130;0;30 1685 | 11_heatmap79;130;0;30 1686 | 11_heatmap78;130;0;30 1687 | 11_heatmap77;130;0;30 1688 | 11_heatmap76;130;0;30 1689 | 11_heatmap75;130;0;30 1690 | 11_heatmap74;130;0;30 1691 | 11_heatmap73;130;0;30 1692 | 11_heatmap72;130;0;30 1693 | 11_heatmap71;130;0;30 1694 | 11_heatmap70;130;0;30 1695 | 11_heatmap69;130;0;30 1696 | 11_heatmap68;130;0;30 1697 | 11_heatmap67;130;0;30 1698 | 11_heatmap66;130;0;30 1699 | 11_heatmap65;130;0;30 1700 | 11_heatmap64;130;0;30 1701 | 11_heatmap63;130;0;30 1702 | 11_heatmap62;130;0;30 1703 | 11_heatmap61;130;0;30 1704 | 11_heatmap60;130;0;30 1705 | 11_heatmap59;165;0;38 1706 | 11_heatmap58;165;0;38 1707 | 11_heatmap57;215;48;39 1708 | 11_heatmap56;215;48;39 1709 | 11_heatmap55;244;109;67 1710 | 11_heatmap54;244;109;67 1711 | 11_heatmap53;253;174;97 1712 | 11_heatmap52;253;174;97 1713 | 11_heatmap51;254;224;139 1714 | 11_heatmap50;254;224;139 1715 | 11_heatmap49;217;239;139 1716 | 11_heatmap48;217;239;139 1717 | 11_heatmap47;166;217;106 1718 | 11_heatmap46;166;217;106 1719 | 11_heatmap45;102;189;99 1720 | 11_heatmap44;102;189;99 1721 | 11_heatmap43;26;152;80 1722 | 11_heatmap42;26;152;80 1723 | 11_heatmap41;0;104;55 1724 | 11_heatmap40;0;104;55 1725 | 11_heatmap39;175;175;175 1726 | 11_heatmap38;175;175;175 1727 | 11_heatmap37;175;175;175 1728 | 11_heatmap36;175;175;175 1729 | 11_heatmap35;175;175;175 1730 | 11_heatmap34;175;175;175 1731 | 11_heatmap33;175;175;175 1732 | 11_heatmap32;175;175;175 1733 | 11_heatmap31;175;175;175 1734 | 11_heatmap30;175;175;175 1735 | 11_heatmap29;175;175;175 1736 | 11_heatmap28;175;175;175 1737 | 11_heatmap27;175;175;175 1738 | 11_heatmap26;175;175;175 1739 | 11_heatmap25;175;175;175 1740 | 11_heatmap24;175;175;175 1741 | 11_heatmap23;175;175;175 1742 | 11_heatmap22;175;175;175 1743 | 11_heatmap21;175;175;175 1744 | 11_heatmap20;175;175;175 1745 | 11_heatmap19;175;175;175 1746 | 11_heatmap18;175;175;175 1747 | 11_heatmap17;175;175;175 1748 | 11_heatmap16;175;175;175 1749 | 11_heatmap15;175;175;175 1750 | 11_heatmap14;175;175;175 1751 | 11_heatmap13;175;175;175 1752 | 11_heatmap12;175;175;175 1753 | 11_heatmap11;175;175;175 1754 | 11_heatmap10;175;175;175 1755 | 11_heatmap9;175;175;175 1756 | 11_heatmap8;175;175;175 1757 | 11_heatmap7;175;175;175 1758 | 11_heatmap6;175;175;175 1759 | 11_heatmap5;175;175;175 1760 | 11_heatmap4;175;175;175 1761 | 11_heatmap3;175;175;175 1762 | 11_heatmap2;175;175;175 1763 | 11_heatmap1;175;175;175 1764 | 11_heatmap0;175;175;175 1765 | 12_heatmap100;130;0;30 1766 | 12_heatmap99;130;0;30 1767 | 12_heatmap98;130;0;30 1768 | 12_heatmap97;130;0;30 1769 | 12_heatmap96;130;0;30 1770 | 12_heatmap95;130;0;30 1771 | 12_heatmap94;130;0;30 1772 | 12_heatmap93;130;0;30 1773 | 12_heatmap92;130;0;30 1774 | 12_heatmap91;130;0;30 1775 | 12_heatmap90;130;0;30 1776 | 12_heatmap89;130;0;30 1777 | 12_heatmap88;130;0;30 1778 | 12_heatmap87;130;0;30 1779 | 12_heatmap86;130;0;30 1780 | 12_heatmap85;130;0;30 1781 | 12_heatmap84;130;0;30 1782 | 12_heatmap83;130;0;30 1783 | 12_heatmap82;130;0;30 1784 | 12_heatmap81;130;0;30 1785 | 12_heatmap80;130;0;30 1786 | 12_heatmap79;130;0;30 1787 | 12_heatmap78;130;0;30 1788 | 12_heatmap77;130;0;30 1789 | 12_heatmap76;130;0;30 1790 | 12_heatmap75;130;0;30 1791 | 12_heatmap74;130;0;30 1792 | 12_heatmap73;130;0;30 1793 | 12_heatmap72;130;0;30 1794 | 12_heatmap71;130;0;30 1795 | 12_heatmap70;130;0;30 1796 | 12_heatmap69;130;0;30 1797 | 12_heatmap68;130;0;30 1798 | 12_heatmap67;130;0;30 1799 | 12_heatmap66;130;0;30 1800 | 12_heatmap65;130;0;30 1801 | 12_heatmap64;130;0;30 1802 | 12_heatmap63;130;0;30 1803 | 12_heatmap62;130;0;30 1804 | 12_heatmap61;130;0;30 1805 | 12_heatmap60;130;0;30 1806 | 12_heatmap59;130;0;30 1807 | 12_heatmap58;130;0;30 1808 | 12_heatmap57;130;0;30 1809 | 12_heatmap56;130;0;30 1810 | 12_heatmap55;130;0;30 1811 | 12_heatmap54;130;0;30 1812 | 12_heatmap53;130;0;30 1813 | 12_heatmap52;130;0;30 1814 | 12_heatmap51;130;0;30 1815 | 12_heatmap50;130;0;30 1816 | 12_heatmap49;165;0;38 1817 | 12_heatmap48;165;0;38 1818 | 12_heatmap47;215;48;39 1819 | 12_heatmap46;215;48;39 1820 | 12_heatmap45;244;109;67 1821 | 12_heatmap44;244;109;67 1822 | 12_heatmap43;253;174;97 1823 | 12_heatmap42;253;174;97 1824 | 12_heatmap41;254;224;139 1825 | 12_heatmap40;254;224;139 1826 | 12_heatmap39;217;239;139 1827 | 12_heatmap38;217;239;139 1828 | 12_heatmap37;166;217;106 1829 | 12_heatmap36;166;217;106 1830 | 12_heatmap35;102;189;99 1831 | 12_heatmap34;102;189;99 1832 | 12_heatmap33;26;152;80 1833 | 12_heatmap32;26;152;80 1834 | 12_heatmap31;0;104;55 1835 | 12_heatmap30;0;104;55 1836 | 12_heatmap29;175;175;175 1837 | 12_heatmap28;175;175;175 1838 | 12_heatmap27;175;175;175 1839 | 12_heatmap26;175;175;175 1840 | 12_heatmap25;175;175;175 1841 | 12_heatmap24;175;175;175 1842 | 12_heatmap23;175;175;175 1843 | 12_heatmap22;175;175;175 1844 | 12_heatmap21;175;175;175 1845 | 12_heatmap20;175;175;175 1846 | 12_heatmap19;175;175;175 1847 | 12_heatmap18;175;175;175 1848 | 12_heatmap17;175;175;175 1849 | 12_heatmap16;175;175;175 1850 | 12_heatmap15;175;175;175 1851 | 12_heatmap14;175;175;175 1852 | 12_heatmap13;175;175;175 1853 | 12_heatmap12;175;175;175 1854 | 12_heatmap11;175;175;175 1855 | 12_heatmap10;175;175;175 1856 | 12_heatmap9;175;175;175 1857 | 12_heatmap8;175;175;175 1858 | 12_heatmap7;175;175;175 1859 | 12_heatmap6;175;175;175 1860 | 12_heatmap5;175;175;175 1861 | 12_heatmap4;175;175;175 1862 | 12_heatmap3;175;175;175 1863 | 12_heatmap2;175;175;175 1864 | 12_heatmap1;175;175;175 1865 | 12_heatmap0;175;175;175 1866 | -------------------------------------------------------------------------------- /dmel/dmel.gff3.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sguizard/DensityMap/300fda3b1a142e3f4a06e66ae78d84fae2f2ba3d/dmel/dmel.gff3.gz -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | mkdir /usr/local/share/DensityMap 4 | cp -r ./* /usr/local/share/DensityMap 5 | cd /usr/local/bin 6 | ln -s /usr/local/share/DensityMap/DensityMap.pl 7 | 8 | -------------------------------------------------------------------------------- /scaleColorDrawer.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | 3 | use strict; 4 | use diagnostics; 5 | use warnings; 6 | use Getopt::Long; 7 | use Term::ANSIColor; 8 | use Data::Dumper; 9 | use GD::SVG; 10 | use POSIX; 11 | 12 | #> Setting Parameters 13 | 14 | 15 | ##> Define outputs colors 16 | print STDOUT color 'blue'; 17 | print STDERR color 'red'; 18 | 19 | 20 | ##> Define options ---> NO OPTION 21 | 22 | 23 | ##> Print USAGE if --help 24 | 25 | 26 | ##> Check if gff file exist, if no mandatory parameter are missing 27 | 28 | 29 | ##> Setting Global Variables 30 | my %color; 31 | 32 | my $margin = 5; 33 | my $x = $margin; 34 | my $y = $margin; 35 | my $height_scale = gdSmallFont->height; 36 | my $space_between_scales = 5; 37 | my $width_pixel = 2; 38 | my $height; 39 | my $width; 40 | 41 | $| = 1; 42 | ##> Setting parameters 43 | 44 | open(COLOR, ") { 46 | next if !(/heatmap/); 47 | /(\d+)_heatmap(\d+);(\d+);(\d+);(\d+)/; 48 | $color{$1}{$2}{r} = $3; 49 | $color{$1}{$2}{g} = $4; 50 | $color{$1}{$2}{b} = $5; 51 | #print "$1 - $2 - $3 - $4 - $5\n"; 52 | } 53 | close COLOR; 54 | 55 | $height = $margin * 2 + scalar(keys(%color)) * $height_scale + (scalar(keys(%color)) - 1 ) * $space_between_scales; 56 | $width = $margin * 2 + $width_pixel * 101 + gdSmallFont->width * 3; 57 | my $image = GD::SVG::Image->new($width, $height); 58 | 59 | 60 | my $white = $image->colorAllocate(255,255,255); 61 | my $grey = $image->colorAllocate(84,84,84); 62 | my $black = $image->colorAllocate(0,0,0); 63 | 64 | 65 | foreach my $sc (sort {$a <=> $b} keys(%color)){ 66 | $image->string( gdSmallFont, $x, $y, $sc, $black ); 67 | $x += gdSmallFont->width * 3; 68 | 69 | for (my $i = 0 ; $i < 101 ; $i++){ 70 | my $c = $image->colorAllocate($color{$sc}{$i}{r}, $color{$sc}{$i}{g}, $color{$sc}{$i}{b}); 71 | $image->filledRectangle($x, $y, $x + 1, $y + $height_scale, $c); 72 | $x += $width_pixel; 73 | } 74 | $x = $margin; 75 | $y += $height_scale + $space_between_scales; 76 | } 77 | 78 | open(IMG, ">scales.svg"); 79 | binmode IMG; 80 | print IMG $image->svg; 81 | close IMG; 82 | 83 | ########################################################################### 84 | ################################ Fonctions ################################ 85 | ########################################################################### 86 | sub printError{ 87 | my $string = shift; 88 | my $exit = shift; 89 | 90 | print STDERR $string; 91 | exit if $exit; 92 | } 93 | 94 | ########################################################################### 95 | sub printUsage{ 96 | my $exit = shift; 97 | 98 | print STDOUT 99 | "USAGE : scaleColorDrawer.pl 100 | Draw avaiable scales. 101 | \n\n"; 102 | exit if $exit; 103 | } 104 | --------------------------------------------------------------------------------