Line 189: | Line 189: | ||
</div> | </div> | ||
</section> | </section> | ||
− | <script | + | <script> |
+ | var DNAspace=6;//| | | | | ||
+ | var DNAwid=12; | ||
+ | var DNAstep=2; | ||
+ | var arrowLen=4; | ||
+ | var arrowHeadLen=8; | ||
+ | var arrowAngle=Math.PI/8; | ||
+ | var DNAseperate=44; | ||
+ | var Font="0px Arial"; | ||
+ | var FontDescription="14px Arial"; | ||
+ | var fontSpace=2; | ||
+ | var Black=[0,0,0]; | ||
+ | var reacArrowLen=40; | ||
+ | var reacArrowHeadLen=6; | ||
+ | var longDNAlen=20; | ||
+ | var shortDNAlen=16; | ||
+ | function draw() { | ||
+ | var ctx = document.getElementById('canvas').getContext('2d'); | ||
+ | var weightedNum=document.getElementById("number").value; | ||
+ | // ctx.font = "18px Arial"; | ||
+ | // ctx.fillText("Da",20,65); | ||
+ | var longDNAlen=20; | ||
+ | var shortDNAlen=10; | ||
+ | ctx.lineWidth=1; | ||
+ | var seqDict=drawNeuron(ctx,weightedNum,50,50); | ||
+ | showSeq(seqDict,[10,10]); | ||
+ | //arrowReac(ctx,200,50,[500,500]); | ||
+ | } | ||
+ | function showSeq(seqDict,[X0,Y0]){ | ||
+ | var X=X0,Y=Y0; | ||
+ | var seqs = document.getElementById("sequence"); | ||
+ | for(var i=0;i<seqDict[0].length;i++){ | ||
+ | seqs.innerHTML=seqs.innerHTML+seqDict[0][i]+":<br>" | ||
+ | for(var j in seqDict[i+1]){ | ||
+ | seqs.innerHTML = seqs.innerHTML + change(seqDict[i+1][j]) +"<br>"; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | function clearCanvas(){ | ||
+ | var c=document.getElementById('canvas'); | ||
+ | var ctx=c.getContext('2d'); | ||
+ | ctx. | ||
+ | c=document.getElementById('seqCanvas'); | ||
+ | ctx=c.getContext('2d'); | ||
+ | ctx.clearRect(0,0,c.width,c.height); | ||
+ | } | ||
+ | function arrowReac(ctx,len,arrowReacLen,[x,y]){ | ||
+ | ctx.strokeStyle='rgb('+Black[0]+','+Black[0]+','+Black[0]+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.moveTo(x+len-arrowReacLen,y+arrowReacLen); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.moveTo(x+len-arrowReacLen,y-arrowReacLen); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | function revArrowReac(ctx,len,arrowReacLen,[x,y]){ | ||
+ | ctx.strokeStyle='rgb('+Black[0]+','+Black[0]+','+Black[0]+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.moveTo(x+len-arrowReacLen,y+arrowReacLen); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.moveTo(x+len-arrowReacLen,y-arrowReacLen); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.moveTo(x+arrowReacLen,y+arrowReacLen); | ||
+ | ctx.lineTo(x,y); | ||
+ | ctx.moveTo(x+arrowReacLen,y-arrowReacLen); | ||
+ | ctx.lineTo(x,y); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | function horizontalLine(ctx,name,len,[x,y],[R,G,B]){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.stroke(); | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function verticalLine(ctx,len,[x,y],[R,G,B]){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x,y+len); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | |||
+ | function horizontalDashedLine(ctx,name,len,[x,y],[R,G,B],step){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | for(var i=0;i<=len-1;i+=2*step){ | ||
+ | ctx.moveTo(x+i,y); | ||
+ | ctx.lineTo(x+i+step,y); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function up45RightLine(ctx,name,len,[x,y],[R,G,B]){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x+len,y-len); | ||
+ | ctx.stroke(); | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x+len/2,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function up45DashedRightLine(ctx,name,len,[x,y],[R,G,B],step){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | for(var i=0;i<=len-1;i+=2*step){ | ||
+ | ctx.moveTo(x+i,y-i); | ||
+ | ctx.lineTo(x+i+step,y-i-step); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x+len/2,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function up45LeftLine(ctx,name,len,[x,y],[R,G,B]){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x-len,y-len); | ||
+ | ctx.stroke(); | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x-len/2,y-len/2-fontSpace); | ||
+ | } | ||
+ | |||
+ | function up45DashedLeftLine(ctx,len,[x,y],[R,G,B],step){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | for(var i=0;i<=len-1;i+=2*step){ | ||
+ | ctx.moveTo(x-i,y-i); | ||
+ | ctx.lineTo(x-i-step,y-i-step); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function down45LeftLine(ctx,len,[x,y],[R,G,B]){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x-len,y+len); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | |||
+ | function down45DashedLeftLine(ctx,len,[x,y],[R,G,B],step){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | for(var i=0;i<=len-1;i+=2*step){ | ||
+ | ctx.moveTo(x-i,y+i); | ||
+ | ctx.lineTo(x-i-step,y+i+step); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function arrowHorizontalRight(ctx,name,len,[x,y],[R,G,B],arrowLen,arrowAngle){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | //right | ||
+ | ctx.moveTo(x+len-Math.floor(arrowLen*Math.cos(arrowAngle)), | ||
+ | y-Math.floor(arrowLen*Math.sin(arrowAngle))); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | //left | ||
+ | ctx.moveTo(x+len-Math.floor(arrowLen*Math.cos(arrowAngle)), | ||
+ | y+Math.floor(arrowLen*Math.sin(arrowAngle))); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.stroke(); | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x+len/2,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function arrowHorizontalLeft(ctx,name,len,[x,y],[R,G,B],arrowLen,arrowAngle){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | //right | ||
+ | ctx.moveTo(x+Math.floor(arrowLen*Math.cos(arrowAngle)), | ||
+ | y-Math.floor(arrowLen*Math.sin(arrowAngle))); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | //left | ||
+ | ctx.moveTo(x+Math.floor(arrowLen*Math.cos(arrowAngle)), | ||
+ | y+Math.floor(arrowLen*Math.sin(arrowAngle))); | ||
+ | |||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | |||
+ | ctx.stroke(); | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x+len/2,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function arrowDashedHorizontalRight(ctx,name,len,[x,y],[R,G,B],arrowLen,arrowAngle,step){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | for(var i=0;i<=len-1;i+=2*step){ | ||
+ | ctx.moveTo(x+i,y); | ||
+ | ctx.lineTo(x+i+step,y); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | //right | ||
+ | ctx.moveTo(x+len-Math.floor(arrowLen*Math.cos(arrowAngle)), | ||
+ | y-Math.floor(arrowLen*Math.sin(arrowAngle))); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | //left | ||
+ | ctx.moveTo(x+len-Math.floor(arrowLen*Math.cos(arrowAngle)), | ||
+ | y+Math.floor(arrowLen*Math.sin(arrowAngle))); | ||
+ | ctx.lineTo(x+len,y); | ||
+ | ctx.stroke(); | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x+len/2,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function arrowDashedHorizontalLeft(ctx,name,len,[x,y],[R,G,B],arrowLen,arrowAngle,step){ | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | //right | ||
+ | ctx.moveTo(x+Math.floor(arrowLen*Math.cos(arrowAngle)), | ||
+ | y-Math.floor(arrowLen*Math.sin(arrowAngle))); | ||
+ | ctx.lineTo(x,y); | ||
+ | //left | ||
+ | ctx.moveTo(x+Math.floor(arrowLen*Math.cos(arrowAngle)), | ||
+ | y+Math.floor(arrowLen*Math.sin(arrowAngle))); | ||
+ | ctx.lineTo(x,y); | ||
+ | ctx.moveTo(x,y); | ||
+ | for(var i=0;i<=len-1;i+=2*step){ | ||
+ | ctx.moveTo(x+i,y); | ||
+ | ctx.lineTo(x+i+step,y); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x+len/2,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function arrowUpRight45(ctx,lenInAxis,[x,y],[R,G,B],arrowLen,arrowAngle){//arrowAngle:theta,best:Math.PI/8 | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x+lenInAxis,y-lenInAxis); | ||
+ | //right | ||
+ | ctx.moveTo(x+lenInAxis-Math.floor(arrowLen*Math.cos(Math.PI/2-arrowAngle)), | ||
+ | y-lenInAxis+Math.floor(arrowLen*Math.sin(Math.PI/2-arrowAngle))); | ||
+ | ctx.lineTo(x+lenInAxis,y-lenInAxis); | ||
+ | //left | ||
+ | ctx.moveTo(x+lenInAxis-Math.floor(arrowLen*Math.sin(Math.PI/2-arrowAngle)), | ||
+ | y-lenInAxis+Math.floor(arrowLen*Math.cos(Math.PI/2-arrowAngle))); | ||
+ | ctx.lineTo(x+lenInAxis,y-lenInAxis); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | |||
+ | function arrowDashedUpRight45(ctx,name,lenInAxis,[x,y],[R,G,B],arrowLen,arrowAngle,stepInAxis){//arrowAngle:theta | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | for(var i=0;i<=lenInAxis-1;i+=2*stepInAxis){ | ||
+ | ctx.moveTo(x+i,y-i); | ||
+ | ctx.lineTo(x+i+stepInAxis,y-i-stepInAxis); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | //right half arrow head | ||
+ | ctx.moveTo(x+lenInAxis-Math.floor(arrowLen*Math.cos(Math.PI/2-arrowAngle)), | ||
+ | y-lenInAxis+Math.floor(arrowLen*Math.sin(Math.PI/2-arrowAngle))); | ||
+ | ctx.lineTo(x+lenInAxis,y-lenInAxis); | ||
+ | //left half arrow head | ||
+ | ctx.moveTo(x+lenInAxis-Math.floor(arrowLen*Math.sin(Math.PI/2-arrowAngle)), | ||
+ | y-lenInAxis+Math.floor(arrowLen*Math.cos(Math.PI/2-arrowAngle))); | ||
+ | ctx.lineTo(x+lenInAxis,y-lenInAxis); | ||
+ | ctx.stroke(); | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(name,x+lenInAxis/2,y-fontSpace); | ||
+ | } | ||
+ | |||
+ | function arrowDownLeft45(ctx,lenInAxis,[x,y],[R,G,B],arrowLen,arrowAngle){//arrowAngle:theta,best:Math.PI/8 | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(x,y); | ||
+ | ctx.lineTo(x-lenInAxis,y+lenInAxis); | ||
+ | //right | ||
+ | ctx.moveTo(x-lenInAxis+Math.floor(arrowLen*Math.cos(Math.PI/2-arrowAngle)), | ||
+ | y+lenInAxis-Math.floor(arrowLen*Math.sin(Math.PI/2-arrowAngle))); | ||
+ | ctx.lineTo(x-lenInAxis,y+lenInAxis); | ||
+ | //left | ||
+ | ctx.moveTo(x-lenInAxis+Math.floor(arrowLen*Math.sin(Math.PI/2-arrowAngle)), | ||
+ | y+lenInAxis-Math.floor(arrowLen*Math.cos(Math.PI/2-arrowAngle))); | ||
+ | ctx.lineTo(x-lenInAxis,y+lenInAxis); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | |||
+ | function arrowDashedDownLeft45(ctx,name,lenInAxis,[x,y],[R,G,B],arrowLen,arrowAngle,stepInAxis){//arrowAngle:theta | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.beginPath(); | ||
+ | for(var i=0;i<=lenInAxis-1;i+=2*stepInAxis){ | ||
+ | ctx.moveTo(x-i,y+i); | ||
+ | ctx.lineTo(x-i-stepInAxis,y+i+stepInAxis); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | //right | ||
+ | ctx.moveTo(x-lenInAxis+Math.floor(arrowLen*Math.cos(Math.PI/2-arrowAngle)), | ||
+ | y+lenInAxis-Math.floor(arrowLen*Math.sin(Math.PI/2-arrowAngle))); | ||
+ | ctx.lineTo(x-lenInAxis,y+lenInAxis); | ||
+ | //left | ||
+ | ctx.moveTo(x-lenInAxis+Math.floor(arrowLen*Math.sin(Math.PI/2-arrowAngle)), | ||
+ | y+lenInAxis-Math.floor(arrowLen*Math.cos(Math.PI/2-arrowAngle))); | ||
+ | ctx.lineTo(x-lenInAxis,y+lenInAxis); | ||
+ | ctx.stroke(); | ||
+ | ctx.fillText(name,x-lenInAxis/2,y+lenInAxis/2+fontSpace); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | function drawDoubleDNAnoArrow(ctx,DNAname,DNAlen,[R,G,B],[posX,posY]){ | ||
+ | horizontalLine(ctx,DNAname,DNAlen,[posX,posY],[R,G,B]); | ||
+ | for(var i=DNAspace/2;i<=DNAlen;i+=DNAspace){ | ||
+ | verticalLine(ctx,DNAwid,[posX+i,posY],[R,G,B]); | ||
+ | } | ||
+ | horizontalLine(ctx,' ',DNAlen,[posX,posY+DNAwid],[R,G,B]); | ||
+ | } | ||
+ | |||
+ | function drawDoubleDNAwithArrowHorizontalRight(ctx,DNAname,DNAlen,[R,G,B],[posX,posY]){ | ||
+ | arrowHorizontalRight(ctx,DNAname,DNAlen,[posX,posY],[R,G,B],arrowHeadLen,arrowAngle); | ||
+ | for(var i=DNAspace/2;i<=DNAlen;i+=DNAspace){ | ||
+ | verticalLine(ctx,DNAwid,[posX+i,posY],[R,G,B]); | ||
+ | } | ||
+ | horizontalLine(ctx,' ',DNAlen,[posX,posY+DNAwid],[R,G,B]); | ||
+ | } | ||
+ | |||
+ | function drawDoubleDNAwithArrowHorizontalLeft(ctx,DNAname,DNAlen,[R,G,B],[posX,posY]){ | ||
+ | horizontalLine(ctx,DNAname,DNAlen,[posX,posY+DNAwid],[R,G,B]); | ||
+ | for(var i=DNAspace/2;i<=DNAlen;i+=DNAspace){ | ||
+ | verticalLine(ctx,DNAwid,[posX+i,posY],[R,G,B]); | ||
+ | } | ||
+ | arrowHorizontalLeft(ctx,' ',DNAlen,[posX,posY-DNAwid],[R,G,B],arrowHeadLen,arrowAngle); | ||
+ | } | ||
+ | |||
+ | function drawDoubleDNAwithArrow45(ctx,DNAname,DNAlen,[R,G,B],[posX,posY]){ | ||
+ | horizontalLine(ctx,DNAlen,[posX,posY],[R,G,B]); | ||
+ | for(var i=DNAspace/2;i<=DNAlen;i+=DNAspace){ | ||
+ | verticalLine(ctx,DNAwid,[posX+i,posY],[R,G,B]); | ||
+ | } | ||
+ | horizontalLine(ctx,DNAlen,[posX,posY+DNAwid],[R,G,B]); | ||
+ | arrow45(ctx,arrowLen,[posX+DNAlen,posY],[R,G,B],arrowHeadLen,arrowAngle); | ||
+ | } | ||
+ | |||
+ | function drawDoubleDNADashednoArrow(ctx,DNAname,DNAlen,[R,G,B],[posX,posY]){ | ||
+ | horizontalDashedLine(ctx,DNAname,DNAlen,[posX,posY],[R,G,B],DNAstep); | ||
+ | for(var i=DNAspace/2;i<=DNAlen;i+=DNAspace){ | ||
+ | verticalLine(ctx,DNAwid,[posX+i,posY],[R,G,B]); | ||
+ | } | ||
+ | horizontalDashedLine(ctx,' ',DNAlen,[posX,posY+DNAwid],[R,G,B],DNAstep); | ||
+ | } | ||
+ | |||
+ | function drawDoubleDNADashedwithArrowHorizontalRight(ctx,DNAname,DNAlen,[R,G,B],[posX,posY]){ | ||
+ | arrowDashedHorizontalRight(ctx,DNAname,DNAlen,[posX,posY],[R,G,B],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | for(var i=DNAspace/2;i<=DNAlen;i+=DNAspace){ | ||
+ | verticalLine(ctx,DNAwid,[posX+i,posY],[R,G,B]); | ||
+ | } | ||
+ | horizontalDashedLine(ctx,' ',DNAlen,[posX,posY+DNAwid],[R,G,B],DNAstep); | ||
+ | } | ||
+ | |||
+ | function drawDoubleDNADashedwithArrowHorizontalLeft(ctx,DNAname,DNAlen,[R,G,B],[posX,posY]){ | ||
+ | horizontalDashedLine(ctx,DNAname,DNAlen,[posX,posY],[R,G,B],DNAstep); | ||
+ | for(var i=DNAspace/2;i<=DNAlen;i+=DNAspace){ | ||
+ | verticalLine(ctx,DNAwid,[posX+i,posY],[R,G,B]); | ||
+ | } | ||
+ | arrowDashedHorizontalLeft(ctx,' ',DNAlen,[posX,posY+DNAwid],[R,G,B],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | } | ||
+ | |||
+ | function drawDoubleDNADashedwithArrow45(ctx,DNAname,DNAlen,[R,G,B],[posX,posY]){ | ||
+ | horizontalDashedLine(ctx,DNAlen,[posX,posY],[R,G,B],DNAstep); | ||
+ | for(var i=DNAspace/2;i<=DNAlen;i+=DNAspace){ | ||
+ | verticalLine(ctx,DNAwid,[posX+i,posY],[R,G,B]); | ||
+ | } | ||
+ | horizontalDashedLine(ctx,DNAlen,[posX,posY+DNAwid],[R,G,B],DNAstep); | ||
+ | arrow45(ctx,arrowLen,[posX+DNAlen,posY],[R,G,B],arrowHeadLen,arrowAngle); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | //According to Fig. 11 | ||
+ | function drawMul(ctx,aName,bName,cName,aColor,bColor,cColor,[X0,Y0],longDNAlen,shortDNAlen){//c=a*b | ||
+ | //exponential factor | ||
+ | var Black=[0,0,0]; | ||
+ | var X=X0; | ||
+ | var Y=Y0; | ||
+ | var Da="D"+aName; | ||
+ | var al=aName+"l"; | ||
+ | var a=aName; | ||
+ | var ar=aName+"r"; | ||
+ | var Db="D"+bName; | ||
+ | var bl=bName+"l"; | ||
+ | var b=bName; | ||
+ | var br=bName+"r"; | ||
+ | var Dc="D"+cName; | ||
+ | var cl=cName+"l"; | ||
+ | var c=cName; | ||
+ | var cr=cName+"r"; | ||
+ | X=drawSig(ctx,aName,aColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Wi | ||
+ | arrowDashedDownLeft45(ctx,al+"*",shortDNAlen,[X,Y+DNAwid],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | //waste | ||
+ | X=X+reacArrowLen+DNAseperate*2; | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | //waste | ||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | horizontalLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,ar,shortDNAlen,[X,Y],aColor,arrowLen,arrowAngle,DNAstep); | ||
+ | //Multiplication | ||
+ | //Line 1 | ||
+ | X=X0; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | |||
+ | X=drawSig(ctx,aName,aColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Li | ||
+ | arrowDashedDownLeft45(ctx,al+"*",shortDNAlen,[X,Y+DNAwid],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | revArrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | //Hi | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalDashedLine(ctx,bl+"*",shortDNAlen,[X,Y+DNAwid],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | |||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | //Bi | ||
+ | X=X+DNAseperate; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | horizontalLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,ar,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,bl,shortDNAlen,[X,Y],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | //Line 2 | ||
+ | X=X0; | ||
+ | Y=Y0+8*DNAseperate; | ||
+ | X=drawSig(ctx,bName,bColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Hi | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalDashedLine(ctx,bl+"*",shortDNAlen,[X,Y+DNAwid],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0+8*DNAseperate; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | |||
+ | //waste | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45LeftLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,bl,shortDNAlen,bColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | |||
+ | //Oi | ||
+ | horizontalLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,br,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | //Line 3 | ||
+ | X=X0; | ||
+ | Y=Y0+12*DNAseperate; | ||
+ | //Oi | ||
+ | horizontalLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,br,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+DNAseperate; | ||
+ | //Ti | ||
+ | arrowDashedDownLeft45(ctx,br+"*",shortDNAlen,[X,Y+DNAwid],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Da,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,al,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | arrowDashedUpRight45(ctx,ar,shortDNAlen,[X+longDNAlen,Y-longDNAlen],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Db,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | arrowDashedUpRight45(ctx,br,shortDNAlen,[X+longDNAlen,Y-longDNAlen],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Dc,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,cl,shortDNAlen,cColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,c,longDNAlen,[X,Y],cColor); | ||
+ | arrowDashedUpRight45(ctx,cr,shortDNAlen,[X+longDNAlen,Y-longDNAlen],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | //waste | ||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | up45LeftLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,br,shortDNAlen,bColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Da,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,al,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Db,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Dc,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,cl,shortDNAlen,cColor,[X,Y]); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | X=drawSig(ctx,aName,aColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | X=drawSig(ctx,bName,bColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | X=drawSig(ctx,cName,cColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | |||
+ | return Y; | ||
+ | } | ||
+ | |||
+ | //ReLU weighted summation | ||
+ | function drawMulReLU(ctx,aName,bName,cName,dName,aColor,bColor,cColor,dColor,[X0,Y0],longDNAlen,shortDNAlen){//c=a*b | ||
+ | //exponential factor | ||
+ | var Black=[0,0,0]; | ||
+ | var X=X0; | ||
+ | var Y=Y0; | ||
+ | var Da="D"+aName; | ||
+ | var al=aName+"l"; | ||
+ | var a=aName; | ||
+ | var ar=aName+"r"; | ||
+ | var Db="D"+bName; | ||
+ | var bl=bName+"l"; | ||
+ | var b=bName; | ||
+ | var br=bName+"r"; | ||
+ | var Dc="D"+cName; | ||
+ | var cl=cName+"l"; | ||
+ | var c=cName; | ||
+ | var cr=dName+"r"; | ||
+ | var Dd="D"+dName; | ||
+ | var dl=dName+"l"; | ||
+ | var d=dName; | ||
+ | var dr=dName+"r"; | ||
+ | X=drawSig(ctx,aName,aColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Wi | ||
+ | arrowDashedDownLeft45(ctx,al+"*",shortDNAlen,[X,Y+DNAwid],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | //waste | ||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | //waste | ||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | horizontalLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,ar,shortDNAlen,[X,Y],aColor,arrowLen,arrowAngle,DNAstep); | ||
+ | //Multiplication | ||
+ | //Line 1 | ||
+ | X=X0; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | |||
+ | X=drawSig(ctx,aName,aColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Li | ||
+ | arrowDashedDownLeft45(ctx,al+"*",shortDNAlen,[X,Y+DNAwid],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,cl,shortDNAlen,[X,Y],cColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dd,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,dl,shortDNAlen,[X,Y],dColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | revArrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | //Hi | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalDashedLine(ctx,bl+"*",shortDNAlen,[X,Y+DNAwid],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,cl,shortDNAlen,[X,Y],cColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dd,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,dl,shortDNAlen,[X,Y],dColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | //Bi | ||
+ | X=X+DNAseperate; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | horizontalLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,ar,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,bl,shortDNAlen,[X,Y],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | //Line 2 | ||
+ | X=X0; | ||
+ | Y=Y0+8*DNAseperate; | ||
+ | X=drawSig(ctx,bName,bColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Hi | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalDashedLine(ctx,bl+"*",shortDNAlen,[X,Y+DNAwid],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | up45DashedRightLine(ctx,cl,shortDNAlen,[X,Y],cColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | Y=Y-shortDNAlen; | ||
+ | up45RightLine(ctx,Dd,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,dl,shortDNAlen,[X,Y],dColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0+8*DNAseperate; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | //waste | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45LeftLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,bl,shortDNAlen,bColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | |||
+ | //Oi | ||
+ | horizontalLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,br,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,cl,shortDNAlen,[X,Y],cColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Dd,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,dl,shortDNAlen,[X,Y],dColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | //Line 3 | ||
+ | X=X0; | ||
+ | Y=Y0+12*DNAseperate; | ||
+ | //Oi | ||
+ | horizontalLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,br,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,al,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,bl,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,cl,shortDNAlen,[X,Y],cColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Dd,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,dl,shortDNAlen,[X,Y],dColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | |||
+ | X=X+DNAseperate; | ||
+ | //Ti | ||
+ | arrowDashedDownLeft45(ctx,br+"*",shortDNAlen,[X,Y+DNAwid],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Da,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,al,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | arrowDashedUpRight45(ctx,ar,shortDNAlen,[X+longDNAlen,Y-longDNAlen],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Db,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | arrowDashedUpRight45(ctx,br,shortDNAlen,[X+longDNAlen,Y-longDNAlen],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Dc,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,cl,shortDNAlen,cColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,c,longDNAlen,[X,Y],cColor); | ||
+ | arrowDashedUpRight45(ctx,cr,shortDNAlen,[X+longDNAlen,Y-longDNAlen],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Dd,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,dl,shortDNAlen,dColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,d,longDNAlen,[X,Y],dColor); | ||
+ | arrowDashedUpRight45(ctx,dr,shortDNAlen,[X+longDNAlen,Y-longDNAlen],dColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0+12*DNAseperate; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | |||
+ | //waste | ||
+ | up45LeftLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,br,shortDNAlen,bColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Da,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,al,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Db,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Dc,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,cl,shortDNAlen,cColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Dd,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,dl,shortDNAlen,dColor,[X,Y]); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | X=drawSig(ctx,aName,aColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | X=drawSig(ctx,bName,bColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | X=drawSig(ctx,cName,cColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | X=drawSig(ctx,dName,dColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | |||
+ | return Y; | ||
+ | } | ||
+ | //according to Fig. 9 | ||
+ | function drawAdd(ctx,aName,bName,aColor,bColor,[X0,Y0],longDNAlen,shortDNAlen){//a->b | ||
+ | var Black=[0,0,0]; | ||
+ | X=X0; | ||
+ | Y=Y0; | ||
+ | var Da="D"+aName; | ||
+ | var al=aName+"l"; | ||
+ | var a=aName; | ||
+ | var ar=aName+"r"; | ||
+ | var Db="D"+bName; | ||
+ | var bl=bName+"l"; | ||
+ | var b=bName; | ||
+ | var br=bName+"r"; | ||
+ | //Line 1 | ||
+ | X=drawSig(ctx,aName,aColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Gi | ||
+ | arrowDashedDownLeft45(ctx,al+"*",shortDNAlen,[X,Y+DNAwid],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,bl,shortDNAlen,[X,Y],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | |||
+ | |||
+ | //Oi | ||
+ | Y=Y0; | ||
+ | horizontalLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,ar,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,bl,shortDNAlen,[X,Y],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | //waste | ||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | |||
+ | //Line 2 | ||
+ | X=X0; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | //Oi | ||
+ | horizontalLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,ar,shortDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,bl,shortDNAlen,[X,Y],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+DNAseperate; | ||
+ | //Ti | ||
+ | arrowDashedDownLeft45(ctx,al+"*",shortDNAlen,[X,Y+DNAwid],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Db,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | arrowDashedUpRight45(ctx,br,shortDNAlen,[X+longDNAlen,Y-longDNAlen],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | |||
+ | //waste | ||
+ | up45LeftLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,ar,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Db,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | X=drawSig(ctx,bName,bColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | return Y; | ||
+ | |||
+ | } | ||
+ | |||
+ | function drawSub(ctx,aName,bName,cName,aColor,bColor,cColor,[X0,Y0],longDNAlen,shortDNAlen){//a+b->c | ||
+ | var Black=[0,0,0]; | ||
+ | X=X0; | ||
+ | Y=Y0; | ||
+ | var Da="D"+aName; | ||
+ | var al=aName+"l"; | ||
+ | var a=aName; | ||
+ | var ar=aName+"r"; | ||
+ | var Db="D"+bName; | ||
+ | var bl=bName+"l"; | ||
+ | var b=bName; | ||
+ | var br=bName+"r"; | ||
+ | var Dc="D"+cName; | ||
+ | var cl=cName+"l"; | ||
+ | var c=cName; | ||
+ | var cr=cName+"r"; | ||
+ | //Line 1 | ||
+ | X=drawSig(ctx,aName,aColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Li | ||
+ | arrowDashedDownLeft45(ctx,al+"*",shortDNAlen,[X,Y+DNAwid],aColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,bl,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0; | ||
+ | revArrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | //Hi | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalDashedLine(ctx,bl+"*",shortDNAlen,[X,Y+DNAwid],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+DNAseperate; | ||
+ | Y=Y0; | ||
+ | //Bi | ||
+ | horizontalLine(ctx,a,longDNAlen,[X,Y],aColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,ar,longDNAlen,[X,Y],aColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,bl,shortDNAlen,[X,Y],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X0; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | //Line 2 | ||
+ | X=drawSig(ctx,bName,bColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | //Hi | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalDashedLine(ctx,bl+"*",shortDNAlen,[X,Y+DNAwid],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | Y=Y-longDNAlen; | ||
+ | arrowDashedUpRight45(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0+4*DNAseperate; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | //waste | ||
+ | up45LeftLine(ctx,Da,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,al,shortDNAlen,aColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,a,longDNAlen,aColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,ar,shortDNAlen,aColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45LeftLine(ctx,Db,longDNAlen,[X,Y],Black); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,bl,shortDNAlen,bColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,b,longDNAlen,bColor,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,br,shortDNAlen,bColor,[X,Y]); | ||
+ | |||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | //Oi | ||
+ | horizontalLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,br,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | |||
+ | X=X0; | ||
+ | Y=Y0+8*DNAseperate; | ||
+ | //Line 3 | ||
+ | //Oi | ||
+ | horizontalLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,br,shortDNAlen,[X,Y],bColor,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,Dc,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,cl,shortDNAlen,[X,Y],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | //Ti | ||
+ | arrowDashedDownLeft45(ctx,br+"*",shortDNAlen,[X,Y+DNAwid],bColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | drawDoubleDNAnoArrow(ctx,Dc,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashednoArrow(ctx,cl,shortDNAlen,cColor,[X,Y]); | ||
+ | X=X+shortDNAlen; | ||
+ | up45RightLine(ctx,c,longDNAlen,[X,Y],cColor); | ||
+ | arrowDashedUpRight45(ctx,cr,shortDNAlen,[X+longDNAlen,Y-longDNAlen],cColor,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen+DNAseperate*2; | ||
+ | Y=Y0+8*DNAseperate; | ||
+ | arrowReac(ctx,reacArrowLen,reacArrowHeadLen,[X,Y]); | ||
+ | |||
+ | X=X+reacArrowLen+2*DNAseperate; | ||
+ | //waste | ||
+ | up45LeftLine(ctx,b,longDNAlen,[X,Y],bColor); | ||
+ | drawDoubleDNADashedwithArrowHorizontalLeft(ctx,br,shortDNAlen,bColor,[X,Y],arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | drawDoubleDNAnoArrow(ctx,Dc,longDNAlen,Black,[X,Y]); | ||
+ | X=X+longDNAlen; | ||
+ | drawDoubleDNADashedwithArrowHorizontalRight(ctx,cl,shortDNAlen,cColor,[X,Y]); | ||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | X=drawSig(ctx,cName,cColor,[X,Y],longDNAlen,shortDNAlen); | ||
+ | return Y; | ||
+ | } | ||
+ | |||
+ | function drawSig(ctx,name,color,[X,Y],longDNAlen,shortDNAlen){ | ||
+ | var Black=[0,0,0]; | ||
+ | ctx.font = Font; | ||
+ | horizontalLine(ctx,"D"+name,longDNAlen,[X,Y],Black); | ||
+ | X=X+longDNAlen; | ||
+ | horizontalDashedLine(ctx,name+"l",shortDNAlen,[X,Y],color,DNAstep); | ||
+ | X=X+shortDNAlen; | ||
+ | horizontalLine(ctx,name,longDNAlen,[X,Y],color); | ||
+ | X=X+longDNAlen; | ||
+ | arrowDashedHorizontalRight(ctx,name+"r",shortDNAlen,[X,Y],color,arrowHeadLen,arrowAngle,DNAstep); | ||
+ | X=X+shortDNAlen+DNAseperate; | ||
+ | return X; | ||
+ | } | ||
+ | |||
+ | function displayStr(ctx,str,[X,Y],[R,G,B]) { | ||
+ | ctx.font = FontDescription; | ||
+ | ctx.strokeStyle='rgb('+R+','+G+','+B+')'; | ||
+ | ctx.fillText(str,X,Y); | ||
+ | return Y+20; | ||
+ | } | ||
+ | function drawNeuron(ctx,weightNum,X0,Y0){ | ||
+ | //name | ||
+ | var d="d"; | ||
+ | var xp="x+",xn="x-"; | ||
+ | var y="y",yn="y-"; | ||
+ | var waste="_w_"; | ||
+ | var wi0p=[],wi0n=[]; | ||
+ | var wip=[],win=[]; | ||
+ | var inputp=[],inputn=[]; | ||
+ | var inputpBkp=[],inputnBkp=[]; | ||
+ | //color | ||
+ | var dColor=[Math.random()*255,Math.random()*255,Math.random()*255]; | ||
+ | var xpColor=[Math.random()*255,Math.random()*255,Math.random()*255]; | ||
+ | var xnColor=[255-xpColor[0],255-xpColor[1],255-xpColor[2]]; | ||
+ | var yColor=[Math.random()*255,Math.random()*255,Math.random()*255]; | ||
+ | var ynColor=[255-yColor[0],255-yColor[1],255-yColor[2]]; | ||
+ | var wasteColor=[0,0,0]; | ||
+ | var inputpColor=[],inputnColor=[]; | ||
+ | var inputpBkpColor=[],inputnBkpColor=[]; | ||
+ | var wi0pColor=[],wi0nColor=[]; | ||
+ | var wipColor=[],winColor=[]; | ||
+ | var seqDict=[[]]; | ||
+ | for(var i=1;i<=weightNum;i=i+1){ | ||
+ | wi0p.push("w"+i+"0+"); | ||
+ | wi0n.push("w"+i+"0-"); | ||
+ | wip.push("w"+i+"+"); | ||
+ | win.push("w"+i+"-"); | ||
+ | wi0pColor.push([Math.random()*255,Math.random()*255,Math.random()*255]); | ||
+ | wi0nColor.push([255-wi0pColor[i-1][0],255-wi0pColor[i-1][1],255-wi0pColor[i-1][2]]); | ||
+ | wipColor.push([Math.random()*255,Math.random()*255,Math.random()*255]); | ||
+ | winColor.push([255-wipColor[i-1][0],255-wipColor[i-1][1],255-wipColor[i-1][2]]); | ||
+ | |||
+ | inputp.push("i"+i+"+"); | ||
+ | inputn.push("i"+i+"-"); | ||
+ | inputpColor.push([Math.random()*255,Math.random()*255,Math.random()*255]); | ||
+ | inputnColor.push([255-inputpColor[i-1][0],255-inputpColor[i-1][1],255-inputpColor[i-1][2]]); | ||
+ | |||
+ | inputpBkp.push("ib"+i+"+"); | ||
+ | inputnBkp.push("ib"+i+"-"); | ||
+ | inputpBkpColor.push([Math.random()*255,Math.random()*255,Math.random()*255]); | ||
+ | inputnBkpColor.push([255-inputpBkpColor[i-1][0],255-inputpBkpColor[i-1][1],255-inputpBkpColor[i-1][2]]); | ||
+ | } | ||
+ | X=X0; | ||
+ | Y=Y0; | ||
+ | //Y=displayStr(ctx,"Weighted sum:",[X,Y],Black); | ||
+ | X=X0; | ||
+ | //weighted sum | ||
+ | for(var i=1;i<=weightNum;i=i+1){ | ||
+ | Y=drawMulReLU(ctx,inputpBkp[i-1],wip[i-1],xp,y,inputpBkpColor[i-1],wipColor[i-1],xpColor,yColor,[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | Y=drawMulReLU(ctx,inputnBkp[i-1],wip[i-1],xn,yn,inputnBkpColor[i-1],wipColor[i-1],xnColor,ynColor,[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | Y=drawMulReLU(ctx,inputpBkp[i-1],win[i-1],xn,yn,inputpBkpColor[i-1],winColor[i-1],xnColor,ynColor,[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | Y=drawMulReLU(ctx,inputnBkp[i-1],win[i-1],xp,y,inputnBkpColor[i-1],winColor[i-1],xpColor,yColor,[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | } | ||
+ | for(var i=1;i<=weightNum;i=i+1){ | ||
+ | seqDict=multiplicationReLU(seqDict,inputpBkp[i-1],wip[i-1],xp,y); | ||
+ | seqDict=multiplicationReLU(seqDict,inputnBkp[i-1],wip[i-1],xn,yn); | ||
+ | seqDict=multiplicationReLU(seqDict,inputpBkp[i-1],win[i-1],xn,yn); | ||
+ | seqDict=multiplicationReLU(seqDict,inputnBkp[i-1],win[i-1],xp,y); | ||
+ | } | ||
+ | //x^+ + x^- -> \phi | ||
+ | //Y=displayStr(ctx,"x+ + x- -> waste",[X,Y],Black); | ||
+ | X=X0; | ||
+ | Y=drawSub(ctx,xp,xn,waste,xpColor,xnColor,wasteColor,[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | seqDict=subtraction(seqDict,xp,xn,waste); | ||
+ | X=X0; | ||
+ | //y + y^- -> \phi | ||
+ | //Y=displayStr(ctx,"y + y- -> waste",[X,Y],Black); | ||
+ | X=X0; | ||
+ | Y=drawSub(ctx,y,yn,waste,yColor,ynColor,wasteColor,[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | seqDict=subtraction(seqDict,y,yn,waste); | ||
+ | X=X0; | ||
+ | |||
+ | //backpropagation | ||
+ | for(var i=1;i<=weightNum;i=i+1){ | ||
+ | Y=drawMul(ctx,xp,inputp[i-1],wi0n[i-1],xpColor,inputpColor[i-1],wi0nColor[i-1],[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | Y=drawMul(ctx,xp,inputn[i-1],wi0n[i-1],xpColor,inputnColor[i-1],wi0pColor[i-1],[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | } | ||
+ | for(var i=1;i<=weightNum;i=i+1){ | ||
+ | seqDict=multiplication(seqDict,xp,inputp[i-1],wi0n[i-1]); | ||
+ | seqDict=multiplication(seqDict,xp,inputn[i-1],wi0n[i-1]); | ||
+ | } | ||
+ | |||
+ | //wi0p->wip, wi0n->win, wip + win -> \phi | ||
+ | for(var i=1;i<=weightNum;i=i+1){ | ||
+ | Y=drawAdd(ctx,wi0p[i-1],wip[i-1],wi0pColor[i-1],wipColor[i-1],[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | Y=drawAdd(ctx,wi0n[i-1],win[i-1],wi0nColor[i-1],winColor[i-1],[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | Y=drawSub(ctx,wip[i-1],win[i-1],waste,wipColor[i-1],winColor[i-1],wasteColor,[X,Y],longDNAlen,shortDNAlen)+4*DNAseperate; | ||
+ | X=X0; | ||
+ | } | ||
+ | for(var i=1;i<=weightNum;i=i+1){ | ||
+ | seqDict=add(seqDict,wi0p[i-1],wip[i-1],waste); | ||
+ | seqDict=add(seqDict,wi0n[i-1],win[i-1],waste); | ||
+ | seqDict=add(seqDict,wip[i-1],win[i-1],waste); | ||
+ | } | ||
+ | return seqDict; | ||
+ | } | ||
+ | ///////////////////////////////sequence design////////////////////////////////////////////////////// | ||
+ | function zeros(num){ | ||
+ | var z=[]; | ||
+ | for (var i = 0; i < num; i++) { | ||
+ | z.push(0); | ||
+ | } | ||
+ | return z; | ||
+ | } | ||
+ | |||
+ | function change(a){ | ||
+ | var chain=''; | ||
+ | for(var i=0;i<a.length;i++){ | ||
+ | if(a[i]==0) | ||
+ | chain+=''; | ||
+ | if(a[i]==1) | ||
+ | chain+='A'; | ||
+ | if(a[i]==2) | ||
+ | chain+='T'; | ||
+ | if(a[i]==3) | ||
+ | chain+='C'; | ||
+ | if(a[i]==4) | ||
+ | chain+='G'; | ||
+ | } | ||
+ | return chain; | ||
+ | } | ||
+ | |||
+ | function check(a,b){ | ||
+ | var i; | ||
+ | var Original1=[]; | ||
+ | n=a.length; | ||
+ | if(b==1){ | ||
+ | for(i=3;i<n-3;i++){ | ||
+ | if(a[i]==1 && a[i-1]==1 && a[i-2]==1 && a[i-3]==1) | ||
+ | a[i]=randsrc([2,3],[0.5,0.5]); | ||
+ | if(a[i]==2 && a[i-1]==2 && a[i-2]==2 && a[i-3]==2) | ||
+ | a[i]=randsrc([1,3],[0.5,0.5]); | ||
+ | if(a[i]==3 && a[i-1]==3 && a[i-2]==3) | ||
+ | a[i]=randsrc([1,2],[0.5,0.5]); | ||
+ | } | ||
+ | if(a[n-5]==1 && a[n-4]==1 && a[n-3]==1) | ||
+ | a[n-4]=randsrc([2,3],[0.5,0.5]); | ||
+ | } | ||
+ | if(b==2){ | ||
+ | for(i=2;i<n-1;i++){ | ||
+ | if(i==2){ | ||
+ | if(a[i]==3 && a[i-1]==3 && a[i-2]==3) | ||
+ | a[i]=randsrc([1,2],[0.5,0.5]); | ||
+ | } | ||
+ | if (i>2){ | ||
+ | if(a[i]==1 && a[i-1]==1 && a[i-2]==1 && a[i-3]==1) | ||
+ | a[i]=randsrc([2,3],[0.5,0.5]); | ||
+ | if(a[i]==2 && a[i-1]==2 && a[i-2]==2 && a[i-3]==2) | ||
+ | a[i]=randsrc([1,3],[0.5,0.5]); | ||
+ | if(a[i]==3 && a[i-1]==3 && a[i-2]==3) | ||
+ | a[i]=randsrc([1,2],[0.5,0.5]); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | for(i=0;i<n;i++) | ||
+ | Original1.push(a[i]); | ||
+ | return Original1; | ||
+ | } | ||
+ | |||
+ | |||
+ | function creatComplementary(Original0){ | ||
+ | var Complementary0=[]; | ||
+ | for(var i=0;i<Original0.length;i++){ | ||
+ | if(Original0[i]==1) | ||
+ | Complementary0.push(2); | ||
+ | if(Original0[i]==2) | ||
+ | Complementary0.push(1); | ||
+ | if(Original0[i]==3) | ||
+ | Complementary0.push(4); | ||
+ | } | ||
+ | return Complementary0; | ||
+ | } | ||
+ | |||
+ | |||
+ | function randsrc(entry,prob){ | ||
+ | var r=Math.random(); | ||
+ | var totalP=prob[0]; | ||
+ | var i; | ||
+ | for(i=1;i<entry.length;i++){ | ||
+ | if(r<totalP) | ||
+ | return entry[i-1]; | ||
+ | totalP+=prob[i]; | ||
+ | } | ||
+ | return entry[i]; | ||
+ | } | ||
+ | |||
+ | function creatlongchain(a){ | ||
+ | var longchain0=[],longchain0_=[]; | ||
+ | var i; | ||
+ | for(i=0;i<a;i++) | ||
+ | longchain0.push(randsrc([1,2,3],[0.15,0.15,0.7])); | ||
+ | longchain0[0]=1; | ||
+ | longchain0[1]=3; | ||
+ | longchain0[a-2]=1; | ||
+ | longchain0[a-1]=3; | ||
+ | longchain0=check(longchain0,1); | ||
+ | longchain0_=creatComplementary(longchain0); | ||
+ | return [longchain0,longchain0_]; | ||
+ | } | ||
+ | |||
+ | function creatshortchain(){ | ||
+ | var core=[],t=randsrc([0,1,2],[1/3,1/3,1/3]),clamp=[1,3]; | ||
+ | var shortchain_l=[0,0,0,0,0],shortchain_l_=[0,0,0,0,0],shortchain_r=[0,0,0,0,0],shortchain_r_=[0,0,0,0,0]; | ||
+ | var i; | ||
+ | for(i=0;i<3;i++) | ||
+ | core.push(randsrc([1,2],[0.5,0.5])); | ||
+ | core[t]=3; | ||
+ | shortchain_l[0]=clamp[0]; | ||
+ | shortchain_l[1]=clamp[1]; | ||
+ | shortchain_l[2]=core[0]; | ||
+ | shortchain_l[3]=core[1]; | ||
+ | shortchain_l[4]=core[2]; | ||
+ | |||
+ | shortchain_r[0]=core[0]; | ||
+ | shortchain_r[1]=core[1]; | ||
+ | shortchain_r[2]=core[2]; | ||
+ | shortchain_r[3]=clamp[0]; | ||
+ | shortchain_r[4]=clamp[1]; | ||
+ | |||
+ | shortchain_l_=creatComplementary(shortchain_l); | ||
+ | shortchain_r_=creatComplementary(shortchain_r); | ||
+ | return [shortchain_l,shortchain_l_,shortchain_r,shortchain_r_]; | ||
+ | } | ||
+ | |||
+ | function add(dict,aName,bName,cName){//dict:[[<species name>s],[Da,al,a,ar,Da*,al*,a*,ar*],[...],...] | ||
+ | var Da,Da_,Db,Db_,Dc,Dc_,a,a_,b,b_,c,c_;//long chain | ||
+ | var al,al_,ar,ar_,bl,bl_,br,br_,cl,cl_,cr,cr_;//short chain | ||
+ | [Da,Da_]=creatlongchain(15); | ||
+ | [Db,Db_]=creatlongchain(15); | ||
+ | [Dc,Dc_]=creatlongchain(15); | ||
+ | [a,a_]=creatlongchain(15); | ||
+ | [b,b_]=creatlongchain(15); | ||
+ | [c,c_]=creatlongchain(15); | ||
+ | [al,al_,ar,ar_]=creatshortchain(); | ||
+ | [bl,bl_,br,br_]=creatshortchain(); | ||
+ | [cl,cl_,cr,cr_]=creatshortchain(); | ||
+ | if(!(aName in dict[0])){ | ||
+ | dict[0].push(aName); | ||
+ | dict.push([Da,al,a,ar,Da_,al_,a_,ar_]); | ||
+ | } | ||
+ | if(!(bName in dict[0])){ | ||
+ | dict[0].push(bName); | ||
+ | dict.push([Db,bl,b,br,Db_,bl_,b_,br_]); | ||
+ | } | ||
+ | if(!(cName in dict[0])){ | ||
+ | dict[0].push(cName); | ||
+ | dict.push([Dc,cl,c,cr,Dc_,cl_,c_,cr_]); | ||
+ | } | ||
+ | |||
+ | /////////////////////////////////////////////////////// | ||
+ | var ai=[Da,0,al,0,a,0,ar]; | ||
+ | var Gi_up=zeros(al.length).concat([0,a,0,ar,0,Db,0,bl,0,Dc,0,cl]); | ||
+ | var Gi_down=[al_,0,a_,0,ar_,0].concat(zeros(Db.length+bl.length+Dc.length+cl.length),[0,0,0]); | ||
+ | var Oi=[a,0,ar,0,Db,0,bl,0,Dc,0,cl]; | ||
+ | var waste1_up=[Da,0,al,0,a,0,ar]; | ||
+ | var waste1_down=zeros(Da.length).concat[0,al_,0,a_,0,ar_]; | ||
+ | var waste2_up=[a,0,ar,0,Db,0,bl,0,Dc,0,cl]; | ||
+ | var waste2_down=zeros(a.length).concat[0,al_,0,Db_,0,bl_,0,Dc_,0,cl_]; | ||
+ | var bi=[Db,0,bl,0,b,0,br]; | ||
+ | var ci=[Dc,0,cl,0,c,0,cr]; | ||
+ | var Ti1=[Db,0,bl,0,b,0,br]; | ||
+ | var Ti2=[Dc,0,cl,0,c,0,cr]; | ||
+ | var Ti3=[al_,0,Db_,0,bl_,0,Dc_,0,cl_]; | ||
+ | return dict; | ||
+ | } | ||
+ | |||
+ | function multiplication(dict,aName,bName,cName){ | ||
+ | var Da,Da_,Db,Db_,Dc,Dc_,a,a_,b,b_,c,c_;//long chain | ||
+ | var al,al_,ar,ar_,bl,bl_,br,br_,cl,cl_,cr,cr_;//short chain | ||
+ | [Da,Da_]=creatlongchain(15); | ||
+ | [Db,Db_]=creatlongchain(15); | ||
+ | [Dc,Dc_]=creatlongchain(15); | ||
+ | [a,a_]=creatlongchain(15); | ||
+ | [b,b_]=creatlongchain(15); | ||
+ | [c,c_]=creatlongchain(15); | ||
+ | [al,al_,ar,ar_]=creatshortchain(); | ||
+ | [bl,bl_,br,br_]=creatshortchain(); | ||
+ | [cl,cl_,cr,cr_]=creatshortchain(); | ||
+ | if(!(aName in dict[0])){ | ||
+ | dict[0].push(aName); | ||
+ | dict.push([Da,al,a,ar,Da_,al_,a_,ar_]); | ||
+ | } | ||
+ | if(!(bName in dict[0])){ | ||
+ | dict[0].push(bName); | ||
+ | dict.push([Db,bl,b,br,Db_,bl_,b_,br_]); | ||
+ | } | ||
+ | if(!(cName in dict[0])){ | ||
+ | dict[0].push(cName); | ||
+ | dict.push([Dc,cl,c,cr,Dc_,cl_,c_,cr_]); | ||
+ | } | ||
+ | ///////////////////////////////////////////////////////// | ||
+ | var ai=[Da,0,al,0,a,0,ar]; | ||
+ | var Li_up=zeros(al.length).concat([0,a,0,ar,0,bl,0,b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl]); | ||
+ | var Li_down=[al_,0,a_,0,ar_,0,bl_,0,b_,0,br_].concat(zeros(Da.length+al.length+Db.length+bl.length+Dc.length+cl.length),[0,0,0,0,0,0]); | ||
+ | var Hi_up=[Da,0,al,0,a,0,ar,0].concat([zeros(bl_.length)],[0,b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl]); | ||
+ | var Hi_down=zeros(Da.length).concat([0,al_,0,a_,0,ar_,0,bl_,0,b_,0,br_],zeros(Da.length+al.length+Db.length+bl.length+Dc.length+cl.length),[0,0,0,0,0,0]); | ||
+ | |||
+ | var Bi=[a,0,ar,0,bl]; | ||
+ | var bi=[Db,0,bl,0,b,0,br]; | ||
+ | var waste11=[Da,0,al,0,a,0,ar]; | ||
+ | var waste12=[Db,0,bl,0,b,0,br]; | ||
+ | var waste13=[al_,0,a_,0,ar_,0,bl_,0,b_,0,br_]; | ||
+ | var Oi=[b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl]; | ||
+ | var Ti1=[Da,0,al,0,a,0,ar]; | ||
+ | var Ti2=[Db,0,bl,0,b,0,br]; | ||
+ | var Ti3=[Dc,0,cl,0,b,0,br]; | ||
+ | var Ti4=[br_,0,Da_,0,al_,0,Db_,0,bl_,0,Dc_,0,cl_]; | ||
+ | var waste2_up=[b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl]; | ||
+ | var waste2_down=zeros(b.length).concat([0,br_,0,Da_,0,al_,0,Db_,0,bl_,0,Dc_,0,cl_]); | ||
+ | var ci=[Dc,0,cl,0,c,0,cr]; | ||
+ | return dict; | ||
+ | } | ||
+ | |||
+ | function subtraction(dict,aName,bName,cName){ | ||
+ | var Da,Da_,Db,Db_,Dc,Dc_,a,a_,b,b_,c,c_;//long chain | ||
+ | var al,al_,ar,ar_,bl,bl_,br,br_,cl,cl_,cr,cr_;//short chain | ||
+ | [Da,Da_]=creatlongchain(15); | ||
+ | [Db,Db_]=creatlongchain(15); | ||
+ | [Dc,Dc_]=creatlongchain(15); | ||
+ | [a,a_]=creatlongchain(15); | ||
+ | [b,b_]=creatlongchain(15); | ||
+ | [c,c_]=creatlongchain(15); | ||
+ | [al,al_,ar,ar_]=creatshortchain(); | ||
+ | [bl,bl_,br,br_]=creatshortchain(); | ||
+ | [cl,cl_,cr,cr_]=creatshortchain(); | ||
+ | if(!(aName in dict[0])){ | ||
+ | dict[0].push(aName); | ||
+ | dict.push([Da,al,a,ar,Da_,al_,a_,ar_]); | ||
+ | } | ||
+ | if(!(bName in dict[0])){ | ||
+ | dict[0].push(bName); | ||
+ | dict.push([Db,bl,b,br,Db_,bl_,b_,br_]); | ||
+ | } | ||
+ | if(!(cName in dict[0])){ | ||
+ | dict[0].push(cName); | ||
+ | dict.push([Dc,cl,c,cr,Dc_,cl_,c_,cr_]); | ||
+ | } | ||
+ | ///////////////////////////////////////////////////////// | ||
+ | var ai=[Da,0,al,0,a,0,ar]; | ||
+ | var Li_up=zeros(al_.length).concat([0,a,0,ar,0,bl,0,b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl]); | ||
+ | var Li_down=[al_,0,a_,0,ar_,0,bl_,0,b_,0,br_].concat(zeros(Dc.length+cl.length),[0,0]); | ||
+ | var Hi_up=[Da,0,al,0,a,0,ar,0].concat([zeros(bl_.length)],[0,b,0,br,0,Dc,0,cl]); | ||
+ | var Hi_down=zeros(Da.length).concat([0,al_,0,a_,0,ar_,0,bl_,0,b_,0,br_,0],zeros(Dc.length+cl.length),[0]); | ||
+ | var Bi=[a,0,ar,0,bl]; | ||
+ | var bi=[Db,0,bl,0,b,0,br]; | ||
+ | var waste11=[Da,0,al,0,a,0,ar]; | ||
+ | var waste12=[Db,0,bl,0,b,0,br]; | ||
+ | var waste13=[al_,0,a_,0,ar_,0,bl_,0,b_,0,br_]; | ||
+ | var Oi=[b,0,br,0,Dc,0,cl]; | ||
+ | var Ti_up=zeros(br_.length).concat([0,Dc,0,cl,0,c,0,cr]); | ||
+ | var Ti_down=[br_,0,Dc_,0,cl_,0].concat(zeros(c.length+cr.length),[0]); | ||
+ | var waste2_up=[b,0,br,0,Dc,0,cl]; | ||
+ | var waste2_down=zeros(b.length).concat([0,br_,0,Dc_,0,cl_]); | ||
+ | var ci=[Dc,0,cl,0,c,0,cr]; | ||
+ | return dict; | ||
+ | } | ||
+ | |||
+ | function multiplicationReLU(dict,aName,bName,cName,dName){ | ||
+ | var Da,Da_,Db,Db_,Dc,Dc_,Dd,Dd_,a,a_,b,b_,c,c_,d,d_;//long chain | ||
+ | var al,al_,ar,ar_,bl,bl_,br,br_,cl,cl_,cr,cr_,dl,dl_,dr,dr_;//short chain | ||
+ | [Da,Da_]=creatlongchain(15); | ||
+ | [Db,Db_]=creatlongchain(15); | ||
+ | [Dc,Dc_]=creatlongchain(15); | ||
+ | [Dd,Dd_]=creatlongchain(15); | ||
+ | [a,a_]=creatlongchain(15); | ||
+ | [b,b_]=creatlongchain(15); | ||
+ | [c,c_]=creatlongchain(15); | ||
+ | [d,d_]=creatlongchain(15); | ||
+ | [al,al_,ar,ar_]=creatshortchain(); | ||
+ | [bl,bl_,br,br_]=creatshortchain(); | ||
+ | [cl,cl_,cr,cr_]=creatshortchain(); | ||
+ | [dl,dl_,dr,dr_]=creatshortchain(); | ||
+ | if(!(aName in dict[0])){ | ||
+ | dict[0].push(aName); | ||
+ | dict.push([Da,al,a,ar,Da_,al_,a_,ar_]); | ||
+ | } | ||
+ | if(!(bName in dict[0])){ | ||
+ | dict[0].push(bName); | ||
+ | dict.push([Db,bl,b,br,Db_,bl_,b_,br_]); | ||
+ | } | ||
+ | if(!(cName in dict[0])){ | ||
+ | dict[0].push(cName); | ||
+ | dict.push([Dc,cl,c,cr,Dc_,cl_,c_,cr_]); | ||
+ | } | ||
+ | if(!(dName in dict[0])){ | ||
+ | dict[0].push(dName); | ||
+ | dict.push([Dd,dl,d,dr,Dd_,dl_,d_,dr_]); | ||
+ | } | ||
+ | ///////////////////////////////////////////////////////// | ||
+ | var ai=[Da,0,al,0,a,0,ar]; | ||
+ | var Li_up=zeros(al.length).concat([0,a,0,ar,0,bl,0,b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl,0,Dd,0,dl]); | ||
+ | var Li_down=[al_,0,a_,0,ar_,0,bl_,0,b_,0,br_].concat(zeros(Da.length+al.length+Db.length+bl.length+Dc.length+cl.length+Dd.length+dl.length),[0,0,0,0,0,0,0,0]); | ||
+ | var Hi_up=[Da,0,al,0,a,0,ar,0].concat([zeros(bl_.length)],[0,b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl,0,Dd,0,dl]); | ||
+ | var Hi_down=zeros(Da.length).concat([0,al_,0,a_,0,ar_,0,bl_,0,b_,0,br_],zeros(Da.length+al.length+Da.length+al.length+Dc.length+cl.length+Dd.length+dl.length),[0,0,0,0,0,0,0,0]); | ||
+ | var Bi=[a,0,ar,0,bl]; | ||
+ | var bi=[Db,0,bl,0,b,0,br]; | ||
+ | var waste11=[Da,0,al,0,a,0,ar]; | ||
+ | var waste12=[Db,0,bl,0,b,0,br]; | ||
+ | var waste13=[al_,0,a_,0,ar_,0,bl_,0,b_,0,br_]; | ||
+ | var Oi=[b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl,0,Dd,0,dl]; | ||
+ | var Ti1=[Da,0,al,0,a,0,ar]; | ||
+ | var Ti2=[Db,0,bl,0,b,0,br]; | ||
+ | var Ti3=[Dc,0,cl,0,c,0,cr]; | ||
+ | var Ti4=[Dd,0,dl,0,d,0,dr]; | ||
+ | var Ti5=[br_,0,Da_,0,al_,0,Db_,0,bl_,0,Dc_,0,cl_,0,Dd_,0,dl_]; | ||
+ | var waste2_up=[b,0,br,0,Da,0,al,0,Db,0,bl,0,Dc,0,cl,0,Dd,0,dl]; | ||
+ | var waste2_down=zeros(b.length).concat([0,br_,0,Da_,0,al_,0,Db_,0,bl_,0,Dc_,0,cl_,0,Dd_,0,dl_]); | ||
+ | var ci=[Dc,0,cl,0,c,0,cr]; | ||
+ | var di=[Dd,0,dl,0,d,0,dr]; | ||
+ | return dict; | ||
+ | } | ||
Revision as of 08:25, 10 September 2019
Welcome to Wiki of SEU!
Your team has been approved and you are ready to start the iGEM season!
More Details