From edf7b8deecbd41bf80e3795f18242afcd8e8787f Mon Sep 17 00:00:00 2001 From: "Stephen A. Wood" <saw@jlab.org> Date: Wed, 15 Jul 2015 09:33:01 -0400 Subject: [PATCH] Add methods to support THcHodoEff module Method for number of planes Method for list of plane objects Method to return "good" flags for given track, plane and counter --- src/THcHodoscope.cxx | 16 ++++++++++++++++ src/THcHodoscope.h | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/THcHodoscope.cxx b/src/THcHodoscope.cxx index 6f82178..5be33ec 100644 --- a/src/THcHodoscope.cxx +++ b/src/THcHodoscope.cxx @@ -815,6 +815,8 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) } std::vector<Double_t> dedx_temp; fdEdX.push_back(dedx_temp); // Create array of dedx per hit + std::vector<std::vector<GoodFlags> > goodflagstmp1; + fGoodFlags.push_back(goodflagstmp1); Int_t nFPTime = 0; Double_t betaChiSq = -3; @@ -847,6 +849,9 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) Int_t ihhit = 0; // Hit # overall for(Int_t ip = 0; ip < fNPlanes; ip++ ) { + std::vector<GoodFlags> goodflagstmp2; + fGoodFlags[itrack].push_back(goodflagstmp2); + fNScinHits[ip] = fPlanes[ip]->GetNScinHits(); TClonesArray* hodoHits = fPlanes[ip]->GetHits(); @@ -955,6 +960,12 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) //--------------------------------------------------------------------------------------------- for (Int_t iphit = 0; iphit < fNScinHits[ip]; iphit++ ){ + GoodFlags flags; + fGoodFlags[itrack][ip].push_back(flags); + fGoodFlags[itrack][ip][iphit].onTrack = kFALSE; + fGoodFlags[itrack][ip][iphit].goodScinTime = kFALSE; + fGoodFlags[itrack][ip][iphit].goodTdcNeg = kFALSE; + fGoodFlags[itrack][ip][iphit].goodTdcPos = kFALSE; fTOFCalc.push_back(TOFCalc()); // Do we set back to false for each track, or just once per event? @@ -1000,6 +1011,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) // ** Calculate time for each tube with a good tdc. 'pos' side first. fTOFCalc[ihhit].good_tdc_pos = kTRUE; + fGoodFlags[itrack][ip][iphit].goodTdcPos = kTRUE; Double_t path = fPlanes[ip]->GetPosLeft() - scinLongCoord; // * Convert TDC value to time, do pulse height correction, correction for @@ -1014,6 +1026,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) // ** Calculate time for each tube with a good tdc. 'pos' side first. fTOFCalc[ihhit].good_tdc_neg = kTRUE; + fGoodFlags[itrack][ip][iphit].goodTdcNeg = kTRUE; // fNtof ++; Double_t path = scinLongCoord - fPlanes[ip]->GetPosRight(); @@ -1033,11 +1046,13 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) fTOFCalc[ihhit].scin_sigma = TMath::Sqrt( fHodoPosSigma[fPIndex] * fHodoPosSigma[fPIndex] + fHodoNegSigma[fPIndex] * fHodoNegSigma[fPIndex] )/2.; fTOFCalc[ihhit].good_scin_time = kTRUE; + fGoodFlags[itrack][ip][iphit].goodScinTime = kTRUE; } else{ fTOFCalc[ihhit].scin_time = fTOFPInfo[iphit].scin_pos_time; fTOFCalc[ihhit].scin_sigma = fHodoPosSigma[fPIndex]; fTOFCalc[ihhit].good_scin_time = kTRUE; + fGoodFlags[itrack][ip][iphit].goodScinTime = kTRUE; } } else { @@ -1045,6 +1060,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) fTOFCalc[ihhit].scin_time = fTOFPInfo[iphit].scin_neg_time; fTOFCalc[ihhit].scin_sigma = fHodoNegSigma[fPIndex]; fTOFCalc[ihhit].good_scin_time = kTRUE; + fGoodFlags[itrack][ip][iphit].goodScinTime = kTRUE; } } // In h_tof.f this includes the following if condition for time at focal plane // // because it is written in FORTRAN code diff --git a/src/THcHodoscope.h b/src/THcHodoscope.h index d113af1..42d4599 100644 --- a/src/THcHodoscope.h +++ b/src/THcHodoscope.h @@ -76,6 +76,8 @@ public: Int_t GetNScinHits(Int_t iii){return fNScinHits[iii];} Int_t GetTotHits(){return fTOFCalc.size();} + Int_t GetNPlanes() { return fNPlanes;} + THcScintillatorPlane* GetPlane(Int_t ip) { return fPlanes[ip];} UInt_t GetNPaddles(Int_t iii) { return fNPaddle[iii];} Double_t GetHodoSlop(Int_t iii) { return fHodoSlop[iii];} Double_t GetPlaneCenter(Int_t iii) { return fPlaneCenter[iii];} @@ -90,6 +92,15 @@ public: Double_t GetHodoPosSigma(Int_t iii) const {return fHodoPosSigma[iii];} Double_t GetHodoNegSigma(Int_t iii) const {return fHodoNegSigma[iii];} + Bool_t GetFlags(Int_t itrack, Int_t iplane, Int_t ihit, + Bool_t& onTrack, Bool_t& goodScinTime, + Bool_t& goodTdcNeg, Bool_t& goodTdcPos) const { + onTrack = fGoodFlags[itrack][iplane][ihit].onTrack; + goodScinTime = fGoodFlags[itrack][iplane][ihit].goodScinTime; + goodTdcNeg = fGoodFlags[itrack][iplane][ihit].goodTdcNeg; + goodTdcPos = fGoodFlags[itrack][iplane][ihit].goodTdcPos; + return(kTRUE); + } const TClonesArray* GetTrackHits() const { return fTrackProj; } @@ -285,6 +296,13 @@ protected: std::vector<Int_t > fGoodScinHitsX; // # hits in fid x range // Could combine the above into a structure + struct GoodFlags { + Bool_t onTrack; + Bool_t goodScinTime; + Bool_t goodTdcNeg; + Bool_t goodTdcPos; + }; + std::vector<std::vector<std::vector<GoodFlags> > > fGoodFlags; // void ClearEvent(); -- GitLab