-#include "obs.h"
-
-#include <math.h>
-
-using namespace std;
-
-template <class obstype>
-void obs<obstype>::addMeas(obstype val[], int valsize)
-{
- for(int i=0; i<valsize; i++) measurements.push_back(val[i]);
-}
-
-template <class obstype>
-void obs<obstype>::addMeas(const obstype& val)
-{
- measurements.push_back(val);
-}
-
-template <class obstype>
-void obs<obstype>::mean(const string& compid, const list<double>& meas)
-{
- computations[compid][0] = 0;
- computations[compid][1] = 0;
- int nmeas = meas.size();
-
- for(list<double>::iterator measIt = meas.begin(); measIt != meas.end(); ++measIt)
- computations[compid][0] += *measIt;
- computations[compid][0] /= nmeas;
-
- for(list<double>::iterator measIt = meas.begin(); measIt != meas.end(); ++measIt)
- computations[compid][1] += pow( *measIt - computations[compid][0], 2 );
- computations[compid][1] /= nmeas*(nmeas-1);
- computations[compid][1] = sqrt(computations[compid][1]);
-}
-
-template <class obstype>
-void obs<obstype>::computeJack(const string& compid, double (*func)(const list<obstype>& vals, void *para), void *para)
-{
- int nmeas=measurements.size();
- double manymeans[nmeas];
-
- computations[compid][0] = 0;
- computations[compid][1] = 0;
-
- int imeas=0;
- for(typename list<obstype>::iterator removedIt = measurements.begin(); removedIt != measurements.end(); imeas++)
- {
- obstype removed = *removedIt;
-
- typename list<obstype>::iterator nextAfterIt = removedIt;
- ++nextAfterIt;
-
- measurements.erase(removedIt);
-
- manymeans[imeas] = func(measurements, para);
- computations[compid][0] += manymeans[imeas];
-
- measurements.insert(nextAfterIt, removed);
- }
- computations[compid][0] /= nmeas;
-
- for(int imean=0; imean<nmeas; imean++)
- computations[compid][1] += pow( computations[compid][0] - manymeans[imean], 2 );
- computations[compid][1] *= (double)(nmeas-1)/nmeas;
- computations[compid][1] = sqrt(computations[compid][1]);
-}