Browse Source

web with decomposition

Konstantin Ladutenko 5 years ago
parent
commit
c84af411c9
1 changed files with 83 additions and 26 deletions
  1. 83 26
      web/index.html

+ 83 - 26
web/index.html

@@ -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>