X-Git-Url: http://git.treefish.org/~alex/phys/latlib.git/blobdiff_plain/3675da388f7ca12cdc6d93f4a8b94ef4bdd96b19..e9c0e0b98886738917300348a522759c25d4a9c7:/obstat.hpp diff --git a/obstat.hpp b/obstat.hpp index 6818792..6a2cf6e 100644 --- a/obstat.hpp +++ b/obstat.hpp @@ -17,9 +17,8 @@ public: int computeEasy(const int& ival=0) { return mean(&measurements, ival); } - int computeJack(restype (*func)(vector< vector > *vals, void *para), void *para=NULL); int computeJack(void (*preMeasFunc)(vector< vector > *allVals, vector *preCalculated, void *para), - restype (*measFunc)(vector *preCalculated, vector *excludedmeas, void *para), void *para=NULL); + restype (*measFunc)(vector *preCalculated, vector *excludedmeas, int nmeas, void *para), void *para=NULL); restype getMean(int compid) { return computations[compid].val; } restype getErr(int compid) { return computations[compid].err; } @@ -83,48 +82,12 @@ int obstat::mean(vector< vector > *meas, const int& return computations.size()-1; } -template -int obstat::computeJack(restype (*func)(vector< vector > *vals, void *para), void *para) -{ - int nmeas=measurements.size(); - restype manymeans[nmeas]; - result jackres; - - jackres.val = 0; - jackres.err = 0; - - int imeas=0; - for(typename vector< vector >::iterator removedIt = measurements.begin(); removedIt != measurements.end(); ++removedIt, imeas++) - { - vector removed = *removedIt; - - *removedIt = measurements.back(); - measurements.pop_back(); - - manymeans[imeas] = func(&measurements, para); - jackres.val += manymeans[imeas]; - - measurements.push_back( *removedIt ); - *removedIt = removed; - } - jackres.val /= nmeas; - - for(int imean=0; imean int obstat::computeJack(void (*preMeasFunc)(vector< vector > *allVals, vector *preCalculated, void *para), - restype (*measFunc)(vector *preCalculated, vector *excludedmeas, void *para), + restype (*measFunc)(vector *preCalculated, vector *excludedmeas, int nmeas, void *para), void *para) { int nmeas=measurements.size(); - restype manymeans[nmeas]; + restype *manymeans = new restype[nmeas]; result jackres; vector preCalculated; @@ -135,7 +98,7 @@ int obstat::computeJack(void (*preMeasFunc)(vector< vector >::iterator removedIt = measurements.begin(); removedIt != measurements.end(); ++removedIt, imeas++) { - manymeans[imeas] = measFunc(&preCalculated, &(*removedIt), para); + manymeans[imeas] = measFunc(&preCalculated, &(*removedIt), measurements.size(), para); jackres.val += manymeans[imeas]; } jackres.val /= nmeas; @@ -147,6 +110,8 @@ int obstat::computeJack(void (*preMeasFunc)(vector< vector