Difference between revisions of "Template:Peking/Javascript/sop"

(Created page with "// JavaScript Document function init() //»∑±£÷¥––“ª¥Œ { document.getElementById("barchart1").innerHTML="Loading..."; PSET=new Pset(1,1,1,1,1); NSET=new Nset(1...")
 
 
Line 1: Line 1:
 
// JavaScript Document
 
// JavaScript Document
  
function init() //»∑±£÷¥––“ª¥Œ
+
function init() //确保执行一次
 
{
 
{
 
document.getElementById("barchart1").innerHTML="Loading...";
 
document.getElementById("barchart1").innerHTML="Loading...";
Line 266: Line 266:
 
},
 
},
 
         title: {
 
         title: {
             text: 'Theoretical Molecular Weight Distribution'
+
             text: 'Theoretical Molecular Weight Distribution',
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '25px'
 +
}
 
         },
 
         },
 
 
Line 272: Line 277:
 
title:
 
title:
 
{
 
{
text:"Weight Fraction"
+
text:"Weight Fraction",
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '20px'
 +
}
 
},
 
},
 
labels:
 
labels:
Line 279: Line 289:
 
{
 
{
 
return (this.value*100).toFixed(1)+"%";
 
return (this.value*100).toFixed(1)+"%";
   }
+
   },
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '20px'
 +
}
 
}
 
}
 
         },
 
         },
Line 285: Line 300:
 
title:
 
title:
 
{
 
{
text:"Molecular Weight(kDa)"
+
text:"Molecular Weight(kDa)",
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '20px'
 +
}
 
},
 
},
 
labels:
 
labels:
Line 292: Line 312:
 
{
 
{
 
return Math.exp((this.value-B)/A).toFixed(2);
 
return Math.exp((this.value-B)/A).toFixed(2);
   }
+
   },
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '20px'
 +
}
 
}
 
}
 
         },
 
         },
Line 335: Line 360:
 
},
 
},
 
         title: {
 
         title: {
             text: 'Theoretical Molecular Weight Distribution'
+
             text: 'Theoretical Molecular Weight Distribution',
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '25px'
 +
}
 
         },
 
         },
 
 
Line 341: Line 371:
 
title:
 
title:
 
{
 
{
text:"Weight Fraction"
+
text:"Weight Fraction",
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '20px'
 +
}
 
},
 
},
 
labels:
 
labels:
Line 348: Line 383:
 
{
 
{
 
return (this.value*100).toFixed(1)+"%";
 
return (this.value*100).toFixed(1)+"%";
   }
+
   },
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '20px'
 +
}
 
}
 
}
 
         },
 
         },
Line 354: Line 394:
 
title:
 
title:
 
{
 
{
text:"Molecular Weight(kDa)"
+
text:"Molecular Weight(kDa)",
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '20px'
 +
}
 
},
 
},
 
labels:
 
labels:
Line 361: Line 406:
 
{
 
{
 
return this.value;
 
return this.value;
   }
+
   },
 +
style:
 +
{
 +
color:'#333333',
 +
fontSize: '20px'
 +
}
 
}
 
}
 
         },
 
         },

Latest revision as of 13:27, 19 October 2016

// JavaScript Document

function init() //确保执行一次 { document.getElementById("barchart1").innerHTML="Loading..."; PSET=new Pset(1,1,1,1,1); NSET=new Nset(1,1); CCa=0; CCb=0; MA=25; MB=55; Bars=new Array(); lBars=new Array(); MLimit=300; dataready=0; uselog=0; UpdateData(); GenerateChart(); }

var f = [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, 20922789888000, 355687428096000, 6402373705728000, 121645100408832000, 2432902008176640000, 51090942171709440000, 1124000727777607680000, 25852016738884976640000, 620448401733239439360000, 15511210043330985984000000, 403291461126605635584000000, 10888869450418352160768000000, 304888344611713860501504000000, 8841761993739701954543616000000, 265252859812191058636308480000000, 8222838654177922817725562880000000, 263130836933693530167218012160000000, 8683317618811886495518194401280000000, 295232799039604140847618609643520000000, 10333147966386144929666651337523200000000, 371993326789901217467999448150835200000000, 13763753091226345046315979581580902400000000, 523022617466601111760007224100074291200000000, 20397882081197443358640281739902897356800000000, 815915283247897734345611269596115894272000000000, 33452526613163807108170062053440751665152000000000, 1405006117752879898543142606244511569936384000000000, 60415263063373835637355132068513997507264512000000000, 2658271574788448768043625811014615890319638528000000000, 119622220865480194561963161495657715064383733760000000000, 5502622159812088949850305428800254892961651752960000000000, 258623241511168180642964355153611979969197632389120000000000, 12413915592536072670862289047373375038521486354677760000000000, 608281864034267560872252163321295376887552831379210240000000000, 30414093201713378043612608166064768844377641568960512000000000000, 1551118753287382280224243016469303211063259720016986112000000000000, 80658175170943878571660636856403766975289505440883277824000000000000, 4274883284060025564298013753389399649690343788366813724672000000000000, 230843697339241380472092742683027581083278564571807941132288000000000000, 12696403353658275925965100847566516959580321051449436762275840000000000000, 710998587804863451854045647463724949736497978881168458687447040000000000000, 40526919504877216755680601905432322134980384796226602145184481280000000000000, 2350561331282878571829474910515074683828862318181142924420699914240000000000000, 138683118545689835737939019720389406345902876772687432540821294940160000000000000, 8320987112741390144276341183223364380754172606361245952449277696409600000000000000, 507580213877224798800856812176625227226004528988036003099405939480985600000000000000, 31469973260387937525653122354950764088012280797258232192163168247821107200000000000000, 1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000, 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000, 8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000, 544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000, 36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000, 2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000, 171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000, 11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000, 850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000, 61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000, 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000, 330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000, 24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000, 1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000, 145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000, 11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000, 894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000, 71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000, 5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000, 475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000, 39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000, 3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000, 281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000, 24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000, 2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000, 185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000, 16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000, 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000, 135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000, 12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000, 1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000, 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000, 10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000, 991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000, 96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000, 9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000, 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000, 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 ]; function factorial (n) {

if (n == 0 || n == 1)
return 1;
if (f[n] > 0)
return f[n];
else
return f[n] = factorial(n-1) * n;

}

function num2e(num,fix){ if (num==0) return 0;

   var p = Math.floor(Math.log(num)/Math.LN10);
   var n = num * Math.pow(10, -p);

if ((p>-2)&(p<3)) return num.toFixed(fix); return n.toFixed(fix) + 'e' + p; }

function Num(Ca,Cb,Ps,Ns) // how much mol/L of Ca,Cb { //only a function var Pa=Ps.Pf*0.5*(Ns.Na*Ps.fa+Ns.Nb*Ps.fb)/(Ns.Na*Ps.fa); var Pb=Ps.Pf*0.5*(Ns.Na*Ps.fa+Ns.Nb*Ps.fb)/(Ns.Nb*Ps.fb); var Pa1=Pa*Ps.Pa_;var Pb1=Pb*Ps.Pb_; if (Pa1>1) Pa1=1; if (Pb1>1) Pb1=1; var fa=Ps.fa, fb=Ps.fb;

var Res=Ps.Pf*0.5*(Ns.Na*fa+Ns.Nb*fb)*Math.pow(Pa1,Cb-1)*Math.pow(Pb1,Ca-1)*Math.pow(1-Pa1,Ca*(fa-1)-Cb+1)*Math.pow(1-Pb1,Cb*(fb-1)-Ca+1) *factorial(Ca*fa-Ca)*factorial(Cb*fb-Cb)/factorial(Ca*fa-Ca-Cb+1)/factorial(Cb*fb-Ca-Cb+1)/factorial(Ca)/factorial(Cb);

return Res; }



function test() { document.getElementById("OU_Pc").innerHTML=factorial(30); }

function Pset(pf,pb_,pa_,fa,fb) { this.Pf=pf; this.Pa_=pa_;//Pa*pa_ = Pa' this.Pb_=pb_; this.fa=fa; this.fb=fb; return this; }

function Nset(Na,Nb) { this.Na=Na; this.Nb=Nb; return this; }

function r1() {

}

function UpdateData() {


MA=parseFloat(document.getElementById("IN_MA").value); if (MA<0) MA=0; document.getElementById("IN_MA").value=MA.toFixed(2);

MB=parseFloat(document.getElementById("IN_MB").value); if (MB<0) MB=0; document.getElementById("IN_MB").value=MB.toFixed(2);

var mbig=MA; if (MB>MA) mbig=MB; MLimit=parseFloat(document.getElementById("IN_MLimit").value) if (MLimit<mbig) MLimit=mbig; if (MLimit>mbig*50) MLimit=mbig*50; document.getElementById("IN_MLimit").value=MLimit.toFixed(2);

PSET.fa=parseInt(document.getElementById("IN_fa").value); PSET.fb=parseInt(document.getElementById("IN_fb").value); if (PSET.fa<1) PSET.fa=1; if (PSET.fb<1) PSET.fb=1; if (PSET.fa>10) PSET.fa=10; if (PSET.fb>10) PSET.fb=10; document.getElementById("IN_fb").value=PSET.fb; document.getElementById("IN_fa").value=PSET.fa;

PSET.Pa_=parseFloat(document.getElementById("IN_Pa_").value); if (PSET.Pa_<0) PSET.Pa_=0; document.getElementById("IN_Pa_").value=num2e(PSET.Pa_,3);

PSET.Pb_=parseFloat(document.getElementById("IN_Pb_").value); if (PSET.Pb_<0) PSET.Pb_=0; document.getElementById("IN_Pb_").value=num2e(PSET.Pb_,3);

NSET.Na=parseFloat(document.getElementById("IN_Na").value); if (NSET.Na<0) NSET.Na=0; document.getElementById("IN_Na").value=num2e(NSET.Na,3);

NSET.Nb=parseFloat(document.getElementById("IN_Nb").value); if (NSET.Nb<0) NSET.Nb=0; document.getElementById("IN_Nb").value=num2e(NSET.Nb,3);

Kd=parseFloat(document.getElementById("IN_Kd").value); if (Kd<0) Kd=0; document.getElementById("IN_Kd").value=num2e(Kd,2);


/* PSET.Pf=parseFloat(document.getElementById("IN_Pf").value); if (PSET.Pf<0) PSET.Pf=0; if (PSET.Pf>1) PSET.Pf=1; */

//you need to get Pc now Pc=2*Math.sqrt(NSET.Na*NSET.Nb*PSET.fa*PSET.fb/(PSET.fa-1)/(PSET.fb-1))/(NSET.Na*PSET.fa+NSET.Nb*PSET.fb); if (Pc!=NaN) { document.getElementById("OU_Pc").innerHTML="Pc = "+Pc.toFixed(3)+" ;"; } else { document.getElementById("OU_Pc").innerHTML=" Pc = - ;"; } // Then Pf as a out var alfun=NSET.Na*PSET.fa+NSET.Nb*PSET.fb; PSET.Pf=1+Kd/(alfun)-Math.sqrt((Kd+alfun)*(Kd+alfun)-4*NSET.Na*NSET.Nb*PSET.fa*PSET.fb)/alfun; if (PSET.Pf>1) PSET.Pf=1; document.getElementById("IN_Pf").value=num2e(PSET.Pf,3);

document.getElementById("OU_Pfc").innerHTML="Pf/Pc = "+(PSET.Pf/Pc).toFixed(3)+" ;"; if (PSET.Pf>=Pc) document.getElementById("OU_Pfc").style.color='#5C9085'; else document.getElementById("OU_Pfc").style.color='#000000';

}

function UpdateData2() { PSET.Pf=parseFloat(document.getElementById("IN_Pf").value); if (PSET.Pf<0) PSET.Pf=0; if (PSET.Pf>1) PSET.Pf=1; document.getElementById("IN_Pf").value=num2e(PSET.Pf,3);

var x=PSET.Pf*(NSET.Na*PSET.fa+NSET.Nb*PSET.fb)/2; Kd=(NSET.Na*PSET.fa-x)*(NSET.Nb*PSET.fb-x)/x; document.getElementById("IN_Kd").value=num2e(Kd,2);


//you need to get Pc now Pc=2*Math.sqrt(NSET.Na*NSET.Nb*PSET.fa*PSET.fb/(PSET.fa-1)/(PSET.fb-1))/(NSET.Na*PSET.fa+NSET.Nb*PSET.fb); if (Pc!=NaN) { document.getElementById("OU_Pc").innerHTML="Pc = "+Pc.toFixed(3)+" ;"; } else { document.getElementById("OU_Pc").innerHTML=" Pc = - ;"; } // Then Pf as a out var alfun=NSET.Na*PSET.fa+NSET.Nb*PSET.fb; PSET.Pf=1+Kd/(alfun)-Math.sqrt((Kd+alfun)*(Kd+alfun)-4*NSET.Na*NSET.Nb*PSET.fa*PSET.fb)/alfun; if (PSET.Pf>1) PSET.Pf=1; document.getElementById("IN_Pf").value=num2e(PSET.Pf,3);

document.getElementById("OU_Pfc").innerHTML="Pf/Pc = "+(PSET.Pf/Pc).toFixed(3)+" ;"; if (PSET.Pf>=Pc) document.getElementById("OU_Pfc").style.color='#5C9085'; else document.getElementById("OU_Pfc").style.color='#000000'; }

function Cal() { //checkfirst if (!isFinite(PSET.fa*PSET.fb*PSET.Pa_*PSET.Pb_*PSET.Pf*NSET.Na*NSET.Nb*CCa*CCb*MA*MB)) return;


Bars=null; Bars=new Array(); lBars=null; lBars=new Array(); dataready=0; CCa=Math.floor((MLimit/MA)+1); CCb=Math.floor((MLimit/MB)+1);

TotalMass=MA*NSET.Na+MB*NSET.Nb;

var tag=0; for (var i=0;i<CCa;i++) { for (var j=0;j<CCb;j++) { if ((i+j)==0) {continue;} if (i-1>(j*PSET.fb-j)) {continue;} if (j-1>(i*PSET.fa-i)) {continue;} if (MA*i+MB*j>MLimit) {continue;} Bars[tag]= [ MA*i+MB*j, (MA*i+MB*j)*Num(i,j,PSET,NSET)/TotalMass ]; tag++; } } if (MA<MB) { var tp=Bars[1]; Bars[1]=Bars[0]; Bars[0]=tp; } tag--; A=(Bars[tag][0]-Bars[0][0])/(Math.log(Bars[tag][0])-Math.log(Bars[0][0])); B=Bars[tag][0]-A*Math.log(Bars[tag][0]);// newpos=Alog(old)+B

tag++; for (var i=0;i<tag;i++) { lBars[i]= [ A*Math.log(Bars[i][0])+B, Bars[i][1] ]; }

dataready=1; }

function Draw2() { if (dataready==0) return; $('#barchart1').highcharts({

       chart: {
           type: 'column',

zoomType: 'y'

       },

credits: { enabled:false },

       title: {
           text: 'Theoretical Molecular Weight Distribution',

style: { color:'#333333', fontSize: '25px' }

       },
       yAxis: {

title: { text:"Weight Fraction", style: { color:'#333333', fontSize: '20px' } }, labels: { formatter:function() { return (this.value*100).toFixed(1)+"%";

  			 	},

style: { color:'#333333', fontSize: '20px' } }

       },

xAxis: { title: { text:"Molecular Weight(kDa)", style: { color:'#333333', fontSize: '20px' } }, labels: { formatter:function() { return Math.exp((this.value-B)/A).toFixed(2);

  			 	},

style: { color:'#333333', fontSize: '20px' } }

       },
       legend: {
           enabled: 0
       },

plotOptions: {

       series: {
               color: '#5C9085'
           }

},

       tooltip: 

{ shared: true,

  			 useHTML: true,
     		  formatter: function () 

{

                return "W: "+(Math.exp((this.x-B)/A)).toFixed(2)+'</br>'+"D: "+this.y;

}

       },
       series: [{
           data: lBars,

pointPadding:0.3, animation:0,

       },]
   });

}

function Draw1() { if (dataready==0) return; $('#barchart1').highcharts({

       chart: {
           type: 'column',

zoomType: 'y'

       },

credits: { enabled:false },

       title: {
           text: 'Theoretical Molecular Weight Distribution',

style: { color:'#333333', fontSize: '25px' }

       },
       yAxis: {

title: { text:"Weight Fraction", style: { color:'#333333', fontSize: '20px' } }, labels: { formatter:function() { return (this.value*100).toFixed(1)+"%";

  			 	},

style: { color:'#333333', fontSize: '20px' } }

       },

xAxis: { title: { text:"Molecular Weight(kDa)", style: { color:'#333333', fontSize: '20px' } }, labels: { formatter:function() { return this.value;

  			 	},

style: { color:'#333333', fontSize: '20px' } }

       },
       legend: {
           enabled: 0
       },

plotOptions: {

       series: {
               color: '#72AEA1'
           }

},

       tooltip: 

{ shared: true,

  			 useHTML: true,
     		  formatter: function () 

{

                return "W: "+(this.x).toFixed(2)+'<b></br>'+"D: "+this.y;

}

       },
 
       series: [{
           data: Bars,

pointPadding:0.3, animation:0,

       },]
   });

}

function GenerateChart() { //var f=new Array([1,9],[3,4],[5,8]);

   if (!isFinite(PSET.fa*PSET.fb*PSET.Pa_*PSET.Pb_*PSET.Pf*NSET.Na*NSET.Nb*CCa*CCb*MA*MB)) {alert("Invalid Parameter!");return;}

Cal(); if (uselog==0) Draw1(); else Draw2(); }

function ChangeLog(btn) { if (uselog==0) { uselog=1; btn.innerHTML="Linear Coordinate"; if (dataready) Draw2(); } else { uselog=0; btn.innerHTML="Logarithmic Coordinate"; if (dataready) Draw1(); } }