|  | @@ -5,19 +5,27 @@
 | 
	
		
			
				|  |  |    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
	
		
			
				|  |  |    <meta http-equiv="X-UA-Compatible" content="ie=edge">
 | 
	
		
			
				|  |  |    <title>Scattnlay web</title>
 | 
	
		
			
				|  |  | +  <link rel="stylesheet" type="text/css" href="nmie.css">
 | 
	
		
			
				|  |  |    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
 | 
	
		
			
				|  |  |  </head>
 | 
	
		
			
				|  |  | -<body>
 | 
	
		
			
				|  |  | -WL from <input type="number" id="fromWL" step="any" value="400.0">
 | 
	
		
			
				|  |  | +<body onload=runMie()>
 | 
	
		
			
				|  |  | +WL from <input type="number" id="fromWL" step="any" value="300.0">
 | 
	
		
			
				|  |  |  to <input type="number" id="toWL" step="any" value="1000">
 | 
	
		
			
				|  |  | -step <input type="number" id="stepWL" step="any" value="5"><br>
 | 
	
		
			
				|  |  | +step <input type="number" id="stepWL" step="any" value="0.1"><br>
 | 
	
		
			
				|  |  |  R: <input type="number" id="R" step="any" value="100">
 | 
	
		
			
				|  |  |  Re(n): <input type="number" id="reN" step="any" value="4">
 | 
	
		
			
				|  |  |  Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
	
		
			
				|  |  | -<button id="Evaluate" autofocus>Run Mie!</button> <span id="time"></span>
 | 
	
		
			
				|  |  | -<div id="PlotQsca" style="width:640px;height:580px;" ></div>
 | 
	
		
			
				|  |  | -  <script src="/nmie.js"></script>
 | 
	
		
			
				|  |  | +<button id="Evaluate" onclick=runMie() autofocus>Run Mie!</button> <span id="time"></span>
 | 
	
		
			
				|  |  | +<div id="Selector"></div>
 | 
	
		
			
				|  |  | +<div id="PlotQsca" style="height:70%;">
 | 
	
		
			
				|  |  | +<!--     style="width:840px;height:580px;"-->
 | 
	
		
			
				|  |  | +</div>
 | 
	
		
			
				|  |  | +  <script src="nmie.js"></script>
 | 
	
		
			
				|  |  |    <script>
 | 
	
		
			
				|  |  | +    const total_mode_n = 4;
 | 
	
		
			
				|  |  | +    var mode_n, mode_types;
 | 
	
		
			
				|  |  | +    var WLs, layout, trace1, trace2;
 | 
	
		
			
				|  |  | +    var Qsca, Qabs, Qsca_n, Qabs_n;
 | 
	
		
			
				|  |  |      const range = (start, stop, step = 1) =>
 | 
	
		
			
				|  |  |              Array(Math.ceil((stop - start) / step)).fill(start).map((x, y) => x + y * step);
 | 
	
		
			
				|  |  |      if (!Array.prototype.last){
 | 
	
	
		
			
				|  | @@ -25,8 +33,9 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
	
		
			
				|  |  |          return this[this.length - 1];
 | 
	
		
			
				|  |  |        };
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  | -    Module.addOnPostRun(() => {
 | 
	
		
			
				|  |  | -      Evaluate.onclick = () => {
 | 
	
		
			
				|  |  | +    // Module.addOnPostRun(() => {
 | 
	
		
			
				|  |  | +    //   test.onclick =runMie()});
 | 
	
		
			
				|  |  | +    function runMie() {
 | 
	
		
			
				|  |  |          const nmie = new Module.nmie()
 | 
	
		
			
				|  |  |          var t0 = performance.now();
 | 
	
		
			
				|  |  |          var fromWL = parseFloat(document.getElementById("fromWL").value);
 | 
	
	
		
			
				|  | @@ -35,46 +44,44 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
	
		
			
				|  |  |          var R = parseFloat(document.getElementById("R").value);
 | 
	
		
			
				|  |  |          var reN = parseFloat(document.getElementById("reN").value);
 | 
	
		
			
				|  |  |          var imN = parseFloat(document.getElementById("imN").value);
 | 
	
		
			
				|  |  | +        Qsca = [], Qabs = [];
 | 
	
		
			
				|  |  | +        Qsca_n = [[],[]], Qabs_n = [[],[]];
 | 
	
		
			
				|  |  |          nmie.ClearTarget();
 | 
	
		
			
				|  |  |          nmie.AddTargetLayerReIm(R, reN, imN)
 | 
	
		
			
				|  |  | -        var WLs = range(fromWL,toWL,stepWL)
 | 
	
		
			
				|  |  | -        var Qsca = [], Qabs = [];
 | 
	
		
			
				|  |  | -        var Qsca_n = [[],[]], Qabs_n = [[],[]];
 | 
	
		
			
				|  |  | -        var mode_n = range(1,4)
 | 
	
		
			
				|  |  | -        var mode_n1 = range(1,5)
 | 
	
		
			
				|  |  | -        var mode_types = range(0,2)
 | 
	
		
			
				|  |  | +        WLs = range(fromWL,toWL,stepWL)
 | 
	
		
			
				|  |  | +        mode_n = range(1,total_mode_n+1)
 | 
	
		
			
				|  |  | +        mode_types = range(0,2)
 | 
	
		
			
				|  |  |          mode_types.forEach(function(mode_type) {
 | 
	
		
			
				|  |  | -          mode_n1.forEach(function (n) {
 | 
	
		
			
				|  |  | +          mode_n.forEach(function (n) {
 | 
	
		
			
				|  |  |              Qsca_n[mode_type].push([]);
 | 
	
		
			
				|  |  |              Qabs_n[mode_type].push([]);
 | 
	
		
			
				|  |  |            });
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |          WLs.forEach(function(WL) {
 | 
	
		
			
				|  |  | -          console.log(WL)
 | 
	
		
			
				|  |  | +          // console.log(WL)
 | 
	
		
			
				|  |  |            nmie.SetModeNmaxAndType(-1, -1);
 | 
	
		
			
				|  |  |            nmie.SetWavelength(WL);
 | 
	
		
			
				|  |  |            nmie.RunMieCalculation();
 | 
	
		
			
				|  |  |            Qsca.push(nmie.GetQsca());
 | 
	
		
			
				|  |  |            Qabs.push(nmie.GetQabs());
 | 
	
		
			
				|  |  | -          mode_n.forEach(function (n) {
 | 
	
		
			
				|  |  | -            mode_types.forEach(function(mode_type) {
 | 
	
		
			
				|  |  | -              console.log(mode_type,n-1,Qsca_n[mode_type,0,n-1])
 | 
	
		
			
				|  |  | +          mode_types.forEach(function(mode_type) {
 | 
	
		
			
				|  |  | +            mode_n.forEach(function (n) {
 | 
	
		
			
				|  |  |                nmie.SetModeNmaxAndType(n,mode_type);
 | 
	
		
			
				|  |  |                nmie.RunMieCalculation();
 | 
	
		
			
				|  |  | -              // Qsca_n[mode_type,n-1].push(nmie.GetQsca());
 | 
	
		
			
				|  |  | -              // Qabs_n[mode_type,n-1].push(nmie.GetQabs());
 | 
	
		
			
				|  |  | +              Qsca_n[mode_type][n-1].push(nmie.GetQsca());
 | 
	
		
			
				|  |  | +              Qabs_n[mode_type][n-1].push(nmie.GetQabs());
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |            });
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  | -        console.log('Qsca_n = ', Qsca_n);
 | 
	
		
			
				|  |  | -        var trace1 = {
 | 
	
		
			
				|  |  | +        // console.log('Qsca_n = ', Qsca_n);
 | 
	
		
			
				|  |  | +        trace1 = {
 | 
	
		
			
				|  |  |            x: WLs,
 | 
	
		
			
				|  |  |            y: Qsca,
 | 
	
		
			
				|  |  |            type: 'scatter',
 | 
	
		
			
				|  |  |            name: 'Qsca'
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        var trace2 = {
 | 
	
		
			
				|  |  | +        trace2 = {
 | 
	
		
			
				|  |  |            x: WLs,
 | 
	
		
			
				|  |  |            y: Qabs,
 | 
	
		
			
				|  |  |            type: 'scatter',
 | 
	
	
		
			
				|  | @@ -82,7 +89,7 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          var data = [trace1, trace2];
 | 
	
		
			
				|  |  | -        var layout = {
 | 
	
		
			
				|  |  | +        layout = {
 | 
	
		
			
				|  |  |            title: {
 | 
	
		
			
				|  |  |              text:'Mie calculation',
 | 
	
		
			
				|  |  |              // font: {
 | 
	
	
		
			
				|  | @@ -111,13 +118,63 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
	
		
			
				|  |  |                //   color: '#7f7f7f'
 | 
	
		
			
				|  |  |                // }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          margin: {
 | 
	
		
			
				|  |  | +            l: 35,
 | 
	
		
			
				|  |  | +            r: 25,
 | 
	
		
			
				|  |  | +            b: 35,
 | 
	
		
			
				|  |  | +            t: 25,
 | 
	
		
			
				|  |  | +            pad: 4
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |          Plotly.newPlot('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
 | 
	
		
			
				|  |  |          var t1 = performance.now();
 | 
	
		
			
				|  |  |          document.getElementById("time").innerHTML = "It took " + ((t1 - t0)/1000).toFixed(2) + " s.";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        mode_names = ['E','H'];
 | 
	
		
			
				|  |  | +        var tmp1 = " ";
 | 
	
		
			
				|  |  | +        mode_types.forEach(function(mode_type) {
 | 
	
		
			
				|  |  | +          tmp1 += mode_names[mode_type]+" -> ";
 | 
	
		
			
				|  |  | +          mode_n.forEach(function (n) {
 | 
	
		
			
				|  |  | +            tmp1 += n.toString()+
 | 
	
		
			
				|  |  | +                    "<input type=\"checkbox\" id=\""+mode_names[mode_type]+n.toString()
 | 
	
		
			
				|  |  | +                    +"\" unchecked onclick=\"replot();\">  ";
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          tmp1 += "<br>";
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        tmp1 +="Qabs <input type=\"checkbox\" id=\"Qabs\" checked onclick=\"replot();\">  ";
 | 
	
		
			
				|  |  | +        document.getElementById("Selector").innerHTML = tmp1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |        };
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function replot() {
 | 
	
		
			
				|  |  | +      var checkBoxQabs = document.getElementById("Qabs");
 | 
	
		
			
				|  |  | +      var data = [trace1];
 | 
	
		
			
				|  |  | +      if (checkBoxQabs.checked == true) data.push(trace2);
 | 
	
		
			
				|  |  | +      mode_types.forEach(function(mode_type) {
 | 
	
		
			
				|  |  | +        mode_n.forEach(function (n) {
 | 
	
		
			
				|  |  | +          var checkBox = document.getElementById(mode_names[mode_type]+n.toString());
 | 
	
		
			
				|  |  | +          if (checkBox.checked == false) return;
 | 
	
		
			
				|  |  | +          var trace_sca = {
 | 
	
		
			
				|  |  | +            x: WLs,
 | 
	
		
			
				|  |  | +            y: Qsca_n[mode_type][n-1],
 | 
	
		
			
				|  |  | +            type: 'scatter',
 | 
	
		
			
				|  |  | +            name: 'Qsca '+mode_names[mode_type]+n.toString()
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          data.push(trace_sca)
 | 
	
		
			
				|  |  | +          if (checkBoxQabs.checked == false) return;
 | 
	
		
			
				|  |  | +          var trace_abs = {
 | 
	
		
			
				|  |  | +            x: WLs,
 | 
	
		
			
				|  |  | +            y: Qabs_n[mode_type][n-1],
 | 
	
		
			
				|  |  | +            type: 'scatter',
 | 
	
		
			
				|  |  | +            name: 'Qabs '+mode_names[mode_type]+n.toString()
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          data.push(trace_abs)
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      Plotly.react('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    </script>
 | 
	
		
			
				|  |  |  </body>
 | 
	
		
			
				|  |  |  </html>
 |