PageSourceSearch

https://www.ilincs.org/ilincs/js/controllers/corrPlotlyModalCtrl.js

js ilincs.org collected 2026-09-28 05:51:18 UTC 16,317 bytes, 353 lines download raw bytes

1angular
2  .module('app')
3  .controller('corrPlotlyModalCtrl', ['$scope','$timeout','$sce','$state','$window','$uibModalInstance','genes','sig1','sig2','corr','data',
4                                  function($scope,$timeout,$sce,$state,$window,$uibModalInstance,genes,sig1,sig2,corr,data) {
5
6        $scope.ok = function () {
7          // $uibModalInstance.close($scope.selected.item);
8            $uibModalInstance.dismiss('cancel');
9        };
10
11        $scope.cancel = function () {
12          $uibModalInstance.dismiss('cancel');
13        };
14
15
16        $scope.plotlyEvents = function (graph){
17          // console.log("plotly event emitted");
18          $scope.graph=graph;
19          graph.on('plotly_selecting', function(event){
20            // console.log("plotly event: plotly_selecting emitted");
21            // if (event) {
22            //   $scope.NumberOfSelectedPoints = event.points.length;
23            //   $scope.selectedGenes = [];
24            //   for(var i=0; i < event.points.length; i++){                  
25            //       $scope.selectedGenes.push(event.points[i].text);                  
26            //   }
27            //   // $scope.$digest();
28            //   $scope.$apply();
29            // }
30            $scope.$apply(function() {
31              //wrapped this within $apply
32              if (event) {
33                $scope.NumberOfSelectedPoints = event.points.length;
34                $scope.selectedGenes = [];$scope.selectedX = [];$scope.selectedY = [];
35                for(var i=0; i < event.points.length; i++){   
36                    $scope.selectedX.push(event.points[i].x); 
37                    $scope.selectedY.push(event.points[i].y);                
38                    $scope.selectedGenes.push(event.points[i].text);                  
39                }
40                $scope.corrValueSelected=calculateCorrelation($scope.selectedX,$scope.selectedY);
41              }
42            });
43          }
44          // ,function(error){
45          //   console.log(error);            
46          // }
47        );
48          graph.on('plotly_click', function(data){
49            // console.log("plotly event: plotly_click emitted");
50              var pts = '';
51              for(var i=0; i < data.points.length; i++){
52                  pts = 'sig1 = '+data.points[i].x +'\nsig2 = '+
53                      data.points[i].y.toPrecision(4) + 
54                      '\ngene = '+data.points[i].text +'\n\n';
55                  // console.log($scope.NumberOfSelectedPoints);
56                  $scope.selectedGene=data.points[i].text;
57                  $scope.selectedSig1=data.points[i].x;
58                  $scope.selectedSig2=data.points[i].y;
59                  
60                  // annotate_text = 'x = '+data.points[i].x +
61                  //   'y = '+data.points[i].y.toPrecision(4);
62
63                  annotation = {
64                    text: data.points[i].text,//annotate_text,
65                    x: data.points[i].x,
66                    y: parseFloat(data.points[i].y.toPrecision(4)),
67                    // showarrow:true,
68                    // // arrowhead:7,
69                    ax:-20,
70                    ay:-20
71                    // ax:Math.random()*10,
72                    // ay:-1*Math.random()*20
73                  }
74
75                  annotations = $scope.data.layout.annotations || [];
76                  annotations.push(annotation);
77                  window.Plotly.relayout(graph,{annotations: annotations})
78              }
79              // alert('Closest point clicked:\n\n'+pts);
80              // $scope.selectedGene=pts;
81              $scope.$digest();
82          });
83          // graph.on('plotly_afterplot', function(data){
84          //   console.log("plotly event: plotly_afterplot emitted");
85          //   // console.log(graph);
86          //     // var pts = '';
87          //     // for(var i=0; i < data.points.length; i++){
88          //     //     pts = 'sig1 = '+data.points[i].x +'\nsig2 = '+
89          //     //         data.points[i].y.toPrecision(4) + 
90          //     //         '\ngene = '+data.points[i].text +'\n\n';
91          //     //     console.log($scope.NumberOfSelectedPoints);
92          //     //     $scope.selectedGene=data.points[i].text;
93          //     //     $scope.selectedSig1=data.points[i].x;
94          //     //     $scope.selectedSig2=data.points[i].y;
95          //     // }
96          //     // // alert('Closest point clicked:\n\n'+pts);
97          //     // // $scope.selectedGene=pts;
98          //     // $scope.$digest();
99          // });  
100          // graph.on('plotly_selected', function(eventData) {
101          //   console.log("remove select-outline select-outline-2 and 1", eventData);
102          //   // console.log(eventData.points.length);
103          //   if(eventData == undefined || (eventData.points.length < 1)){
104          //   	console.log("Nothing is selected, make all points at full opacity again");
105          //     console.log(graph);
106          //     console.log(graph.id);
107          //     console.log(window.Plotly.Plots);
108          //     console.log(eventData);
109          //     // console.log(window.getComputedStyle(graph)['select-outline']);              
110          //     console.log(window.getComputedStyle(graph).display);              
111          //   	// $("#myDiv .select-outline").remove();
112          //     // window.Plotly.redraw(graph);                
113          //     // window.Plotly.redraw('corrPlotly');
114          //     // window.Plotly.redraw(graph,$scope.data.data,$scope.data.layout);
115          //     console.log($scope.data);
116          //     $scope.data.data[0].selectedpoints=undefined;
117          //     $scope.NumberOfSelectedPoints = 0;
118          //     $scope.selectedGenes = [];
119          //     // window.Plotly.react(graph,$scope.data.data,$scope.data.layout);
120          //     // Plotly.redraw(graph,$scope.data);  
121          //     // window.Plotly.restyle('corrPlotly',graph);  
122          //     // window.Plotly.restyle('corrPlotly',$scope.data);  
123          //     // window.Plotly.restyle(graph);  
124          //     // graph.restyle('myDiv', data.marker);  //test 
125          //     // console.log($scope.data.marker);    
126          //     // Plotly.restyle(graph,$scope.data.marker); 
127          //     $scope.$digest();
128          //   } else {
129          //    	console.log("Don't remove selection box");
130          //   }
131          // });  
132          
133          // graph.on('plotly_doubleclick', function(data){
134          //    console.log("plotly event: plotly_doubleclick emitted");            
135          // });   
136          
137          graph.on('plotly_deselect', function(data){
138             // console.log("plotly event: plotly_deselect emitted"); 
139             $scope.$apply(function() {
140               $scope.NumberOfSelectedPoints = 0;
141               $scope.selectedGenes = [];
142               $scope.selectedX = [];
143               $scope.selectedY = [];             
144               $scope.corrValueSelected=null;
145             });           
146          });          
147        };
148        
149        function calculateCorrelation(x,y) {
150          //   var datp = new Array(
151          //             new Array(21,54,60,78,82),
152          //             new Array(20,54,54,65,45)
153          // );
154          var datp = new Array(x,y);
155          // console.log(pearsonCorrelation(datp,0,1))
156          // $scope.corrValue= pearsonCorrelation(datp,0,1); 
157          return pearsonCorrelation(datp,0,1); 
158        }
159        
160        $scope.refreshSlider = function () {
161          // console.log("refresh slider");
162            $timeout(function () {
163              // console.log("refresh slider");
164              $scope.$broadcast('rzSliderForceRender');
165            });
166          };
167
168          // // This is an assign function that copies full descriptors
169          // function completeAssign(target, ...sources) {
170          //   sources.forEach(source => {
171          //     let descriptors = Object.keys(source).reduce((descriptors, key) => {
172          //       descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
173          //       return descriptors;
174          //     }, {});
175          //     // by default, Object.assign copies enumerable Symbols too
176          //     Object.getOwnPropertySymbols(source).forEach(sym => {
177          //       let descriptor = Object.getOwnPropertyDescriptor(source, sym);
178          //       if (descriptor.enumerable) {
179          //         descriptors[sym] = descriptor;
180          //       }
181          //     });
182          //     Object.defineProperties(target, descriptors);
183          //   });
184          //   return target;
185          // }
186
187          $scope.resetAnnotations = function(){
188              $scope.data.layout.annotations = [];
189              $scope.selectedGene=undefined;
190              $scope.selectedSig1=undefined;
191              $scope.selectedSig2=undefined;
192              window.Plotly.relayout($scope.graph,{annotations: $scope.data.layout.annotations})
193          }
194          
195          $scope.rectAxis = function(){
196            // console.log($scope.data.layout);
197            if ($scope.axisScaleRect) {            
198            // $scope.data.layout = {
199            // // xaxis: {autorange:false,range: [$scope.minCorr, $scope.maxCorr]},
200            // // yaxis: {autorange:false,range: [$scope.minCorr, $scope.maxCorr]}
201            // xaxis: {autorange:false,range: [-$scope.maxVal, $scope.maxVal],hovermode:"closest"},
202            // yaxis: {autorange:false,range: [-$scope.maxVal, $scope.maxVal],hovermode:"closest"}
203            // };
204            $scope.data.layout.xaxis.autorange=false;
205            $scope.data.layout.xaxis.range=[-$scope.maxVal, $scope.maxVal];
206            $scope.data.layout.yaxis.autorange=false;
207            $scope.data.layout.yaxis.range=[-$scope.maxVal, $scope.maxVal];
208            // $scope.data.layout.scene={aspectmode:"data"};
209            // $scope.data.layout.scene={aspectmode:"manual",
210            //                           aspectratio: { x: 1, y: 1}
211            //                         };
212          } else {
213            // $scope.data.layout = {
214            // xaxis: {autorange:true,hovermode:"closest"},
215            // yaxis: {autorange:true,hovermode:"closest"}
216            // };
217            $scope.data.layout.xaxis.autorange=true;
218            $scope.data.layout.yaxis.autorange=true;
219          }
220            window.Plotly.react($scope.graph,$scope.data.data,$scope.data.layout);
221          }    
222          
223          $scope.useInILINCS = function(genes){
224          localStorage.setObj("GeneList",[]);
225          localStorage.setItem('GeneString',[]);          
226          $state.go('genes.list',{genes:genes});
227          $uibModalInstance.dismiss('cancel');    
228          }
229          
230        init = function() {
231          $scope.NumberOfSelectedPoints = 0;
232          
233          // console.log("corrPlotly controller init");
234          // console.log(data);
235          // console.log(sig1);
236          // console.log(sig2);
237          $scope.sig1=sig1;              
238          $scope.sig2=sig2;
239          $scope.corr=corr;
240          
241          // console.log(sig1.substring(0,12));
242          if (sig1.substring(0,12) === "processedSig") {
243            $scope.weighted = true
244          }
245            //  console.log(type);
246          // data.layout.showlegend=true;
247          $scope.genesF = genes;          
248          $scope.data= data;
249          if (sig1) $scope.data.layout.xaxis.title=sig1;
250          // console.log(data.layout.xaxis.title);
251          // Object.assign($scope.data,data);  
252          // $scope.data=completeAssign($scope.data,data); 
253           // $scope.data = Object.assign({},data); 
254           // $scope.data=angular.copy(data);
255           // console.log($scope.data.layout.xaxis);
256           // console.log($scope.data.layout.yaxis);
257           // $scope.data.layout = {
258           // xaxis: {autorange:false,range: [-10, 10]},
259           // yaxis: {autorange:false,range: [-10, 10]}
260           // };
261           
262           // $scope.dataOrg = Object.assign({},data); 
263           // $scope.dataOrg = completeAssign($scope.dataOrg,data);
264           // console.log(data.data[0].x);
265           // console.log(data.data[0].y);
266          $scope.corrValue=calculateCorrelation($scope.data.data[0].x,$scope.data.data[0].y);
267          var allPoints=$scope.data.data[0].x.concat($scope.data.data[0].y)  
268          // console.log(Math.min.apply(null,allPoints));
269          // console.log(Math.max.apply(null,allPoints));
270          $scope.minCorr=Math.min.apply(null,allPoints);
271          $scope.maxCorr=Math.max.apply(null,allPoints);
272          $scope.maxVal=Math.max(Math.abs($scope.minCorr),Math.abs($scope.maxCorr))
273          // $scope.maxValue=Math.min(Math.abs()$scope.minCorr,$scope.minCorr);
274
275          
276          $scope.minCorrSel=0;
277          $scope.maxCorrSel=0;
278          
279          
280          
281          $scope.sliderRange = {
282            // id: 'slider-DiffExp',
283            min: $scope.minCorrSel,
284            max: $scope.maxCorrSel,
285            options: {
286              floor: $scope.minCorr,//-10,              
287              ceil: $scope.maxCorr,//10,
288              // stepsArray: [0,0.000001,0.000005,0.00001,0.00005,0.0001,0.0005,0.001,0.005,0.01,0.05,0.1,0.5,1],
289              precision: 2,
290              step:0.01,
291              noSwitching:true,
292              // draggableRange: true,
293              ticksArray: [$scope.minCorr,0,$scope.maxCorr],
294              showTicksValues: true,
295              showTicks:true,
296              // logScale: true,
297              // onChange: function(id) {
298              // onChange: function() {
299              //       // console.log('on change ' + id); // logs 'on change slider-id'
300              //           //  $scope.inRangeDiffExp=$scope.DiffExp.filter(isOutsideDiffExp);
301              //           filterBasedOnCutoffs();
302              //           $scope.movingSlider=true;
303              //   },
304              onEnd: function() {
305                // console.log($scope.minCorrSel);
306                // console.log($scope.maxCorrSel);
307                // if (mode!="uploadedSig") displayVolcanoImage();
308                // var x=$scope.dataOrg.data[0].x;
309                // var y=$scope.dataOrg.data[0].y;
310                // var x=data.data[0].x;
311                // var y=data.data[0].y;
312                console.log("data: ",data.data[0].x.length);
313                console.log("data: ",data.data[0].y.length);
314                // var x=Object.assign([],$scope.dataOrg.data[0].x); 
315                // var y=Object.assign([],$scope.dataOrg.data[0].y); 
316                var x=angular.copy(data.data[0].x);
317                var y=angular.copy(data.data[0].y);
318                var text=angular.copy(data.data[0].text);
319                console.log("x: ",x.length);
320                console.log("y: ",y.length);
321                // var x1 = x.filter(function(number) {
322                //     return number >= $scope.sliderRange.max || number <= $scope.sliderRange.min;
323                //   });
324                // var y1 = y.filter(function(number) {
325                //     return number >= $scope.sliderRange.max || number <= $scope.sliderRange.min;
326                //   });
327                //   console.log("x1: ",x1.length);
328                //   console.log("y1: ",y1.length);
329                //   // $scope.movingSlider=false;
330                //   $scope.data.data[0].x=x1;
331                //   $scope.data.data[0].y=y1;
332                var x1=[],y1=[],text1=[];
333                for (i = 0; i < x.length; i++) { 
334                    if ((x[i]>=$scope.sliderRange.max || x[i] <= $scope.sliderRange.min)||(y[i]>=$scope.sliderRange.max || y[i] <= $scope.sliderRange.min)) {
335                      x1.push(x[i]);
336                      y1.push(y[i]);
337                      text1.push(text[i]);
338                    }
339                }
340                 $scope.data.data[0].x=x1;
341                 $scope.data.data[0].y=y1;
342                 $scope.data.data[0].text=text1;                
343                  // $scope.$apply();
344                  $scope.corrValue=calculateCorrelation($scope.data.data[0].x,$scope.data.data[0].y);
345                  window.Plotly.react($scope.graph,$scope.data.data,$scope.data.layout);
346              }
347            }
348          };
349          $scope.refreshSlider();
350        };
351        init();
352
353  }]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.