Rev 349 | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 344 | f9daq | 1 | var funMatrix = [[0, 0, 0, 0], |
| 2 | [0, 0, 0, 0], |
||
| 3 | [0, 0, 0, 0], |
||
| 4 | [0, 0, 0, 0], |
||
| 350 | f9daq | 5 | [0, 0, 0, 0], |
| 6 | [0, 0, 0, 0], |
||
| 7 | [0, 0, 0, 0], |
||
| 8 | [0, 0, 0, 0], |
||
| 9 | [0, 0, 0, 0], |
||
| 344 | f9daq | 10 | [0, 0, 0, 0]] |
| 11 | |||
| 12 | function initSliders(sframe){ |
||
| 13 | genFunList(sframe); |
||
| 14 | var obj = JSROOT.GetMainPainter(sframe).draw_object; //get the histogram |
||
| 15 | |||
| 16 | //Initialise all ParameterSliders |
||
| 17 | $( function() { |
||
| 18 | $(".ParamSlider"+sframe).each(function() { |
||
| 19 | var ID = String('#'+this.id); |
||
| 20 | var n = ID.length; |
||
| 21 | var paramName = ID.slice(6,n-5); |
||
| 22 | switch (paramName) { |
||
| 23 | case 'Amplitude': |
||
| 24 | var min = 0; |
||
| 25 | var max = 10000; |
||
| 26 | var value = 100; |
||
| 27 | break; |
||
| 28 | |||
| 29 | case 'Mu': |
||
| 30 | var min = 0; |
||
| 31 | var max = 1; |
||
| 32 | var value = 0; |
||
| 33 | break; |
||
| 34 | |||
| 35 | case 'Sigma': |
||
| 36 | var min = 0; |
||
| 37 | var max = 1; |
||
| 38 | var value = 0.05; |
||
| 39 | break; |
||
| 40 | |||
| 41 | case 'AmpBW': |
||
| 42 | var min = 0; |
||
| 43 | var max = 100; |
||
| 44 | var value = 1000; |
||
| 45 | break; |
||
| 46 | |||
| 47 | case 'Gamma': |
||
| 48 | var min = 0; |
||
| 49 | var max = 1; |
||
| 50 | var value = 0.5; |
||
| 51 | break; |
||
| 52 | |||
| 53 | case 'M': |
||
| 54 | var min = 0; |
||
| 55 | var max = 5; |
||
| 56 | var value = 0; |
||
| 57 | break; |
||
| 58 | |||
| 59 | default: |
||
| 60 | var min = -10; |
||
| 61 | var max = 10; |
||
| 62 | var value = 0; |
||
| 63 | break; |
||
| 64 | } |
||
| 65 | |||
| 66 | $(this).slider({ |
||
| 67 | range: false, min: min, max: max, value:value, step: 0.0001, |
||
| 68 | slide: function( event, ui ) { |
||
| 69 | $( ID.slice(0,n-5)+sframe ).val(ui.value); |
||
| 70 | calculate(sframe); |
||
| 71 | }, |
||
| 72 | change: function( event, ui ){ |
||
| 73 | $( ID.slice(0,n-5)+sframe ).val(ui.value); |
||
| 74 | calculate(sframe); |
||
| 75 | } |
||
| 76 | }); |
||
| 77 | setDefaultParameters(paramName, sframe); |
||
| 78 | }) |
||
| 79 | }) |
||
| 80 | //Script for initialising range sliders |
||
| 81 | $( function() { |
||
| 82 | $( "#slider-range"+sframe ).slider({ |
||
| 83 | range: true, |
||
| 84 | min: obj.fXaxis.fXmin, |
||
| 85 | max: obj.fXaxis.fXmax, |
||
| 86 | step: (obj.fXaxis.fXmax-obj.fXaxis.fXmin)/1000, |
||
| 87 | values: [ obj.fXaxis.fXmin, obj.fXaxis.fXmax ], |
||
| 88 | slide: function( event, ui ) { |
||
| 89 | document.getElementById("minRange"+sframe).value = ui.values[0]; |
||
| 90 | document.getElementById("maxRange"+sframe).value = ui.values[1]; |
||
| 91 | calculate(sframe); |
||
| 92 | } |
||
| 93 | }); |
||
| 94 | $("#minRange"+sframe).val($( "#slider-range"+sframe ).slider( "values", 0)); |
||
| 95 | $("#maxRange"+sframe).val($( "#slider-range"+sframe ).slider( "values", 1)); |
||
| 96 | }); |
||
| 97 | |||
| 98 | //Script for choosing polynomial order |
||
| 99 | $( function() { |
||
| 100 | $( "#slider-polOrder"+sframe ).slider({ |
||
| 101 | range: false, |
||
| 102 | min: 0, |
||
| 103 | max: 4, |
||
| 104 | step: 1, |
||
| 105 | value: 1, |
||
| 106 | slide: function( event, ui ) { |
||
| 107 | $( "#polOrderDisplay" + sframe ).val(ui.value); |
||
| 108 | updatePolParamList(ui.value, sframe); |
||
| 345 | f9daq | 109 | var fName = genFunctionName(sframe); |
| 110 | showFormula(fName, sframe); |
||
| 344 | f9daq | 111 | calculate(sframe); |
| 112 | } |
||
| 113 | }); |
||
| 114 | $( "#polOrderDisplay" + sframe ).val( $("#slider-polOrder"+sframe).slider("value") ); |
||
| 115 | updatePolParamList($("#slider-polOrder"+sframe).slider("value"), sframe); |
||
| 116 | }); |
||
| 117 | } |
||
| 118 | |||
| 119 | function autoFit(sframe){ |
||
| 120 | //works only if histogram is on canvas |
||
| 121 | //document.getElementById('status').style.display='block'; |
||
| 122 | var xmin = parseFloat(document.getElementById("minRange"+sframe).value); |
||
| 123 | var xmax = parseFloat(document.getElementById("maxRange"+sframe).value); |
||
| 124 | |||
| 125 | //var initParam = getManualParameters();//unused |
||
| 126 | var data = getDataFromHisto(sframe); |
||
| 127 | var N = data.length; |
||
| 128 | |||
| 129 | var x = [], y = []; //data points |
||
| 130 | var NdataPoints = 0; |
||
| 131 | for(var i=0; i<N; ++i){ |
||
| 132 | if( (data[i][0] > xmin) && (data[i][0] < xmax)){ |
||
| 133 | x.push(data[i][0]); |
||
| 134 | y.push(data[i][1]); |
||
| 135 | if(data[i][1]>0){NdataPoints++;} |
||
| 136 | } |
||
| 137 | } |
||
| 138 | var p0 = getManualParameters(sframe); |
||
| 139 | var maskParam = getParametersMask(sframe); //use only these parameters, all others are fixed or un used |
||
| 140 | var maskParamRange = getParamRangeMask(sframe); |
||
| 141 | var result = fminsearch(calcMasterFun2, p0, x, y, {maxIter:100, mask:maskParam, maskBond:maskParamRange, sframe:sframe}); |
||
| 142 | var Parm0 = result[0]; |
||
| 143 | var chi2 = result[1]; |
||
| 144 | setManualParameters(Parm0, maskParam, sframe); // set parameters' values |
||
| 145 | var obj = JSROOT.GetMainPainter(sframe).draw_object; |
||
| 146 | |||
| 147 | funkcija = CreateTF1Fit(Parm0, sframe); |
||
| 148 | funkcija.fChisquare = chi2; |
||
| 149 | funkcija.fNDF = NdataPoints-getNparameters(sframe); //calculate ndf |
||
| 150 | StoreAndDrawFitFunction(obj, funkcija, [xmin, xmax], 1, sframe); |
||
| 151 | } |
||
| 152 | |||
| 153 | function getParamRangeMask(sframe){ |
||
| 154 | //return mask to bond parameters inside of range |
||
| 155 | var varList = ['Amplitude', 'Mu', 'Sigma', 'A0', 'A1', 'A2', 'A3', 'A4', 'AmpExp', 'K', 'AmpBW', 'Gamma', 'M']; |
||
| 156 | var x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; |
||
| 157 | var ranges = []; |
||
| 158 | for(var i=0; i<varList.length; i++){ |
||
| 159 | //find fixed values and mask them |
||
| 160 | if(document.getElementById('bond'+varList[i] + sframe).checked){ |
||
| 161 | x[i]=1; |
||
| 162 | ranges.push([parseFloat(document.getElementById('Param'+varList[i]+'min'+sframe).value), parseFloat(document.getElementById('Param'+varList[i]+'max'+sframe).value)]); |
||
| 163 | }else{ |
||
| 164 | ranges.push([0, 0]); |
||
| 165 | } |
||
| 166 | } |
||
| 167 | return [x, ranges] |
||
| 168 | } |
||
| 169 | |||
| 170 | function calculate(h){ |
||
| 171 | //var x = parseFloat(document.getElementById("xValue").value); |
||
| 172 | var N = 501; // number of points for function ploting |
||
| 173 | //var funfit = document.getElementById("fitfun").value; |
||
| 174 | |||
| 175 | var xmin = parseFloat(document.getElementById("minRange"+h).value); |
||
| 176 | var xmax = parseFloat(document.getElementById("maxRange"+h).value); |
||
| 177 | |||
| 178 | var parameters = []; |
||
| 179 | parameters = getManualParameters(h); |
||
| 180 | |||
| 181 | fitMasterFun(xmin, xmax, N, parameters, h); |
||
| 182 | } |
||
| 183 | |||
| 184 | function getManualParameters(sframe){ |
||
| 185 | var parametri = []; |
||
| 186 | var mu = parseFloat(document.getElementById("ParamMu"+sframe).value); |
||
| 187 | var sigma = parseFloat(document.getElementById("ParamSigma"+sframe).value); |
||
| 188 | var amplitude = parseFloat(document.getElementById("ParamAmplitude"+sframe).value); |
||
| 189 | parametri = [amplitude, mu, sigma]; |
||
| 190 | |||
| 191 | var n = document.getElementById("polOrderDisplay" + sframe).value; |
||
| 192 | for(var i=0; i<5; ++i){ |
||
| 193 | if(i<=n){ |
||
| 194 | parametri.push(parseFloat(document.getElementById("ParamA"+i+sframe).value)); |
||
| 195 | }else{ |
||
| 196 | parametri.push(0); //set higher orders to 0 |
||
| 197 | } |
||
| 198 | } |
||
| 199 | |||
| 200 | parametri.push(parseFloat(document.getElementById("ParamAmpExp"+sframe).value)); |
||
| 201 | parametri.push(parseFloat(document.getElementById("ParamK"+sframe).value)); |
||
| 202 | |||
| 203 | parametri.push(parseFloat(document.getElementById("ParamAmpBW"+sframe).value)); |
||
| 204 | parametri.push(parseFloat(document.getElementById("ParamGamma"+sframe).value)); |
||
| 205 | parametri.push(parseFloat(document.getElementById("ParamM"+sframe).value)); |
||
| 206 | |||
| 207 | return parametri |
||
| 208 | } |
||
| 209 | |||
| 210 | function setManualParameters(p, mask, sframe){ |
||
| 211 | //sets the value of parameters and correct max or min value if p greater or smaller |
||
| 212 | |||
| 213 | var paramNames = ["Amplitude", "Mu", "Sigma", "A0", "A1", "A2", "A3", "A4", "AmpExp", "K", 'AmpBW', 'Gamma', 'M']; |
||
| 214 | |||
| 215 | for(var i = 0; i<paramNames.length; i++){ |
||
| 216 | if(mask[i]){ |
||
| 217 | document.getElementById("Param"+paramNames[i]+sframe).value = p[i]; |
||
| 218 | |||
| 219 | var max = $("#Param"+paramNames[i]+"Set"+sframe).slider("option", "max"); |
||
| 220 | var min = $("#Param"+paramNames[i]+"Set"+sframe).slider("option", "min"); |
||
| 221 | |||
| 222 | if(p[i] > max){ |
||
| 223 | $("#Param"+paramNames[i]+"Set"+sframe).slider("option", "max", p[i]); |
||
| 224 | document.getElementById("Param"+paramNames[i]+"max"+sframe).value = p[i]; |
||
| 225 | |||
| 226 | }; |
||
| 227 | if(p[i] < min){ |
||
| 228 | $("#Param"+paramNames[i]+"Set"+sframe).slider("option", "min", p[i]); |
||
| 229 | document.getElementById("Param"+paramNames[i]+"min"+sframe).value = p[i]; |
||
| 230 | |||
| 231 | } |
||
| 232 | |||
| 233 | $("#Param"+paramNames[i]+"Set"+sframe).slider("value", p[i]); |
||
| 234 | } |
||
| 235 | } |
||
| 236 | } |
||
| 237 | |||
| 238 | function fitMasterFun(xmin, xmax, N, parametri, sframe){ |
||
| 239 | var x = []; |
||
| 240 | var y = []; |
||
| 241 | |||
| 242 | for(var i = 0; i<N; i++){ |
||
| 243 | x.push((xmax-xmin)*i/N+xmin); |
||
| 244 | y.push(calcMasterFun(x[i], parametri, sframe)); |
||
| 245 | } |
||
| 246 | |||
| 247 | var data = getDataFromHisto(sframe); |
||
| 248 | var sum = 0; |
||
| 249 | var NdataPoints = 0; |
||
| 250 | |||
| 251 | for(var i=0; i<data.length; ++i){ |
||
| 252 | //calculate sum of residuals |
||
| 253 | if( (data[i][0] > xmin) && (data[i][0] < xmax) && (data[i][1] != 0)){ |
||
| 254 | var yfit = calcMasterFun(data[i][0], parametri, sframe); |
||
| 255 | var ydata = data[i][1]; |
||
| 256 | sum += Math.pow(ydata-yfit, 2) / ydata; |
||
| 257 | NdataPoints++; |
||
| 258 | } |
||
| 259 | } |
||
| 260 | |||
| 261 | var chi2 = sum.toPrecision(4); |
||
| 262 | //display chi^2 |
||
| 263 | document.getElementById("chi2Output"+sframe).innerHTML = chi2; |
||
| 264 | |||
| 265 | //calculate ndf |
||
| 266 | var ndf = NdataPoints; |
||
| 267 | var Nparameters = getNparameters(sframe); |
||
| 268 | ndf -= Nparameters; |
||
| 269 | |||
| 270 | document.getElementById("ndfOutput"+sframe).innerHTML = ndf; |
||
| 271 | document.getElementById("chi2Red"+sframe).innerHTML = (chi2/ndf).toPrecision(4); |
||
| 272 | |||
| 273 | var g = JSROOT.CreateTGraph(N, x, y); |
||
| 274 | var isTGraphOn = JSROOT.GetMainPainter(sframe).draw_object.fTGraphPlotted; |
||
| 275 | if (typeof isTGraphOn === "undefined") { |
||
| 276 | //TGraph does not exist yet |
||
| 277 | var a = JSROOT.GetMainPainter(sframe).draw_object; |
||
| 278 | a.fTGraphPlotted = 0; |
||
| 279 | JSROOT.draw(sframe, g, "", function(){ |
||
| 280 | var obj = JSROOT.GetMainPainter(sframe).draw_object; |
||
| 281 | obj.fTGraphPlotted = 1; |
||
| 282 | }); |
||
| 283 | } else { |
||
| 284 | //replot only if TGraph is already plotted, else: it is plotting |
||
| 285 | if(isTGraphOn==1){JSROOT.redraw(sframe, g, "");} |
||
| 286 | } |
||
| 287 | |||
| 288 | } |
||
| 289 | |||
| 290 | function getNparameters(sframe){ |
||
| 291 | var x = 0; |
||
| 292 | var funList = getFunList(sframe); |
||
| 293 | if(funList[0]==1){ |
||
| 294 | //Gaus has 3 parameters |
||
| 295 | x += 3; |
||
| 296 | } |
||
| 297 | |||
| 298 | if(funList[1]){ |
||
| 299 | //Substract (polynomial order + 1) |
||
| 300 | x += parseInt(document.getElementById("polOrderDisplay" + sframe).value)+1; |
||
| 301 | } |
||
| 302 | |||
| 303 | if(funList[2]){ |
||
| 304 | //Exponential function has 2 parameters |
||
| 305 | x += 2; |
||
| 306 | } |
||
| 307 | return x |
||
| 308 | } |
||
| 309 | |||
| 310 | function getParametersMask(sframe){ |
||
| 311 | //return mask to fix parameters |
||
| 312 | var x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; |
||
| 313 | var varList = ['Amplitude', 'Mu', 'Sigma', 'A0', 'A1', 'A2', 'A3', 'A4', 'AmpExp', 'K', 'AmpBW', 'Gamma', 'M']; |
||
| 314 | var i; |
||
| 315 | var funList = getFunList(sframe); |
||
| 316 | if(funList[0]==1){ |
||
| 317 | //Gaus has 3 parameters |
||
| 318 | for(i = 0; i < 3; i++){ |
||
| 319 | x[i] = 1; |
||
| 320 | } |
||
| 321 | } |
||
| 322 | i = 3; |
||
| 323 | if(funList[1]){ |
||
| 324 | //Substract (polynomial order + 1) |
||
| 325 | var order = parseInt(document.getElementById("polOrderDisplay" + sframe).value); |
||
| 326 | for(var j=0; j < order+1; j++){ |
||
| 327 | x[i] = 1; |
||
| 328 | i++; |
||
| 329 | } |
||
| 330 | } |
||
| 331 | |||
| 332 | if(funList[2]){ |
||
| 333 | //Exponential function has 2 parameters |
||
| 334 | x[8] = 1; |
||
| 335 | x[9] = 1; |
||
| 336 | } |
||
| 337 | |||
| 338 | if(funList[3]){ |
||
| 339 | //BW function has 3 parameters |
||
| 340 | x[10] = 1; |
||
| 341 | x[11] = 1; |
||
| 342 | x[12] = 1; |
||
| 343 | } |
||
| 344 | |||
| 345 | for(var i=0; i<varList.length; i++){ |
||
| 346 | //find fixed values and mask them |
||
| 347 | if(document.getElementById('fix'+varList[i]+sframe).checked){ |
||
| 348 | x[i]=0; |
||
| 349 | } |
||
| 350 | } |
||
| 351 | return x |
||
| 352 | } |
||
| 353 | |||
| 354 | function getDataFromHisto(divid){ |
||
| 355 | //get x and y from ploted histogram, and compute y_fit for ploted x and calculate chi^2 |
||
| 356 | var obj = JSROOT.GetMainPainter(divid).draw_object; |
||
| 357 | var N = obj.fNcells; |
||
| 358 | var x = []; |
||
| 359 | var y = []; |
||
| 360 | var data = []; |
||
| 361 | for(var i=1; i<=N-2; ++i){ |
||
| 362 | data.push([obj.fXaxis.GetBinCenter(i), obj.fArray[i]]); |
||
| 363 | } |
||
| 364 | |||
| 365 | return data |
||
| 366 | } |
||
| 367 | |||
| 368 | function calcMasterFun(x, parametri, sframe){ |
||
| 369 | //calculates function gaus + pol + exp |
||
| 370 | parametriGaus = [parametri[0], parametri[1], parametri[2]]; |
||
| 371 | parametriPol = [parametri[3], parametri[4], parametri[5], parametri[6], parametri[7]]; |
||
| 372 | parametriExp = [parametri[8], parametri[9]]; |
||
| 373 | parametriBW = [parametri[10], parametri[11], parametri[12]]; |
||
| 374 | var funList = getFunList(sframe); |
||
| 375 | return funList[0]*gaus(x, parametriGaus) + funList[1]*pol(x, parametriPol) + funList[2]*expo(x, parametriExp) + funList[3]*BW(x, parametriBW); |
||
| 376 | } |
||
| 377 | |||
| 378 | function calcMasterFun2(x, parametri, sframe){ |
||
| 379 | //calculates function gaus + pol + exp, x must be vector |
||
| 380 | return x.map(function(xi){return (calcMasterFun(xi, parametri, sframe))}); |
||
| 381 | } |
||
| 382 | |||
| 383 | function pol(x, p){ |
||
| 384 | var n = p.length; |
||
| 385 | if(n > 5){ |
||
| 386 | alert("Only pol5 is implemented"); |
||
| 387 | return "Error" |
||
| 388 | } else { |
||
| 389 | for(var i = n; i<5; i++){ |
||
| 390 | p[i] = 0; |
||
| 391 | } |
||
| 392 | return p[0] + x * p[1] + x**2 * p[2] + x**3 * p[3] + x**4 * p[4]; |
||
| 393 | } |
||
| 394 | } |
||
| 395 | |||
| 396 | function gaus(x, p){ |
||
| 397 | var amplitude = p[0] |
||
| 398 | var mu = p[1]; |
||
| 399 | var sigma = p[2]; |
||
| 400 | |||
| 401 | return amplitude * Math.exp(-0.5 * Math.pow((x-mu) / sigma, 2)); |
||
| 402 | } |
||
| 403 | |||
| 404 | function expo(x, p){ |
||
| 405 | var a = p[0]; |
||
| 406 | var k = p[1]; |
||
| 407 | return a * Math.exp(k * x); |
||
| 408 | } |
||
| 409 | |||
| 410 | function BW(x, p){ |
||
| 411 | var a = p[0]; |
||
| 412 | var gamma = p[1]; |
||
| 413 | var M = p[2]; |
||
| 414 | return a / (2 * Math.PI) * gamma / (Math.pow(x-M, 2) + Math.pow(gamma/2, 2)); |
||
| 415 | } |
||
| 416 | |||
| 417 | function divClean(divid){ |
||
| 418 | JSROOT.cleanup(divid); |
||
| 419 | } |
||
| 420 | |||
| 421 | function getFunList(sframe){ |
||
| 422 | //returns funList from funMatrix |
||
| 423 | var k = parseInt(sframe.slice(1)); //get histogram number 0, 1, 2, ... |
||
| 424 | return funMatrix[k] |
||
| 425 | } |
||
| 426 | |||
| 427 | function genFunList(sframe){ |
||
| 428 | //sframe - string name: h0, h1, ... |
||
| 429 | //actualy does not show, but only creates funList, funList should go in TH1.funList? |
||
| 430 | var funfit = document.getElementById("selectFitFun"+sframe).value; |
||
| 431 | var funfit2 = funfit.split(/[ +]/); |
||
| 432 | var implementedFun = ["gaus", "pol", "expo", "BW"] // |
||
| 433 | var funList = getFunList(sframe); |
||
| 434 | var k = parseInt(sframe.slice(1)); //get histogram number 0, 1, 2, ... |
||
| 435 | |||
| 436 | for (var i = 0; i < implementedFun.length; i++) { |
||
| 437 | if (funfit2.includes(implementedFun[i])) { |
||
| 438 | funList[i] = 1; |
||
| 439 | funMatrix[k][i] = 1; |
||
| 440 | document.getElementById(implementedFun[i]+"FitPanel"+sframe).style.display = "block"; |
||
| 441 | } else { |
||
| 442 | funList[i] = 0; |
||
| 443 | funMatrix[k][i] = 0; |
||
| 444 | document.getElementById(implementedFun[i]+"FitPanel"+sframe).style.display = "none"; |
||
| 445 | } |
||
| 446 | } |
||
| 447 | |||
| 345 | f9daq | 448 | var fName = genFunctionName(sframe); |
| 344 | f9daq | 449 | showFormula(fName, sframe); |
| 450 | if((funMatrix[k][0]+funMatrix[k][1]+funMatrix[k][2]+funMatrix[k][3]) == 0){ alert("These are implemented functions:\n" + implementedFun.toString()) } // |
||
| 451 | } |
||
| 452 | |||
| 453 | function genFunctionName(sframe){ |
||
| 454 | var funList = getFunList(sframe); |
||
| 455 | var fName = ""; |
||
| 456 | var Npar = 0; |
||
| 457 | if(funList[0]){ |
||
| 458 | //Gaus function |
||
| 459 | fName = "N \\cdot e^{-(\\frac{x-\\mu}{2 \\sigma})^2}"; |
||
| 460 | Npar += 3; |
||
| 461 | } |
||
| 462 | |||
| 463 | if(funList[1]){ |
||
| 464 | //pol function |
||
| 465 | var n = parseInt(document.getElementById("polOrderDisplay"+sframe).value); |
||
| 466 | |||
| 467 | for(var i=0; i<=n; ++i){ |
||
| 468 | if((i>0) || (Npar > 0)){ |
||
| 469 | fName += " + "; |
||
| 470 | } |
||
| 471 | |||
| 472 | if(i==0){ |
||
| 473 | fName += "p" + String(i); |
||
| 474 | }else{ |
||
| 475 | if(i==1){ |
||
| 476 | fName += "p" + String(i) + " \\cdot x"; |
||
| 477 | }else{ |
||
| 478 | fName += "p" + String(i) + " \\cdot x^" + String(i); |
||
| 479 | } |
||
| 480 | } |
||
| 481 | } |
||
| 482 | Npar += n+1; |
||
| 483 | } |
||
| 484 | |||
| 485 | if(funList[2]){ |
||
| 486 | if((Npar > 0)){ |
||
| 487 | fName += " + "; |
||
| 488 | } |
||
| 489 | fName += "N_{exp} \\cdot e^{K \\cdot x}"; |
||
| 490 | Npar += 2; |
||
| 491 | } |
||
| 492 | |||
| 493 | if(funList[3]){ |
||
| 494 | if((Npar > 0)){ |
||
| 495 | fName += " + "; |
||
| 496 | } |
||
| 347 | f9daq | 497 | fName += "N_{BW} \\cdot \\frac{1}{2 \\pi} \\frac{\\Gamma}{(x - M_{BW})^2 + (\\Gamma/2)^2} "; // * [Gamma] / ((x - [MeanBW])^2 + ([Gamma]/2)^2) |
| 344 | f9daq | 498 | |
| 499 | Npar += 3; |
||
| 500 | } |
||
| 501 | return fName; |
||
| 502 | } |
||
| 503 | |||
| 504 | function updatePolParamList(n, sframe){ |
||
| 505 | //disables or enables inputs in table for diferent parameters |
||
| 506 | if(n>=0){ |
||
| 507 | disableInput(false, "listA0"+sframe, sframe); |
||
| 508 | }else{ |
||
| 509 | disableInput(true, "listA0"+sframe, sframe); |
||
| 510 | } |
||
| 511 | |||
| 512 | if(n>=1){ |
||
| 513 | disableInput(false, "listA1"+sframe, sframe); |
||
| 514 | }else{ |
||
| 515 | disableInput(true, "listA1"+sframe, sframe); |
||
| 516 | } |
||
| 517 | |||
| 518 | if(n>=2){ |
||
| 519 | disableInput(false, "listA2"+sframe, sframe); |
||
| 520 | }else{ |
||
| 521 | disableInput(true, "listA2"+sframe, sframe); |
||
| 522 | } |
||
| 523 | |||
| 524 | if(n>=3){ |
||
| 525 | disableInput(false, "listA3"+sframe, sframe); |
||
| 526 | }else{ |
||
| 527 | disableInput(true, "listA3"+sframe, sframe); |
||
| 528 | } |
||
| 529 | |||
| 530 | if(n>=4){ |
||
| 531 | disableInput(false, "listA4"+sframe, sframe); |
||
| 532 | }else{ |
||
| 533 | disableInput(true, "listA4"+sframe, sframe); |
||
| 534 | } |
||
| 535 | |||
| 536 | if(n>4){ |
||
| 537 | alert("Only pol4 is inplemented!"); |
||
| 538 | }else{ |
||
| 539 | if(n<0){alert("Error, wrong number " + n);} |
||
| 540 | } |
||
| 541 | } |
||
| 542 | |||
| 543 | function disableInput(state, objId, sframe){ |
||
| 544 | //Change disabled state of parameters inputs |
||
| 545 | disableParamSlider(state, objId, sframe); |
||
| 546 | var obj = document.getElementById(objId).getElementsByTagName("input");//find inputs inside of row |
||
| 547 | for (var i = 0; i < obj.length; i++) { |
||
| 548 | obj[i].disabled = state; //set state of inputs |
||
| 549 | } |
||
| 550 | } |
||
| 551 | |||
| 552 | function disableParamSlider(state, objId, sframe){ |
||
| 553 | //Disables slider if state is true and enables if state is false. |
||
| 554 | var name = String(objId[objId.length-2])+ String(objId[objId.length-1]); |
||
| 555 | switch (state) { |
||
| 556 | case true: |
||
| 557 | $("#Param"+name+"Set"+sframe).slider("disable"); |
||
| 558 | break; |
||
| 559 | |||
| 560 | case false: |
||
| 561 | $("#Param"+name+"Set"+sframe).slider("enable"); |
||
| 562 | break; |
||
| 563 | |||
| 564 | default: |
||
| 565 | break; |
||
| 566 | } |
||
| 567 | } |
||
| 568 | |||
| 569 | |||
| 570 | function setDefaultParameters(name, sframe){ |
||
| 571 | //this function is used for setting parameters back to their default value after page refresh |
||
| 572 | $( "#Param"+name+sframe).val( $("#Param"+name+"Set"+sframe).slider("value") ); |
||
| 573 | $( "#Param"+name+"min"+sframe ).val( $("#Param"+name+"Set"+sframe).slider("option", "min") ); |
||
| 574 | $( "#Param"+name+"max"+sframe ).val( $("#Param"+name+"Set"+sframe).slider("option", "max") ); |
||
| 575 | $( "#Param"+name+"step"+sframe ).val( $("#Param"+name+"Set"+sframe).slider("option", "step") ); |
||
| 576 | } |
||
| 577 | |||
| 578 | function updateSetSlider(id){ |
||
| 579 | //Get id to update its slider ?min? value |
||
| 580 | var sframe = id.id.slice(id.id.length-2); |
||
| 581 | var last = id.id[id.id.length-3]; //it can be steP, maX or miN |
||
| 582 | switch (last) { |
||
| 583 | case "p": |
||
| 584 | $("#Param"+id.name+"Set"+sframe).slider("option", "step", parseFloat(id.value)); |
||
| 585 | break; |
||
| 586 | |||
| 587 | case "x": |
||
| 588 | $("#Param"+id.name+"Set"+sframe).slider("option", "max", parseFloat(id.value)); |
||
| 589 | break; |
||
| 590 | |||
| 591 | case "n": |
||
| 592 | $("#Param"+id.name+"Set"+sframe).slider("option", "min", parseFloat(id.value)); |
||
| 593 | break; |
||
| 594 | |||
| 595 | default: |
||
| 596 | if(id.value > $("#Param"+id.name+"Set"+sframe).slider("option", "max")){ alert("Inserted value is to big."); } |
||
| 597 | if(id.value < $("#Param"+id.name+"Set"+sframe).slider("option", "min")){ alert("Inserted value is to small."); } |
||
| 598 | $("#Param"+id.name+"Set"+sframe).slider("value", parseFloat(id.value)); |
||
| 599 | break; |
||
| 600 | } |
||
| 601 | } |
||
| 602 | |||
| 603 | function insertHTML(sframe, callback){ |
||
| 604 | var r = document.getElementById('fit'+sframe); |
||
| 605 | var htmlCode = generateHTMLcode(sframe); |
||
| 606 | r.insertAdjacentHTML('beforeend', htmlCode); |
||
| 607 | if(callback!=null){callback(sframe)} |
||
| 608 | } |
||
| 609 | |||
| 610 | function generateHTMLcode(sframe){ |
||
| 611 | |||
| 349 | f9daq | 612 | mform = '<button type="button" onclick="calculate('+ "'" + sframe + "'"+')" style="display:none" >Draw Function</button>'; |
| 344 | f9daq | 613 | mform += '<button type="button" onclick="autoFit('+ "'" + sframe + "'"+')">Click to fit</button>'; |
| 614 | mform += '<div class="rangeSettings">'; |
||
| 615 | mform += 'Range: min = <input type="text" size="2" value="-5" name="min" id="minRange'+sframe+'" disabled=true>'; |
||
| 616 | mform += 'max = <input type="text" size="2" value="5" name="max" id="maxRange'+sframe+'" disabled=true>'; |
||
| 617 | mform += '<div style="display: inline-block;">'; |
||
| 618 | mform += ' χ²/ndf = <output id="chi2Output'+ sframe +'"></output> / <output id="ndfOutput'+ sframe +'"></output> = <output id="chi2Red'+ sframe +'"></output> <br>'; |
||
| 619 | mform += '</div>'; |
||
| 620 | mform += '<div class="slidecontainer" style="width:600px">'; |
||
| 621 | mform += '<div class="slider-range" id="slider-range'+ sframe +'"></div>'; |
||
| 622 | mform += '</div>'; |
||
| 623 | mform += '</div>' |
||
| 624 | mform += ' <div id="fitPanel">' |
||
| 625 | mform += ' <div class="functionSelect">' |
||
| 626 | mform += ' Function:' |
||
| 627 | mform += ' <select name="fitfun" id="selectFitFun'+sframe+'" onclick="genFunList(' + "'" + sframe + "'"+ ')">' |
||
| 628 | mform += ' <option value="gaus">Gaus</option>' |
||
| 629 | mform += ' <option value="pol">Poly</option>' |
||
| 630 | mform += ' <option value="expo">Expo</option>' |
||
| 631 | mform += ' <option value="BW">Breit-Wigner</option>' |
||
| 347 | f9daq | 632 | mform += ' <option disabled="disabled">--------</option>' |
| 344 | f9daq | 633 | mform += ' <option value="gaus+pol">Gaus + Poly</option>' |
| 634 | mform += ' <option value="gaus+expo">Gaus + Expo</option>' |
||
| 635 | mform += ' <option value="BW+gaus">Gaus + Breit-Wigner</option>' |
||
| 636 | mform += ' <option value="pol+expo">Poly + Expo</option>' |
||
| 637 | mform += ' <option value="BW+pol">Poly + Breit-Wigner</option>' |
||
| 638 | mform += ' <option value="BW+expo">Expo + Breit-Wigner</option>' |
||
| 347 | f9daq | 639 | mform += ' <option disabled="disabled">--------</option>' |
| 344 | f9daq | 640 | mform += ' <option value="BW+expo+pol">Breit-Wigner + Poly + Expo</option>' |
| 641 | mform += ' <option value="BW+gaus+pol">Breit-Wigner + Poly + Gaus</option>' |
||
| 642 | mform += ' <option value="BW+expo+gaus">Breit-Wigner + Expo + Gaus</option>' |
||
| 643 | mform += ' <option value="gaus+pol+expo">Gaus + Poly + Expo</option>' |
||
| 644 | mform += ' <option value="BW+expo+gaus+pol">Breit-Wigner + Expo + Gaus + Poly</option>' |
||
| 645 | mform += ' </select>' |
||
| 347 | f9daq | 646 | mform += ' <span id="functionDisplay'+sframe+'" style="font-size:32px"></span>' |
| 344 | f9daq | 647 | mform += ' </div>' |
| 648 | mform += ' <!--' |
||
| 649 | mform += ' This was replaced b select:option' |
||
| 650 | mform += ' <input type="text" name="fitfun" id="fitfun" value="pol" onblur="genFunList()"><br>' |
||
| 651 | mform += ' -->' |
||
| 652 | mform += ' <div id="gausFitPanel' + sframe + '" class="FitPanel">' |
||
| 653 | mform += ' <table class="inputParametersTable" id="inputParamTableGaus">' |
||
| 654 | mform += ' <tbody>' |
||
| 655 | mform += ' <tr class="description">' |
||
| 656 | mform += ' <td>Name</td>' |
||
| 349 | f9daq | 657 | mform += ' <td class="hideFix-Bond">Fix</td>' |
| 658 | mform += ' <td class="hideFix-Bond">Bond</td>' |
||
| 344 | f9daq | 659 | mform += ' <td>Value</td>' |
| 660 | mform += ' <td>Min</td>' |
||
| 661 | mform += ' <td>Set</td>' |
||
| 662 | mform += ' <td>Max</td>' |
||
| 663 | mform += ' <td>Step</td>' |
||
| 664 | mform += ' </tr>' |
||
| 665 | mform += ' <tr id="listMu">' |
||
| 666 | mform += ' <td><li>μ:</td>' |
||
| 667 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixMu'+sframe+'"></td>' |
||
| 668 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondMu'+sframe+'"></td>' |
||
| 669 | mform += ' <td><input type="text" class="inputParam" id="ParamMu'+sframe+'" name="Mu" value="0" onblur="updateSetSlider(this)"></td>' |
||
| 670 | mform += ' <td><input type="text" class="inputParam" id="ParamMumin'+sframe+'" name="Mu" onkeyup="updateSetSlider(this)"></td>' |
||
| 671 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamMuSet'+sframe+'"></div></td>' |
||
| 672 | mform += ' <td><input type="text" class="inputParam" id="ParamMumax'+sframe+'" name="Mu" onkeyup="updateSetSlider(this)"></td>' |
||
| 673 | mform += ' <td><input type="text" class="inputParam" id="ParamMustep'+sframe+'" name="Mu" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 674 | mform += ' </tr>' |
||
| 675 | mform += ' <tr id="listSigma">' |
||
| 676 | mform += ' <td><li>σ:</td>' |
||
| 677 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixSigma'+sframe+'"></td>' |
||
| 678 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondSigma'+sframe+'"></td>' |
||
| 679 | mform += ' <td><input type="text" class="inputParam" id="ParamSigma'+sframe+'" name="Sigma" value="1" onblur="updateSetSlider(this)"></td>' |
||
| 680 | mform += ' <td><input type="text" class="inputParam" id="ParamSigmamin'+sframe+'" name="Sigma" onkeyup="updateSetSlider(this)"></td>' |
||
| 681 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamSigmaSet'+sframe+'"></div></td>' |
||
| 682 | mform += ' <td><input type="text" class="inputParam" id="ParamSigmamax'+sframe+'" name="Sigma" onkeyup="updateSetSlider(this)"></td>' |
||
| 683 | mform += ' <td><input type="text" class="inputParam" id="ParamSigmastep'+sframe+'" name="Sigma" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 684 | mform += ' </tr>' |
||
| 685 | mform += ' <tr id="listAmplitude">' |
||
| 347 | f9daq | 686 | mform += ' <td><li>N:</td>' |
| 344 | f9daq | 687 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixAmplitude'+sframe+'"></td>' |
| 688 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondAmplitude'+sframe+'"></td>' |
||
| 689 | mform += ' <td><input type="text" class="inputParam" id="ParamAmplitude'+sframe+'" name="Amplitude" value="1" onblur="updateSetSlider(this)"></td>' |
||
| 690 | mform += ' <td><input type="text" class="inputParam" id="ParamAmplitudemin'+sframe+'" name="Amplitude" onkeyup="updateSetSlider(this)"></td>' |
||
| 691 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamAmplitudeSet'+sframe+'"></div></td>' |
||
| 692 | mform += ' <td><input type="text" class="inputParam" id="ParamAmplitudemax'+sframe+'" name="Amplitude" onkeyup="updateSetSlider(this)"></td>' |
||
| 693 | mform += ' <td><input type="text" class="inputParam" id="ParamAmplitudestep'+sframe+'" name="Amplitude" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 694 | mform += ' </tr>' |
||
| 695 | mform += ' </tbody>' |
||
| 696 | mform += ' </table>' |
||
| 697 | mform += ' </div>' |
||
| 698 | |||
| 699 | mform += ' <div id="polFitPanel' + sframe + '" class="FitPanel">' |
||
| 700 | mform += ' Polynomial order: <input type="text" name="polOrder" id="polOrderDisplay' + sframe + '" size="1" disabled=true>' |
||
| 701 | mform += ' <div style="width: 100px;display: inline-block;" id="slider-polOrder' + sframe + '"></div>' |
||
| 702 | mform += ' <table class="inputParametersTable">' |
||
| 703 | mform += ' <tbody>' |
||
| 704 | mform += ' <tr class="description">' |
||
| 705 | mform += ' <td>Name</td>' |
||
| 349 | f9daq | 706 | mform += ' <td class="hideFix-Bond">Fix</td>' |
| 707 | mform += ' <td class="hideFix-Bond">Bond</td>' |
||
| 344 | f9daq | 708 | mform += ' <td>Value</td>' |
| 709 | mform += ' <td>Min</td>' |
||
| 710 | mform += ' <td>Set</td>' |
||
| 711 | mform += ' <td>Max</td>' |
||
| 712 | mform += ' <td>Step</td>' |
||
| 713 | mform += ' </tr>' |
||
| 714 | mform += ' <tr class="pol" id="listA0'+sframe+'">' |
||
| 347 | f9daq | 715 | mform += ' <td><li>p0:</td>' |
| 344 | f9daq | 716 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixA0'+sframe+'"></td>' |
| 717 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondA0'+sframe+'"></td>' |
||
| 718 | mform += ' <td><input type="text" class="inputParam" id="ParamA0'+sframe+'" name="A0" value="0" disabled=true onblur="updateSetSlider(this)"></td>' |
||
| 719 | mform += ' <td><input type="text" class="inputParam" id="ParamA0min'+sframe+'" name="A0" onkeyup="updateSetSlider(this)"></td>' |
||
| 720 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamA0Set'+sframe+'"></div></td>' |
||
| 721 | mform += ' <td><input type="text" class="inputParam" id="ParamA0max'+sframe+'" name="A0" onkeyup="updateSetSlider(this)"></td>' |
||
| 722 | mform += ' <td><input type="text" class="inputParam" id="ParamA0step'+sframe+'" name="A0" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 723 | mform += ' </tr>' |
||
| 724 | mform += ' <tr class="pol" id="listA1'+sframe+'">' |
||
| 725 | mform += ' <div id="rowA1">' |
||
| 347 | f9daq | 726 | mform += ' <td><li>p1:</td>' |
| 344 | f9daq | 727 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixA1'+sframe+'"></td>' |
| 728 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondA1'+sframe+'"></td>' |
||
| 729 | mform += ' <td><input type="text" class="inputParam" id="ParamA1'+sframe+'" name="A1" value="0" disabled=true onblur="updateSetSlider(this)"></td>' |
||
| 730 | mform += ' <td><input type="text" class="inputParam" id="ParamA1min'+sframe+'" name="A1" onkeyup="updateSetSlider(this)"></td>' |
||
| 731 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamA1Set'+sframe+'"></div></td>' |
||
| 732 | mform += ' <td><input type="text" class="inputParam" id="ParamA1max'+sframe+'" name="A1" onkeyup="updateSetSlider(this)"></td>' |
||
| 733 | mform += ' <td><input type="text" class="inputParam" id="ParamA1step'+sframe+'" name="A1" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 734 | mform += ' </div>' |
||
| 735 | mform += ' </tr>' |
||
| 736 | mform += ' <tr class="pol" id="listA2'+sframe+'">' |
||
| 347 | f9daq | 737 | mform += ' <td><li>p2:</td>' |
| 344 | f9daq | 738 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixA2'+sframe+'"></td>' |
| 739 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondA2'+sframe+'"></td>' |
||
| 740 | mform += ' <td><input type="text" class="inputParam" id="ParamA2'+sframe+'" name="A2" value="0" disabled=true onblur="updateSetSlider(this)"></td>' |
||
| 741 | mform += ' <td><input type="text" class="inputParam" id="ParamA2min'+sframe+'" name="A2" onkeyup="updateSetSlider(this)"></td>' |
||
| 742 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamA2Set'+sframe+'"></div></td>' |
||
| 743 | mform += ' <td><input type="text" class="inputParam" id="ParamA2max'+sframe+'" name="A2" onkeyup="updateSetSlider(this)"></td>' |
||
| 744 | mform += ' <td><input type="text" class="inputParam" id="ParamA2step'+sframe+'" name="A2" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 745 | mform += ' </tr>' |
||
| 746 | mform += ' <tr class="pol" id="listA3'+sframe+'">' |
||
| 347 | f9daq | 747 | mform += ' <td><li>p3:</td>' |
| 344 | f9daq | 748 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixA3'+sframe+'"></td>' |
| 749 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondA3'+sframe+'"></td>' |
||
| 750 | mform += ' <td><input type="text" class="inputParam" id="ParamA3'+sframe+'" name="A3" value="0" disabled=true onblur="updateSetSlider(this)"></td>' |
||
| 751 | mform += ' <td><input type="text" class="inputParam" id="ParamA3min'+sframe+'" name="A3" onkeyup="updateSetSlider(this)"></td>' |
||
| 752 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamA3Set'+sframe+'"></div></td>' |
||
| 753 | mform += ' <td><input type="text" class="inputParam" id="ParamA3max'+sframe+'" name="A3" onkeyup="updateSetSlider(this)"></td>' |
||
| 754 | mform += ' <td><input type="text" class="inputParam" id="ParamA3step'+sframe+'" name="A3" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 755 | mform += ' </tr>' |
||
| 756 | mform += ' <tr class="pol" id="listA4'+sframe+'">' |
||
| 347 | f9daq | 757 | mform += ' <td><li>p4:</td>' |
| 344 | f9daq | 758 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixA4'+sframe+'"></td>' |
| 759 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondA4'+sframe+'"></td>' |
||
| 760 | mform += ' <td><input type="text" class="inputParam" id="ParamA4'+sframe+'" name="A4" value="0" disabled=true onblur="updateSetSlider(this)"></td>' |
||
| 761 | mform += ' <td><input type="text" class="inputParam" id="ParamA4min'+sframe+'" name="A4" onkeyup="updateSetSlider(this)"></td>' |
||
| 762 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamA4Set'+sframe+'"></div></td>' |
||
| 763 | mform += ' <td><input type="text" class="inputParam" id="ParamA4max'+sframe+'" name="A4" onkeyup="updateSetSlider(this)"></td>' |
||
| 764 | mform += ' <td><input type="text" class="inputParam" id="ParamA4step'+sframe+'" name="A4" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 765 | mform += ' </tr>' |
||
| 766 | mform += ' </tbody>' |
||
| 767 | mform += ' </table>' |
||
| 768 | mform += ' </div>' |
||
| 769 | |||
| 770 | |||
| 771 | mform += ' <div id="BWFitPanel' + sframe + '" class="FitPanel">' |
||
| 772 | mform += ' <table class="inputParametersTable" id="inputParamTableBW">' |
||
| 773 | mform += ' <tbody>' |
||
| 774 | mform += ' <tr class="description">' |
||
| 775 | mform += ' <td>Name</td>' |
||
| 349 | f9daq | 776 | mform += ' <td class="hideFix-Bond">Fix</td>' |
| 777 | mform += ' <td class="hideFix-Bond">Bond</td>' |
||
| 344 | f9daq | 778 | mform += ' <td>Value</td>' |
| 779 | mform += ' <td>Min</td>' |
||
| 780 | mform += ' <td>Set</td>' |
||
| 781 | mform += ' <td>Max</td>' |
||
| 782 | mform += ' <td>Step</td>' |
||
| 783 | mform += ' </tr>' |
||
| 784 | mform += ' <tr id="listGamma">' |
||
| 785 | mform += ' <td><li>Γ:</td>' |
||
| 786 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixGamma'+sframe+'"></td>' |
||
| 787 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondGamma'+sframe+'"></td>' |
||
| 788 | mform += ' <td><input type="text" class="inputParam" id="ParamGamma'+sframe+'" name="Gamma" value="0" onblur="updateSetSlider(this)"></td>' |
||
| 789 | mform += ' <td><input type="text" class="inputParam" id="ParamGammamin'+sframe+'" name="Gamma" onkeyup="updateSetSlider(this)"></td>' |
||
| 790 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamGammaSet'+sframe+'"></div></td>' |
||
| 791 | mform += ' <td><input type="text" class="inputParam" id="ParamGammamax'+sframe+'" name="Gamma" onkeyup="updateSetSlider(this)"></td>' |
||
| 792 | mform += ' <td><input type="text" class="inputParam" id="ParamGammastep'+sframe+'" name="Gamma" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 793 | mform += ' </tr>' |
||
| 794 | mform += ' <tr id="listM">' |
||
| 347 | f9daq | 795 | mform += ' <td><li>M<sub>BW</sub>:</td>' |
| 344 | f9daq | 796 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixM'+sframe+'"></td>' |
| 797 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondM'+sframe+'"></td>' |
||
| 798 | mform += ' <td><input type="text" class="inputParam" id="ParamM'+sframe+'" name="M" value="1" onblur="updateSetSlider(this)"></td>' |
||
| 799 | mform += ' <td><input type="text" class="inputParam" id="ParamMmin'+sframe+'" name="M" onkeyup="updateSetSlider(this)"></td>' |
||
| 800 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamMSet'+sframe+'"></div></td>' |
||
| 801 | mform += ' <td><input type="text" class="inputParam" id="ParamMmax'+sframe+'" name="M" onkeyup="updateSetSlider(this)"></td>' |
||
| 802 | mform += ' <td><input type="text" class="inputParam" id="ParamMstep'+sframe+'" name="M" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 803 | mform += ' </tr>' |
||
| 804 | mform += ' <tr id="listAmpBW">' |
||
| 347 | f9daq | 805 | mform += ' <td><li>N<sub>BW</sub>:</td>' |
| 344 | f9daq | 806 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixAmpBW'+sframe+'"></td>' |
| 807 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondAmpBW'+sframe+'"></td>' |
||
| 808 | mform += ' <td><input type="text" class="inputParam" id="ParamAmpBW'+sframe+'" name="AmpBW" value="1" onblur="updateSetSlider(this)"></td>' |
||
| 809 | mform += ' <td><input type="text" class="inputParam" id="ParamAmpBWmin'+sframe+'" name="AmpBW" onkeyup="updateSetSlider(this)"></td>' |
||
| 810 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamAmpBWSet'+sframe+'"></div></td>' |
||
| 811 | mform += ' <td><input type="text" class="inputParam" id="ParamAmpBWmax'+sframe+'" name="AmpBW" onkeyup="updateSetSlider(this)"></td>' |
||
| 812 | mform += ' <td><input type="text" class="inputParam" id="ParamAmpBWstep'+sframe+'" name="AmpBW" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 813 | mform += ' </tr>' |
||
| 814 | mform += ' </tbody>' |
||
| 815 | mform += ' </table>' |
||
| 816 | mform += ' </div>' |
||
| 817 | |||
| 818 | mform += ' <div id="expoFitPanel' + sframe + '" class="FitPanel">' |
||
| 819 | mform += ' <table class="inputParametersTable" id="inputParamTableExpo">' |
||
| 820 | mform += ' <tbody>' |
||
| 821 | mform += ' <tr class="description">' |
||
| 822 | mform += ' <td>Name</td>' |
||
| 349 | f9daq | 823 | mform += ' <td class="hideFix-Bond">Fix</td>' |
| 824 | mform += ' <td class="hideFix-Bond">Bond</td>' |
||
| 344 | f9daq | 825 | mform += ' <td>Value</td>' |
| 826 | mform += ' <td>Min</td>' |
||
| 827 | mform += ' <td>Set</td>' |
||
| 828 | mform += ' <td>Max</td>' |
||
| 829 | mform += ' <td>Step</td>' |
||
| 830 | mform += ' </tr>' |
||
| 831 | mform += ' <tr id="listK">' |
||
| 832 | mform += ' <td><li>K:</td>' |
||
| 833 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixK'+sframe+'"></td>' |
||
| 834 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondK'+sframe+'"></td>' |
||
| 835 | mform += ' <td><input type="text" class="inputParam" id="ParamK'+sframe+'" name="K" value="0" onblur="updateSetSlider(this)"></td>' |
||
| 836 | mform += ' <td><input type="text" class="inputParam" id="ParamKmin'+sframe+'" name="K" onkeyup="updateSetSlider(this)"></td>' |
||
| 837 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamKSet'+sframe+'"></div></td>' |
||
| 838 | mform += ' <td><input type="text" class="inputParam" id="ParamKmax'+sframe+'" name="K" onkeyup="updateSetSlider(this)"></td>' |
||
| 839 | mform += ' <td><input type="text" class="inputParam" id="ParamKstep'+sframe+'" name="K" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 840 | mform += ' </tr>' |
||
| 841 | mform += ' <tr id="listAmpExp">' |
||
| 347 | f9daq | 842 | mform += ' <td><li>N<sub>exp</sub>:</td>' |
| 344 | f9daq | 843 | mform += ' <td><input type="checkbox" class="inputParamBox" id="fixAmpExp'+sframe+'"></td>' |
| 844 | mform += ' <td><input type="checkbox" class="inputParamBox" id="bondAmpExp'+sframe+'"></td>' |
||
| 845 | mform += ' <td><input type="text" class="inputParam" id="ParamAmpExp'+sframe+'" name="AmpExp" value="1" onblur="updateSetSlider(this)"></td>' |
||
| 846 | mform += ' <td><input type="text" class="inputParam" id="ParamAmpExpmin'+sframe+'" name="AmpExp" onkeyup="updateSetSlider(this)"></td>' |
||
| 847 | mform += ' <td><div name="ParamSlider" class="ParamSlider'+sframe+'" id="ParamAmpExpSet'+sframe+'"></div></td>' |
||
| 848 | mform += ' <td><input type="text" class="inputParam" id="ParamAmpExpmax'+sframe+'" name="AmpExp" onkeyup="updateSetSlider(this)"></td>' |
||
| 849 | mform += ' <td><input type="text" class="inputParam" id="ParamAmpExpstep'+sframe+'" name="AmpExp" value="0.1" onkeyup="updateSetSlider(this)"></td>' |
||
| 850 | mform += ' </tr>' |
||
| 851 | mform += ' </tbody>' |
||
| 852 | mform += ' </table>' |
||
| 853 | mform += ' </div>' |
||
| 854 | mform += ' </div>' |
||
| 855 | |||
| 856 | return mform |
||
| 857 | } |
||
| 858 |