diff --git a/examples/report.template b/examples/report.template index 5856b9fa3ddd981872b1450616f7bd56e24a7278..e40bf12b514e6c79c4d9a8ef0aa25f24344d762f 100644 --- a/examples/report.template +++ b/examples/report.template @@ -28,6 +28,10 @@ a c-style format after the expression. The HMS reconstruction coefficient file name is {h_recon_coeff_filename} The names of the HMS drift chamber planes are: {hdc_plane_names} +DC Events: {hdc_tot_events} +Hit in chamber: {hdc_cham_hits[0]/hdc_tot_events:%.3f} {hdc_cham_hits[1]/hdc_tot_events:%.3f} +Hit in plane: {hdc_hits_per_plane[0]/hdc_tot_events:%.3f} {hdc_hits_per_plane[1]/hdc_tot_events:%.3f} {hdc_hits_per_plane[2]/hdc_tot_events:%.3f} {hdc_hits_per_plane[3]/hdc_tot_events:%.3f} {hdc_hits_per_plane[4]/hdc_tot_events:%.3f} {hdc_hits_per_plane[5]/hdc_tot_events:%.3f} {hdc_hits_per_plane[6]/hdc_tot_events:%.3f} {hdc_hits_per_plane[7]/hdc_tot_events:%.3f} {hdc_hits_per_plane[8]/hdc_tot_events:%.3f} {hdc_hits_per_plane[9]/hdc_tot_events:%.3f} {hdc_hits_per_plane[10]/hdc_tot_events:%.3f} {hdc_hits_per_plane[11]/hdc_tot_events:%.3f} + Later, such things as hardware scalers will be added to the set of variables that can be used in expressions. diff --git a/src/THcDC.cxx b/src/THcDC.cxx index b963890ebb176face292160a7d3c0365db578d38..823f34b0648afe6a2548e10d06ef22e44d2e9b25 100644 --- a/src/THcDC.cxx +++ b/src/THcDC.cxx @@ -80,18 +80,17 @@ void THcDC::Setup(const char* name, const char* description) { static const char* const here = "Setup"; - char prefix[2]; THaApparatus *app = GetApparatus(); if(app) { cout << app->GetName() << endl; + fPrefix[0]=tolower(app->GetName()[0]); + fPrefix[1]='\0'; } else { cout << "No apparatus found" << endl; + fPrefix[0]='\0'; } - prefix[0]=tolower(app->GetName()[0]); - prefix[1]='\0'; - string planenamelist; DBRequest list[]={ {"dc_num_planes",&fNPlanes, kInt}, @@ -102,7 +101,7 @@ void THcDC::Setup(const char* name, const char* description) {0} }; - gHcParms->LoadParmValues((DBRequest*)&list,prefix); + gHcParms->LoadParmValues((DBRequest*)&list,fPrefix); cout << planenamelist << endl; cout << "Drift Chambers: " << fNPlanes << " planes in " << fNChambers << " chambers" << endl; @@ -164,7 +163,8 @@ THaAnalysisObject::EStatus THcDC::Init( const TDatime& date ) static const char* const here = "Init()"; Setup(GetName(), GetTitle()); // Create the subdetectors here - + EffInit(); + // Should probably put this in ReadDatabase as we will know the // maximum number of hits after setting up the detector map THcHitList::InitHitList(fDetMap, "THcRawDCHit", 1000); @@ -231,7 +231,6 @@ Int_t THcDC::ReadDatabase( const TDatime& date ) // 'date' contains the date/time of the run being analyzed. // static const char* const here = "ReadDatabase()"; - char prefix[2]; // Read data from database // Pull values from the THcParmList instead of reading a database @@ -243,10 +242,6 @@ Int_t THcDC::ReadDatabase( const TDatime& date ) // Will need to determine which spectrometer in order to construct // the parameter names (e.g. hscin_1x_nr vs. sscin_1x_nr) - prefix[0]=tolower(GetApparatus()->GetName()[0]); - - prefix[1]='\0'; - delete [] fXCenter; fXCenter = new Double_t [fNChambers]; delete [] fYCenter; fYCenter = new Double_t [fNChambers]; delete [] fMinHits; fMinHits = new Int_t [fNChambers]; @@ -311,7 +306,7 @@ Int_t THcDC::ReadDatabase( const TDatime& date ) {"debugtrackprint", &fdebugtrackprint , kInt}, {0} }; - gHcParms->LoadParmValues((DBRequest*)&list,prefix); + gHcParms->LoadParmValues((DBRequest*)&list,fPrefix); if(fNTracksMaxFP <= 0) fNTracksMaxFP = 10; // if(fNTracksMaxFP > HNRACKS_MAX) fNTracksMaxFP = NHTRACKS_MAX; cout << "Plane counts:"; @@ -453,6 +448,7 @@ Int_t THcDC::Decode( const THaEvData& evdata ) } cout << endl; } + Eff(); // Accumlate statistics return fNhits; } @@ -473,6 +469,7 @@ Int_t THcDC::CoarseTrack( TClonesArray& tracks ) // Apply corrections and reconstruct the complete hits. // // static const Double_t sqrt2 = TMath::Sqrt(2.); + for(Int_t i=0;i<fNChambers;i++) { fChambers[i]->FindSpacePoints(); fChambers[i]->CorrectHitTimes(); @@ -974,5 +971,53 @@ Double_t THcDC::DpsiFun(Double_t ray[4], Int_t plane) return(DpsiFun); } +//_____________________________________________________________________________ +Int_t THcDC::End(THaRunBase* run) +{ + // EffCalc(); +} + +//_____________________________________________________________________________ +void THcDC::EffInit() +{ + // Create, and initialize counters used to calculate + // efficiencies. Register the counters in gHcParms so that the + // variables can be used in end of run reports. + + delete [] fNChamHits; fNChamHits = new Int_t [fNChambers]; + delete [] fHitsPerPlane; fHitsPerPlane = new Int_t [fNPlanes]; + + fTotEvents = 0; + for(Int_t i=0;i<fNChambers;i++) { + fNChamHits[i] = 0; + } + for(Int_t i=0;i<fNPlanes;i++) { + fHitsPerPlane[i] = 0; + } + gHcParms->Define(Form("%sdc_tot_events",fPrefix),"Total DC Events",fTotEvents); + gHcParms->Define(Form("%sdc_cham_hits[%d]",fPrefix,fNChambers),"N events with hits per chamber",*fNChamHits); + gHcParms->Define(Form("%sdc_hits_per_plane[%d]",fPrefix,fNPlanes),"N events with hits per plane",*fHitsPerPlane); + cout << Form("%sdc_hits_per_plane[%d]",fPrefix,fNPlanes) << endl; +} + +//_____________________________________________________________________________ +void THcDC::Eff() +{ + // Accumulate statistics for efficiency calculations + + fTotEvents++; + for(Int_t i=0;i<fNChambers;i++) { + if(fChambers[i]->GetNHits()>0) fNChamHits[i]++; + cout << fNChamHits[i] << " "; + } + cout << endl; + for(Int_t i=0;i<fNPlanes;i++) { + if(fPlanes[i]->GetNHits() > 0) fHitsPerPlane[i]++; + cout << fHitsPerPlane[i] << " "; + } + cout << endl; + return; +} + ClassImp(THcDC) //////////////////////////////////////////////////////////////////////////////// diff --git a/src/THcDC.h b/src/THcDC.h index fecf5be966ac3c7626d24b2e5aada4ea66402ca6..041b2eb6baf4bd2b5ef7d131469e7b359c538ea7 100644 --- a/src/THcDC.h +++ b/src/THcDC.h @@ -84,6 +84,7 @@ protected: // Calibration // Hall C Parameters + char fPrefix[2]; Int_t fNPlanes; // Total number of DC planes char** fPlaneNames; Int_t fNChambers; @@ -137,6 +138,11 @@ protected: Double_t* fSigma; Double_t** fPlaneCoeffs; + // For accumulating statitics for efficiencies + Int_t fTotEvents; + Int_t* fNChamHits; + Int_t* fHitsPerPlane; + // Useful derived quantities // double tan_angle, sin_angle, cos_angle; @@ -155,6 +161,9 @@ protected: void LinkStubs(); void TrackFit(); Double_t DpsiFun(Double_t ray[4], Int_t plane); + Int_t End(THaRunBase* run); + void EffInit(); + void Eff(); void Setup(const char* name, const char* description); diff --git a/src/THcDriftChamber.h b/src/THcDriftChamber.h index d9e1afa0c0861368fc0d2e395c9d81dcc0f7016a..33eb2458d2d7274240a4ba6397d035e90d1a4e0a 100644 --- a/src/THcDriftChamber.h +++ b/src/THcDriftChamber.h @@ -44,7 +44,7 @@ public: virtual void Clear( Option_t* opt="" ); - // Int_t GetNHits() const { return fNhit; } + Int_t GetNHits() const { return fNhits; } Int_t GetNSpacePoints() const { return(fNSpacePoints);} Int_t GetNTracks() const { return fTrackProj->GetLast()+1; } const TClonesArray* GetTrackHits() const { return fTrackProj; }