#include "ITPCGasDensity.hxx" ITPCGasDensity::ITPCGasDensity( long autmin, long autmax, int dtaverage ){ fTimeMin = autmin; fTimeMax = autmax; fDtAvg = dtaverage; Init(); } ITPCGasDensity::ITPCGasDensity( int ayearmin, int amonthmin, int adaymin, int ahourmin, int aminmin, int asecmin, int ayearmax, int amonthmax, int adaymax, int ahourmax, int aminmax, int asecmax, int dtaverage ){ fDtAvg = dtaverage; tm mt; // use time structure from time.h // to build unix time from year,month, etc. mt.tm_year = ayearmin - 1900; mt.tm_mon = amonthmin-1; mt.tm_mday = adaymin; mt.tm_hour = ahourmin; mt.tm_min = aminmin; mt.tm_sec = asecmin; fTimeMin = (long)mktime(&mt); mt.tm_year = ayearmax - 1900; mt.tm_mon = amonthmax-1; mt.tm_mday = adaymax; mt.tm_hour = ahourmax; mt.tm_min = aminmax; mt.tm_sec = asecmax; fTimeMax = (long)mktime(&mt); Init(); } /// Add to average and rms objects void ITPCGasDensity::AddUpdate( ITPCGas &agas, bool lastflag ){ // try to avoid bad entries if ( lastflag==false && ( agas.TTPC1() < 0.1 || agas.TTPC1() > 100.0 || agas.TTPC2() < 0.1 || agas.TTPC2() > 100.0 || agas.TTPC3() < 0.1 || agas.TTPC3() > 100.0 ) ) return; // add a new entry? long atime = agas.GetTime(); if ( atime < fTimeMax+long(fDtAvg/2) && atime > fTimeMin-long(fDtAvg) ){ fTimes.push_back( atime+long(fDtAvg/2) ); fPAvg.push_back( IAvgRMSPlot() ); fT1Avg.push_back( IAvgRMSPlot() ); fT2Avg.push_back( IAvgRMSPlot() ); fT3Avg.push_back( IAvgRMSPlot() ); fDens1Avg.push_back( IAvgRMSPlot() ); fDens2Avg.push_back( IAvgRMSPlot() ); fDens3Avg.push_back( IAvgRMSPlot() ); } // loop over entries, and add to averages unsigned int istart=fCurIdx; for ( unsigned int i=istart; i< fTimes.size(); i++ ){ bool lastavg=lastflag; long aendtime = fTimes[i]+long(fDtAvg/2); if ( atime > aendtime ){ lastavg = true; fCurIdx++; } fPAvg[i].Add( atime, agas.P(), lastavg ); fT1Avg[i].Add( atime, agas.TTPC(1), lastavg ); fT2Avg[i].Add( atime, agas.TTPC(2), lastavg ); fT3Avg[i].Add( atime, agas.TTPC(3), lastavg ); fDens1Avg[i].Add( atime, agas.P() / (273.15+agas.TTPC(1)) , lastavg ); fDens2Avg[i].Add( atime, agas.P() / (273.15+agas.TTPC(2)) , lastavg ); fDens3Avg[i].Add( atime, agas.P() / (273.15+agas.TTPC(3)) , lastavg ); } return; } /// Initialize gas density object void ITPCGasDensity::Init(){ fCurIdx=0; //long atime = fTimeMin-long(fDtAvg+fDtAvg/2); ITPCGas aGas( fTimeMin-long(2*fDtAvg), fTimeMax+long(2*fDtAvg) ); long astart_time; long aend_time; aGas.GetTimeInterval( astart_time, aend_time ); int nquery = 0; do { if (nquery%100 == 0 ){ std::cout<<"DB Query"<Write(); fT[0].fGraph->Write(); fT[1].fGraph->Write(); fT[2].fGraph->Write(); fDensity[0].fGraph->Write(); fDensity[1].fGraph->Write(); fDensity[2].fGraph->Write(); fout.Close(); return; }