Next changeset 1:75853bceec00 (2017-01-17) |
Commit message:
Uploaded |
added:
ALL.xml RScript.r jquery-1.11.0.min.js script.js style.css tabber.js wrapper.sh |
b |
diff -r 000000000000 -r ed6885c85660 ALL.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ALL.xml Wed Aug 31 05:31:47 2016 -0400 |
b |
@@ -0,0 +1,46 @@ +<tool id="prisca" name="PRISCA" version="1.0"> + <description>PRecISe Clonal Analysis</description> + <command interpreter="bash"> + wrapper.sh $in_file $out_file $out_file.files_path $min_freq $min_cells $merge_on + </command> + <inputs> + <param name="in_file" format="tabular" type="data" label="Data to Process" /> + <param name="min_freq" type="text" label="Minimum Frequency, between 0 and 100 in percentage" value='0'/> + <param name="min_cells" type="text" label="Minimum cell count" value='0'/> + <param name="merge_on" type="select" label="Merge On"> + <option value="Clone_Sequence">Clone_Sequence</option> + <option value="V_J_CDR3">V+J+CDR3</option> + </param> + </inputs> + <outputs> + <data format="html" name="out_file" /> + </outputs> + <help> +Takes a tabular file as input, it needs to following columns: + ++----------------------------------+----------------------------------------------+ +| **Column name** | **Column contents** | ++----------------------------------+----------------------------------------------+ +| Patient | The patient ID | ++----------------------------------+----------------------------------------------+ +| Sample | The Sample ID, one, two or three per Patient | ++----------------------------------+----------------------------------------------+ +| Cell_Count | The cell count within a sample/loci | ++----------------------------------+----------------------------------------------+ +| Clone_Molocule_Count_From_Spikes | The count of a clone | ++----------------------------------+----------------------------------------------+ +| Log10_Frequency | The frequency of a clone in log10 | ++----------------------------------+----------------------------------------------+ +| J_Segment_Major_Gene | The J Gene of this clone | ++----------------------------------+----------------------------------------------+ +| V_Segment_Major_Gene | The V Gene of this clone | ++----------------------------------+----------------------------------------------+ +| Clone_Sequence | The entire sequence | ++----------------------------------+----------------------------------------------+ +| CDR3_Sense_Sequence | The CDR3 sequence region. | ++----------------------------------+----------------------------------------------+ + + +And generate a detailed HTML report on the sequences found in indiviual samples and in both samples. + </help> +</tool> |
b |
diff -r 000000000000 -r ed6885c85660 RScript.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RScript.r Wed Aug 31 05:31:47 2016 -0400 |
[ |
b'@@ -0,0 +1,1076 @@\n+args <- commandArgs(trailingOnly = TRUE)\r\n+options(scipen=999)\r\n+\r\n+inFile = args[1]\r\n+outDir = args[2]\r\n+logfile = args[3]\r\n+min_freq = as.numeric(args[4])\r\n+min_cells = as.numeric(args[5])\r\n+mergeOn = args[6]\r\n+\r\n+cat("<html><table><tr><td>Starting analysis</td></tr>", file=logfile, append=F)\r\n+\r\n+library(ggplot2)\r\n+library(reshape2)\r\n+library(data.table)\r\n+library(grid)\r\n+library(parallel)\r\n+#require(xtable)\r\n+cat("<tr><td>Reading input</td></tr>", file=logfile, append=T)\r\n+dat = read.table(inFile, header=T, sep="\\t", dec=".", fill=T, stringsAsFactors=F)\r\n+dat = dat[,c("Patient", "Receptor", "Sample", "Cell_Count", "Clone_Molecule_Count_From_Spikes", "Log10_Frequency", "Total_Read_Count", "J_Segment_Major_Gene", "V_Segment_Major_Gene", "CDR3_Sense_Sequence", "Clone_Sequence")]\r\n+dat$dsPerM = 0\r\n+dat = dat[!is.na(dat$Patient),]\r\n+dat$Related_to_leukemia_clone = F\r\n+\r\n+setwd(outDir)\r\n+cat("<tr><td>Selecting first V/J Genes</td></tr>", file=logfile, append=T)\r\n+dat$V_Segment_Major_Gene = as.factor(as.character(lapply(strsplit(as.character(dat$V_Segment_Major_Gene), "; "), "[[", 1)))\r\n+dat$J_Segment_Major_Gene = as.factor(as.character(lapply(strsplit(as.character(dat$J_Segment_Major_Gene), "; "), "[[", 1)))\r\n+\r\n+cat("<tr><td>Calculating Frequency</td></tr>", file=logfile, append=T)\r\n+\r\n+dat$Frequency = ((10^dat$Log10_Frequency)*100)\r\n+\r\n+dat = dat[dat$Frequency >= min_freq,]\r\n+\r\n+triplets = dat[grepl("VanDongen_cALL_14696", dat$Patient) | grepl("(16278)|(26402)|(26759)", dat$Sample),]\r\n+\r\n+cat("<tr><td>Normalizing to lowest cell count within locus</td></tr>", file=logfile, append=T)\r\n+\r\n+dat$locus_V = substring(dat$V_Segment_Major_Gene, 0, 4)\r\n+dat$locus_J = substring(dat$J_Segment_Major_Gene, 0, 4)\r\n+min_cell_count = data.frame(data.table(dat)[, list(min_cell_count=min(.SD$Cell_Count)), by=c("Patient", "locus_V", "locus_J")])\r\n+\r\n+dat$min_cell_paste = paste(dat$Patient, dat$locus_V, dat$locus_J)\r\n+min_cell_count$min_cell_paste = paste(min_cell_count$Patient, min_cell_count$locus_V, min_cell_count$locus_J)\r\n+\r\n+min_cell_count = min_cell_count[,c("min_cell_paste", "min_cell_count")]\r\n+print(paste("rows:", nrow(dat)))\r\n+dat = merge(dat, min_cell_count, by="min_cell_paste")\r\n+print(paste("rows:", nrow(dat)))\r\n+dat$normalized_read_count = round(dat$Clone_Molecule_Count_From_Spikes / dat$Cell_Count * dat$min_cell_count / 2, digits=2) #??????????????????????????????????? wel of geen / 2\r\n+\r\n+dat = dat[dat$normalized_read_count >= min_cells,]\r\n+\r\n+dat$paste = paste(dat$Sample, dat$Clone_Sequence)\r\n+\r\n+patients = split(dat, dat$Patient, drop=T)\r\n+intervalReads = rev(c(0,10,25,50,100,250,500,750,1000,10000))\r\n+intervalFreq = rev(c(0,0.01,0.05,0.1,0.5,1,5))\r\n+V_Segments = c(".*", "IGHV", "IGHD", "IGKV", "IGKV", "IgKINTR", "TRGV", "TRDV", "TRDD" , "TRBV")\r\n+J_Segments = c(".*", ".*", ".*", "IGKJ", "KDE", ".*", ".*", ".*", ".*", ".*")\r\n+Titles = c("Total", "IGH-Vh-Jh", "IGH-Dh-Jh", "Vk-Jk", "Vk-Kde" , "Intron-Kde", "TCRG", "TCRD-Vd-Dd", "TCRD-Dd-Dd", "TCRB-Vb-Jb")\r\n+Titles = factor(Titles, levels=Titles)\r\n+TitlesOrder = data.frame("Title"=Titles, "TitlesOrder"=1:length(Titles))\r\n+\r\n+single_patients = data.frame("Patient" = character(0),"Sample" = character(0), "on" = character(0), "Clone_Sequence" = character(0), "Frequency" = numeric(0), "normalized_read_count" = numeric(0), "V_Segment_Major_Gene" = character(0), "J_Segment_Major_Gene" = character(0), "Rearrangement" = character(0))\r\n+\r\n+patient.merge.list = list() #cache the \'both\' table, 2x speedup for more memory...\r\n+patient.merge.list.second = list()\r\n+ scatter_locus_data_list = list()\r\n+cat(paste("<table border=\'0\' style=\'font-family:courier;\'>", sep=""), file="multiple_matches.html", append=T)\r\n+cat(paste("<table border=\'0\' style=\'font-family:courier;\'>", sep=""), file="single_matches.html", append=T)\r\n+patientCountOnColumn <- function(x, product, interval, on, appendtxt=F){\r\n+ if (!is.data.frame(x) & is.list(x)){\r\n+ x = x[[1]]\r\n+ }\r\n+ #x$Sample = facto'..b'td></tr>", file=logfile, append=T)\r\n+\r\n+ triplets$locus_V = substring(triplets$V_Segment_Major_Gene, 0, 4)\r\n+ triplets$locus_J = substring(triplets$J_Segment_Major_Gene, 0, 4)\r\n+ min_cell_count = data.frame(data.table(triplets)[, list(min_cell_count=min(.SD$Cell_Count)), by=c("uniqueID", "locus_V", "locus_J")])\r\n+ \r\n+ triplets$min_cell_paste = paste(triplets$uniqueID, triplets$locus_V, triplets$locus_J)\r\n+ min_cell_count$min_cell_paste = paste(min_cell_count$uniqueID, min_cell_count$locus_V, min_cell_count$locus_J)\r\n+ \r\n+ min_cell_count = min_cell_count[,c("min_cell_paste", "min_cell_count")]\r\n+ \r\n+ triplets = merge(triplets, min_cell_count, by="min_cell_paste")\r\n+ \r\n+ triplets$normalized_read_count = round(triplets$Clone_Molecule_Count_From_Spikes / triplets$Cell_Count * triplets$min_cell_count / 2, digits=2) #??????????????????????????????????? wel of geen / 2\r\n+ \r\n+ triplets = triplets[triplets$normalized_read_count >= min_cells,]\r\n+ \r\n+ column_drops = c("min_cell_count", "min_cell_paste")\r\n+ \r\n+ triplets = triplets[,!(colnames(triplets) %in% column_drops)]\r\n+\r\n+ cat("<tr><td>Starting Cell Count analysis</td></tr>", file=logfile, append=T)\r\n+\r\n+ interval = intervalReads\r\n+ intervalOrder = data.frame("interval"=paste(">", interval, sep=""), "intervalOrder"=1:length(interval))\r\n+ product = data.frame("Titles"=rep(Titles, each=length(interval)), "interval"=rep(interval, times=10), "V_Segments"=rep(V_Segments, each=length(interval)), "J_Segments"=rep(J_Segments, each=length(interval)))\r\n+ \r\n+ one = triplets[triplets$Sample == "14696_reg_BM",]\r\n+ two = triplets[triplets$Sample == "24536_reg_BM",]\r\n+ three = triplets[triplets$Sample == "24062_reg_BM",]\r\n+ tripletAnalysis(one, "14696_1_Trio", two, "14696_2_Trio", three, "14696_3_Trio", product=product, interval=interval, on="normalized_read_count", T)\r\n+ \r\n+ one = triplets[triplets$Sample == "16278_Left",]\r\n+ two = triplets[triplets$Sample == "26402_Left",]\r\n+ three = triplets[triplets$Sample == "26759_Left",]\r\n+ tripletAnalysis(one, "16278_Left_Trio", two, "26402_Left_Trio", three, "26759_Left_Trio", product=product, interval=interval, on="normalized_read_count", T)\r\n+ \r\n+ one = triplets[triplets$Sample == "16278_Right",]\r\n+ two = triplets[triplets$Sample == "26402_Right",]\r\n+ three = triplets[triplets$Sample == "26759_Right",]\r\n+ tripletAnalysis(one, "16278_Right_Trio", two, "26402_Right_Trio", three, "26759_Right_Trio", product=product, interval=interval, on="normalized_read_count", T)\r\n+ \r\n+ cat("<tr><td>Starting Frequency analysis</td></tr>", file=logfile, append=T)\r\n+\r\n+ interval = intervalFreq\r\n+ intervalOrder = data.frame("interval"=paste(">", interval, sep=""), "intervalOrder"=1:length(interval))\r\n+ product = data.frame("Titles"=rep(Titles, each=length(interval)), "interval"=rep(interval, times=10), "V_Segments"=rep(V_Segments, each=length(interval)), "J_Segments"=rep(J_Segments, each=length(interval)))\r\n+ \r\n+ one = triplets[triplets$Sample == "14696_reg_BM",]\r\n+ two = triplets[triplets$Sample == "24536_reg_BM",]\r\n+ three = triplets[triplets$Sample == "24062_reg_BM",]\r\n+ tripletAnalysis(one, "14696_1_Trio", two, "14696_2_Trio", three, "14696_3_Trio", product=product, interval=interval, on="Frequency", F)\r\n+ \r\n+ one = triplets[triplets$Sample == "16278_Left",]\r\n+ two = triplets[triplets$Sample == "26402_Left",]\r\n+ three = triplets[triplets$Sample == "26759_Left",]\r\n+ tripletAnalysis(one, "16278_Left_Trio", two, "26402_Left_Trio", three, "26759_Left_Trio", product=product, interval=interval, on="Frequency", F)\r\n+ \r\n+ one = triplets[triplets$Sample == "16278_Right",]\r\n+ two = triplets[triplets$Sample == "26402_Right",]\r\n+ three = triplets[triplets$Sample == "26759_Right",]\r\n+ tripletAnalysis(one, "16278_Right_Trio", two, "26402_Right_Trio", three, "26759_Right_Trio", product=product, interval=interval, on="Frequency", F)\r\n+} else {\r\n+ cat("", file="triplets.txt")\r\n+}\r\n+cat("</table></html>", file=logfile, append=T)\r\n' |
b |
diff -r 000000000000 -r ed6885c85660 jquery-1.11.0.min.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jquery-1.11.0.min.js Wed Aug 31 05:31:47 2016 -0400 |
[ |
b'@@ -0,0 +1,4 @@\n+/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */\n+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,p=/^-ms-/,q=/-([\\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\\ufeff\\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:functio'..b'=!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});\n' |
b |
diff -r 000000000000 -r ed6885c85660 script.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/script.js Wed Aug 31 05:31:47 2016 -0400 |
[ |
@@ -0,0 +1,86 @@ +function tsvToTable(data){ + var lines = data.split("\n"); + var tbl = document.createElement('table'); + tbl.className = "result_table"; + tbl.border="1" + var thead = document.createElement('thead'); + var tr = document.createElement('tr'); + tr.className = "evenrowcolor"; + var cells = lines[0].split("\t"); + var cdr3column = []; + for(var a = 0;a < cells.length;++a){ + if(cells[a] == "CDR3 Sequence" || cells[a] == "CDR3_Sense_Sequence" || cells[a] == "Clone Sequence"){ + cdr3column.push(a); + } + var td = document.createElement('td'); + td.appendChild(document.createTextNode(cells[a])); + tr.appendChild(td); + } + thead.appendChild(tr); + tbl.appendChild(thead); + var tbdy = document.createElement('tbody'); + + for(var a = 1;a < lines.length;++a){ + tr = document.createElement('tr'); + var cells = lines[a].split("\t"); + if(cells.length == 1){ + continue; + } + for(var b = 0;b < cells.length;++b){ + td = document.createElement('td'); + td.appendChild(document.createTextNode(cells[b])); + if(cdr3column.indexOf(b) != -1){ + td.className = td.className + " cdr3sequence" + } + tr.appendChild(td) + } + + if(a % 2 == 0){ + tr.className = "evenrowcolor"; + } else { + tr.className = "oddrowcolor"; + } + + tbdy.appendChild(tr); + } + tbl.appendChild(tbdy); + return tbl; +} + +function loadfile(file, patient, type){ + patient = patient.replace(".", "\\."); + $('#hidden_div').load(file, function(){ + $('#result_div_' + patient + '_' + type).html(tsvToTable($('#hidden_div').html())); + $('#result_div_' + patient + '_' + type + ' tr').hover(function() { + $(this).addClass('hover'); + }, function() { + $(this).removeClass('hover'); + }); + $('#result_div_' + patient + '_' + type + ' table').addClass('result_table'); + //$('#result_div_' + patient + ' tr:odd').addClass("oddrowcolor"); + //$('#result_div_' + patient + ' tr:even').addClass("evenrowcolor"); + $('#result_div_' + patient + '_' + type + ' table').before( "<a href='" + file + "'>Download " + file.replace(".txt", "") + "</a>" ); + }); +} + +var currentTD = new Array(); + +$( document ).ready(function() { + $('.summary_table tr').hover(function() { + $(this).addClass('hover'); + }, function() { + $(this).removeClass('hover'); + }); + + $('.summary_table tr:odd').addClass("oddrowcolor"); + $('.summary_table tr:even').addClass("evenrowcolor"); + + $('.summary_table td[data-patient]').click(function() { + var tmp = $(this); + if(currentTD[tmp.attr("data-patient")] != null){ + currentTD[tmp.attr("data-patient")].removeClass("clicked_summary"); + } + currentTD[tmp.attr("data-patient")] = tmp; + currentTD[tmp.attr("data-patient")].addClass("clicked_summary"); + }); +}); |
b |
diff -r 000000000000 -r ed6885c85660 style.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/style.css Wed Aug 31 05:31:47 2016 -0400 |
b |
@@ -0,0 +1,150 @@ +/* $Id: example.css,v 1.5 2006/03/27 02:44:36 pat Exp $ */ + +/*-------------------------------------------------- + REQUIRED to hide the non-active tab content. + But do not hide them in the print stylesheet! + --------------------------------------------------*/ +.tabberlive .tabbertabhide { + display:none; +} + +/*-------------------------------------------------- + .tabber = before the tabber interface is set up + .tabberlive = after the tabber interface is set up + --------------------------------------------------*/ +.tabber { +} +.tabberlive { + margin-top:1em; +} + +/*-------------------------------------------------- + ul.tabbernav = the tab navigation list + li.tabberactive = the active tab + --------------------------------------------------*/ +ul.tabbernav +{ + margin:0; + padding: 3px 0; + border-bottom: 1px solid #778; + font: bold 12px Verdana, sans-serif; +} + +ul.tabbernav li +{ + list-style: none; + margin: 0; + display: inline; +} + +ul.tabbernav li a +{ + padding: 3px 0.5em; + margin-left: 3px; + border: 1px solid #778; + border-bottom: none; + background: #DDE; + text-decoration: none; +} + +ul.tabbernav li a:link { color: #448; } +ul.tabbernav li a:visited { color: #667; } + +ul.tabbernav li a:hover +{ + color: #000; + background: #AAE; + border-color: #227; +} + +ul.tabbernav li.tabberactive a +{ + background-color: #fff; + border-bottom: 1px solid #fff; +} + +ul.tabbernav li.tabberactive a:hover +{ + color: #000; + background: white; + border-bottom: 1px solid white; +} + +/*-------------------------------------------------- + .tabbertab = the tab content + Add style only after the tabber interface is set up (.tabberlive) + --------------------------------------------------*/ +.tabberlive .tabbertab { + padding:5px; + border:1px solid #aaa; + border-top:0; + + /* If you don't want the tab size changing whenever a tab is changed + you can set a fixed height */ + + /* height:200px; */ + + /* If you set a fix height set overflow to auto and you will get a + scrollbar when necessary */ + + /* overflow:auto; */ +} + +/* If desired, hide the heading since a heading is provided by the tab */ +.tabberlive .tabbertab h2 { + display:none; +} +.tabberlive .tabbertab h3 { + display:none; +} + +/* Example of using an ID to set different styles for the tabs on the page */ +.tabberlive#tab1 { +} +.tabberlive#tab2 { +} +.tabberlive#tab2 .tabbertab { + height:200px; + overflow:auto; +} + +.result_table tr:hover { + background-color:#999999; +} + +table.result_table { + font-family: verdana,arial,sans-serif; + font-size:11px; + color:#333333; + border-width: 1px; + border-color: #666666; + border-collapse: collapse; +} +table.result_table th { + border-width: 1px; + padding: 8px; + border-style: solid; + border-color: #666666; +} +table.result_table td { + border-width: 1px; + padding: 8px; + border-style: solid; + border-color: #666666; +} + +.clicked_summary { + background-color:#A0A0A0; +} + +.oddrowcolor{ + background-color:#F4F4F4; +} + +.evenrowcolor{ + background-color:#E5E5E5; +} + +.cdr3sequence { + text-align: right; +} |
b |
diff -r 000000000000 -r ed6885c85660 tabber.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tabber.js Wed Aug 31 05:31:47 2016 -0400 |
[ |
@@ -0,0 +1,40 @@ +/* Copyright (c) 2006 Patrick Fitzgerald */ + +function tabberObj(argsObj) +{var arg;this.div=null;this.classMain="tabber";this.classMainLive="tabberlive";this.classTab="tabbertab";this.classTabDefault="tabbertabdefault";this.classNav="tabbernav";this.classTabHide="tabbertabhide";this.classNavActive="tabberactive";this.titleElements=['h2','h3','h4','h5','h6'];this.titleElementsStripHTML=true;this.removeTitle=true;this.addLinkId=false;this.linkIdFormat='<tabberid>nav<tabnumberone>';for(arg in argsObj){this[arg]=argsObj[arg];} +this.REclassMain=new RegExp('\\b'+this.classMain+'\\b','gi');this.REclassMainLive=new RegExp('\\b'+this.classMainLive+'\\b','gi');this.REclassTab=new RegExp('\\b'+this.classTab+'\\b','gi');this.REclassTabDefault=new RegExp('\\b'+this.classTabDefault+'\\b','gi');this.REclassTabHide=new RegExp('\\b'+this.classTabHide+'\\b','gi');this.tabs=new Array();if(this.div){this.init(this.div);this.div=null;}} +tabberObj.prototype.init=function(e) +{var +childNodes,i,i2,t,defaultTab=0,DOM_ul,DOM_li,DOM_a,aId,headingElement;if(!document.getElementsByTagName){return false;} +if(e.id){this.id=e.id;} +this.tabs.length=0;childNodes=e.childNodes;for(i=0;i<childNodes.length;i++){if(childNodes[i].className&&childNodes[i].className.match(this.REclassTab)){t=new Object();t.div=childNodes[i];this.tabs[this.tabs.length]=t;if(childNodes[i].className.match(this.REclassTabDefault)){defaultTab=this.tabs.length-1;}}} +DOM_ul=document.createElement("ul");DOM_ul.className=this.classNav;for(i=0;i<this.tabs.length;i++){t=this.tabs[i];t.headingText=t.div.title;if(this.removeTitle){t.div.title='';} +if(!t.headingText){for(i2=0;i2<this.titleElements.length;i2++){headingElement=t.div.getElementsByTagName(this.titleElements[i2])[0];if(headingElement){t.headingText=headingElement.innerHTML;if(this.titleElementsStripHTML){t.headingText.replace(/<br>/gi," ");t.headingText=t.headingText.replace(/<[^>]+>/g,"");} +break;}}} +if(!t.headingText){t.headingText=i+1;} +DOM_li=document.createElement("li");t.li=DOM_li;DOM_a=document.createElement("a");DOM_a.appendChild(document.createTextNode(t.headingText));DOM_a.href="javascript:void(null);";DOM_a.title=t.headingText;DOM_a.onclick=this.navClick;DOM_a.tabber=this;DOM_a.tabberIndex=i;if(this.addLinkId&&this.linkIdFormat){aId=this.linkIdFormat;aId=aId.replace(/<tabberid>/gi,this.id);aId=aId.replace(/<tabnumberzero>/gi,i);aId=aId.replace(/<tabnumberone>/gi,i+1);aId=aId.replace(/<tabtitle>/gi,t.headingText.replace(/[^a-zA-Z0-9\-]/gi,''));DOM_a.id=aId;} +DOM_li.appendChild(DOM_a);DOM_ul.appendChild(DOM_li);} +e.insertBefore(DOM_ul,e.firstChild);e.className=e.className.replace(this.REclassMain,this.classMainLive);this.tabShow(defaultTab);if(typeof this.onLoad=='function'){this.onLoad({tabber:this});} +return this;};tabberObj.prototype.navClick=function(event) +{var +rVal,a,self,tabberIndex,onClickArgs;a=this;if(!a.tabber){return false;} +self=a.tabber;tabberIndex=a.tabberIndex;a.blur();if(typeof self.onClick=='function'){onClickArgs={'tabber':self,'index':tabberIndex,'event':event};if(!event){onClickArgs.event=window.event;} +rVal=self.onClick(onClickArgs);if(rVal===false){return false;}} +self.tabShow(tabberIndex);return false;};tabberObj.prototype.tabHideAll=function() +{var i;for(i=0;i<this.tabs.length;i++){this.tabHide(i);}};tabberObj.prototype.tabHide=function(tabberIndex) +{var div;if(!this.tabs[tabberIndex]){return false;} +div=this.tabs[tabberIndex].div;if(!div.className.match(this.REclassTabHide)){div.className+=' '+this.classTabHide;} +this.navClearActive(tabberIndex);return this;};tabberObj.prototype.tabShow=function(tabberIndex) +{var div;if(!this.tabs[tabberIndex]){return false;} +this.tabHideAll();div=this.tabs[tabberIndex].div;div.className=div.className.replace(this.REclassTabHide,'');this.navSetActive(tabberIndex);if(typeof this.onTabDisplay=='function'){this.onTabDisplay({'tabber':this,'index':tabberIndex});} +return this;};tabberObj.prototype.navSetActive=function(tabberIndex) +{this.tabs[tabberIndex].li.className=this.classNavActive;return this;};tabberObj.prototype.navClearActive=function(tabberIndex) +{this.tabs[tabberIndex].li.className='';return this;};function tabberAutomatic(tabberArgs) +{var +tempObj,divs,i;if(!tabberArgs){tabberArgs={};} +tempObj=new tabberObj(tabberArgs);divs=document.getElementsByTagName("div");for(i=0;i<divs.length;i++){if(divs[i].className&&divs[i].className.match(tempObj.REclassMain)){tabberArgs.div=divs[i];divs[i].tabber=new tabberObj(tabberArgs);}} +return this;} +function tabberAutomaticOnLoad(tabberArgs) +{var oldOnLoad;if(!tabberArgs){tabberArgs={};} +oldOnLoad=window.onload;if(typeof window.onload!='function'){window.onload=function(){tabberAutomatic(tabberArgs);};}else{window.onload=function(){oldOnLoad();tabberAutomatic(tabberArgs);};}} +if(typeof tabberOptions=='undefined'){tabberAutomaticOnLoad();}else{if(!tabberOptions['manualStartup']){tabberAutomaticOnLoad(tabberOptions);}} \ No newline at end of file |
b |
diff -r 000000000000 -r ed6885c85660 wrapper.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wrapper.sh Wed Aug 31 05:31:47 2016 -0400 |
[ |
b'@@ -0,0 +1,348 @@\n+#!/bin/bash\n+\n+inputFile=$1\n+outputFile=$2\n+outputDir=$3\n+min_freq=$4\n+min_cells=$5\n+merge_on="$6"\n+\n+dir="$(cd "$(dirname "$0")" && pwd)"\n+mkdir $outputDir\n+\n+\n+Rscript --verbose $dir/RScript.r $inputFile $outputDir $outputFile $min_freq $min_cells "${merge_on}" 2>&1\n+cp $dir/jquery-1.11.0.min.js $outputDir\n+cp $dir/script.js $outputDir\n+cp $dir/style.css $outputDir\n+cp $dir/tabber.js $outputDir\n+mv "$outputFile" "$outputDir/log.html"\n+\n+echo "<html><center><h1><a href=\'index.html\'>Click here for the results</a></h1>Tip: Open it in a new tab (middle mouse button or right mouse button -> \'open in new tab\' on the link above)</center></html>" > $outputFile\n+\n+cd $outputDir\n+\n+header="<html><head><script type=\'text/javascript\' src=\'jquery-1.11.0.min.js\'></script><script type=\'text/javascript\' src=\'tabber.js\'></script><script type=\'text/javascript\' src=\'script.js\'></script><link rel=\'stylesheet\' type=\'text/css\' href=\'style.css\'></head><div id=\'hidden_div\' style=\'display: none;\'></div>"\n+singles=()\n+pairs_BM_PB=()\n+pairs_Left_Right=()\n+pairs_R_Dx=()\n+while read patient sample1 sample2 type\n+do\n+\techo "$patient"\n+\thtml="${patient}.html"\n+\techo "$header" > "$html"\n+\tif [[ "$type" == *pair* ]] ; then\n+\t\tif [[ "$sample1" == *_BM* ]] || [[ "$sample1" == *_PB* ]] ; then\n+\t\t\tpairs_BM_PB+=( "$patient" )\n+\t\telif [[ "$sample1" == *_Left* ]] || [[ "$sample1" == *_Right* ]] ; then\n+\t\t\tpairs_Left_Right+=( "$patient" )\n+\t\telse\n+\t\t\tpairs_R_Dx+=( "$patient" )\n+\t\tfi\n+\telse\n+\t\tsingles+=( "$patient" )\n+\tfi\n+\toldLocus=""\n+\tsample1="$(echo ${sample1} | tr -d \'\\r\' | tr -d \'\\n\')"\n+\tsample2="$(echo ${sample2} | tr -d \'\\r\' | tr -d \'\\n\')"\n+\ttail -n+2 ${patient}_freq.txt | sed "s/>//" > tmp.txt\n+\techo "<div class=\'tabber\'>" >> "$html"\n+\techo "<div class=\'tabbertab\' title=\'Data frequency\'>" >> "$html"\n+\techo "<table><tr><td style=\'vertical-align:top;\'>" >> "$html"\n+\techo "<table border = 1 class=\'result_table summary_table\' id=\'summary_table_${patient}_freq\'>" >> "$html"\n+\techo "<thead><th>Ig/TCR gene rearrangement type</th><th>Proximal gene segment</th><th>Distal gene segment</th><th>Cut off value</th><th>Number of sequences ${patient}_Both</th><th>Number of sequences_$sample1</th><th>Read Count $sample1</th><th>Number of sequences_$sample2</th><th>Read Count $sample2</th><th>Sum number of sequences $patient</th><th>Percentage of sequences ${patient}_both</th></thead>" >> "$html"\n+\techo "<tbody>" >> "$html"\n+\tscatterplot_tab="<div class=\'tabbertab\' title=\'Scatter Plots Frequency\'><table border=\'0\'><tr>"\n+\twhile read locus j_segment v_segment cut_off_value both one read_count1 two read_count2 sum percent locusreadsum1 locusreadsum2\n+\tdo\n+\t\tif [ "$locus" != "$oldLocus" ] ; then\n+\t\t\techo "<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr>" >> "$html"\n+\t\t\techo "<tr><td><b>$locus</b></td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td></td>" >> "$html"\n+\t\tfi\n+\t\techo "<td>$v_segment</td>" >> "$html"\n+\t\techo "<td>$j_segment</td>" >> "$html"\n+\t\techo "<td>>$cut_off_value</td>" >> "$html" \n+\t\tif [ "$both" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample1}_${sample2}_${locus}_${cut_off_value}.txt\\", \\"$patient\\", \\"freq\\")\'>$both</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>$both</td>" >> "$html"\n+\t\tfi\n+\t\tif [ "$one" != "0" ] && [ "$cut_off_value" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample1}_${locus}_${cut_off_value}.txt\\", \\"$patient\\", \\"freq\\")\'>$one</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>$one</td>" >> "$html"\n+\t\tfi\n+\t\techo "<td>$read_count1</td>" >> "$html"\n+\t\tif [ "$two" != "0" ] && [ "$cut_off_value" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample2}_${locus}_${cut_off_value}.txt\\", \\"$patient\\", \\"freq\\")\'>$two</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>$two</td>" >> "$html"\n+\t\tfi\n+\t\techo "<t'..b'ble border=\'0\'><tr>"\n+\twhile read locus j_segment v_segment cut_off_value all one two three one_two one_three two_three \n+\tdo\n+\t\tif [ "$locus" != "$oldLocus" ] ; then\n+\t\t\techo "<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr>" >> "$html"\n+\t\t\techo "<tr><td><b>$locus</b></td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td></td>" >> "$html"\n+\t\tfi\n+\t\techo "<td>$v_segment</td>" >> "$html"\n+\t\techo "<td>$j_segment</td>" >> "$html"\n+\t\techo "<td>>$cut_off_value</td>" >> "$html" \n+\t\tif [ "$all" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample1}_${sample2}_${sample3}_${locus}_${cut_off_value}.txt\\", \\"$patient\\", \\"reads\\")\'>$all</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>$all</td>" >> "$html"\n+\t\tfi\n+\t\tif [ "$one" != "0" ] && [ "$cut_off_value" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample1}_${locus}_${cut_off_value}.txt\\", \\"$patient\\", \\"reads\\")\'>$one</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>$one</td>" >> "$html"\n+\t\tfi\n+\t\tif [ "$two" != "0" ] && [ "$cut_off_value" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample2}_${locus}_${cut_off_value}.txt\\", \\"$patient\\", \\"reads\\")\'>$two</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>$two</td>" >> "$html"\n+\t\tfi\n+\t\tif [ "$three" != "0" ] && [ "$cut_off_value" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample3}_${locus}_${cut_off_value}.txt\\", \\"$patient\\", \\"reads\\")\'>$three</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>$three</td>" >> "$html"\n+\t\tfi\n+\t\t\n+\t\tif [ "${one_two}" != "0" ] && [ "$cut_off_value" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample1}_${sample2}_${locus}_${cut_off_value}reads.txt\\", \\"$patient\\", \\"reads\\")\'>${one_two}</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>${one_two}</td>" >> "$html"\n+\t\tfi\n+\t\tif [ "${one_three}" != "0" ] && [ "$cut_off_value" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample1}_${sample3}_${locus}_${cut_off_value}reads.txt\\", \\"$patient\\", \\"reads\\")\'>${one_three}</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>${one_three}</td>" >> "$html"\n+\t\tfi\n+\t\tif [ "${two_three}" != "0" ] && [ "$cut_off_value" != "0" ] ; then\n+\t\t\techo "<td data-patient=\'${patient}\' style=\'cursor:pointer\' onclick=\'javascript:loadfile(\\"${sample2}_${sample3}_${locus}_${cut_off_value}reads.txt\\", \\"$patient\\", \\"reads\\")\'>${two_three}</td>" >> "$html"\n+\t\telse\n+\t\t\techo "<td>${two_three}</td>" >> "$html"\n+\t\tfi\n+\t\t\n+\t\techo "</tr>" >> "$html"\n+\t\toldLocus="$locus"\n+\t\tif [ "${cut_off_value}" == "0" ] ; then\n+\t\t\tscatterplot_tab="${scatterplot_tab}<td><img src=\'${sample1}_${sample2}_${sample3}_reads_${locus}_scatter.png\' /></td>"\n+\t\tfi\n+\tdone < tmp.txt\n+\techo "</tbody></table>" >> "$html"\n+\techo "</td><td style=\'vertical-align:top;\'><div id=\'result_div_${patient}_reads\'></div></td></tr></table>" >> "$html"\n+\techo "</div>" >> "$html"\n+\techo "<div class=\'tabbertab\' title=\'Graphs reads\'>" >> "$html"\n+\techo "<a href=\'${patient}_reads_total_all.png\'><img src=\'${patient}_reads_total_all.png\' width=\'1280\' height=\'720\' /></a><br />" >> "$html"\n+\techo "<a href=\'${patient}_reads_indiv_all.png\'><img src=\'${patient}_reads_indiv_all.png\' width=\'1280\' height=\'720\' /></a><br /></div>" >> "$html"\n+\techo "${scatterplot_tab}</tr></table></div>" >> "$html"\n+\techo "</div>" >> "$html"\n+\techo "</div>" >> "$html"\n+\techo "</html>" >> "$html"\n+done < triplets.txt\n+rm tmp.txt\n+\n+\n+html="index.html"\n+\n+echo "</table>" >> "$html"\n+echo "<a href=\'log.html\'>log</a><br />" >> "$html"\n+echo "<a href=\'single_matches.html\'>single_matches</a><br />" >> "$html"\n+echo "<a href=\'multiple_matches.html\'>multiple_matches</a><br />" >> "$html"\n+echo "</html>" >> "$html"\n+\n+cp "index.html" "$outputFile"\n+\n' |