#include "IAvgRMSPlot.hxx" ///---------------------------------------------------------------- /// constructor IAvgRMSPlot::IAvgRMSPlot() { fN=0; fsum=0; fsum2=0; fmin=1e9; fmax=-1e9; TDatime T0(2010,01,01,00,00,00); fX0 = T0.Convert(); fGraph = 0x0; fHist = 0x0; fIsInteger=false; return; } ///---------------------------------------------------------------- /// Method to add data to be averaged / rms'd /// set last to true to do the mean, rms calculation void IAvgRMSPlot::Add( long atime, double aval, bool alast ){ if ( aval > -0.5){ fTime.push_back( float( int(atime-fX0+GetDSTOffset( atime ) ) ) ); fVals.push_back( float(aval) ); fN++; fsum += aval; fsum2 += aval*aval; if (aval > fmax ) fmax = aval; if (aval < fmin ) fmin = aval; } if (alast==true){ if ( fN == 0 ) { fmean = 0.; frms = 0.; fmin = 0.; fmax = 0.; } else { fmean = fsum / float(fN); } if ( fN > 1 ){ frms = (fsum2 - float(fN)*fmean*fmean)/float(fN-1); if (frms > 0. ) frms = sqrt(frms); else frms = 0.; } } return; } ///---------------------------------------------------------------- /// Print the statistics on a set of measurements void IAvgRMSPlot::Print(const char * avname, bool doprint ){ fName = std::string( avname ); if (doprint==true){ std::cout<SetTitle(tgtitl); sprintf( tgname,"%svst_g",atagname); fGraph->SetName(tgname); fGraph->GetXaxis()->SetTimeDisplay(1); fGraph->GetXaxis()->SetTimeFormat("#splitline{%b-%d}{%H:%M}"); fGraph->GetXaxis()->SetLabelOffset(0.03); fGraph->GetXaxis()->SetTimeOffset( fX0, "gmt"); fGraph->GetXaxis()->SetNdivisions(507); fGraph->GetXaxis()->SetLabelSize(0.04); sprintf( tgtitl, "%s; %s; Frequency",fName.c_str(),fName.c_str()); sprintf( tgname,"%svst_h",atagname); if ( fIsInteger==true ){ int nbins = int(fmax)-int(fmin)+1; fHist = new TH1F( tgtitl, tgname, nbins, fmin-0.5, fmax+0.5 ); } else { fHist = new TH1F( tgtitl, tgname, 50, fmin, fmax ); } fHist->GetXaxis()->SetTitle( fName.c_str() ); for ( int i=0; iFill( fVals[i] ); if ( saveplot==true ){ sprintf( tgname,"tc%svst",atagname); TCanvas tc(tgname, tgname); tc.Divide(1,2); tc.cd(1); fGraph->Draw("AP"); tc.cd(2); fHist->Draw(); sprintf( tgname,"%svst.png",atagname); tc.Print(tgname); sprintf( tgname,"%svst.root",atagname); tc.Print(tgname); } return; }