- Timestamp:
- Sep 29, 2014, 8:40:51 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20140904/Ohana/src/libohana/src/vstats.c
r37387 r37444 60 60 int N20 = MAX ( 0, 0.2*N); 61 61 62 if (weight ) {62 if (weight && dvalue) { 63 63 dsortthree (value, dvalue, weight, N); 64 64 } else { 65 65 if (dvalue) { 66 66 dsortpair (value, dvalue, N); 67 } else if (weight) { 68 dsortpair (value, weight, N); 67 69 } else { 68 70 dsort (value, N); … … 112 114 // I'm actually just using chisq to get the correct sorting order 113 115 if ((stats->statmode == VSTATS_CHI_INNER_MEAN) || (stats->statmode == VSTATS_CHI_INNER_WTMEAN)) { 116 if (!dvalue) myAbort ("invalid combination: Chisq-based mean, no dvalue provided"); 114 117 ALLOCATE (chi, double, N); 115 118 for (i = 0; i < N; i++) { … … 128 131 WeightedMean |= (stats->statmode == VSTATS_INNER_WTMEAN); 129 132 WeightedMean |= (stats->statmode == VSTATS_CHI_INNER_WTMEAN); 133 134 if (WeightedMean && !dvalue) myAbort ("invalid combination: weighted mean, no dvalue provided"); 130 135 131 136 /* calculate stats based on the desired weighting scheme */ … … 149 154 M += value[i] * weight[i]; 150 155 W += weight[i]; 151 dM += SQ (weight[i] * dvalue[i]);156 dM += dvalue ? SQ (weight[i] * dvalue[i]) : 0.0; 152 157 R += weight[i]; 153 158 Nm += 1.0; 154 159 } 155 160 Mo = M / W; 156 dMo = sqrt (dM) / R;161 dMo = dvalue ? sqrt (dM) / R : NAN; 157 162 } 158 163 } else { … … 171 176 for (i = ks; i < ke; i++) { 172 177 M += value[i]; 173 dM += SQ (dvalue[i]);178 dM += dvalue ? SQ (dvalue[i]) : 0.0; 174 179 Nm += 1.0; 175 180 } 176 181 Mo = M / Nm; 177 dMo = sqrt (dM) / Nm;182 dMo = dvalue ? sqrt (dM) / Nm : NAN; 178 183 } 179 184 } … … 244 249 int N20 = MAX ( 0, 0.2*N); 245 250 246 if (weight ) {251 if (weight && dvalue) { 247 252 fsortthree (value, dvalue, weight, N); 248 253 } else { 249 254 if (dvalue) { 250 255 fsortpair (value, dvalue, N); 256 } else if (weight) { 257 fsortpair (value, weight, N); 251 258 } else { 252 259 fsort (value, N); … … 296 303 // I'm actually just using chisq to get the correct sorting order 297 304 if ((stats->statmode == VSTATS_CHI_INNER_MEAN) || (stats->statmode == VSTATS_CHI_INNER_WTMEAN)) { 305 if (!dvalue) myAbort ("invalid combination: Chisq-based mean, no dvalue provided"); 298 306 ALLOCATE (chi, float, N); 299 307 for (i = 0; i < N; i++) { … … 312 320 WeightedMean |= (stats->statmode == VSTATS_INNER_WTMEAN); 313 321 WeightedMean |= (stats->statmode == VSTATS_CHI_INNER_WTMEAN); 322 323 if (WeightedMean && !dvalue) myAbort ("invalid combination: weighted mean, no dvalue provided"); 314 324 315 325 /* calculate stats based on the desired weighting scheme */ … … 333 343 M += value[i] * weight[i]; 334 344 W += weight[i]; 335 dM += SQ (weight[i] * dvalue[i]);345 dM += dvalue ? SQ (weight[i] * dvalue[i]) : 0.0; 336 346 R += weight[i]; 337 347 Nm += 1.0; 338 348 } 339 349 Mo = M / W; 340 dMo = sqrt (dM) / R;350 dMo = dvalue ? sqrt (dM) / R : NAN; 341 351 } 342 352 } else { … … 355 365 for (i = ks; i < ke; i++) { 356 366 M += value[i]; 357 dM += SQ (dvalue[i]);367 dM += dvalue ? SQ (dvalue[i]) : 0.0; 358 368 Nm += 1.0; 359 369 } 360 370 Mo = M / Nm; 361 dMo = sqrt (dM) / Nm;371 dMo = dvalue ? sqrt (dM) / Nm : NAN; 362 372 } 363 373 } … … 368 378 for (i = ks; i < ke; i++) { 369 379 M = SQ (value[i] - Mo); 370 dM = SQ (dvalue[i]);380 dM = dvalue ? SQ (dvalue[i]) : 1.0; 371 381 X2 += M / dM; 372 382 dS += M; 373 383 } 374 X2 = X2 / (Nm - 1);384 X2 = dvalue ? X2 / (Nm - 1) : NAN; 375 385 dS = sqrt (dS / (Nm - 1)); 376 386
Note:
See TracChangeset
for help on using the changeset viewer.
