annotate prinseq-graphs-noPCA.pl @ 0:9790cfb46d03 draft default tip

Uploaded
author bgruening
date Mon, 07 Oct 2013 15:34:32 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1 #!/usr/bin/perl
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
3 #===============================================================================
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
4 # Author: Robert SCHMIEDER, Computational Science Research Center @ SDSU, CA
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
5 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
6 # File: prinseq-graphs
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
7 # Date: 2012-12-22
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
8 # Version: 0.6 graphs
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
9 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
10 # Usage:
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
11 # prinseq-graphs [options]
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
12 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
13 # Try 'prinseq-graphs-noPCA -h' for more information.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
14 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
15 # Purpose: PRINSEQ will help you to preprocess your genomic or metagenomic
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
16 # sequence data in FASTA or FASTQ format. The graphs version allows
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
17 # users of the lite version to generate graphs similar to the web
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
18 # version.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
19 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
20 # Bugs: Please use http://sourceforge.net/tracker/?group_id=315449
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
21 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
22 #===============================================================================
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
23
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
24 use strict;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
25 use warnings;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
26
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
27 use Getopt::Long;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
28 use Pod::Usage;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
29 use File::Temp qw(tempfile); #for output files
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
30 use Fcntl qw(:flock SEEK_END); #for log file
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
31 use Cwd;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
32 use JSON;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
33 use Cairo;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
34 #use Statistics::PCA;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
35 use MIME::Base64;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
36 use File::Basename;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
37 use Data::Dumper; ###
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
38
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
39 $| = 1; # Do not buffer output
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
40
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
41 my $PI = 4 * atan2(1, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
42 my $LOG62 = log(62);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
43 my $DINUCODDS_VIR = [
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
44 [qw(1.086940308 0.98976932 1.034167044 0.880024041 1.070421277 0.990687084 0.890945575 1.069957074 0.92465631 0.803973303)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
45 [qw(1.101064857 0.986812783 1.038299155 0.896162618 1.081652847 0.976365237 0.867445186 1.06727283 0.94688543 0.768007295)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
46 [qw(1.071548411 0.912204166 1.196914981 0.80628184 1.294201511 1.148517794 0.269295791 1.033948026 0.895951033 0.623192149)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
47 [qw(1.090253719 0.907428629 1.203991784 0.786359294 1.281499107 1.145421568 0.235974709 1.033437274 0.899580091 0.631699771)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
48 [qw(1.075864745 1.003413074 1.01872902 0.897841689 0.980373171 1.05854979 0.934262259 1.052477953 0.88145851 0.889239724)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
49 [qw(1.101890467 1.030028291 1.019912674 0.84191395 1.0015174 1.069546264 0.900151602 0.996269395 0.889195343 0.904039022)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
50 [qw(1.152417359 0.855028574 0.91164793 1.017415486 1.114163672 1.128353311 0.846355573 0.916745489 1.206820475 0.811014651)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
51 [qw(1.142454218 0.8635465 0.923406967 1.026242747 1.134445058 1.131747833 0.79793368 0.920767641 1.179468556 0.799770057)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
52 [qw(1.124462747 0.873556143 0.945627041 1.013755408 1.159866153 1.096259526 0.757315047 0.972924919 1.105562567 0.772731886)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
53 [qw(1.143826972 0.866968779 0.995740249 0.945859278 1.109590621 1.089305083 0.76048874 0.971561388 1.157101408 0.792923027)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
54 [qw(1.131900141 0.82776996 0.996204924 0.999433455 1.024692372 1.071176333 0.921026216 1.088936699 1.054010776 0.773498892)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
55 [qw(1.042180476 0.930180412 1.019242897 0.98909997 1.006666828 1.046708539 0.959492164 1.011183418 1.055168776 0.937433818)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
56 [qw(1.086515695 0.985345815 0.930914307 0.969581792 1.043010232 1.087463712 0.939482285 0.990551965 0.954752469 0.893972874)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
57 [qw(1.096657826 0.950117614 0.936195529 0.965619788 1.114975275 1.077011195 0.843153131 0.989128406 1.043790912 0.840634731)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
58 [qw(1.158030995 0.935307365 0.874812261 1.056236525 1.117171274 0.937484692 1.057442372 0.970079538 1.174848738 0.725071711)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
59 [qw(1.15591506 0.93000227 0.883538923 1.0567652 1.095730954 0.944489906 1.074229471 0.983993745 1.156051409 0.726688465)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
60 [qw(1.205726473 0.924439339 1.049457756 0.805718412 0.975472778 1.07581991 0.726992211 1.075025787 0.8704929 0.726672843)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
61 [qw(1.188544681 0.95239611 1.049066985 0.790031334 1.038632598 1.056749787 0.665197397 1.057566244 0.862429061 0.708982398)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
62 [qw(1.063631482 0.925593715 1.014869316 0.944904401 1.119690731 1.325971834 0.273781451 0.943347677 1.06438014 0.920825904)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
63 [qw(1.077560287 0.911888545 1.044147857 0.927758054 1.058535939 1.296838544 0.421514996 0.945722451 1.128317986 0.926419928)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
64 [qw(1.163753415 0.989905668 0.893599328 0.955641844 1.176047687 0.941559156 0.950641089 0.959741692 1.100815282 0.72491925)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
65 [qw(1.139253929 0.946297517 0.922096125 1.024801537 1.205206793 0.968818717 0.915801342 0.971626058 1.107569276 0.627623404)]
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
66 ];
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
67 my $DINUCODDS_MIC = [
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
68 [qw(1.13127323 0.853587195 0.911041047 1.104520778 1.065586428 1.021434164 0.999734139 1.063684014 1.078035184 0.733596552)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
69 [qw(1.173267344 0.840539337 0.919534602 1.068050141 1.062394214 1.051999071 0.96770576 1.035511729 1.095600433 0.72328141)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
70 [qw(1.172939786 0.84567902 0.911836259 1.106288994 1.05351787 1.026143368 1.002308358 1.066319771 1.094918797 0.710733535)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
71 [qw(1.073527689 0.850290918 0.978455025 1.080882178 1.111174765 1.010754115 0.895668707 1.072980666 1.079304608 0.754057386)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
72 [qw(1.08807747 0.837444678 0.95824965 1.097310298 1.118897971 1.030863881 0.886827263 1.072349394 1.07406322 0.733440096)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
73 [qw(1.071685485 0.861055813 0.966566865 1.090268118 1.112945761 1.012538936 0.909535491 1.063745603 1.071156598 0.755770377)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
74 [qw(1.142698587 0.867936867 1.000612099 0.977934257 1.111801746 1.018318601 0.788556794 0.987763594 1.184649653 0.784776176)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
75 [qw(1.134560074 0.876651844 0.998190253 0.995723123 1.128448077 1.014172324 0.781776188 0.971020602 1.182411449 0.786449476)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
76 [qw(1.180029632 0.787899325 1.01316945 0.932268406 1.077837263 1.211699678 0.612128817 1.033036699 1.157314398 0.74940288)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
77 [qw(1.160925546 0.788308899 1.003702496 0.965371236 1.076051693 1.188304271 0.641536444 1.070331188 1.124067192 0.740126813)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
78 [qw(1.173873006 0.790118011 1.014718833 0.937979878 1.07453725 1.207167373 0.622279064 1.046150047 1.145627707 0.742212886)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
79 [qw(1.128383111 0.870541389 0.987269741 0.98353238 1.115643879 1.040107028 0.774505865 1.010896432 1.164757274 0.775254395)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
80 [qw(1.15297511 0.853883985 0.956393231 1.000027661 1.139915472 1.01355294 0.838843622 1.015553125 1.216219741 0.70447264)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
81 [qw(1.148264236 0.852123859 0.974568293 0.985455546 1.13192373 1.015879393 0.828987111 1.016820786 1.216647853 0.71634006)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
82 [qw(1.12933788 0.831777975 1.005434367 0.991081409 1.126146895 1.07421504 0.69343913 1.054032466 1.14809591 0.728541157)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
83 [qw(1.124157235 0.828112691 1.022348424 0.983822386 1.143028487 1.081830005 0.672594435 1.05685982 1.149537403 0.684432106)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
84 [qw(1.128029586 0.841853305 1.00983936 0.967179139 1.122524003 1.094555807 0.659238308 1.061578854 1.1243601 0.740148171)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
85 [qw(1.093521636 0.855071052 0.929160818 1.203773691 1.178257185 0.881341255 1.078305505 1.051988532 1.169143967 0.555057308)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
86 [qw(1.073737278 0.877396537 0.968017446 1.124155374 1.166244435 0.909044208 0.999147578 1.071098934 1.120156138 0.607444953)],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
87 [qw(1.092150184 0.863407008 0.927040387 1.185387013 1.171670826 0.882276859 1.083058605 1.048379554 1.168635365 0.580337997)]
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
88 ];
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
89 my $DATA_VIR = [
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
90 [2,1,'Human (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
91 [3,1,'Human (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
92 [42,2,'Human (nasal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
93 [43,2,'Human (nasal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
94 [45,1,'Human (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
95 [49,1,'Human (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
96 [52,3,'Human (sputum)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
97 [54,3,'Human (sputum)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
98 [55,4,'Human (sputum, CF)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
99 [57,4,'Human (sputum, CF)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
100 [88,5,'Freshwater (Hot spring)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
101 [89,5,'Freshwater (Hot spring)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
102 [98,6,'Freshwater (Antartic lake)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
103 [99,6,'Freshwater (Antartic lake)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
104 [100,7,'Freshwater (reclaimed)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
105 [102,7,'Freshwater (reclaimed)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
106 [153,8,'Mouse (brain tissue)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
107 [154,8,'Mouse (brain tissue)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
108 [202,9,'Fish (gut)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
109 [206,9,'Fish (gut)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
110 [209,10,'Mosquito',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
111 [211,10,'Mosquito',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
112 ['U',0,'User input',[255/255, 127/255, 127/255,1]]
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
113 ];
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
114 my $DATA_MIC = [
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
115 [17,1,'Human (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
116 [20,1,'Human (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
117 [22,1,'Human (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
118 [63,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
119 [65,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
120 [68,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
121 [93,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
122 [95,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
123 [109,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
124 [110,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
125 [111,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
126 [120,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
127 [124,5,'Marine (estuary)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
128 [125,5,'Marine (estuary)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
129 [134,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
130 [146,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
131 [148,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
132 [201,6,'Fish (gut)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
133 [203,7,'Fish (slime)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
134 [205,6,'Fish (gut)',[127/255, 127/255, 255/255,1]],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
135 ['U',0,'User input',[255/255, 127/255, 127/255,1]]
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
136 ];
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
137 my $BASE64_BASES = {A => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
138 bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
139 JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
140 EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
141 2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
142 sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
143 iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
144 WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
145 iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
146 EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
147 DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
148 TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
149 zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
150 CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
151 1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
152 kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
153 QmCC',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
154 C => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
155 bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
156 eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
157 1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
158 8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
159 tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
160 uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
161 cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
162 g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
163 hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
164 DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
165 tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
166 byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
167 w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
168 5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
169 ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
170 kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
171 dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
172 AAAAAElFTkSuQmCC',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
173 G => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
174 bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
175 nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
176 tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
177 3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
178 YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
179 ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
180 M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
181 7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
182 bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
183 CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
184 INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
185 krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
186 6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
187 qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
188 zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
189 7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
190 GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
191 RK5CYII=',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
192 T => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
193 bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
194 mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
195 SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
196 EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
197 N => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
198 T2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AU
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
199 kSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXX
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
200 Pues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgAB
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
201 eNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAt
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
202 AGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
203 AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dX
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
204 Lh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
205 5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
206 5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
207 0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
208 4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzA
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
209 BhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/ph
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
210 CJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
211 h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
212 Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
213 WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
214 AkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+Io
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
215 UspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdp
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
216 r+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
217 D5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61Mb
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
218 U2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
219 /R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllir
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
220 SKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79u
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
221 p+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6Vh
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
222 lWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
223 mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lO
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
224 k06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7Ry
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
225 FDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3I
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
226 veRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+B
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
227 Z7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
228 0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
229 DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5q
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
230 PNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIs
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
231 OpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
232 hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
233 rAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
234 rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1d
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
235 T1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aX
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
236 Dm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
237 vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3S
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
238 PVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKa
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
239 RptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
240 32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
241 e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfV
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
242 P1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
243 /suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
244 IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
245 YAAAOpgAABdvkl/FRgAAAh1JREFUeNrsmk1xwzAQRr8RgYRBwqBhkDJoGbQMagZ1GbgMVAYNA5dB
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
246 wsBm4CBwL9Wx0Uwk7593Z3z0SHmRn3fXi3me8d8FoAUw33kdQB/9PXu9xWCeZ4QFN9zBSCwJ6Qig
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
247 cUj5aAFsHdLt2Fh47ALBGi8AHh2ScYlTQXrQLPFAuJZaiVNC2gCIDikfTxolHhjWjA4pH7s/Pzmk
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
248 TDQA9g7JUCYeGNdWI/HAvH50SEYkHgTs4V26xIOQfUSHlI8jgGeHlI9OagEsCdIOQtspQdh+REo8
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
249 CPzjokNSKPGlIJ0qnKatdUgdgJ/CArhdw+NW+qZ6A888ASmkM4DPCifSvLhbANdCib9ahzRV+JHs
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
250 mThFCvCtXeJUeVLpaWKVOBWkAcCH1kycMuPuAIwF97PNE1BCqiHxlkPi1LVbX1iysHyK4ihwm8Lc
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
251 iXwojAPSUOE0dNYhJbdctEics5/UVAC9tQ6pB/BVKPFoHVINiZPME3BDmirUZdE6pPSmKimAF58n
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
252 kPIhoKlw/946pDPKupiLZuKSPim1FSR+sA6pRgG8sQ4JKO9iYg2QAAGNfw2QBpR3Mc1DSrnT6JCW
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
253 l7h5SKkAPjmk5QvgVUAaIGAeQDqklImPDkl47qQFUo+yLuYqILFKXBOkCUzTJZogpUz84pAESlwj
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
254 pDPKZzHNQ0q509Uh5SXeOKR8RBB1MTVDIpO4dkgDCLqY2iGl3Gl0SMwS/x0AsYSfWCRqIfIAAAAA
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
255 SUVORK5CYII='
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
256 };
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
257 my $MMCHART_B2 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
258 bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
259 QmCC';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
260 my $FREQCHART_L = 'iVBORw0KGgoAAAANSUhEUgAAAC8AAABvCAIAAADzHQ6XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
261 bWFnZVJlYWR5ccllPAAABWNJREFUeNrkm91V7DoMhTOsaQBKgBKgBCjhUgKUAI/wBiUwJUAJUAKU
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
262 ACVACed+K/tcYxz5J5nYk3uOHmYFxokVWdrakj17v1rJ6+trdkw3y0x3d3dd172/v5vfPj8/d/8J
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
263 Iytq488U0+bw8PDq6oqLh4cHhn1+fta1jXQytWGB+ErLhB5cPz4+xp6z11WWr68vPvf39/WJnT4+
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
264 PmKD17W10dwoYX57c3Oji9vbW2xTXRvpgYVknoQ2fFZfKSkhC6ETFzE7tdDm+PiY6V9eXrh+enri
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
265 8/T0NDq6RkxxwZ/EczneSJNuIVgsbVa62rmsVqsfeHN5eanV3aU4W8n5cTqWNobx9ST0G2AbPZzD
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
266 c+HcsJk2ht8ACYTiSy8Y7J9eUmG5hQRYbMQUy+SMhDasnUyVyL1NV4rgRCcs1E6btBdDUPiqnTYX
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
267 FxeA5q8dyZxYXMJ5W2jDmrqcHHMsTO7GxFDD0OauF/cI1i4bR4yRPylTmixTMOHIvPlMafMjM1xf
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
268 X/tgAOqcnZ2JSsaEMcwkVoVab29vJhlVqOozwUQ7n0sHb8br8lqZmsMzPnZivuEYgWc6MKXJ2mev
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
269 AeAe9pKwTZrzOkHdo14Yr9ceYvEP24gQDUODmbK2cRY1bYOX8BDZj1kwtpmSQy8+7oXbPnvhTiwc
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
270 u9n3UKcut6uK80UVXfb1Qm0wTGDzrNP49ojFlJZGz9EKmEFu4w1Dr3rh/pI0aeJNwIt5lCtfhsZb
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
271 LhYvixev/XC9v78fwpdPM2rLtzbALgqJW+2YpRMLXO+cUayDKrWxLWwsFnZl0aWdbYAEcjiuE7Q2
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
272 wLdsJprZb9QDMyXRGKtYT8VytdkFql6H7/eCThR1akVJSp5lkqyt6nAWSyxO2YQFwq+zkF/Cixnj
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
273 orU0T4k/EFYiBjwCCOY/6dxZwot5DmN4jskwDW38cY6mcH+WVGT5TbZHbLB0k4mqvZtm6X6z02Tp
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
274 6gltNptVL6TCfJ5ynUsfjtXCTDhyCS/WyzCGV0cnKhOmcK+dwmJEzovBHRNN+02WFysDuofElt5g
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
275 okGe4s7semf9Rh7p8nGpNtOYaJYXi5lrjBh7Uc0wYx0e8GIfb0bU4QvixScnJ2ZQtGGiYZ4ys08a
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
276 bCr2i83dSnyiavNxnN80I4QGL06AaRte/O3FQStJfkOWAUIc06jtxSkm6naOF8FE23BQ3zZL3Z/a
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
277 Rubixd8xFcNiJ/gybjQkUxTwDrWHA3wydHR0RJ4i0eb3fMWtxmIx7MmdkSAqE+PPz89HYPGwI6ee
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
278 VAKLy89ICNZLc3jA0AqxONh4jnUY1XfWFGlt1sHSDtsU2/eLWUEVOiN6FGrN8wbq0GJ/uVuiqSPb
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
279 OIuatsEYSr0BBRvdoc0eJSrxm2EETeTFJYzO2SN77micbbY/KeVe2px4ijbcg7XH7s7Pv3c3rUcx
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
280 bw4Pz1GoR6GiGpDI7pZV4cWTexRVbDO5R1Gllz6tR1G3XzyhR1GrgpnWo6h74mWz2ciHUAVQb0aN
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
281 F8yLcVgdxtstL86wrWl5akj8Rp/3U0CN1SZ7dli4qmSpMWa2Cb2YzMBiDelIYg+GBaLSUDCy1gcH
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
282 B8MymTF+qOIfZtmQr3yzezCFvNhkZyleLJQbuwdTyItdoGB+LOebKorFk6lWmhf7NNc8gWIzinpn
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
283 h3EdmAmq+AEYPf/rVwVjgzzLi0VLsp2X3xHu++kE1MnyYh9s8jXDltrMy4vn6ZjMtZG+1y1JlqXN
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
284 KrBzAOSNO/vrYO7GRymi/eI/pwv5Z3rx36pNEXduUCst63cwJb+7a6RNYU95zqyZ3Wz7n/3uTgDY
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
285 tXHhEu7cYqX++t/dbY83vyOr2WnHEu78rwADABaBbeIZChwYAAAAAElFTkSuQmCC';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
286
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
287 my $CSS_STYLE = '
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
288 html, body, div, span, p, img {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
289 margin: 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
290 padding: 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
291 border: 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
292 outline: 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
293 font-size: 100%;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
294 vertical-align: baseline;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
295 background: transparent;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
296 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
297
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
298 html, body {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
299 font-family: Arial, Verdana;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
300 color: #40454b;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
301 font-size: 12px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
302 text-align: center;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
303 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
304
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
305 img {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
306 padding: 0px; margin: 0px; border: none;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
307 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
308
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
309 .info-panel {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
310 margin-top: 10px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
311 margin-bottom: 10px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
312 width: 740px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
313 text-align: left;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
314 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
315
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
316 .info-header {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
317 padding-top: 20px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
318 padding-top: 10px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
319 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
320
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
321 .info-header-title {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
322 color: #126499;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
323 text-decoration: none;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
324 font-family: sans-serif;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
325 font-weight: bold;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
326 font-size: 16px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
327 vertical-align: baseline;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
328 margin-right: 20px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
329 margin-bottom: 25px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
330 margin-top: 15px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
331 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
332
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
333 .info-content {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
334 padding: 2px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
335 font-family: "lucida grande",sans-serif,arial;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
336 margin-top: 15px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
337 margin-bottom: 15px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
338 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
339
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
340 .info-table-type {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
341 min-width: 70px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
342 padding: 4px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
343 vertical-align: top;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
344 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
345
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
346 .info-table-value {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
347 font-weight: bold;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
348 padding-top: 4px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
349 padding-left: 10px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
350 padding-right: 10px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
351 vertical-align: top;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
352 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
353
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
354 hr {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
355 background-color: #E0E0E0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
356 border: medium none;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
357 color: #E0E0E0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
358 height: 1px;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
359 outline: medium none;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
360 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
361
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
362 .sequencetext {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
363 font-family: courier, "courier new";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
364 font-weight: normal;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
365 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
366 ';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
367
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
368 my $VERSION = '0.6';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
369 my $WHAT = 'graphs-noPCA';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
370
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
371 my $man = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
372 my $help = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
373 my %params = ('help' => \$help, 'h' => \$help, 'man' => \$man);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
374 GetOptions( \%params,
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
375 'help|h',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
376 'man',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
377 'verbose',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
378 'version' => sub { print "PRINSEQ-$WHAT $VERSION\n"; exit; },
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
379 'i=s',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
380 'o=s',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
381 'png_all',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
382 'html_all',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
383 'log:s',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
384 'web:s'
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
385 ) or pod2usage(2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
386 pod2usage(1) if $help;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
387 pod2usage(-exitstatus => 0, -verbose => 2) if $man;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
388
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
389 =head1 NAME
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
390
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
391 PRINSEQ - PReprocessing and INformation of SEQuence data
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
392
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
393 =head1 VERSION
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
394
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
395 PRINSEQ-graphs 0.6
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
396
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
397 =head1 SYNOPSIS
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
398
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
399 perl prinseq-graphs.pl [-h] [-help] [-version] [-man] [-verbose] [-i input_graph_data_file] [-png_all] [-html_all] [-log file]
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
400
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
401 =head1 DESCRIPTION
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
402
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
403 PRINSEQ will help you to preprocess your genomic or metagenomic sequence data in FASTA (and QUAL) or FASTQ format. The graphs version allows users of the lite version to generate graphs similar to the web version.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
404
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
405 =head1 OPTIONS
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
406
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
407 =over 8
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
408
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
409 =item B<-help> | B<-h>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
410
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
411 Print the help message; ignore other arguments.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
412
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
413 =item B<-man>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
414
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
415 Print the full documentation; ignore other arguments.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
416
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
417 =item B<-version>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
418
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
419 Print program version; ignore other arguments.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
420
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
421 =item B<-verbose>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
422
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
423 Prints status and info messages during processing.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
424
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
425 =item B<***** INPUT OPTIONS *****>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
426
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
427 =item B<-i> <file>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
428
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
429 Input file containing the graph data generated by the lite version.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
430
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
431 =item B<***** OUTPUT OPTIONS *****>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
432
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
433 =item B<-o> <string>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
434
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
435 By default, the output files are created in the same directory as the input file with an additional "_prinseq_graphs_XXXX" in their name (where XXXX is replaced by random characters to prevent overwriting previous files). To change the output filename and location, specify the filename using this option. The file extension will be added automatically.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
436
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
437 =item B<-png_all>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
438
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
439 Use this option to generate PNG files with the graphs.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
440
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
441 =item B<-html_all>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
442
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
443 Use this option to generate a HTML file with the graphs and tables.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
444
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
445 =item B<-log> <file>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
446
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
447 Log file to keep track of parameters, errors, etc. The log file name is optional. If no file name is given, the log file name will be "inputname.log". If the log file already exists, new content will be added to the file.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
448
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
449 =back
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
450
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
451 =head1 AUTHOR
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
452
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
453 Robert SCHMIEDER, C<< <rschmieder_at_gmail_dot_com> >>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
454
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
455 =head1 BUGS
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
456
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
457 If you find a bug please email me at C<< <rschmieder_at_gmail_dot_com> >> or use http://sourceforge.net/tracker/?group_id=315449 so that I can make PRINSEQ better.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
458
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
459 =head1 COPYRIGHT
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
460
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
461 Copyright (C) 2011-2012 Robert SCHMIEDER
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
462
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
463 =head1 LICENSE
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
464
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
465 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
466
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
467 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
468
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
469 You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
470
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
471 =cut
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
472
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
473 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
474 ################################################################################
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
475 ## DATA AND PARAMETER CHECKING
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
476 ################################################################################
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
477 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
478
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
479 my ($file1,$command,@dataread);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
480
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
481 #Check if input file exists and check if file format is correct
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
482 if(exists $params{i}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
483 $command .= ' -i '.$params{i};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
484 $file1 = $params{i};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
485 if($params{i} eq 'stdin') {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
486 my $format = &checkInputFormat();
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
487 unless($format eq 'gd') {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
488 &printError('input data for -i is in '.uc($format).' format not in graph data format');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
489 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
490 } elsif(-e $params{i}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
491 #check for file format
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
492 my $format = &checkFileFormat($file1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
493 unless($format eq 'gd') {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
494 &printError('input file for -i is in '.uc($format).' format not in graph data format');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
495 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
496 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
497 &printError("could not find input file \"".$params{i}."\"");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
498 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
499 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
500 &printError("you did not specify an input file containing the graph data");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
501 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
502
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
503 #check output file name prefix
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
504 if(exists $params{o}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
505 $command .= ' -o '.$params{o};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
506 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
507
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
508 #check for output format
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
509 unless(exists $params{png_all} || exists $params{html_all}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
510 &printError("No output format specified. Use -png_all and/or -html_all to generate graphs.");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
511 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
512 if(exists $params{png_all}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
513 $command .= ' -png_all';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
514 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
515 if(exists $params{html_all}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
516 $command .= ' -html_all';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
517 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
518 if(exists $params{web}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
519 $command .= ' -web'.($params{web} ? ' '.$params{web} : '');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
520 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
521
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
522 #add remaining to log command
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
523 if(exists $params{log}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
524 $command .= ' -log'.($params{log} ? ' '.$params{log} : '');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
525
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
526 unless($params{log}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
527 $params{log} = join("__",$file1||'nonamegiven').'.log';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
528 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
529 $params{log} = cwd().'/'.$params{log} unless($params{log} =~ /^\//);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
530 &printLog("Executing PRINSEQ with command: \"perl prinseq-".$WHAT.".pl".$command."\"");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
531 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
532
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
533 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
534 ################################################################################
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
535 ## DATA PROCESSING
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
536 ################################################################################
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
537 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
538
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
539 my $filename = $file1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
540 while($filename =~ /[\w\d]+\.[\w\d]+$/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
541 $filename =~ s/\.[\w\d]+$//;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
542 last if($filename =~ /\/[^\.]+$/);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
543 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
544
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
545 if(exists $params{png_all}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
546 my $graphs = &generateGraphs($params{i},$params{o});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
547 if(exists $params{web} && $params{web} ne 'nozip') {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
548 #png files
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
549 if(scalar(@$graphs)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
550 system("zip -j -r ".dirname($params{o})."/png_graphs.zip ".dirname($params{o}).' -i \*.png') == 0 or &printError("Cannot generate graphs ZIP file");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
551 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
552 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
553 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
554 if(exists $params{html_all}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
555 &generateHtml($params{i},$params{o});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
556 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
557
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
558 &printWeb("STATUS: done");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
559
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
560 ##
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
561 #################################################################################
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
562 ### MISC FUNCTIONS
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
563 #################################################################################
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
564 ##
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
565
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
566 sub printError {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
567 my $msg = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
568 print STDERR "\nERROR: ".$msg.".\n\nTry \'perl prinseq-".$WHAT.".pl -h\' for more information.\nExit program.\n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
569 &printLog("ERROR: ".$msg.". Exit program.\n");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
570 exit(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
571 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
572
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
573 sub printWarning {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
574 my $msg = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
575 print STDERR "WARNING: ".$msg.".\n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
576 &printLog("WARNING: ".$msg.".\n");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
577 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
578
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
579 sub printWeb {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
580 my $msg = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
581 if(exists $params{web}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
582 print STDERR "\n".&getTime()."$msg\n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
583 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
584 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
585
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
586 sub getTime {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
587 return sprintf("[%02d/%02d/%04d %02d:%02d:%02d] ",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
588 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
589
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
590 sub printLog {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
591 my $msg = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
592 if(exists $params{log}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
593 my $time = sprintf("%02d/%02d/%04d %02d:%02d:%02d",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
594 open(FH, ">>", $params{log}) or die "ERROR: Can't open file ".$params{log}.": $! \n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
595 flock(FH, LOCK_EX) or die "ERROR: Cannot lock file ".$params{log}.": $! \n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
596 print FH "[prinseq-".$WHAT."-$VERSION] [$time] $msg\n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
597 flock(FH, LOCK_UN) or die "ERROR: cannot unlock ".$params{log}.": $! \n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
598 close(FH);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
599 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
600 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
601
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
602 sub addCommas {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
603 my $num = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
604 return unless(defined $num);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
605 return $num if($num < 1000);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
606 $num = scalar reverse $num;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
607 $num =~ s/(\d{3})/$1\,/g;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
608 $num =~ s/\,$//;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
609 $num = scalar reverse $num;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
610 return $num;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
611 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
612
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
613 sub checkFileFormat {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
614 my $file = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
615
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
616 my ($format,$count,$id,$fasta,$fastq,$qual,$gd,$aa);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
617 $count = 3;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
618 $fasta = $fastq = $qual = $gd = $aa = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
619 $format = 'unknown';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
620
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
621 open(FILE,"perl -p -e 's/\r/\n/g;s/\n\n/\n/g' < $file |") or die "ERROR: Could not open file $file: $! \n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
622 while (<FILE>) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
623 # chomp();
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
624 # next unless(length($_));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
625 if($count-- == 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
626 last;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
627 } elsif(!$fasta && /^\>\S+\s*/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
628 $fasta = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
629 $qual = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
630 } elsif($fasta == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
631 $fasta = 2;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
632 } elsif($qual == 1 && /^\s*\d+/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
633 $qual = 2;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
634 } elsif(!$fastq && /^\@(\S+)\s*/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
635 $id = $1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
636 $fastq = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
637 } elsif($fastq == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
638 $fastq = 2;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
639 } elsif($fastq == 2 && /^\+(\S*)\s*/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
640 $fastq = 3 if($id eq $1 || /^\+\s*$/);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
641 } elsif(!$gd && /^\{\"numseqs\"\:/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
642 $gd = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
643 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
644 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
645 close(FILE);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
646 if($fasta == 2) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
647 $format = 'fasta';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
648 } elsif($qual == 2) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
649 $format = 'qual';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
650 } elsif($fastq == 3) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
651 $format = 'fastq';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
652 } elsif($gd == 1) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
653 $format = 'gd';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
654 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
655
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
656 return $format;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
657 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
658
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
659 sub checkInputFormat {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
660 my ($format,$count,$id,$fasta,$fastq,$qual,$gd,$aa);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
661 $count = 3;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
662 $fasta = $fastq = $qual = $gd = $aa = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
663 $format = 'unknown';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
664
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
665 while (<STDIN>) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
666 push(@dataread,$_);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
667 # chomp();
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
668 # next unless(length($_));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
669 if($count-- == 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
670 last;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
671 } elsif(!$fasta && /^\>\S+\s*/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
672 $fasta = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
673 $qual = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
674 } elsif($fasta == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
675 $fasta = 2;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
676 } elsif($qual == 1 && /^\s*\d+/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
677 $qual = 2;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
678 } elsif(!$fastq && /^\@(\S+)\s*/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
679 $id = $1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
680 $fastq = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
681 } elsif($fastq == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
682 $fastq = 2;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
683 } elsif($fastq == 2 && /^\+(\S*)\s*/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
684 $fastq = 3 if($id eq $1 || /^\+\s*$/);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
685 } elsif(!$gd && /^\{\"numseqs\"\:/) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
686 $gd = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
687 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
688 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
689
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
690 if($fasta == 2) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
691 $format = 'fasta';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
692 } elsif($qual == 2) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
693 $format = 'qual';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
694 } elsif($fastq == 3) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
695 $format = 'fastq';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
696 } elsif($gd == 1) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
697 $format = 'gd';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
698 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
699
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
700 return $format;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
701 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
702
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
703 sub readGdFile {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
704 my $file = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
705 my $data;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
706
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
707 open(DATA,"<$file") or &printError("Could not open file $file: $!");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
708 while(<DATA>) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
709 next if(/^\#/);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
710 chomp();
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
711 if(length($_)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
712 $data = from_json($_);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
713 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
714 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
715 close(DATA);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
716
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
717 return $data;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
718 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
719
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
720 sub getFileName {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
721 my $ext = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
722 my ($file,$fh);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
723 if(exists $params{o}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
724 $file = $params{o}.$ext;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
725 open(OUT,">$file") or &printError('cannot open output file');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
726 close(OUT);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
727 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
728 $fh = File::Temp->new( TEMPLATE => $filename.'_prinseq_graphs_XXXX',
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
729 SUFFIX => $ext,
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
730 UNLINK => 0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
731 $file = $fh->filename;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
732 $fh->close();
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
733 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
734 return $file;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
735 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
736
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
737 sub generateGraphs {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
738 my ($in,$out) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
739 my ($file,$data,$surface,@graphs);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
740 $data = &readGdFile($in);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
741
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
742 #length plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
743 if(exists $data->{counts}->{length}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
744 $file = &getFileName('_ld.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
745 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences',$file,0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
746 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
747 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
748 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
749 if(exists $data->{counts2} && exists $data->{counts2}->{length}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
750 $file = &getFileName('_ld-2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
751 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{length},1),$data->{stats2}->{length},'Length Distribution','Read Length in bp','# Sequences',$file,0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
752 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
753 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
754 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
755
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
756 #tail plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
757 if(exists $data->{tail}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
758 $file = &getFileName('_td5.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
759 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences',$file,0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
760 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
761 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
762 $file = &getFileName('_td3.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
763 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences',$file,0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
764 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
765 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
766 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
767 if(exists $data->{tail2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
768 $file = &getFileName('_td5-2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
769 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences',$file,0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
770 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
771 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
772 $file = &getFileName('_td3-2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
773 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences',$file,0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
774 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
775 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
776 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
777
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
778 #Ns plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
779 if(exists $data->{counts}->{ns}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
780 $file = &getFileName('_ns.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
781 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences',$file,0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
782 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
783 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
784 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
785 if(exists $data->{counts2} && exists $data->{counts2}->{ns}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
786 $file = &getFileName('_ns-2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
787 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences',$file,0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
788 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
789 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
790 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
791
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
792 #GC content plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
793 if(exists $data->{counts}->{gc}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
794 $file = &getFileName('_gc.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
795 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences',$file,1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
796 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
797 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
798 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
799 if(exists $data->{counts2} && exists $data->{counts2}->{gc}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
800 $file = &getFileName('_gc-2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
801 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{gc},0),$data->{stats2}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences',$file,1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
802 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
803 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
804 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
805
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
806 #Sequence complexity plot - dust
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
807 if(exists $data->{compldust}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
808 $file = &getFileName('_cd.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
809 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{compldust},0),undef,'Sequence complexity distribution','Mean sequence complexity (DUST scores)','Number of sequences',$file,1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
810 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
811 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
812 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
813
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
814 #Sequence complexity plot - entropy
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
815 if(exists $data->{complentropy}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
816 $file = &getFileName('_ce.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
817 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{complentropy},0),undef,'Sequence complexity distribution','Mean sequence complexity (Entropy values)','Number of sequences',$file,1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
818 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
819 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
820 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
821
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
822 #Dinucleotide odd ratio PCA plot - microbial/viral
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
823 #Odds ratio plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
824 if(exists $data->{dinucodds}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
825 my @new = map {$data->{dinucodds}->{$_}} sort keys %{$data->{dinucodds}};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
826 # $file = &getFileName('_pm.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
827 # $surface = &createPCAPlot(&convertToPCAValues(\@new,'m'),'PCA','1st Principal Component Score','2nd Principal Component Score',$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
828 # $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
829 # push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
830 # $file = &getFileName('_pv.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
831 # $surface = &createPCAPlot(&convertToPCAValues(\@new,'v'),'PCA','1st Principal Component Score','2nd Principal Component Score',$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
832 # $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
833 # push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
834 $file = &getFileName('_or.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
835 $surface = &createOddsRatioPlot($data->{dinucodds},'Odds ratios','Dinucleotide','Odds ratio',$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
836 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
837 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
838 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
839
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
840 #Qual plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
841 if(exists $data->{quals}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
842 $file = &getFileName('_qd.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
843 $surface = &createBoxPlot(&convertToBoxValues($data->{quals},4),'Base Quality Distribution','Read position in %','Quality score',$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
844 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
845 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
846 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
847 if(exists $data->{quals2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
848 $file = &getFileName('_qd-2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
849 $surface = &createBoxPlot(&convertToBoxValues($data->{quals2},4),'Base Quality Distribution','Read position in %','Quality score',$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
850 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
851 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
852 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
853
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
854 #Qualbin plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
855 if(exists $data->{qualsbin}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
856 $file = &getFileName('_qd2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
857 $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin},4),'Base Quality Distribution','Read position in bp','Quality score',$file,0,'bp',$data->{binval});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
858 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
859 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
860 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
861 if(exists $data->{qualsbin2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
862 $file = &getFileName('_qd2-2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
863 $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin2},4),'Base Quality Distribution','Read position in bp','Quality score',$file,0,'bp',$data->{binval});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
864 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
865 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
866 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
867
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
868 #Qualmean plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
869 if(exists $data->{qualsmean}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
870 $file = &getFileName('_qd3.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
871 $surface = &createBarPlot(&convertToBarValues($data->{qualsmean},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences',$file,0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
872 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
873 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
874 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
875 if(exists $data->{qualsmean2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
876 $file = &getFileName('_qd3-2.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
877 $surface = &createBarPlot(&convertToBarValues($data->{qualsmean2},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences',$file,0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
878 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
879 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
880 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
881
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
882 #Sequence duplicate plots
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
883 if(exists $data->{dubscounts}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
884 $file = &getFileName('_df.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
885 $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubscounts},5,1,100),'Sequence duplication level','Number of duplicates','Number of sequences',$file,0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
886 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
887 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
888 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
889 if(exists $data->{dubslength}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
890 $file = &getFileName('_dl.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
891 $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubslength},5,1),'Sequence duplication level','Read Length in bp','Number of duplicates',$file,0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
892 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
893 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
894 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
895 if(exists $data->{dubscounts}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
896 my %dubsmax;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
897 my $count = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
898 foreach my $n (sort {$b <=> $a} keys %{$data->{dubscounts}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
899 foreach my $s (keys %{$data->{dubscounts}->{$n}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
900 foreach my $i (1..$data->{dubscounts}->{$n}->{$s}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
901 $dubsmax{$count++}->{$s} = $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
902 last unless($count <= 100);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
903 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
904 last unless($count <= 100);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
905 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
906 last unless($count <= 100);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
907 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
908 $file = &getFileName('_dm.png');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
909 $surface = &createStackBarPlot(&convertOdToStackBinMatrix(\%dubsmax,5,1,100),'Sequence duplication level','Sequence','Number of duplicates',$file,0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
910 $surface->write_to_png($file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
911 push(@graphs,$file);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
912 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
913
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
914 return \@graphs;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
915 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
916
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
917 sub convertOdToBinMatrix {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
918 my ($data,$min,$max,$nonice) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
919
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
920 my ($num,$ymax,$xmax,$xmin,$step,%vals,$tmp,@matrix,$bin,$tmpbin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
921
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
922 #make nice xmax value
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
923 if(defined $max) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
924 $xmax = $max;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
925 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
926 $xmax = (sort {$b <=> $a} keys %$data)[0];
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
927 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
928 $bin = &getBinVal($xmax);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
929 $xmax = $bin*100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
930 $xmin = (defined $min ? $min : 0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
931
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
932 #get data to bin and find y axis max value
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
933 $ymax = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
934 $tmp = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
935 $tmpbin = $bin;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
936 foreach my $i ($xmin..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
937 if(exists $data->{$i}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
938 $tmp += $data->{$i};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
939 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
940 if(--$tmpbin <= 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
941 $tmpbin = $bin;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
942 $ymax = &max($ymax,$tmp);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
943 push(@matrix,$tmp);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
944 $tmp = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
945 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
946 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
947
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
948 #make nice ymax value
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
949 unless($nonice) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
950 $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
951 # $step = ($ymax <= 10 ? 10 : ($ymax < 40 ? 40 : ($ymax < 100 ? 100 : ($ymax < 1000 ? 100 : 100))));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
952 # $ymax = sprintf("%d",($ymax/$step)+1)*$step if($ymax % $step);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
953 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
954
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
955 return (\@matrix,$xmax,$ymax);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
956 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
957
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
958 sub getBinVal {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
959 my $val = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
960 my $step;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
961 if(!$val || $val <= 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
962 return 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
963 } elsif($val < 10000) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
964 return int($val/100)+($val % 100 ? 1 : 0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
965 } elsif($val < 100000) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
966 return 1000;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
967 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
968 $step = 1000000;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
969 my $xmax = ($val % $step ? sprintf("%d",($val/$step+1))*$step : $val);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
970 return ($xmax/100);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
971 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
972 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
973
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
974 sub max {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
975 my ($a,$b) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
976 return ($a < $b ? $b : $a);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
977 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
978
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
979 sub min {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
980 my ($a,$b) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
981 return ($a > $b ? $b : $a);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
982 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
983
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
984 sub createAnnotBarPlot {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
985 my ($matrix,$xmax,$ymax,$annot,$title,$xlab,$ylab,$file,$zero,$add) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
986
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
987 my $bin = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
988 if($xmax > 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
989 $bin = $xmax / 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
990 $xmax = 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
991 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
992
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
993 my @barcol = (127/255, 127/255, 255/255, 1); #b2b2ff
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
994 my @meancol = (255/255, 127/255, 127/255, 1); #ffb2b2
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
995 my @stdcol = (178/255, 178/255, 255/255, 0.8); #7f7fff
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
996 my @std1col = (0, 0, 0, 0.04); #ff7f7f
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
997 my @std2col = (0, 0, 0, 0.03); #ff7f7f
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
998 my @linecol = (0, 0, 0, 0.4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
999 my @helplinecol = (1, 1, 1, 0.9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1000 my @background = (0.95, 0.95, 0.95, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1001 my @tickcol = (0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1002 my @labelcol = (0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1003
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1004 #create new image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1005 my $size = 6;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1006 my $offset = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1007 my $left = 40;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1008 my $bottom = 15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1009 my $top = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1010 my $height = 200;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1011 my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$top+$offset*2+$height); #format, width, height
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1012 my $cr = Cairo::Context->create($surface);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1013
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1014 my ($font_extents,$extents,$fontheight,$fontdescent);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1015
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1016 #background
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1017 $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1018 $cr->set_source_rgba(1, 1, 1, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1019 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1020
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1021 #fonts
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1022 $cr->select_font_face ('sans', 'normal', 'normal');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1023
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1024 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1025
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1026 #set up work space
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1027 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1028 $cr->set_line_width(1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1029
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1030 #background for plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1031 $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1032 $cr->set_source_rgba(@background);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1033 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1034
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1035 #draw ticks
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1036 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1037 $cr->set_source_rgba(@tickcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1038 foreach my $i (($zero ? 0 : 1)..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1039 if(($i%5) == 0 && $i > 1 && $i < $xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1040 $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1041 $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1042 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1043 $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1044 $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1045 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1046 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1047 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1048
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1049 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1050 $cr->move_to($left+$offset, $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1051 $cr->line_to($left+$offset-3, $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1052 $cr->move_to($left+$offset, $top+$offset+$height-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1053 $cr->line_to($left+$offset-3, $top+$offset+$height-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1054 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1055
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1056 #helplines
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1057 $cr->set_source_rgba(@helplinecol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1058 foreach my $j (1..3) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1059 $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1060 $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1061 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1062 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1063
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1064 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1065
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1066 #tick labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1067 $cr->set_source_rgba(@tickcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1068 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1069 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1070 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1071 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1072 foreach my $i (($zero ? 0 : 1)..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1073 if(($i%10) == 0 && $i > 1 && $i < $xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1074 $extents = $cr->text_extents($i*$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1075 $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1076 $cr->show_text($i*$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1077 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1078 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1079 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1080 $extents = $cr->text_extents(&addCommas($ymax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1081 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1082 $cr->show_text(&addCommas($ymax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1083 $extents = $cr->text_extents(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1084 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1085 $cr->show_text(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1086
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1087 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1088
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1089 #labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1090 $cr->set_font_size (14);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1091 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1092 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1093
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1094 #axis labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1095 $cr->set_source_rgba(@labelcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1096 $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1097 $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1098 $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1099 $cr->rotate($PI * 3 / 2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1100 $extents = $cr->text_extents($ylab.($bin>1 ? ' (per bin)' : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1101 $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset+10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1102 $cr->show_text($ylab.($bin>1 ? ' (per bin)' : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1103
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1104 $cr->restore;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1105
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1106 #draw annotations
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1107 if($annot) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1108 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1109 my ($std1l,$std2l,$std1r,$std2r);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1110 #std boxes
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1111 $std1l = int($annot->{mean})-int($annot->{std});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1112 $std2l = int($annot->{mean})-2*int($annot->{std});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1113 $std1r = int($annot->{mean})+int($annot->{std});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1114 $std2r = int($annot->{mean})+2*int($annot->{std});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1115 unless($std1l == $std1r) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1116 if($std1l < 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1117 $std1l = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1118 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1119 $std1l = int($std1l/$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1120 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1121 if($std2l < 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1122 $std2l = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1123 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1124 $std2l = int($std2l/$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1125 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1126 if($std1r/$bin > 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1127 $std1r = 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1128 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1129 $std1r = int($std1r/$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1130 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1131 if($std2r/$bin > 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1132 $std2r = 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1133 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1134 $std2r = int($std2r/$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1135 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1136 $cr->rectangle($left+$offset+$std2l*$size+2, $top+$offset, ($std2r-$std2l)*$size, $height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1137 $cr->set_source_rgba(@std2col);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1138 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1139 $cr->rectangle($left+$offset+$std1l*$size+2, $top+$offset, ($std1r-$std1l)*$size, $height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1140 $cr->set_source_rgba(@std1col);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1141 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1142 #mean line
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1143 $cr->set_source_rgba(@meancol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1144 $cr->move_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2, $top+$offset-5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1145 $cr->line_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1146 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1147 #std lines
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1148 $cr->set_source_rgba(@stdcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1149 if($std1l > 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1150 $cr->move_to($left+$offset+$std1l*$size+2, $top+$offset-5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1151 $cr->line_to($left+$offset+$std1l*$size+2, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1152 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1153 if($std2l > 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1154 $cr->move_to($left+$offset+$std2l*$size+2, $top+$offset-5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1155 $cr->line_to($left+$offset+$std2l*$size+2, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1156 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1157 if($std1r < 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1158 $cr->move_to($left+$offset+$std1r*$size+2, $top+$offset-5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1159 $cr->line_to($left+$offset+$std1r*$size+2, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1160 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1161 if($std2r < 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1162 $cr->move_to($left+$offset+$std2r*$size+2, $top+$offset-5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1163 $cr->line_to($left+$offset+$std2r*$size+2, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1164 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1165 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1166 #labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1167 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1168 $cr->set_source_rgba(@tickcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1169 $extents = $cr->text_extents('M');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1170 $cr->move_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2-$extents->{width}/2, $top+$offset-10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1171 $cr->show_text('M');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1172 if($std1l > 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1173 $extents = $cr->text_extents('1SD');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1174 $cr->move_to($left+$offset+$std1l*$size-$extents->{width}/2+2, $top+$offset-10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1175 $cr->show_text('1SD');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1176 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1177 if($std2l > 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1178 $extents = $cr->text_extents('2SD');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1179 $cr->move_to($left+$offset+$std2l*$size-$extents->{width}/2+3, $top+$offset-10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1180 $cr->show_text('2SD');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1181 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1182 if($std1r < 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1183 $extents = $cr->text_extents('1SD');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1184 $cr->move_to($left+$offset+$std1r*$size-$extents->{width}/2+2, $top+$offset-10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1185 $cr->show_text('1SD');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1186 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1187 if($std2r < 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1188 $extents = $cr->text_extents('2SD');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1189 $cr->move_to($left+$offset+$std2r*$size-$extents->{width}/2+3, $top+$offset-10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1190 $cr->show_text('2SD');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1191 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1192 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1193 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1194
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1195 #draw boxes
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1196 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1197 $cr->set_source_rgba(@barcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1198 foreach my $pos (0..$xmax-($zero ? 0 : 1)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1199 next unless($matrix->[$pos]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1200 my $tmp = $matrix->[$pos] / $ymax;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1201 #unique
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1202 if($tmp) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1203 $cr->rectangle($left+$offset+$pos*$size, $top+$offset+$height, $size-1, -$tmp*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1204 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1205 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1206 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1207
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1208 #write image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1209 $cr->show_page;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1210 return $surface;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1211 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1212
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1213 #sub convertToPCAValues {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1214 # my ($new,$type) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1215 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1216 # my @data = ($type eq 'v' ? @$DINUCODDS_VIR : @$DINUCODDS_MIC);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1217 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1218 # push(@data,$new);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1219 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1220 # my $pca = Statistics::PCA->new;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1221 # $pca->load_data({format => 'table', data => \@data});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1222 # $pca->pca();
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1223 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1224 # my @variances = $pca->results('proportion');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1225 # my @list = $pca->results('transformed');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1226 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1227 # my ($xmin,$xmax,$ymin,$ymax);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1228 # $xmax = $ymax = -100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1229 # $xmin = $ymin = 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1230 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1231 # #get min/max values for PC1
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1232 # foreach my $v (@{$list[0]}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1233 # $xmax = &max($xmax,$v);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1234 # $xmin = &min($xmin,$v);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1235 # }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1236 # #get min/max values for PC2
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1237 # foreach my $v (@{$list[1]}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1238 # $ymax = &max($ymax,$v);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1239 # $ymin = &min($ymin,$v);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1240 # }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1241 #
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1242 # return ([$list[0],$list[1]],sprintf("%d",$variances[0]*100),sprintf("%d",$variances[1]*100),$xmin,$xmax,$ymin,$ymax,$type);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1243 #}
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1244
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1245 sub createPCAPlot {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1246 my ($data,$var1,$var2,$xmin,$xmax,$ymin,$ymax,$type,$title,$xlab,$ylab,$file) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1247
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1248 my @linecol = (0, 0, 0, 0.4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1249 my @helplinecol1 = (1,1,1, 0.9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1250 my @helplinecol2 = (1,1,1, 0.5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1251
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1252 #create new image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1253 my $size = 5;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1254 my $offset = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1255 my $left = 25;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1256 my $bottom = 15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1257 my $top = ($type eq 'v' ? 35 : 20);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1258 my $height = 500;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1259 my $space = 10;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1260 my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+$height+2*$space,$top+$bottom+$offset*2+$height+2*$space); #format, width, height
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1261 my $cr = Cairo::Context->create($surface);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1262
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1263 my ($font_extents,$extents,$fontheight,$fontdescent);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1264
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1265 #background
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1266 $cr->rectangle(0, 0, $left+$offset*2+$height+2*$space,$top+$bottom+$offset*2+$height+2*$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1267 $cr->set_source_rgba(1, 1, 1, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1268 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1269
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1270 #fonts
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1271 $cr->select_font_face ('sans-serif', 'normal', 'normal');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1272
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1273 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1274
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1275 #set up work space
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1276 my ($dx, $dy);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1277 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1278 $cr->set_line_width(1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1279
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1280 #background for plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1281 $cr->rectangle($left+$offset, $top+$offset, $height+2*$space, $height+2*$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1282 $cr->set_source_rgba(0.95, 0.95, 0.95, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1283 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1284
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1285 #get infos
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1286 my $num = scalar(@{$data->[0]})-1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1287 my $xrange = ($xmax-$xmin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1288 my $yrange = ($ymax-$ymin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1289 my $data_info = ($type eq 'v' ? $DATA_VIR : $DATA_MIC);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1290
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1291 #draw ticks
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1292 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1293 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1294 $cr->move_to($left+$offset+$space, $top+$offset+$height+2*$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1295 $cr->line_to($left+$offset+$space, $top+$offset+$height+2*$space+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1296 $cr->move_to($left+$offset+$space+$height, $top+$offset+$height+2*$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1297 $cr->line_to($left+$offset+$space+$height, $top+$offset+$height+2*$space+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1298 $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1299 $cr->line_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1300 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1301 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1302 $cr->move_to($left+$offset, $top+$offset+$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1303 $cr->line_to($left+$offset-3, $top+$offset+$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1304 $cr->move_to($left+$offset, $top+$offset+$height+$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1305 $cr->line_to($left+$offset-3, $top+$offset+$height+$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1306 $cr->move_to($left+$offset, $top+$offset+$space+int(abs($ymax)/$yrange*$height));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1307 $cr->line_to($left+$offset-3, $top+$offset+$space+int(abs($ymax)/$yrange*$height));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1308 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1309
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1310 #helplines
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1311 $cr->set_source_rgba(@helplinecol1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1312 $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1313 $cr->line_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1314 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1315 $cr->move_to($left+$offset, $top+$offset+$space+int(abs($ymax)/$yrange*$height));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1316 $cr->line_to($left+$offset+2*$space+$height, $top+$offset+$space+int(abs($ymax)/$yrange*$height));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1317 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1318
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1319
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1320 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1321
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1322 #tick labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1323 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1324 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1325 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1326 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1327 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1328 $extents = $cr->text_extents(sprintf("%.2f",$xmin));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1329 $cr->move_to($left+$offset+$space-$extents->{width}/2-1, $top+$offset+$height+2*$space+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1330 $cr->show_text(sprintf("%.2f",$xmin));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1331 $extents = $cr->text_extents(sprintf("%.2f",$xmax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1332 $cr->move_to($left+$offset+$space+$height-$extents->{width}/2-1, $top+$offset+$height+2*$space+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1333 $cr->show_text(sprintf("%.2f",$xmax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1334 $extents = $cr->text_extents(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1335 $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height)-$extents->{width}/2, $top+$offset+$height+2*$space+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1336 $cr->show_text(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1337 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1338 $extents = $cr->text_extents(sprintf("%.2f",$ymax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1339 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$space+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1340 $cr->show_text(sprintf("%.2f",$ymax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1341 $extents = $cr->text_extents(sprintf("%.2f",$ymin));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1342 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$height+$space+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1343 $cr->show_text(sprintf("%.2f",$ymin));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1344 $extents = $cr->text_extents(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1345 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$space+int(abs($ymax)/$yrange*$height)+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1346 $cr->show_text(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1347
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1348 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1349
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1350 #labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1351 $cr->set_font_size (14);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1352 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1353 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1354
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1355 #add type
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1356 $cr->set_source_rgba(0, 0, 0, 0.5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1357 $extents = $cr->text_extents(uc($type));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1358 $cr->arc($offset/2+$extents->{width}/2, $offset-5, 10, 0, 2*$PI);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1359 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1360 $cr->set_source_rgba(1, 1, 1, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1361 $cr->move_to($offset/2-($type eq 'm' ? 1 : 0), $offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1362 $cr->show_text(uc($type));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1363
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1364 #axis labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1365 $cr->set_source_rgba(0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1366 $extents = $cr->text_extents($xlab.' ('.$var1.'%)');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1367 $cr->move_to($left+$offset+$height/2-$extents->{width}/2+$space, $top+$offset+$height+$fontheight+15+2*$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1368 $cr->show_text($xlab.' ('.$var1.'%)');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1369 $cr->rotate($PI * 3 / 2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1370 $extents = $cr->text_extents($ylab.' ('.$var2.'%)');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1371 $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2)+$space,$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1372 $cr->show_text($ylab.' ('.$var2.'%)');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1373
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1374 $cr->restore;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1375
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1376 #draw dots
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1377 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1378 $cr->set_font_size (10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1379 foreach my $i (0..$num) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1380 $cr->set_source_rgba(@{$data_info->[$i]->[3]});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1381 $cr->arc(($left+$offset+$space+int(($data->[0]->[$i]+abs($xmin))/$xrange*$height)), ($space+$top+$offset+int(($data->[1]->[$i]+abs($ymin))/$yrange*$height)), $size, 0, 2*$PI);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1382 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1383 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1384 $cr->set_source_rgba(0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1385 foreach my $i (0..$num) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1386 $extents = $cr->text_extents($data_info->[$i]->[1]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1387 $cr->move_to(($left+$offset+$space+int(($data->[0]->[$i]+abs($xmin))/$xrange*$height))+$size+1, ($space+$top+$offset+int(($data->[1]->[$i]+abs($ymin))/$yrange*$height))+$size*2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1388 $cr->show_text($data_info->[$i]->[1]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1389 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1390
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1391 #draw legend
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1392 my %labels;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1393 foreach my $i (0..$num) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1394 $labels{$data_info->[$i]->[1]} = $data_info->[$i]->[2];
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1395 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1396 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1397 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1398 $cr->set_source_rgba(0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1399 my $x = $left+$offset+$space;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1400 my $y = int($offset/2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1401 foreach my $n (sort {$a <=> $b} keys %labels) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1402 if($x+$cr->text_extents($n.' - '.$labels{$n})->{width}+15 >= $left+$offset+$space+$height) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1403 $x = $left+$offset+$space;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1404 $y += $fontheight;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1405 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1406 $cr->move_to($x,$y);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1407 $cr->show_text($n.' - '.$labels{$n});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1408 $x += $cr->text_extents($n.' - '.$labels{$n})->{width}+15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1409
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1410 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1411
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1412 #write image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1413 $cr->show_page;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1414 return $surface;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1415 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1416
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1417 sub createOddsRatioPlot {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1418 my ($data,$title,$xlab,$ylab,$file) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1419
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1420 my @yvalues = (0.5,0.78,1.00,1.23,1.5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1421
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1422 my @linecol = (0, 0, 0, 0.4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1423 my @helplinecol1 = (1,1,1, 0.9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1424 my @helplinecol2 = (1,1,1, 0.5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1425
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1426 #create new image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1427 my $size = 40;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1428 my $offset = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1429 my $left = 35;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1430 my $right = 90;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1431 my $bottom = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1432 my $top = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1433 my $height = 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1434 my $width = $size*10;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1435 my $space = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1436 my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+$width+$right,$top+$bottom+$offset*2+$height); #format, width, height
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1437 my $cr = Cairo::Context->create($surface);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1438
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1439 my ($font_extents,$extents,$fontheight,$fontdescent);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1440
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1441 #background
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1442 $cr->rectangle(0, 0, $left+$offset*2+$width+$right,$top+$bottom+$offset*2+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1443 $cr->set_source_rgba(1, 1, 1, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1444 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1445
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1446 #fonts
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1447 $cr->select_font_face ('sans', 'normal', 'normal');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1448
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1449 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1450
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1451 #set up work space
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1452 my ($dx, $dy);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1453 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1454 $cr->set_line_width(1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1455
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1456 #background for plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1457 $cr->rectangle($left+$offset, $top+$offset, $width, $height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1458 $cr->set_source_rgba(0.95, 0.95, 0.95, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1459 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1460
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1461 #right side marks
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1462 $cr->set_source_rgba(255/255, 127/255, 127/255, 0.6);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1463 $cr->rectangle($left+$offset+$width+8, $top+$offset, 3, 0.77/2*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1464 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1465 $cr->rectangle($left+$offset+$width+8, $top+$offset+$height-0.78/2*$height, 3, 0.78/2*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1466 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1467
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1468 #get infos
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1469 my $num = scalar(keys %$data)-1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1470
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1471 #draw ticks
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1472 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1473 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1474 foreach my $i (0..$num) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1475 $cr->move_to($left+$offset+$size/2+$i*$size, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1476 $cr->line_to($left+$offset+$size/2+$i*$size, $top+$offset+$height+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1477 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1478 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1479 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1480 foreach my $i (@yvalues) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1481 $cr->move_to($left+$offset, $top+$offset+$height-$i/2*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1482 $cr->line_to($left+$offset-3, $top+$offset+$height-$i/2*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1483 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1484 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1485
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1486 #helplines
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1487 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1488 $cr->set_source_rgba(@helplinecol1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1489 foreach my $i (0..$num) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1490 $cr->move_to($left+$offset+$size/2+$i*$size, $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1491 $cr->line_to($left+$offset+$size/2+$i*$size, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1492 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1493 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1494 #yaxis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1495 foreach my $i (@yvalues) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1496 $cr->set_source_rgba(0, 0, 0, ($i == 0.5 || $i == 1.00 || $i == 1.50 ? 0.1 : 0.3));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1497 $cr->move_to($left+$offset, $top+$offset+$height-$i/2*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1498 $cr->line_to($left+$offset+$width, $top+$offset+$height-$i/2*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1499 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1500 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1501
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1502 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1503
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1504 #tick labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1505 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1506 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1507 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1508 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1509 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1510 my $xcur = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1511 foreach my $dn (map {join("/",(m/../g ))} sort keys %$data) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1512 $extents = $cr->text_extents($dn);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1513 $cr->move_to($left+$offset+$size/2-$extents->{width}/2-1+$size*$xcur++, $top+$offset+$height+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1514 $cr->show_text($dn);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1515 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1516 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1517 foreach my $i (@yvalues) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1518 $cr->set_source_rgba(0, 0, 0, ($i == 0.5 || $i == 1.00 || $i == 1.50 ? 0.5 : 0.8));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1519 $extents = $cr->text_extents(sprintf("%.2f",$i));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1520 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$height-$i/2*$height+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1521 $cr->show_text(sprintf("%.2f",$i));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1522 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1523
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1524 #label on right side
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1525 $cr->set_source_rgba(0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1526 $extents = $cr->text_extents('Over-represented');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1527 $cr->move_to($left+$offset+$width+15, $top+$offset+$height-1.6/2*$height+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1528 $cr->show_text('Over-represented');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1529 $extents = $cr->text_extents('Under-represented');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1530 $cr->move_to($left+$offset+$width+15, $top+$offset+$height-0.4/2*$height+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1531 $cr->show_text('Under-represented');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1532
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1533 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1534
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1535 #labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1536 $cr->set_font_size (14);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1537 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1538 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1539
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1540 #axis labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1541 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1542 $cr->set_source_rgba(0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1543 $extents = $cr->text_extents($xlab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1544 $cr->move_to($left+$offset+$width/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1545 $cr->show_text($xlab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1546 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1547 $cr->rotate($PI * 3 / 2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1548 $extents = $cr->text_extents($ylab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1549 $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1550 $cr->show_text($ylab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1551
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1552 $cr->restore;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1553
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1554 #draw dots
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1555 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1556 $xcur = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1557 foreach my $dn (sort keys %$data) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1558 if($data->{$dn} > 1.23 || $data->{$dn} < 0.78) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1559 $cr->set_source_rgba(255/255, 127/255, 127/255, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1560 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1561 $cr->set_source_rgba(127/255, 127/255, 255/255, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1562 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1563 $cr->arc($left+$offset+$size/2+$size*$xcur++, $top+$offset+$height-$data->{$dn}/2*$height, 5, 0, 2*$PI);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1564 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1565 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1566
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1567 #write image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1568 $cr->show_page;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1569 return $surface;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1570 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1571
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1572 sub convertToBoxValues {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1573 my ($data,$niceval) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1574 my ($xmax,$ymax,@matrix);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1575 $xmax = $ymax = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1576 foreach my $i (sort {$a <=> $b} keys %$data) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1577 $xmax++;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1578 push(@matrix,[$i,$data->{$i}->{min},$data->{$i}->{p25},$data->{$i}->{median},$data->{$i}->{p75},$data->{$i}->{max}]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1579 $ymax = &max($ymax,$data->{$i}->{max});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1580 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1581
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1582 if($niceval) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1583 $ymax = sprintf("%d",($ymax/$niceval)+1)*$niceval if($ymax % $niceval);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1584 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1585
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1586 return (\@matrix,$xmax,$ymax);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1587 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1588
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1589 sub createBoxPlot {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1590 my ($matrix,$xmax,$ymax,$title,$xlab,$ylab,$file,$zero,$add,$bin) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1591 $bin = ($bin ? $bin : 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1592 $zero = 0 unless($zero);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1593 $add = '' unless(defined $add);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1594 if($xmax != 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1595 $xmax = 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1596 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1597 $ymax = 1 unless($ymax);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1598 # die Dumper $matrix;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1599
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1600
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1601 my @col0 = (178/255, 178/255, 255/255); #b2b2ff
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1602 my @col1 = (255/255, 178/255, 178/255); #ffb2b2
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1603 my @col3 = (127/255, 127/255, 255/255); #7f7fff
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1604 my @col4 = (255/255, 127/255, 127/255); #ff7f7f
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1605 my @linecol = (0, 0, 0, 0.4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1606 my @linecol0 = (@col3, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1607 my @linecol1 = (@col4, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1608 my @boxcol = (@col3, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1609 my @whiscol = (@col0, 0.9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1610 my @medcol = (0,0,0, 0.5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1611 my @helplinecol1 = (1,1,1, 0.9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1612 my @helplinecol2 = (1,1,1, 0.5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1613
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1614 #create new image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1615 my $size = 6;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1616 my $offset = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1617 my $left = 25;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1618 my $bottom = 25;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1619 my $top = 5;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1620 my $height = 300;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1621 my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+$height); #format, width, height
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1622 my $cr = Cairo::Context->create($surface);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1623
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1624 my ($font_extents,$extents,$fontheight,$fontdescent);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1625
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1626 #background
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1627 $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1628 $cr->set_source_rgba(1, 1, 1, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1629 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1630
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1631 #fonts
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1632 $cr->select_font_face ('sans', 'normal', 'normal');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1633 # $cr->set_font_size (30);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1634
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1635 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1636
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1637 #set up work space
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1638 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1639 $cr->set_line_width(1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1640
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1641 #background for plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1642 $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1643 $cr->set_source_rgba(0.95, 0.95, 0.95, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1644 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1645
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1646 #draw legend
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1647 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1648 # $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1649 my $x = $left+$offset+$size*50;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1650 foreach my $v ([\@whiscol,'Min/Max value'],[\@boxcol,'25th to 75th percentile'],[\@medcol,'Median']) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1651 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1652 $cr->set_source_rgba(@{$v->[0]});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1653 $cr->rectangle($x, $top+5, 10, 10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1654 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1655 $x += 15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1656 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1657 $cr->move_to($x,$top+5+9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1658 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1659 $cr->show_text($v->[1]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1660 $x += $cr->text_extents($v->[1])->{width}+15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1661 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1662
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1663 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1664
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1665 #draw ticks
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1666 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1667 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1668 # $cr->move_to($left+$offset+int($size/2+1), $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1669 # $cr->line_to($left+$offset+int($size/2+1), $top+$offset+$height+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1670 # $cr->move_to($left+$offset+int($size/2+1), $top+$offset+$height+$space);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1671 # $cr->line_to($left+$offset+int($size/2+1), $top+$offset+$height+$space-3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1672 foreach my $i (1..9) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1673 $cr->move_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1674 $cr->line_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1675 # $cr->move_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1676 # $cr->line_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset-3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1677 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1678 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1679 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1680 foreach my $j (0..4) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1681 $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1682 $cr->line_to($left+$offset-3, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1683 # $cr->move_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1684 # $cr->line_to($left+$offset+($xmax+$zero)*$size+3, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1685 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1686 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1687
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1688 #helplines
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1689 $cr->set_source_rgba(@helplinecol1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1690 foreach my $j (1..3) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1691 $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1692 $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1693 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1694 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1695
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1696 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1697
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1698 #tick labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1699 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1700 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1701 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1702 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1703 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1704 # $extents = $cr->text_extents(1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1705 # $cr->move_to($left+$offset+int($size/2+1)-$extents->{width}, $top+$offset+$height+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1706 # $cr->show_text(1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1707 foreach my $i (1..9) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1708 $extents = $cr->text_extents($i*10*$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1709 $cr->move_to($left+$offset+int($size/2+1)+$size*10*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1710 $cr->show_text($i*10*$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1711 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1712 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1713 foreach my $j (0..4) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1714 $extents = $cr->text_extents(&addCommas($ymax*$j/4));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1715 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height*(4-$j)/4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1716 $cr->show_text(&addCommas($ymax*$j/4));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1717 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1718
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1719 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1720
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1721 #axis labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1722 $cr->set_source_rgba(0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1723 $cr->set_font_size (14);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1724 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1725 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1726 $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1727 $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1728 $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1729 $cr->rotate($PI * 3 / 2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1730 $extents = $cr->text_extents($ylab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1731 $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1732 $cr->show_text($ylab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1733
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1734 $cr->restore;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1735
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1736 #draw boxes
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1737 my $factor = $height/$ymax;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1738 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1739 foreach my $v (@$matrix) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1740 #wiskers
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1741 $cr->set_source_rgba(@whiscol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1742 if($v->[1] != $v->[2]) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1743 $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[1]*$factor-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1744 $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[1]*$factor-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1745 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1746 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1747 if($v->[4] != $v->[5]) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1748 $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[5]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1749 $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[5]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1750 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1751 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1752 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1753 $cr->set_dash(1,4,3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1754 if($v->[1] != $v->[2]) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1755 $cr->move_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[2]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1756 $cr->line_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[1]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1757 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1758 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1759 if($v->[4] != $v->[5]) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1760 $cr->move_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[5]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1761 $cr->line_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[4]*$factor-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1762 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1763 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1764 $cr->restore;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1765 #box
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1766 if(($v->[2] != $v->[3]) || ($v->[4] != $v->[3])) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1767 $cr->set_source_rgba(@whiscol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1768 $cr->rectangle($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[2]*$factor, $size-1, -($v->[4]-$v->[2])*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1769 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1770 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1771 $cr->set_source_rgba(@boxcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1772 $cr->rectangle($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[2]*$factor, $size-2, -($v->[4]-$v->[2])*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1773 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1774 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1775 $cr->set_source_rgba(@boxcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1776 $cr->move_to($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[3]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1777 $cr->line_to($left+$offset+$size*$v->[0]+$size-1, $top+$offset+$height-$v->[3]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1778 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1779 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1780 #median
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1781 $cr->set_source_rgba(@medcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1782 $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[3]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1783 $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[3]*$factor);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1784 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1785 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1786
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1787 #write image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1788 $cr->show_page;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1789 return $surface;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1790 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1791
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1792 sub convertToBarValues {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1793 my ($data,$niceval,$start,$max) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1794 my ($xmax,$ymax,@matrix,$tmp);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1795 $xmax = $ymax = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1796
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1797 #get xmax value
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1798 if($max) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1799 $xmax = $max;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1800 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1801 foreach my $q (keys %$data) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1802 $xmax = &max($xmax,$q);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1803 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1804 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1805 if($niceval) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1806 $xmax = sprintf("%d",($xmax/$niceval)+1)*$niceval if($xmax % $niceval);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1807 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1808
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1809 #get matrix values
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1810 foreach my $q ($start..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1811 $tmp = (exists $data->{$q} ? $data->{$q} : 0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1812 $ymax = &max($ymax,$tmp);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1813 push(@matrix,$tmp);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1814 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1815
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1816 $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1817
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1818 return (\@matrix,$xmax,$ymax);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1819 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1820
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1821 sub createBarPlot {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1822 my ($matrix,$xmax,$ymax,$title,$xlab,$ylab,$file,$zero) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1823
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1824 my @col0 = (178/255, 178/255, 255/255); #b2b2ff
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1825 my @col1 = (255/255, 178/255, 178/255); #ffb2b2
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1826 my @col3 = (127/255, 127/255, 255/255); #7f7fff
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1827 my @col4 = (255/255, 127/255, 127/255); #ff7f7f
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1828 my @linecol = (0, 0, 0, 0.4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1829 my @linecol0 = (@col3, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1830 my @linecol1 = (@col4, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1831 my @barcol0 = (@col3, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1832 my @barcol1 = (@col4, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1833 my @helplinecol1 = (1,1,1, 0.9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1834 my @helplinecol2 = (1,1,1, 0.5);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1835
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1836 #create new image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1837 my $size = ($xmax <= 50 ? 10 : ($xmax <= 100 ? 6 : 3));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1838 my $offset = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1839 my $left = 25;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1840 my $bottom = 15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1841 my $top = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1842 my $height = 200;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1843 my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+$height); #format, width, height
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1844 my $cr = Cairo::Context->create($surface);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1845
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1846 my ($font_extents,$extents,$fontheight,$fontdescent);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1847
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1848 #background
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1849 $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1850 $cr->set_source_rgba(1, 1, 1, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1851 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1852
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1853 #fonts
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1854 $cr->select_font_face ('sans', 'normal', 'normal');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1855 # $cr->set_font_size (30);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1856
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1857 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1858
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1859 #set up work space
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1860 my ($dx, $dy);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1861 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1862 $cr->set_line_width(1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1863
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1864 #background for plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1865 $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1866 $cr->set_source_rgba(0.95, 0.95, 0.95, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1867 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1868
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1869 #draw ticks
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1870 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1871 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1872 foreach my $i (($zero ? 0 : 1)..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1873 if(($i%5) == 0 && $i > 1 && $i < $xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1874 $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1875 $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1876 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1877 $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1878 $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1879 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1880 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1881 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1882
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1883 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1884 $cr->move_to($left+$offset, $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1885 $cr->line_to($left+$offset-3, $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1886 $cr->move_to($left+$offset, $top+$offset+$height-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1887 $cr->line_to($left+$offset-3, $top+$offset+$height-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1888 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1889
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1890 #helplines
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1891 $cr->set_source_rgba(@helplinecol1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1892 foreach my $j (1..3) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1893 $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1894 $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1895 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1896 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1897
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1898 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1899
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1900 #tick labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1901 $cr->set_source_rgba(0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1902 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1903 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1904 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1905 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1906 foreach my $i (($zero ? 0 : 1)..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1907 if(($i%5) == 0 && $i > 1 && $i < $xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1908 $extents = $cr->text_extents($i);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1909 $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1910 $cr->show_text($i);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1911 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1912 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1913 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1914 $extents = $cr->text_extents(&addCommas($ymax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1915 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1916 $cr->show_text(&addCommas($ymax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1917 $extents = $cr->text_extents(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1918 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1919 $cr->show_text(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1920
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1921 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1922
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1923 #labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1924 $cr->set_font_size (14);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1925 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1926 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1927
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1928 #axis labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1929 $cr->set_source_rgba(0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1930 $extents = $cr->text_extents($xlab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1931 $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1932 $cr->show_text($xlab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1933 $cr->rotate($PI * 3 / 2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1934 $extents = $cr->text_extents($ylab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1935 $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1936 $cr->show_text($ylab);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1937
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1938 $cr->restore;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1939
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1940 #draw boxes
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1941 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1942 foreach my $pos (0..$xmax-($zero ? 0 : 1)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1943 next unless($matrix->[$pos+($zero ? 0 : 1)]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1944 my $tmp = $matrix->[$pos+($zero ? 0 : 1)] / $ymax;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1945 #unique
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1946 if($tmp) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1947 $cr->set_source_rgba(@barcol0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1948 $cr->rectangle($left+$offset+($pos+($zero ? 0 : 1))*$size, $top+$offset+$height, $size-1, -$tmp*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1949 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1950 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1951 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1952
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1953 #write image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1954 $cr->show_page;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1955 return $surface;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1956 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1957
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1958 sub convertOdToStackBinMatrix {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1959 my ($data,$stacks,$min,$max,$nonice) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1960
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1961 my ($num,$ymax,$xmax,$xmin,$step,%vals,%sums,$sum,@matrix,$bin,$tmpbin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1962
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1963 #make nice xmax value
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1964 if(defined $max) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1965 $xmax = $max;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1966 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1967 $xmax = (sort {$b <=> $a} keys %$data)[0];
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1968 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1969 $bin = &getBinVal($xmax);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1970 $xmax = $bin*100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1971 $xmin = (defined $min ? $min : 0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1972
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1973 #get data to bin and find y axis max value
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1974 $ymax = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1975 foreach my $s (0..$stacks-1) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1976 $sums{$s} = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1977 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1978 $sum = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1979 $tmpbin = $bin;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1980 foreach my $i ($xmin..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1981 foreach my $s (0..$stacks-1) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1982 next unless(exists $data->{$i}->{$s});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1983 $sums{$s} += $data->{$i}->{$s};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1984 $sum += $data->{$i}->{$s};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1985 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1986 if(--$tmpbin <= 0) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1987 $tmpbin = $bin;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1988 $ymax = &max($ymax,$sum);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1989 $sum = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1990 foreach my $s (0..$stacks-1) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1991 push(@{$matrix[$s]},$sums{$s});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1992 $sums{$s} = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1993 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1994 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1995 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1996
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1997 #make nice ymax value
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1998 unless($nonice) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
1999 $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2000 # $step = ($ymax <= 10 ? 10 : ($ymax < 40 ? 40 : ($ymax < 100 ? 100 : ($ymax < 1000 ? 100 : 100))));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2001 # $ymax = sprintf("%d",($ymax/$step)+1)*$step if($ymax % $step);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2002 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2003
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2004 return (\@matrix,$xmax,$ymax,$stacks);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2005 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2006
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2007 sub createStackBarPlot {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2008 my ($matrix,$xmax,$ymax,$stacks,$title,$xlab,$ylab,$file,$zero,$add) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2009
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2010 my $bin = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2011 if($xmax > 100) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2012 $bin = $xmax / 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2013 $xmax = 100;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2014 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2015
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2016 my @legend = ('Exact dupl.','5\' dupl.','3\' dupl.','Rev. compl. exact dupl.','Rev. compl. 5\'/3\' dupl.');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2017 my @cols = ([69/255, 114/255, 167/255, 1],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2018 [137/255, 1165/255, 78/255, 1],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2019 [170/255, 70/255, 67/255, 1],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2020 [147/255, 169/255, 207/255, 1],
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2021 [51/255, 102/255, 102/255, 1]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2022 my @barcol = (127/255, 127/255, 255/255, 1); #b2b2ff
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2023 my @meancol = (255/255, 127/255, 127/255, 1); #ffb2b2
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2024 my @stdcol = (178/255, 178/255, 255/255, 0.8); #7f7fff
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2025 my @std1col = (0, 0, 0, 0.02); #ff7f7f
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2026 my @std2col = (0, 0, 0, 0.02); #ff7f7f
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2027 my @linecol = (0, 0, 0, 0.4);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2028 my @helplinecol = (1, 1, 1, 0.9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2029 my @background = (0.95, 0.95, 0.95, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2030 my @tickcol = (0, 0, 0, 0.8);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2031 my @labelcol = (0, 0, 0, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2032
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2033 #create new image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2034 my $size = 6;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2035 my $offset = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2036 my $left = 40;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2037 my $bottom = 15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2038 my $top = 20;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2039 my $height = 200;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2040 my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$top+$offset*2+$height); #format, width, height
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2041 my $cr = Cairo::Context->create($surface);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2042
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2043 my ($font_extents,$extents,$fontheight,$fontdescent);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2044
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2045 #background
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2046 $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2047 $cr->set_source_rgba(1, 1, 1, 1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2048 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2049
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2050 #fonts
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2051 $cr->select_font_face ('sans', 'normal', 'normal');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2052
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2053 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2054
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2055 #set up work space
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2056 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2057 $cr->set_line_width(1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2058
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2059 #background for plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2060 $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2061 $cr->set_source_rgba(@background);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2062 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2063
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2064 #draw legend
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2065 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2066 # $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2067 my $x = $left+$offset+$size*100-5;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2068 foreach my $i (reverse (0..scalar(@legend)-1)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2069 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2070 $x -= $cr->text_extents($legend[$i])->{width};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2071 $cr->move_to($x,$top+5+9);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2072 $cr->set_source_rgba(@tickcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2073 $cr->show_text($legend[$i]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2074 $x -= 15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2075 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2076 $cr->set_source_rgba(@{$cols[$i]});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2077 $cr->rectangle($x, $top+5, 10, 10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2078 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2079 $x -= 15;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2080 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2081
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2082 #draw ticks
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2083 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2084 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2085 $cr->set_source_rgba(@tickcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2086 foreach my $i (($zero ? 0 : 1)..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2087 if(($i%5) == 0 && $i > 1 && $i < $xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2088 $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2089 $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2090 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2091 $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2092 $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2093 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2094 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2095 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2096
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2097 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2098 $cr->move_to($left+$offset, $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2099 $cr->line_to($left+$offset-3, $top+$offset);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2100 $cr->move_to($left+$offset, $top+$offset+$height-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2101 $cr->line_to($left+$offset-3, $top+$offset+$height-1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2102 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2103
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2104 #helplines
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2105 $cr->set_source_rgba(@helplinecol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2106 foreach my $j (1..3) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2107 $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2108 $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2109 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2110 $cr->stroke;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2111
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2112 $cr->set_antialias('default');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2113
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2114 #tick labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2115 $cr->set_source_rgba(@tickcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2116 $cr->set_font_size(10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2117 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2118 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2119 #x-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2120 foreach my $i (($zero ? 0 : 1)..$xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2121 if(($i%10) == 0 && $i > 1 && $i < $xmax) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2122 $extents = $cr->text_extents($i*$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2123 $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2124 $cr->show_text($i*$bin);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2125 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2126 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2127 #y-axis
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2128 $extents = $cr->text_extents(&addCommas($ymax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2129 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2130 $cr->show_text(&addCommas($ymax));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2131 $extents = $cr->text_extents(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2132 $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2133 $cr->show_text(0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2134
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2135 $cr->save;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2136
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2137 #labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2138 $cr->set_font_size(14);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2139 $font_extents = $cr->font_extents;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2140 $fontheight = $font_extents->{height};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2141
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2142 #axis labels
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2143 $cr->set_source_rgba(@labelcol);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2144 $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2145 $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2146 $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2147 $cr->rotate($PI * 3 / 2);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2148 $extents = $cr->text_extents($ylab.($bin>1 ? ' (per bin)' : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2149 $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2+($bin>1 ? 12 : 0)),$offset+10);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2150 $cr->show_text($ylab.($bin>1 ? ' (per bin)' : ''));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2151
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2152 $cr->restore;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2153
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2154 #draw boxes
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2155 $cr->set_antialias('none');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2156 foreach my $pos (0..$xmax-($zero ? 0 : 1)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2157 my $tmp = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2158 foreach my $s (0..$stacks-1) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2159 next unless($matrix->[$s]->[$pos]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2160 my $cur = $matrix->[$s]->[$pos] / $ymax;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2161 $cr->set_source_rgba(@{$cols[$s]});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2162 if($cur) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2163 $cr->rectangle($left+$offset+$pos*$size, $top+$offset+$height-$tmp*$height, $size-1, -$cur*$height);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2164 $cr->fill;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2165 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2166 $tmp += $cur;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2167 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2168 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2169
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2170 #write image
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2171 $cr->show_page;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2172 return $surface;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2173 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2174
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2175 sub header {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2176 return '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2177 <html>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2178 <head>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2179 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2180 <title>PRINSEQ-'.$WHAT.' Report</title>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2181 <style type="text/css">
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2182 <!--/* <![CDATA[ */
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2183 '.$CSS_STYLE.'
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2184 /* ]]> */-->
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2185 </style>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2186 </head>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2187 <body>
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2188 <center>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2189 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2190
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2191 sub footer {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2192 return '</center></body></html>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2193 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2194
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2195 sub generateHtml {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2196 my ($in,$out) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2197 my ($file,$data,$surface,$html,$png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2198 $data = &readGdFile($in);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2199 my $time = sprintf("%02d/%02d/%04d %02d:%02d:%02d",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime));
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2200
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2201 $html .= &header();
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2202 $html .= '<h2>PRINSEQ-'.$WHAT.' v'.$VERSION.' HTML Report&nbsp;&nbsp;&nbsp;</h2>[Generated: '.$time.']<br /><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2203 $html .= '<div class="info-panel">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2204
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2205 #input info
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2206 if(exists $data->{numseqs}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2207 $html .= '<div class="info-header"><span class="info-header-title">Input Information</span></div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2208 $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Input file(s):</td><td class="info-table-value">'.($data->{filename1} ? &convertIntToString($data->{filename1}) : '-').($data->{filename2} ? ' and '.&convertIntToString($data->{filename2}) : '').'</td></tr><tr><td class="info-table-type">Input format(s):</td><td class="info-table-value">'.($data->{format1} ? uc($data->{format1}) : '-').($data->{format2} ? ' and '.uc($data->{format2}) : '').'</td></tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2209 if(exists $data->{pairedend} && $data->{pairedend}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2210 my $singletons1 = ($data->{numseqs}||0)-($data->{pairs}||0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2211 my $singletons2 = ($data->{numseqs2}||0)-($data->{pairs}||0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2212 $html .= '<tr><td class="info-table-type"># Sequences (file 1):</td><td class="info-table-value">'.&addCommas($data->{numseqs}||'-').'</td></tr><tr><td class="info-table-type">Total bases (file 1):</td><td class="info-table-value">'.&addCommas($data->{numbases}||'-').'</td></tr><tr><td class="info-table-type"># Sequences (file 2):</td><td class="info-table-value">'.&addCommas($data->{numseqs2}||'-').'</td></tr><tr><td class="info-table-type">Total bases (file 2):</td><td class="info-table-value">'.&addCommas($data->{numbases2}||'-').'</td></tr><tr><td class="info-table-type"># Pairs:</td><td class="info-table-value">'.&addCommas($data->{pairs}||'-').($data->{pairs} ? '&nbsp;&nbsp;('.sprintf("%.2f",(100*(2*$data->{pairs})/(($data->{numseqs}||0)+($data->{numseqs2}||0)))).'% of sequences)' : '').'</td></tr></tr><tr><td class="info-table-type"># Singletons (file 1):</td><td class="info-table-value">'.&addCommas($singletons1).($singletons1 ? '&nbsp;&nbsp;('.sprintf("%.2f",(100*$singletons1/$data->{numseqs})).'%)' : '').'</td></tr><tr><td class="info-table-type"># Singletons (file 2):</td><td class="info-table-value">'.&addCommas($singletons2).($singletons2 ? '&nbsp;&nbsp;('.sprintf("%.2f",(100*$singletons2/$data->{numseqs2})).'%)' : '').'</td></tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2213 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2214 $html .= '<tr><td class="info-table-type"># Sequences:</td><td class="info-table-value">'.&addCommas($data->{numseqs}||'-').'</td></tr><tr><td class="info-table-type">Total bases:</td><td class="info-table-value">'.&addCommas($data->{numbases}||'-').'</td></tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2215 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2216 $html .= '</tbody></table></div><hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2217 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2218
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2219 #length plot
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2220 if(exists $data->{counts}->{length} && keys %{$data->{counts}->{length}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2221 $html .= '<div class="info-header"><span class="info-header-title">Length Distribution</span></div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2222 if(exists $data->{pairedend} && $data->{pairedend}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2223 $html .= '<div class="info-content"><b>File 1</b><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mean} ? sprintf("%.2f",$data->{stats}->{length}->{mean}) : '-').' &plusmn; '.(exists $data->{stats}->{length}->{std} ? sprintf("%.2f",$data->{stats}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{min} ? &addCommas($data->{stats}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{max} ? &addCommas($data->{stats}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{range} ? &addCommas($data->{stats}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mode} ? &addCommas($data->{stats}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats}->{length}->{modeval} ? &addCommas($data->{stats}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2224 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2225 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2226 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2227 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2228 $html .= '</div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2229 $html .= '<div class="info-content"><br /><b>File 2</b><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{mean} ? sprintf("%.2f",$data->{stats2}->{length}->{mean}) : '-').' &plusmn; '.(exists $data->{stats2}->{length}->{std} ? sprintf("%.2f",$data->{stats2}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{min} ? &addCommas($data->{stats2}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats2}->{length}->{max} ? &addCommas($data->{stats2}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats2}->{length}->{range} ? &addCommas($data->{stats2}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{mode} ? &addCommas($data->{stats2}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats2}->{length}->{modeval} ? &addCommas($data->{stats2}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2230 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{length},1),$data->{stats2}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2231 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2232 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2233 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2234 $html .= '</div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2235 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2236 $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mean} ? sprintf("%.2f",$data->{stats}->{length}->{mean}) : '-').' &plusmn; '.(exists $data->{stats}->{length}->{std} ? sprintf("%.2f",$data->{stats}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{min} ? &addCommas($data->{stats}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{max} ? &addCommas($data->{stats}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{range} ? &addCommas($data->{stats}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mode} ? &addCommas($data->{stats}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats}->{length}->{modeval} ? &addCommas($data->{stats}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2237 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2238 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2239 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2240 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2241 $html .= '</div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2242 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2243 $html .= '<hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2244 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2245
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2246 #GC content
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2247 if(exists $data->{counts}->{gc} && keys %{$data->{counts}->{gc}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2248 $html .= '<div class="info-header"><span class="info-header-title">GC Content Distribution</span></div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2249 if(exists $data->{pairedend} && $data->{pairedend}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2250 $html .= '<div class="info-content"><b>File 1</b><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mean} ? sprintf("%.2f",$data->{stats}->{gc}->{mean}) : '-').' &plusmn; '.(exists $data->{stats}->{gc}->{std} ? sprintf("%.2f",$data->{stats}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{min} ? $data->{stats}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{max} ? $data->{stats}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{range} ? $data->{stats}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mode} ? $data->{stats}->{gc}->{mode} : '-').' % with '.(exists $data->{stats}->{gc}->{modeval} ? &addCommas($data->{stats}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2251 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2252 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2253 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2254 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2255 $html .= '</div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2256 $html .= '<div class="info-content"><br /><b>File 2</b><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{mean} ? sprintf("%.2f",$data->{stats2}->{gc}->{mean}) : '-').' &plusmn; '.(exists $data->{stats2}->{gc}->{std} ? sprintf("%.2f",$data->{stats2}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{min} ? $data->{stats2}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{max} ? $data->{stats2}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{range} ? $data->{stats2}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{mode} ? $data->{stats2}->{gc}->{mode} : '-').' % with '.(exists $data->{stats2}->{gc}->{modeval} ? &addCommas($data->{stats2}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2257 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{gc},0),$data->{stats2}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2258 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2259 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2260 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2261 $html .= '</div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2262 } else {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2263 $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mean} ? sprintf("%.2f",$data->{stats}->{gc}->{mean}) : '-').' &plusmn; '.(exists $data->{stats}->{gc}->{std} ? sprintf("%.2f",$data->{stats}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{min} ? $data->{stats}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{max} ? $data->{stats}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{range} ? $data->{stats}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mode} ? $data->{stats}->{gc}->{mode} : '-').' % with '.(exists $data->{stats}->{gc}->{modeval} ? &addCommas($data->{stats}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2264 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2265 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2266 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2267 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2268 $html .= '</div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2269 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2270 $html .= '<hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2271 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2272
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2273 #Base quality
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2274 if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2275 $html .= '<div class="info-header"><span class="info-header-title">Base Quality Distribution</span></div><div class="info-content">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2276 if(exists $data->{pairedend} && $data->{pairedend}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2277 $html .= '<b>File 1</b><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2278 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2279 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2280 if(exists $data->{quals} && keys %{$data->{quals}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2281 $surface = &createBoxPlot(&convertToBoxValues($data->{quals},4),'Base Quality Distribution','Read position in %','Quality score','');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2282 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2283 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2284 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2285 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2286 if(exists $data->{qualsbin} && keys %{$data->{qualsbin}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2287 $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin},4),'Base Quality Distribution','Read position in bp','Quality score','',0,'bp',$data->{binval});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2288 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2289 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2290 $html .= '<br /><br />' if(exists $data->{quals});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2291 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2292 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2293 if(exists $data->{qualsmean} && keys %{$data->{qualsmean}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2294 $surface = &createBarPlot(&convertToBarValues($data->{qualsmean},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences','',0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2295 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2296 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2297 $html .= '<br /><br />' if(exists $data->{qualsbin});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2298 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2299 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2300 if(exists $data->{pairedend} && $data->{pairedend}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2301 if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2302 $html .= '<br /><br /><br /><b>File 2</b><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2303 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2304 if(exists $data->{quals2} && keys %{$data->{quals2}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2305 $surface = &createBoxPlot(&convertToBoxValues($data->{quals2},4),'Base Quality Distribution','Read position in %','Quality score','');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2306 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2307 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2308 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2309 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2310 if(exists $data->{qualsbin2} && keys %{$data->{qualsbin2}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2311 $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin2},4),'Base Quality Distribution','Read position in bp','Quality score','',0,'bp',$data->{binval});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2312 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2313 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2314 $html .= '<br /><br />' if(exists $data->{quals2});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2315 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2316 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2317 if(exists $data->{qualsmean2} && keys %{$data->{qualsmean2}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2318 $surface = &createBarPlot(&convertToBarValues($data->{qualsmean2},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences','',0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2319 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2320 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2321 $html .= '<br /><br />' if(exists $data->{qualsbin2});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2322 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2323 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2324 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2325 if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2326 $html .= '</div><hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2327 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2328
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2329 #Ns
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2330 if((exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) || (exists $data->{counts2} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}})) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2331 $html .= '<div class="info-header"><span class="info-header-title">Occurence of N</span></div><div class="info-content">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2332 if(exists $data->{pairedend} && $data->{pairedend}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2333 $html .= '<b>File 1</b><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2334 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2335 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2336 if(exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2337 my $nscount = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2338 foreach my $n (values %{$data->{counts}->{ns}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2339 $nscount += $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2340 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2341 $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Sequences with N:</td> <td class="info-table-value">'.($nscount ? &addCommas($nscount).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$nscount).' %)' : 0).'</td></tr><tr><td class="info-table-type">Max percentage of Ns per sequence:</td> <td class="info-table-value">'.(exists $data->{stats}->{ns}->{max} ? $data->{stats}->{ns}->{max} : 0).' %</td></tr></tbody></table>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2342 if($nscount) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2343 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences','',0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2344 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2345 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2346 $html .= '<br />'.&insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2347 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2348 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2349 if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2350 $html .= '<br /><br /><br /><b>File 2</b><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2351 my $nscount = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2352 foreach my $n (values %{$data->{counts2}->{ns}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2353 $nscount += $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2354 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2355 $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Sequences with N:</td> <td class="info-table-value">'.($nscount ? &addCommas($nscount).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs2}*$nscount).' %)' : 0).'</td></tr><tr><td class="info-table-type">Max percentage of Ns per sequence:</td> <td class="info-table-value">'.(exists $data->{stats2}->{ns}->{max} ? $data->{stats2}->{ns}->{max} : 0).' %</td></tr></tbody></table>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2356 if($nscount) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2357 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences','',0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2358 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2359 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2360 $html .= '<br />'.&insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2361 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2362 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2363 if((exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) || (exists $data->{counts2} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}})) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2364 $html .= '</div><hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2365 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2366
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2367 #tails
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2368 if(exists $data->{tail} || exists $data->{tail2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2369 $html .= '<div class="info-header"><span class="info-header-title">Poly-A/T Tails</span></div><div class="info-content">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2370 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2371 if(exists $data->{tail}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2372 my $tail5count = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2373 foreach my $n (values %{$data->{counts}->{tail5}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2374 $tail5count += $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2375 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2376 my $tail3count = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2377 foreach my $n (values %{$data->{counts}->{tail3}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2378 $tail3count += $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2379 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2380 if(exists $data->{pairedend} && $data->{pairedend}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2381 $html .= '<b>File 1</b><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2382 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2383 $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td> <td class="info-table-value">3\'-end</td></tr> <tr><td class="info-table-type">Sequences with tail:</td><td class="info-table-value">'.($tail5count ? &addCommas($tail5count).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$tail5count).' %)' : 0).'</td> <td class="info-table-value">'.($tail3count ? &addCommas($tail3count).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$tail3count).' %)' : 0).'</td></tr> <tr><td class="info-table-type">Maximum tail length:</td> <td class="info-table-value">'.(exists $data->{stats}->{tail5}->{max} ? $data->{stats}->{tail5}->{max} : 0).'</td> <td class="info-table-value">'.(exists $data->{stats}->{tail3}->{max} ? $data->{stats}->{tail3}->{max} : 0).'</td></tr></tbody></table>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2384 if($tail5count) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2385 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences','',0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2386 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2387 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2388 $html .= '<br />'.&insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2389 if($tail3count) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2390 $html .= '<br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2391 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2392 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2393 if($tail3count) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2394 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences','',0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2395 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2396 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2397 $html .= '<br />'.&insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2398 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2399 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2400 if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{tail2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2401 my $tail5count = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2402 foreach my $n (values %{$data->{counts2}->{tail5}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2403 $tail5count += $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2404 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2405 my $tail3count = 0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2406 foreach my $n (values %{$data->{counts2}->{tail3}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2407 $tail3count += $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2408 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2409 $html .= '<br /><br /><br /><b>File 2</b><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2410 $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td> <td class="info-table-value">3\'-end</td></tr> <tr><td class="info-table-type">Sequences with tail:</td><td class="info-table-value">'.($tail5count ? &addCommas($tail5count).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs2}*$tail5count).' %)' : 0).'</td> <td class="info-table-value">'.($tail3count ? &addCommas($tail3count).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs2}*$tail3count).' %)' : 0).'</td></tr> <tr><td class="info-table-type">Maximum tail length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{tail5}->{max} ? $data->{stats2}->{tail5}->{max} : 0).'</td> <td class="info-table-value">'.(exists $data->{stats2}->{tail3}->{max} ? $data->{stats2}->{tail3}->{max} : 0).'</td></tr></tbody></table>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2411 if($tail5count) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2412 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences','',0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2413 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2414 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2415 $html .= '<br />'.&insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2416 if($tail3count) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2417 $html .= '<br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2418 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2419 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2420 if($tail3count) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2421 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences','',0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2422 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2423 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2424 $html .= '<br />'.&insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2425 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2426 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2427 if(exists $data->{tail} || exists $data->{tail2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2428 $html .= '</div><hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2429 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2430
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2431
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2432 #tag sequence check
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2433 if(exists $data->{freqs} || exists $data->{freqs2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2434 $html .= '<div class="info-header"><span class="info-header-title">Tag Sequence Check</span></div><div class="info-content">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2435 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2436 if(exists $data->{freqs}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2437 my $tagmidseq;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2438 if(exists $data->{tagmidseq}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2439 $tagmidseq = $data->{tagmidseq};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2440 $tagmidseq =~ s/\,/\<br \/\>/g;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2441 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2442 if(exists $data->{pairedend} && $data->{pairedend}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2443 $html .= '<b>File 1</b><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2444 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2445 $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td><td class="info-table-value">3\'-end</td></tr><tr><td class="info-table-type">Probability of tag sequence:</td><td class="info-table-value">'.(exists $data->{tagprob}->{5} ? $data->{tagprob}->{5}.' %' : '-').'</td><td class="info-table-value">'.(exists $data->{tagprob}->{3} ? $data->{tagprob}->{3}.' %' : '-').'</td></tr><tr><td class="info-table-type">GSMIDs or RLMIDs:</td><td class="info-table-value">'.(exists $data->{tagmidnum} ? ($data->{tagmidnum} == 0 ? 'none' : ($tagmidseq ? $tagmidseq : $data->{tagmidnum})) : '-').'</td><td class="info-table-value">&nbsp;</td></tr></tbody></table><br>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2446 $html .= '<table border="0" cellspacing="0" cellpadding="0"><tr><td>'.&insert_image($FREQCHART_L,undef,undef,1).'</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2447 foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs}->{5}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2448 $html .= '<td valign="bottom" align="center">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2449 foreach my $base (qw(A C G T N)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2450 if($data->{freqs}->{5}->{$pos}->{$base}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2451 $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs}->{5}->{$pos}->{$base},14,1).'<br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2452 #'<img height="'.$data->{freqs}->{5}->{pos}->{$base}.'px" border="0" src="'..'" alt="'.$base.'" width="14px" /><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2453 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2454 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2455 $html .= &insert_image($MMCHART_B2,6,16,1).'</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2456 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2457 $html .= '<td align="center" valign="middle">&nbsp;...&nbsp;</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2458 foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs}->{3}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2459 $html .= '<td valign="bottom" align="center">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2460 foreach my $base (qw(A C G T N)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2461 if($data->{freqs}->{3}->{$pos}->{$base}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2462 $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs}->{3}->{$pos}->{$base},14,1).'<br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2463 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2464 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2465 $html .= &insert_image($MMCHART_B2,6,16,1).'</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2466 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2467 $html .= '</tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2468 $html .= '<tr><td>&nbsp;</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2469 foreach my $num (1,0,0,0,5,0,0,0,0,10,0,0,0,0,15,0,0,0,0,20,0,20,0,0,0,0,15,0,0,0,0,10,0,0,0,0,5,0,0,0,1) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2470 $html .= '<td valign="top" align="center" style="font-size: 10px;margin: 0;">'.($num ? $num : '').'&nbsp;</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2471 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2472 $html .= '</tr><tr><td align="left" valign="middle">&nbsp;</td><td align="center" valign="middle" colspan="41" class="pinfo"><b>Position from Sequence Ends</b></td></tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2473 $html .= '</table>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2474 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2475 if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{freqs2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2476 $html .= '<br /><br /><br /><b>File 2</b><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2477 $html .= '<table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td><td class="info-table-value">3\'-end</td></tr><tr><td class="info-table-type">Probability of tag sequence:</td><td class="info-table-value">'.(exists $data->{tagprob2}->{5} ? $data->{tagprob2}->{5}.' %' : '-').'</td><td class="info-table-value">'.(exists $data->{tagprob2}->{3} ? $data->{tagprob2}->{3}.' %' : '-').'</td></tr></tbody></table><br>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2478 $html .= '<table border="0" cellspacing="0" cellpadding="0"><tr><td>'.&insert_image($FREQCHART_L,undef,undef,1).'</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2479 foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs2}->{5}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2480 $html .= '<td valign="bottom" align="center">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2481 foreach my $base (qw(A C G T N)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2482 if($data->{freqs2}->{5}->{$pos}->{$base}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2483 $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs2}->{5}->{$pos}->{$base},14,1).'<br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2484 #'<img height="'.$data->{freqs}->{5}->{pos}->{$base}.'px" border="0" src="'..'" alt="'.$base.'" width="14px" /><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2485 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2486 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2487 $html .= &insert_image($MMCHART_B2,6,16,1).'</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2488 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2489 $html .= '<td align="center" valign="middle">&nbsp;...&nbsp;</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2490 foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs2}->{3}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2491 $html .= '<td valign="bottom" align="center">';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2492 foreach my $base (qw(A C G T N)) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2493 if($data->{freqs2}->{3}->{$pos}->{$base}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2494 $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs2}->{3}->{$pos}->{$base},14,1).'<br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2495 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2496 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2497 $html .= &insert_image($MMCHART_B2,6,16,1).'</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2498 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2499 $html .= '</tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2500 $html .= '<tr><td>&nbsp;</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2501 foreach my $num (1,0,0,0,5,0,0,0,0,10,0,0,0,0,15,0,0,0,0,20,0,20,0,0,0,0,15,0,0,0,0,10,0,0,0,0,5,0,0,0,1) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2502 $html .= '<td valign="top" align="center" style="font-size: 10px;margin: 0;">'.($num ? $num : '').'&nbsp;</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2503 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2504 $html .= '</tr><tr><td align="left" valign="middle">&nbsp;</td><td align="center" valign="middle" colspan="41" class="pinfo"><b>Position from Sequence Ends</b></td></tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2505 $html .= '</table>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2506 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2507 if(exists $data->{freqs} || exists $data->{freqs2}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2508 $html .= '</div><hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2509 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2510
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2511 #Sequence duplicates
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2512 if(exists $data->{dubslength} || exists $data->{dubscounts}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2513 $html .= '<div class="info-header"><span class="info-header-title">Sequence Duplication</span></div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2514 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2515 my %dubs;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2516 if(exists $data->{dubscounts} && keys %{$data->{dubscounts}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2517 my $exactonly = $data->{exactonly}||0;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2518 foreach my $n (keys %{$data->{dubscounts}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2519 foreach my $s (keys %{$data->{dubscounts}->{$n}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2520 $dubs{$s}->{count} += $data->{dubscounts}->{$n}->{$s} * $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2521 $dubs{$s}->{max} = $n unless(exists $dubs{$s}->{max} && $dubs{$s}->{max} > $n);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2522 $dubs{all} += $data->{dubscounts}->{$n}->{$s} * $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2523 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2524 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2525 $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value"># Sequences</td> <td class="info-table-value">Max duplicates</td></tr><tr><td class="info-table-type">Exact duplicates:</td><td class="info-table-value">'.(exists $dubs{0}->{count} ? &addCommas($dubs{0}->{count}).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$dubs{0}->{count}).' %)' : 0).'</td><td class="info-table-value">'.($dubs{0}->{max}||0).'</td></tr><tr><td class="info-table-type">Exact duplicates with reverse complements:</td><td class="info-table-value">'.(exists $dubs{3}->{count} ? &addCommas($dubs{3}->{count}).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$dubs{3}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{3}->{max}||0).'</td></tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2526 unless($exactonly) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2527 $html .= '<tr><td class="info-table-type">5\' duplicates</td><td class="info-table-value">'.(exists $dubs{1}->{count} ? &addCommas($dubs{1}->{count}).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$dubs{1}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{1}->{max}||0).'</td></tr><tr><td class="info-table-type">3\' duplicates</td><td class="info-table-value">'.(exists $dubs{2}->{count} ? &addCommas($dubs{2}->{count}).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$dubs{2}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{2}->{max}||0).'</td></tr><tr><td class="info-table-type">5\'/3\' duplicates with reverse complements</td><td class="info-table-value">'.(exists $dubs{4}->{count} ? &addCommas($dubs{4}->{count}).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$dubs{4}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{4}->{max}||0).'</td></tr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2528 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2529 $html .= '<tr><td class="info-table-type">Total:</td><td class="info-table-value">'.(exists $dubs{all} ? &addCommas($dubs{all}).' &nbsp;('.sprintf("%.2f",100/$data->{numseqs}*$dubs{all}).' %)' : 0).'</td><td class="info-table-value">-</td></tr></tbody></table>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2530 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2531 if(exists $dubs{all} && $dubs{all}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2532 if(exists $data->{dubslength} && keys %{$data->{dubslength}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2533 $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubslength},5,1),'Sequence duplication level','Read Length in bp','Number of duplicates','',0,' bp');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2534 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2535 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2536 $html .= '<br />'.&insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2537 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2538 if(exists $data->{dubscounts} && keys %{$data->{dubscounts}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2539 $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubscounts},5,1,100),'Sequence duplication level','Number of duplicates','Number of sequences','',0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2540 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2541 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2542 $html .= '<br /><br />' if(exists $data->{dubslength});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2543 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2544 my %dubsmax;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2545 my $count = 1;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2546 foreach my $n (sort {$b <=> $a} keys %{$data->{dubscounts}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2547 foreach my $s (keys %{$data->{dubscounts}->{$n}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2548 foreach my $i (1..$data->{dubscounts}->{$n}->{$s}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2549 $dubsmax{$count++}->{$s} = $n;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2550 last unless($count <= 100);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2551 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2552 last unless($count <= 100);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2553 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2554 last unless($count <= 100);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2555 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2556 $surface = &createStackBarPlot(&convertOdToStackBinMatrix(\%dubsmax,5,1,100),'Sequence duplication level','Sequence','Number of duplicates','',0);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2557 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2558 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2559 $html .= '<br /><br />' if(exists $data->{dubslength});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2560 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2561 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2562 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2563 if(exists $data->{dubslength} || exists $data->{dubscounts}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2564 $html .= '</div><hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2565 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2566
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2567 #Sequence complexity
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2568 if(exists $data->{compldust} || exists $data->{complentropy}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2569 $html .= '<div class="info-header"><span class="info-header-title">Sequence Complexity</span></div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2570 if(exists $data->{complvals}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2571 my $complseq;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2572 foreach my $d (keys %{$data->{complvals}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2573 foreach my $m ('minseq','maxseq') {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2574 $complseq = $data->{complvals}->{$d}->{$m};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2575 $complseq = substr($complseq,0,797).'...' if(length($complseq) > 800);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2576 $complseq =~ s/(.{60})/$1\<br \/\>/g;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2577 $data->{complvals}->{$d}->{$m} = $complseq;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2578 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2579 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2580 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2581 $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">Value</td><td class="info-table-value">Sequence</td></tr><tr><td class="info-table-type">Minimum DUST score:</td><td class="info-table-value">'.(exists $data->{complvals}->{dust}->{minval} ? $data->{complvals}->{dust}->{minval} : '-').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{dust}->{minseq} ? $data->{complvals}->{dust}->{minseq} : '').'</td></tr><tr><td class="info-table-type">Maximum DUST score:</td><td class="info-table-value">'.(exists $data->{complvals}->{dust}->{maxval} ? $data->{complvals}->{dust}->{maxval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{dust}->{maxseq} ? $data->{complvals}->{dust}->{maxseq} : '').'</td></tr><tr><td class="info-table-type">Minimum Entropy value:</td><td class="info-table-value">'.(exists $data->{complvals}->{entropy}->{minval} ? $data->{complvals}->{entropy}->{minval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{entropy}->{minseq} ? $data->{complvals}->{entropy}->{minseq} : '').'</td></tr><tr><td class="info-table-type">Maximum Entropy value:</td><td class="info-table-value">'.(exists $data->{complvals}->{entropy}->{maxval} ? $data->{complvals}->{entropy}->{maxval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{entropy}->{maxseq} ? $data->{complvals}->{entropy}->{maxseq} : '').'</td></tr> </tbody></table><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2582 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2583 if(exists $data->{compldust}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2584 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{compldust},0),undef,'Sequence complexity distribution','Mean sequence complexity (DUST scores)','Number of sequences','',1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2585 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2586 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2587 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2588 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2589 if(exists $data->{complentropy}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2590 $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{complentropy},0),undef,'Sequence complexity distribution','Mean sequence complexity (Entropy values)','Number of sequences','',1);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2591 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2592 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2593 $html .= '<br /><br />' if(exists $data->{compldust});
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2594 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2595 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2596 if(exists $data->{compldust} || exists $data->{complentropy}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2597 $html .= '</div><hr>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2598 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2599
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2600 #Dinucleotide odd ratio PCA - microbial/viral
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2601 if(exists $data->{dinucodds} && keys %{$data->{dinucodds}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2602 $html .= '<div class="info-header"><span class="info-header-title">Dinucleotide Odds Ratios</span></div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2603 $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">&nbsp;</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2604 foreach my $d (map {join("/",(m/../g ))} sort keys %{$data->{dinucodds}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2605 $html .= '<td class="info-table-value">'.$d.'</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2606 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2607 $html .= '</tr><tr><td class="info-table-type">Odds ratio</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2608 foreach my $d (map {sprintf("%.4f",$data->{dinucodds}->{$_})} sort keys %{$data->{dinucodds}}) {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2609 $html .= '<td class="info-table-value">'.$d.'</td>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2610 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2611 $html .= '</tr></tbody></table><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2612 my @new = map {$data->{dinucodds}->{$_}} sort keys %{$data->{dinucodds}};
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2613 $surface = &createOddsRatioPlot($data->{dinucodds},'Odds ratios','Dinucleotide','Odds ratio','');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2614 $png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2615 $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2616 $html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2617 #$surface = &createPCAPlot(&convertToPCAValues(\@new,'m'),'PCA','1st Principal Component Score','2nd Principal Component Score','');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2618 #$png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2619 #$surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2620 #$html .= '<br /><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2621 #$html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2622 #$surface = &createPCAPlot(&convertToPCAValues(\@new,'v'),'PCA','1st Principal Component Score','2nd Principal Component Score','');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2623 #$png = '';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2624 #$surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; });
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2625 #$html .= '<br /><br />';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2626 #$html .= &insert_image($png);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2627 $html .= '</div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2628 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2629
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2630 $html .= '</div>';
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2631 $html .= &footer();
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2632
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2633 #write html to file
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2634 $file = &getFileName('.html');
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2635 open(FH, ">$file") or &printError("Can't open file ".$file.": $!");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2636 print FH $html;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2637 close(FH);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2638 &printLog("Done with HTML data");
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2639 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2640
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2641 sub insert_image {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2642 my ($data, $height, $width, $noencode) = @_;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2643 my $content .= '<img border="0" '.($height ? 'height="'.$height.'"' : '').($width ? 'width="'.$width.'"' : '').' src="'.($noencode ? "data:image/png;base64,".$data : &inline_image($data)).'" />'."\n";
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2644 return $content;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2645 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2646
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2647 sub inline_image {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2648 return "data:image/png;base64,".MIME::Base64::encode_base64($_[0]);
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2649 }
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2650
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2651 sub convertIntToString {
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2652 my $int = shift;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2653 $int =~ s/(.{2})/chr(hex($1))/eg;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2654 return $int;
9790cfb46d03 Uploaded
bgruening
parents:
diff changeset
2655 }