2
|
1 gbcount=0
|
|
2
|
|
3 ##
|
|
4 ## Create Cover Page
|
|
5 ##
|
|
6 function makeIntroPage ( ){
|
|
7 echo "Creating Intro Page"
|
|
8 title="$1"
|
|
9 coverimage=$2
|
|
10 link=$3
|
|
11 htmlout=$4
|
|
12 zipireport=$5
|
|
13
|
|
14 echo -e "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">
|
|
15 <html>
|
|
16 <head>
|
|
17 </head>
|
|
18 <body>
|
|
19 <br/>
|
|
20 <br/>
|
|
21 <center>
|
|
22 <b><font size=\"15\"> iReport: ${title} </font></b><br/>
|
|
23 <br/>
|
|
24 <br/>
|
|
25 <a href=\"$link\"> Click here to view report </a> <br/><br/>
|
|
26 <a href=\"$link\"> <img src="$coverimage" width=\"50%\" alt=\"loading image..\"/> </a><br/><br/>
|
|
27 <a href=\"$zipireport\"> Click here to download a copy of this iReport </a> <br/><br/>
|
|
28 </center>
|
|
29 </body>
|
|
30 </html>" > $htmlout
|
|
31
|
|
32 }
|
|
33
|
|
34 ##
|
|
35 ## Decompress archive fiels
|
|
36 ## -> will detect archive formats: zip, tar, gzip, tar.gz, bzip2
|
|
37 ## -> input: path to archive
|
|
38 ## -> files will be located in ${galaxypath}/archive_${fname}/
|
|
39 ##
|
|
40 function decompressArchive (){
|
|
41 archive=$1
|
|
42
|
|
43 fname=`basename ${archive}`
|
|
44 fname=${fname%.dat}
|
|
45 ftype=`file $archive`
|
|
46
|
|
47 if [[ ! -d ${galaxypath}/archive_${fname}/ ]]
|
|
48 then
|
|
49 mkdir ${galaxypath}/archive_${fname}/
|
|
50
|
|
51 #echo "archive type: `file $archive`"
|
|
52 # decompress archive
|
|
53 if [[ $ftype == *Zip* ]]
|
|
54 then
|
|
55 #echo "detected zip file"
|
|
56 cp $archive ${galaxypath}/archive_${fname}/${fname}.zip
|
|
57 wd=`pwd`
|
|
58 cd ${galaxypath}/archive_${fname}/
|
|
59 unzip -q ${fname}.zip
|
|
60 rm ${fname}.zip
|
|
61 cd $wd
|
|
62 fi
|
|
63 if [[ $ftype == *tar* ]]
|
|
64 then
|
|
65 cp $archive ${galaxypath}/archive_${fname}/${fname}.tar
|
|
66 wd=`pwd`
|
|
67 cd ${galaxypath}/archive_${fname}/
|
|
68 tar xf ${fname}.tar
|
|
69 rm ${fname}.tar
|
|
70 cd $wd
|
|
71 fi
|
|
72 if [[ $ftype == *gzip* ]]
|
|
73 then
|
|
74 cp $archive ${galaxypath}/archive_${fname}/${fname}.gz
|
|
75 gunzip ${galaxypath}/archive_${fname}/${fname}.gz
|
|
76 #ls ${galaxypath}/archive_${fname}/
|
|
77
|
|
78 # check for tar.gz
|
|
79 ftype=`file ${galaxypath}/archive_${fname}/${fname}`
|
|
80 if [[ $ftype == *tar* ]]
|
|
81 then
|
|
82 # turns out it was tar.gz
|
|
83 rm -Rf ${galaxypath}/archive_${fname}/*
|
|
84 ls ${galaxypath}/archive_${fname}/
|
|
85 cp $archive ${galaxypath}/archive_${fname}/${fname}.tar.gz
|
|
86
|
|
87 wd=`pwd`
|
|
88 cd ${galaxypath}/archive_${fname}/
|
|
89 tar xzf ${fname}.tar.gz
|
|
90 cd $wd
|
|
91 fi
|
|
92 wait
|
|
93 rm -f ${galaxypath}/archive_${fname}/*.tar
|
|
94 rm -f ${galaxypath}/archive_${fname}/*.tar.gz
|
|
95 fi
|
|
96 if [[ $ftype == *bzip2* ]]
|
|
97 then
|
|
98 cp $archive ${galaxypath}/archive_${fname}/${fname}.gz
|
|
99 gunzip2 ${galaxypath}/archive_${fname}/${fname}.gz
|
|
100 fi
|
|
101 fi
|
|
102 }
|
|
103
|
|
104 ##
|
|
105 ## Create HTML content for the tabs specified by user
|
|
106 ##
|
|
107 function makeTabContent ( ){
|
|
108 tab=$1 # name of current tab
|
|
109 itemslist=$2 # list of all items
|
|
110 tracklist=$3 # genome browser tracks info
|
|
111 contentline="" # HTML code for tab
|
|
112 imgcount=0 # keep track of the number of images on the current tab
|
|
113 iframecount=0
|
|
114
|
|
115 for item in $itemslist
|
|
116 do
|
|
117 ## Parse items lists
|
|
118 item=${item/::/:emptycol:}
|
|
119 declare -a myarr=(`echo $item |sed 's/:/ /g'`)
|
|
120
|
|
121 ## Create the tab contents HTML code
|
|
122 if [ ${myarr[0]} == $tab ]
|
|
123 then
|
|
124
|
|
125 ##
|
|
126 ## Text Field
|
|
127 ##
|
|
128 if [ ${myarr[1]} == "text" ]
|
|
129 then
|
|
130 text=${myarr[2]}
|
|
131 md=${myarr[4]}
|
|
132
|
|
133 # if markdown, convert to html
|
|
134 if [ $md == "Y" ]
|
|
135 then
|
|
136 ## resubstitute sanitized charachters
|
|
137 text=${text//==space==/ }
|
|
138 text=${text//==colon==/:}
|
|
139 text=${text//==comma==/,}
|
|
140 text=${text//==slash==/\/}
|
|
141 text=${text//==lt==/<}
|
|
142 text=${text//==gt==/>}
|
|
143 text=${text//==apos==/\'}
|
|
144 text=${text//==quote==/\"}
|
|
145 text=${text//==backtick==/\`}
|
|
146 text=${text//==dollar==/$}
|
|
147 text=${text//==bar==/|}
|
|
148 text=${text//&&/&}
|
|
149 text=${text//\\n/\\n}
|
|
150 text=${text//\\t/\\t}
|
|
151 text=${text//\&r\&n/\\n}
|
|
152 text=${text//\&r/\\n}
|
|
153 text=${text//\&n/\\n}
|
|
154 text=${text//\&c/:}
|
|
155
|
|
156
|
|
157 ## convert markdown in textfield to html
|
|
158 echo -e "$text" > mytext.md
|
|
159
|
|
160 if [ -z `type -p pandoc` ]
|
|
161 then
|
|
162 # pandoc missing
|
|
163 ${repositorypath}/Markdown/markdown2.py mytext.md > mytext.html
|
|
164
|
|
165 else
|
|
166 # pandoc exists
|
|
167 pandoc -f markdown -o mytext.html mytext.md
|
|
168 pandoc -f markdown -o standalone.html -s mytext.md
|
|
169
|
|
170 #get css generated by pandoc and add as scoped attribute (HTML5)
|
|
171 pandocstyle=`sed -n '/<style/,/style>/p' standalone.html`
|
|
172 fi
|
|
173
|
|
174 markdowntext=$(cat mytext.html)
|
|
175 contentline="${contentline}\n<div class=\"markdown-body\">${pandocstyle} ${markdowntext}</div>\n"
|
|
176
|
|
177 else # If not markdown, print verbatim (with exception of few html tags)
|
|
178
|
|
179 ## allow some html formatting tags
|
|
180 text=${text//==lt==strong==gt==/<strong>} # search for strong tags
|
|
181 text=${text//==lt====slash==strong==gt==/<\/strong>} # search for strong tags
|
|
182 text=${text//==lt==em==gt==/<em>} # search for strong tags
|
|
183 text=${text//==lt====slash==em==gt==/<\/em>} # search for strong tags
|
|
184
|
|
185 text=${text//==lt==b==gt==/<strong>} # search for strong tags
|
|
186 text=${text//==lt====slash==b==gt==/<\/strong>} # search for strong tags
|
|
187 text=${text//==lt==i==gt==/<em>} # search for strong tags
|
|
188 text=${text//==lt====slash==i==gt==/<\/em>} # search for strong tags
|
|
189
|
|
190 text=${text//==lt==br==gt==/<br\/>} # search for strong tags
|
|
191 text=${text//==lt====br==slash==gt==/<br\/>} # search for strong tags
|
|
192 text=${text//==lt==h1==gt==/<h1>} # search for h1-h6 tags
|
|
193 text=${text//==lt==h2==gt==/<h2>} # search for h1-h6 tags
|
|
194 text=${text//==lt==h3==gt==/<h3>} # search for h1-h6 tags
|
|
195 text=${text//==lt==h4==gt==/<h4>} # search for h1-h6 tags
|
|
196 text=${text//==lt==h5==gt==/<h5>} # search for h1-h6 tags
|
|
197 text=${text//==lt==h6==gt==/<h6>} # search for h1-h6 tags
|
|
198 text=${text//==lt====slash==h1==gt==/<\/h1>} # search for h1-h6 closing tags
|
|
199 text=${text//==lt====slash==h2==gt==/<\/h2>} # search for h1-h6 closing tags
|
|
200 text=${text//==lt====slash==h3==gt==/<\/h3>} # search for h1-h6 closing tags
|
|
201 text=${text//==lt====slash==h4==gt==/<\/h4>} # search for h1-h6 closing tags
|
|
202 text=${text//==lt====slash==h5==gt==/<\/h5>} # search for h1-h6 closing tags
|
|
203 text=${text//==lt====slaxh==h6==gt==/<\/h6>} # search for h1-h6 closing tags
|
|
204
|
|
205 ## display everything else verbatim
|
|
206 text=${text//==space==/ }
|
|
207 text=${text//==colon==/:}
|
|
208 text=${text//==comma==/,}
|
|
209 text=${text//==slash==/\/}
|
|
210 text=${text//==lt==/<}
|
|
211 text=${text//==gt==/>}
|
|
212 text=${text//==apos==/'}
|
|
213 text=${text//==quote==/"}
|
|
214 text=${text//&&/&}
|
|
215 text=${text//\\n/<br/>}
|
|
216 text=${text//\\t/ }
|
|
217 text=${text//\&r\&n/<br/>}
|
|
218 text=${text//\&r/<br/>}
|
|
219 text=${text//\&n/<br/>}
|
|
220 text=${text//\&c/:}
|
|
221 text=${text//==backtick==/`}
|
|
222 text=${text//==dollar==/$}
|
|
223 text=${text//==bar==/|}
|
|
224 contentline="${contentline}\n${text}\n"
|
|
225 fi
|
|
226
|
|
227
|
|
228 fi
|
|
229
|
|
230 ##
|
|
231 ## Text File
|
|
232 ##
|
|
233 if [ ${myarr[1]} == "textfile" ]
|
|
234 then
|
|
235 tfile=${myarr[2]}
|
|
236 md=${myarr[4]}
|
|
237 fname=`basename ${tfile}`
|
|
238 fname=${fname%.*}
|
|
239 fname="${fname}.txt"
|
|
240 cp ${tfile} "${galaxypath}/${fname}"
|
|
241
|
|
242 #estimate height for iframe based on number oflines in the file
|
|
243 numlines=`wc -l ${tfile} | cut -d" " -f1`
|
|
244 minheight=$[$numlines*17]
|
|
245
|
|
246 # if markdown, convert to html
|
|
247 if [ $md == "Y" ]
|
|
248 then
|
|
249
|
|
250 if [ -z `type -p pandoc` ]
|
|
251 then
|
|
252 # pandoc missing
|
|
253 ${repositorypath}/Markdown/markdown2.py ${tfile} > mytext.html
|
|
254
|
|
255 else
|
|
256 # pandoc exists
|
|
257 pandoc -o mytext.html ${tfile}
|
|
258 pandoc -o standalone.html -s ${tfile}
|
|
259
|
|
260 # get css generated by pandoc and add as scoped attribute (HTML5)
|
|
261 pandocstyle=`sed -n '/<style/,/style>/p' standalone.html`
|
|
262
|
|
263 fi
|
|
264
|
|
265 markdowntext=$(cat mytext.html)
|
|
266 contentline="${contentline}\n<div class=\"markdown-body\">${pandocstyle} ${markdowntext}</div>\n"
|
|
267 else
|
|
268 contentline="${contentline}\n<iframe class=\"invisibleframe\" src=\"${fname}\" width=\"100%\" height=\"$minheight\"> </iframe>\n"
|
|
269 fi
|
|
270 fi
|
|
271
|
|
272 ##
|
|
273 ## Image
|
|
274 ##
|
|
275 if [ ${myarr[1]} == "image" ]
|
|
276
|
|
277 then
|
|
278 imgcount=$[$imgcount+1]
|
|
279 #restore file suffix for html
|
|
280 ftype=`file ${myarr[2]}`
|
|
281 zoomlevel=${myarr[4]}
|
|
282 zoomenable=${myarr[5]}
|
|
283 align=${myarr[6]}
|
|
284 #####echo "zoomenable:${zoomenable}, align:${align}"
|
|
285 if [[ $ftype == *JPEG* ]]
|
|
286 then
|
|
287 suffix=".jpg"
|
|
288 fi
|
|
289 if [[ $ftype == *SVG* ]]
|
|
290 then
|
|
291 suffix=".svg"
|
|
292 fi
|
|
293 if [[ $ftype == *PNG* ]]
|
|
294 then
|
|
295 suffix=".png"
|
|
296 fi
|
|
297
|
|
298 image=`basename ${myarr[2]}`
|
|
299 image=${image%.dat}
|
|
300 image="${image}${suffix}"
|
|
301 cp ${myarr[2]} ${galaxypath}/${image}
|
|
302
|
|
303 if [[ ${align} == "none" ]]
|
|
304 then
|
|
305 alignstring=""
|
|
306 alignstring2=""
|
|
307 else
|
|
308 alignstring="<div float=\"${align}\">"
|
|
309 alignstring2="</div>"
|
|
310
|
|
311 alignstring="align=\"${align}\""
|
|
312 alignstring2=""
|
|
313 fi
|
|
314
|
|
315
|
|
316 if [[ ${zoomlevel} -eq 0 ]]
|
|
317 then
|
|
318 widthstring=""
|
|
319 else
|
|
320 widthstring="width=\"${zoomlevel}\""
|
|
321 fi
|
|
322
|
|
323 if [[ ${zoomlevel} -eq 0 || ${zoomenable} == "N" ]]
|
|
324 then
|
|
325 contentline="${contentline}<span id=\"img${imgcount}\"> <img src=\"${image}\" ${alignstring} ${widthstring} alt=\"loading image..\"/></span>"
|
|
326 else
|
|
327 contentline="${contentline}<span class=\"zoomme\" id=\"img${imgcount}\"> <img src=\"${image}\" ${alignstring} ${widthstring} alt=\"loading image..\"/></span>"
|
|
328 fi
|
|
329
|
|
330 fi
|
|
331
|
|
332 ##
|
|
333 ## Table
|
|
334 ##
|
|
335 if [ ${myarr[1]} == "table" ]
|
|
336 then
|
|
337
|
|
338 maxlines=50000
|
|
339 tsvfile_orig=${myarr[2]}
|
|
340 tsvfile="tablehead.tsv"
|
|
341 fname=`basename ${tsvfile_orig}`
|
|
342 fname=${fname%.*}
|
|
343 fancy=${myarr[4]}
|
|
344 makelinks=${myarr[5]}
|
|
345 iframeid="iframe"$iframecount
|
|
346 #echo "\nmakelinks: $makelinks fancy: $fancy <br>"
|
|
347
|
|
348 #TODO client side database for large files. For now only display first section of file and add download link
|
|
349 numlines=`wc -l ${tsvfile_orig} |cut -d" " -f1`
|
|
350
|
|
351 head -${maxlines} ${tsvfile_orig} > tsvtmpfile
|
|
352
|
|
353 #remove any empty or header lines (lines starting with #, unless vcf file, then keep #CHROM line)
|
|
354 awk 'BEGIN{
|
|
355 FS="\t"
|
|
356 OFS="\t"
|
|
357 }{
|
|
358 if((index($0,"#")==1 && index($0,"#CHROM")!=1) || $0==""){
|
|
359 headerlines++
|
|
360 }
|
|
361 else print $0
|
|
362
|
|
363 }END{}' tsvtmpfile > ${tsvfile}
|
|
364
|
|
365 if [[ $makelinks == "Y" ]]
|
|
366 then
|
|
367 col=${myarr[6]}
|
|
368 prefix=${myarr[7]}
|
|
369 suffix=${myarr[8]}
|
|
370 urlitems=${myarr[9]}
|
|
371 minw=${myarr[10]}
|
|
372 suffix=${suffix/emptycol/}
|
|
373 suffix=${suffix/==quote==/&}
|
|
374 prefix=${prefix/emptycol/}
|
|
375 prefix=${prefix/==quote==/&}
|
|
376 prefix=${prefix/==colon==/:}
|
|
377
|
|
378 # unpack archive of files to link to if present
|
|
379 if [[ ${urlitems} != None ]]
|
|
380 then
|
|
381 oldfname=$fname
|
|
382 decompressArchive ${urlitems}
|
|
383 prefix=archive_${fname}/${prefix}
|
|
384 fname=$oldfname
|
|
385 fi
|
|
386
|
|
387
|
|
388 #edit the table to include links
|
|
389 awk 'BEGIN{
|
|
390 FS="\t"
|
|
391 OFS="\t"
|
|
392 url="'"$prefix"'"
|
|
393 url2="'"$suffix"'"
|
|
394 iframeid="'"$iframeid"'"
|
|
395 prefix="<a href=\42"
|
|
396 suffix="\42 onclick=\42resizeIframe("iframeid")\42>"
|
|
397 col="'"$col"'"
|
|
398 end="</a>"
|
|
399 }{
|
|
400 if(FNR==1)
|
|
401 print $0
|
|
402 else{
|
|
403 $col=prefix""url""$col""url2""suffix""$col""end
|
|
404 print $0
|
|
405 }
|
|
406 }END{}' ${tsvfile} > ${tsvfile}2
|
|
407
|
|
408 else
|
|
409 minw=${myarr[6]}
|
|
410 cp ${tsvfile} ${tsvfile}2
|
|
411 fi
|
|
412
|
|
413 iframecount=$[$iframecount+1]
|
|
414 if [ $fancy == "Y" ]
|
|
415 then
|
|
416 perl ${repositorypath}/tsv2html.pl < ${tsvfile}2 > ${galaxypath}/htmltable_${fname}.html
|
|
417 contentline="${contentline}\n<iframe class=\"invisibleframe fancyiframe\" id=\"$iframeid\" src=\"htmltable_${fname}.html\" width=\"100%\" style=\"height: 760px; min-height: 525px; overflow-y: hidden; overflow-x: scroll\" ></iframe>"
|
|
418 iframecount=$[$iframecount+1]
|
|
419 else
|
|
420 perl ${repositorypath}/tsv2html_simple.pl < ${tsvfile}2 > ${galaxypath}/htmltable_${fname}.html
|
|
421 contentline="${contentline}\n<iframe class=\"unfancyiframe invisibleframe\" id=\"$iframeid\" src=\"htmltable_${fname}.html\" scrolling=\"no\" style=\"min-width: ${minw}px; max-width: 100%; vertical-align: top;\" onload=\"resizeIframe(this)\"></iframe>"
|
|
422 iframecount=$[$iframecount+1]
|
|
423 fi
|
|
424
|
|
425 if [[ $numlines -gt ${maxlines} ]]
|
|
426 then
|
|
427 tablename=`basename ${tsvfile_orig}`
|
|
428 cp ${tsvfile_orig} ${galaxypath}/$tablename
|
|
429 contentline="${contentline}<br/>\nLarge tables will be supported soon. The first ${maxlines} lines are shown here, and you can download the full file <a href=\"${tablename}\">here</a>."
|
|
430 fi
|
|
431 fi
|
|
432
|
|
433 ##
|
|
434 ## PDF
|
|
435 ##
|
|
436 if [[ ${myarr[1]} == "pdf" ]]
|
|
437 then
|
|
438 pdffile=${myarr[2]}
|
|
439 fname=`basename ${pdffile}`
|
|
440 fname=${fname%.dat}
|
|
441 pdfname="${fname}.pdf"
|
|
442 cp ${pdffile} "${galaxypath}/${pdfname}"
|
|
443
|
|
444 width=1000
|
|
445 height=800
|
|
446 echo -e "<html><body><object data=\"${pdfname}\" type=\"application/pdf\" width=\"$width\" height=\"$height\"><embed src=\"${pdfname}\" type=\"application/pdf\" /><p>It appears you have no PDF plugin for your browser. No biggie... you can <a href=\"${pdfname}\">click here to download the PDF file.</a></p></object></body></html>" > "${galaxypath}/${fname}.html"
|
|
447 width=$[$width+10]
|
|
448 height=$[$height+10]
|
|
449 contentline="${contentline}\n<iframe src=\"${fname}.html\" width=\"${width}\" height=\"${height}\"></iframe>\n"
|
|
450
|
|
451 fi
|
|
452
|
|
453 ##
|
|
454 ## HTML
|
|
455 ##
|
|
456 if [[ ${myarr[1]} == "htmlfile" ]]
|
|
457 then
|
|
458 htmlfile=${myarr[2]}
|
|
459 height=${myarr[4]}
|
|
460 fname=`basename ${htmlfile}`
|
|
461 fname=${fname%.dat}
|
|
462 htmlname="${fname}.html"
|
|
463 cp ${htmlfile} "${galaxypath}/${htmlname}"
|
|
464
|
|
465 contentline="${contentline}\n<iframe class=\"invisibleframe\" src=\"${htmlname}\" width=\"100%\" height=\"${height}px\"></iframe>\n"
|
|
466 fi
|
|
467
|
|
468
|
|
469 if [[ ${myarr[1]} == "htmlpage" ]]
|
|
470 then
|
|
471 url=${myarr[2]}
|
|
472 url=${url//==colon==/:}
|
|
473 url=${url//==fslash==//}
|
|
474 height=${myarr[4]}
|
|
475
|
|
476 contentline="${contentline}\n<iframe class=\"invisibleframe\" src=\"${url}\" width=\"100%\" height=\"${height}px\"></iframe>\n"
|
|
477 fi
|
|
478
|
|
479 ##
|
|
480 ## Web Link
|
|
481 ##
|
|
482 if [ ${myarr[1]} == "weblink" ]
|
|
483 then
|
|
484 url=${myarr[2]}
|
|
485 linktext=${myarr[4]}
|
|
486 url=${url/==colon==/:}
|
|
487 url=${url/==quote==/&}
|
|
488
|
|
489 contentline="${contentline}<a href=\"${url}\" target=\"_blank\">${linktext}</a>"
|
|
490 fi
|
|
491
|
|
492
|
|
493 ##
|
|
494 ## Genome Browser
|
|
495 ##
|
|
496 if [ ${myarr[1]} == "genomebrowser" ]
|
|
497 then
|
|
498 # parse inputs
|
|
499
|
|
500 apiid=${myarr[4]}
|
|
501 servername=${myarr[5]}
|
|
502 buildver=${myarr[2]}
|
|
503
|
|
504 #TODO
|
|
505 ftype="vcf"
|
|
506
|
|
507 servername=${servername/==colon==/:}
|
|
508
|
|
509 ## parse and prepare all tracks
|
|
510 gbcount=$[$gbcount+1]
|
|
511 gbfilelist=${tracklist}
|
|
512 userTracks=""
|
|
513 #IFS=',' read -a gbfilearray <<< ${gbfilelist}
|
|
514 gbfilearray=(${gbfilelist//,/ })
|
|
515 for gbfile in "${gbfilearray[@]}"
|
|
516 do
|
|
517 # gbfile is in format "browsernum:file"
|
|
518 #IFS=':' read -a gbfileinfo <<< ${gbfile}
|
|
519 gbfileinfo=(${gbfile//:/ })
|
|
520 if [[ ${gbfileinfo[0]} == $gbcount ]]
|
|
521 then
|
|
522
|
|
523 ftype=${gbfileinfo[3]}
|
|
524 if [ $ftype == "vcf" ]
|
|
525 then
|
|
526 gbfilename=${gbfileinfo[1]}
|
|
527 gbfilelabel=${gbfileinfo[2]}
|
|
528 gbfilelabel=${gbfilelabel//==space==/ }
|
|
529 fname=`basename ${gbfilename}`
|
|
530 fname=${fname%.dat}
|
|
531 newgbfilename="${fname}.vcf"
|
|
532
|
|
533
|
|
534 cp ${gbfilename} "${galaxypath}/${newgbfilename}"
|
|
535 bgzip "${galaxypath}/${newgbfilename}"
|
|
536 tabix -p vcf "${galaxypath}/${newgbfilename}.gz"
|
|
537
|
|
538 userTracks="${userTracks},
|
|
539 {name: '${gbfilelabel}',
|
|
540 uri: '${servername}/datasets/${apiid}/display/${newgbfilename}.gz',
|
|
541 tier_type: 'tabix',
|
|
542 payload: 'vcf'}
|
|
543 "
|
|
544 fi
|
|
545
|
|
546 if [ $ftype == "bam" ]
|
|
547 then
|
|
548 gbfilename=${gbfileinfo[1]}
|
|
549 gbfilelabel=${gbfileinfo[2]}
|
|
550 gbfilelabel=${gbfilelabel//==space==/ }
|
|
551 fname=`basename ${gbfilename}`
|
|
552 fname=${fname%.dat}
|
|
553 newgbfilename="${fname}.bam"
|
|
554
|
|
555 # link to bam instead of copying
|
|
556 ln -s ${gbfilename} "${galaxypath}/${newgbfilename}"
|
|
557 samtools index "${galaxypath}/${newgbfilename}"
|
|
558
|
|
559 userTracks="${userTracks},
|
|
560 {name: '${gbfilelabel}',
|
|
561 bamURI: '${servername}/datasets/${apiid}/display/${newgbfilename}'}
|
|
562 "
|
|
563
|
|
564 fi
|
|
565 fi
|
|
566 done
|
|
567
|
|
568
|
|
569
|
|
570 if [ ${buildver} == "hg18" ]
|
|
571 then
|
|
572 coordSystem="coordSystem: {
|
|
573 speciesName: 'Human',
|
|
574 taxon: 9606,
|
|
575 auth: 'NCBI',
|
|
576 version: '36',
|
|
577 ucscName: 'hg18'
|
|
578 },"
|
|
579
|
|
580 chains="chains: {
|
|
581 hg19ToHg18: new Chainset('https://www.biodalliance.org/das/hg19ToHg18/', 'GRCh37', 'NCBI36',
|
|
582 {
|
|
583 speciesName: 'Human',
|
|
584 taxon: 9606,
|
|
585 auth: 'GRCh',
|
|
586 version: 37
|
|
587 })
|
|
588 },"
|
|
589
|
|
590 genesTrack="{name: 'Genes',
|
|
591 desc: 'Gene structures from Ensembl 54',
|
|
592 uri: 'https://www.biodalliance.org/das/hsa_54_36p/',
|
|
593 collapseSuperGroups: true,
|
|
594 provides_karyotype: true,
|
|
595 provides_search: true,
|
|
596 provides_entrypoints: true,
|
|
597 maxbins: false}, "
|
|
598
|
|
599 repeatsTrack="{name: 'Repeats',
|
|
600 desc: 'Repeat annotation from Ensembl 59',
|
|
601 bwgURI: 'https://www.biodalliance.org/datasets/repeats.bb',
|
|
602 stylesheet_uri: 'https://www.biodalliance.org/stylesheets/bb-repeats.xml'}"
|
|
603
|
|
604
|
|
605 # default is hg19
|
|
606 else
|
|
607 coordSystem="coordSystem: {
|
|
608 speciesName: 'Human',
|
|
609 taxon: 9606,
|
|
610 auth: 'NCBI',
|
|
611 version: '37',
|
|
612 ucscName: 'hg19'
|
|
613 },"
|
|
614
|
|
615 chains=""
|
|
616
|
|
617 genesTrack="{name: 'Genes',
|
|
618 desc: 'Gene structures from GENCODE 19',
|
|
619 bwgURI: 'https://www.biodalliance.org/datasets/gencode.bb',
|
|
620 stylesheet_uri: 'https://www.biodalliance.org/stylesheets/gencode.xml',
|
|
621 collapseSuperGroups: true,
|
|
622 trixURI: 'https://www.biodalliance.org/datasets/geneIndex.ix'},"
|
|
623
|
|
624 repeatsTrack="{name: 'Repeats',
|
|
625 desc: 'Repeat annotation from Ensembl 59',
|
|
626 bwgURI: 'https://www.biodalliance.org/datasets/repeats.bb',
|
|
627 stylesheet_uri: 'https://www.biodalliance.org/stylesheets/bb-repeats.xml'},"
|
|
628
|
|
629 fi
|
|
630
|
|
631 contentline="${contentline}
|
|
632 <script language=\"javascript\" src=\"https://www.biodalliance.org/release-0.13/dalliance-compiled.js\"></script>
|
|
633 <script language=\"javascript\">
|
|
634 new Browser({
|
|
635 chr: '1',
|
|
636 viewStart: 0,
|
|
637 viewEnd: 100000,
|
|
638 cookieKey: 'human',
|
|
639
|
|
640 ${coordSystem}
|
|
641
|
|
642 ${chains}
|
|
643 sources: [{name: 'Genome',
|
|
644 twoBitURI: 'https://www.biodalliance.org/datasets/${buildver}.2bit',
|
|
645 tier_type: 'sequence'},
|
|
646 ${genesTrack},
|
|
647 ${repeatsTrack},
|
|
648 {name: 'Conservation',
|
|
649 desc: 'Conservation',
|
|
650 bwgURI: 'https://www.biodalliance.org/datasets/phastCons46way.bw',
|
|
651 noDownsample: true}
|
|
652 ${userTracks}
|
|
653 ],
|
|
654
|
|
655
|
|
656
|
|
657
|
|
658 browserLinks: {
|
|
659 Ensembl: 'http://www.ensembl.org/Homo_sapiens/Location/View?r=${chr}:${start}-${end}',
|
|
660 UCSC: 'http://genome.ucsc.edu/cgi-bin/hgTracks?db=${buildver}&position=chr${chr}:${start}-${end}',
|
|
661 Sequence: 'http://www.derkholm.net:8080/das/${buildver}comp/sequence?segment=${chr}:${start},${end}'
|
|
662 }
|
|
663
|
|
664 });
|
|
665 </script>
|
|
666
|
|
667 <div id=\"svgHolder\"></div>
|
|
668 "
|
|
669 fi
|
|
670
|
|
671 ##
|
|
672 ## Link to Dataset
|
|
673 ##
|
|
674 if [ ${myarr[1]} == "link" ]
|
|
675 then
|
|
676 linkfile=${myarr[2]}
|
|
677 apiid=${myarr[4]}
|
|
678 isireport=${myarr[5]}
|
|
679 linkfilename=`basename ${linkfile}`
|
|
680 linktext=${myarr[6]}
|
|
681
|
|
682
|
|
683 #check for some basic filetypes
|
|
684 ftype=`file $linkfile`
|
|
685 if [[ $ftype == *HTML* ]]
|
|
686 then
|
|
687 linkfilename=${linkfilename%.dat}
|
|
688 linkfilename=${linkfilename}.html
|
|
689 fi
|
|
690 if [[ $ftype == *PNG* ]]
|
|
691 then
|
|
692 linkfilename=${linkfilename%.dat}
|
|
693 linkfilename=${linkfilename}.png
|
|
694 fi
|
|
695 if [[ $ftype == *SVG* ]]
|
|
696 then
|
|
697 linkfilename=${linkfilename%.dat}
|
|
698 linkfilename=${linkfilename}.svg
|
|
699 fi
|
|
700 if [[ $ftype == *JPEG* ]]
|
|
701 then
|
|
702 linkfilename=${linkfilename%.dat}
|
|
703 linkfilename=${linkfilename}.jpg
|
|
704 fi
|
|
705
|
|
706
|
|
707 if [[ ${isireport} == "Y" ]]
|
|
708 then
|
|
709 linkfilename="/datasets/${apiid}/display/"
|
|
710 else
|
|
711 cp ${linkfile} "${galaxypath}/${linkfilename}"
|
|
712 fi
|
|
713
|
|
714 contentline="${contentline}<a href=\"${linkfilename}\">${linktext}</a>"
|
|
715 fi
|
|
716
|
|
717 ##
|
|
718 ## Links to Archive Contents
|
|
719 ##
|
|
720 if [[ ${myarr[1]} == "links" ]]
|
|
721 then
|
|
722 archive=${myarr[2]}
|
|
723 decompressArchive $archive
|
|
724
|
|
725 # add links to webpage
|
|
726 # separate line for each folder, files within folder on same line
|
|
727 for linkfile in `ls ${galaxypath}/archive_${fname}/ |sort -V`
|
|
728 do
|
|
729 #echo "<br/> ->making link to file: $linkfile "
|
|
730 if [ -d ${galaxypath}/archive_${fname}/$linkfile ] # if directory, add break, and list all contained files, max level 1 deep
|
|
731 then
|
|
732 #echo "<br/> ->is directory, entering: $linkfile "
|
|
733 #ls ${galaxypath}/archive_${fname}/$linkfile
|
|
734 contentline="${contentline}"
|
|
735 for linkfile2 in `ls ${galaxypath}/archive_${fname}/$linkfile | sort -V`
|
|
736 do
|
|
737 #echo "<br/> ->making link to file: ${galaxypath}/archive_${fname}/$linkfile2"
|
|
738 if [ -f ${galaxypath}/archive_${fname}/$linkfile/$linkfile2 ] # if directory, add break, and list all contained files, max level 1 deep
|
|
739 then
|
|
740 #echo "<br/> ->is file, making link: $linkfile "
|
|
741 label=`basename $linkfile2`
|
|
742 label=${label%.*}
|
|
743 contentline="${contentline}<a class=\"mylinks\" href=\"archive_${fname}/${linkfile}/${linkfile2}\">${label}</a> \n "
|
|
744 fi
|
|
745 done
|
|
746 elif [ -f ${galaxypath}/archive_${fname}/$linkfile ]
|
|
747 then
|
|
748 label=`basename ${galaxypath}/archive_${fname}/$linkfile`
|
|
749 label=${label%.*}
|
|
750 contentline="${contentline}<a class=\"mylinks\" href=\"archive_${fname}/${linkfile}\">$label</a> \n"
|
|
751 fi
|
|
752 done
|
|
753
|
|
754
|
|
755 fi
|
|
756
|
|
757 if [[ ${myarr[3]} == "Y" ]]
|
|
758 then
|
|
759 contentline="${contentline}<br/>\n"
|
|
760 fi
|
|
761 fi
|
|
762 done
|
|
763
|
|
764 echo "${contentline}"
|
|
765 }
|
|
766
|
|
767 ##
|
|
768 ## Create HTML content for iReport
|
|
769 ##
|
|
770 createMainPage (){
|
|
771 page=$1
|
|
772 tabtitles=$2 # comma-separated list of tab titles
|
|
773 tabitems=$3 # colon-sparated list of tabs specifications
|
|
774 iframecount=1 # keep track of number of iFrames so that they can be referenced by ID
|
|
775 minwidth=$4 # width of page
|
|
776 gbtracks=$5 # genome browser track information
|
|
777
|
|
778 echo "createMainPage: tabitems: $tabitems. tabtitles: $tabtitles. gbtracks: $gbtracks"
|
|
779 # create correct number of tabs
|
|
780 count=0
|
|
781
|
|
782 tabtitles=${tabtitles//,/ }
|
|
783 tabtitles=${tabtitles//==colon==/:}
|
|
784 tabslist="<ul>\n"
|
|
785 mytabs=""
|
|
786
|
|
787 for title in $tabtitles
|
|
788 do
|
|
789 # Create list of tabs
|
|
790 count=$[count+1]
|
|
791 title2=${title//_s_/ }
|
|
792 tabslist="${tabslist} <li><a href=\"#tabs-${count}\">${title2}</a></li>\n"
|
|
793
|
|
794 # Create tabs with content
|
|
795 tabcontent=$(makeTabContent $title "$tabitems" "$gbtracks")
|
|
796 mytabs="${mytabs}\n<div id=\"tabs-${count}\">\n"
|
|
797 mytabs="${mytabs}${tabcontent}"
|
|
798 mytabs="${mytabs}\n</div>\n"
|
|
799 done
|
|
800 tabslist="${tabslist}</ul>"
|
|
801
|
|
802 ## Output the webpage
|
|
803 echo -e "<!doctype html>
|
|
804 <head>
|
|
805 <meta charset=\"utf-8\">
|
|
806 <title>iReport</title>
|
|
807 <link rel=\"stylesheet\" href=\"jquery-ui.css\">
|
|
808 <link rel=\"stylesheet\" href=\"ireport_css.css\">
|
|
809 <link rel=\"stylesheet\" href=\"md.css\">
|
|
810 <script type=\"text/javascript\" src=\"jquery-1.10.2.js\"></script>
|
|
811 <script type=\"text/javascript\" src=\"jquery-ui.js\"></script>
|
|
812 <script type=\"text/javascript\" src=\"iframe-resizer/src/iframeResizer.js\"></script>
|
|
813 <script type=\"text/javascript\" src=\"jquery.zoom.js\"></script>
|
|
814 <script type=\"text/javascript\" src=\"ireport_jquery.js\"></script>
|
|
815 <script type=\"text/javascript\" src=\"ireport_javascript.js\"></script>
|
|
816 </head>
|
|
817 <body>
|
|
818 <div id=\"tabs\" style=\"display:inline-block; min-height:100%; min-width:${minwidth}px\">
|
|
819 $tabslist
|
|
820
|
|
821 $mytabs
|
|
822 </div>
|
|
823 </body>
|
|
824 </html>" > $page
|
|
825 }
|