@@ -92,43 +92,58 @@ export default Ember.Controller.extend({
92
92
} . property ( 'selectedMetric' , 'divergence' , 'entropy' , 'meanDN' ) ,
93
93
94
94
structureData : function ( ) {
95
- var idx = this . get ( 'selectedTimepointIdx' ) ;
96
- if ( idx >= this . get ( 'names.length' ) ) {
97
- // a hack; presumable selectedIdx will be updated later
98
- idx = this . get ( 'names.length' ) - 1 ;
99
- }
100
95
var metric = this . get ( 'selectedMetric' ) ;
101
96
if ( metric === "Entropy" ) {
102
- return this . get ( 'entropy' ) [ idx ] ;
97
+ return this . get ( 'entropy' ) ;
103
98
}
104
99
if ( metric === "JS Divergence" ) {
105
- return this . get ( 'divergence' ) [ idx ] ;
100
+ return this . get ( 'divergence' ) ;
106
101
}
107
- var dn = this . get ( 'meanDN' ) ;
108
- var ds = this . get ( 'meanDS' ) ;
109
- var zipped = _ . zip ( dn [ idx ] , ds [ idx ] ) ;
110
- // TODO: do not hardcode these values
111
- // FIXME: fix issue when number of timepoints changes; selector should remain on current one if possible
112
- var upper = Math . log ( 5 ) ;
113
- var lower = Math . log ( 1 / 5 ) ;
114
- var ratios = zipped . map ( function ( pair ) {
115
- var result = Math . log ( pair [ 0 ] / pair [ 1 ] ) ;
116
- // cap extreme values
117
- if ( result > upper ) {
118
- result = upper ;
119
- } else if ( result < lower ) {
120
- result = lower ;
102
+ if ( metric === 'dNdS' ) {
103
+ var dn = this . get ( 'meanDN' ) ;
104
+ var ds = this . get ( 'meanDS' ) ;
105
+ var result = [ ] ;
106
+ for ( let idx = 0 ; idx < dn . length ; idx ++ ) {
107
+ var zipped = _ . zip ( dn [ idx ] , ds [ idx ] ) ;
108
+ var logratios = zipped . map ( function ( pair ) {
109
+ var logratio = Math . log ( pair [ 0 ] / pair [ 1 ] ) ;
110
+ return logratio ;
111
+ } ) ;
112
+ result . push ( logratios ) ;
121
113
}
122
114
return result ;
123
- } ) ;
124
- // take only reference coordinates
125
- var coordMap = this . get ( 'model.coordinates.refToFirstAlnCoords' ) ;
126
- var result = _ . map ( coordMap , alnCoord => ratios [ alnCoord ] || 0 ) ;
127
- return result ;
115
+ }
116
+ throw { name : 'UnknownMetricError' , message : metric } ;
128
117
} . property ( 'model.coordinates.refToFirstAlnCoords' ,
129
118
'meanDN' , 'meanDS' , 'entropy' , 'divergence' , 'selectedTimepointIdx' ,
130
119
'selectedMetric' ) ,
131
120
121
+ selectedStructureData : function ( ) {
122
+ var idx = this . get ( 'selectedTimepointIdx' ) ;
123
+ if ( idx >= this . get ( 'names.length' ) ) {
124
+ // a hack; presumable selectedIdx will be updated later
125
+ idx = this . get ( 'names.length' ) - 1 ;
126
+ }
127
+ var data = this . get ( 'structureData' ) [ idx ] ;
128
+ // take only reference coordinates
129
+ var coordMap = this . get ( 'model.coordinates.refToFirstAlnCoords' ) ;
130
+ var result = _ . map ( coordMap , alnCoord => data [ alnCoord ] || 0 ) ;
131
+ return result ;
132
+ } . property ( 'structureData' , 'selectedTimepointIdx' ) ,
133
+
134
+ structureDataRange : function ( ) {
135
+ var data = this . get ( 'structureData' ) ;
136
+ var minval = d3 . min ( data , d => d3 . min ( d ) ) ;
137
+ var maxval = d3 . max ( data , d => d3 . max ( d ) ) ;
138
+ if ( minval < 0 && maxval > 0 ) {
139
+ var r = Math . max ( Math . abs ( minval ) , maxval ) ;
140
+ minval = - r ;
141
+ maxval = r ;
142
+ }
143
+ console . log ( [ minval , maxval ] ) ;
144
+ return [ minval , maxval ] ;
145
+ } . property ( 'structureData' ) ,
146
+
132
147
timepoints : function ( ) {
133
148
if ( this . get ( 'selectedMetric' ) === "JS Divergence" ) {
134
149
var divergence = this . get ( 'model.divergence.sortedDivergence' ) ;
0 commit comments