Skip to content
Snippets Groups Projects
Commit edf7b8de authored by Stephen A. Wood's avatar Stephen A. Wood
Browse files

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
parent 2286ebaa
No related branches found
No related tags found
No related merge requests found
...@@ -815,6 +815,8 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) ...@@ -815,6 +815,8 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
} }
std::vector<Double_t> dedx_temp; std::vector<Double_t> dedx_temp;
fdEdX.push_back(dedx_temp); // Create array of dedx per hit 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; Int_t nFPTime = 0;
Double_t betaChiSq = -3; Double_t betaChiSq = -3;
...@@ -847,6 +849,9 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) ...@@ -847,6 +849,9 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
Int_t ihhit = 0; // Hit # overall Int_t ihhit = 0; // Hit # overall
for(Int_t ip = 0; ip < fNPlanes; ip++ ) { for(Int_t ip = 0; ip < fNPlanes; ip++ ) {
std::vector<GoodFlags> goodflagstmp2;
fGoodFlags[itrack].push_back(goodflagstmp2);
fNScinHits[ip] = fPlanes[ip]->GetNScinHits(); fNScinHits[ip] = fPlanes[ip]->GetNScinHits();
TClonesArray* hodoHits = fPlanes[ip]->GetHits(); TClonesArray* hodoHits = fPlanes[ip]->GetHits();
...@@ -955,6 +960,12 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) ...@@ -955,6 +960,12 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
//--------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------
for (Int_t iphit = 0; iphit < fNScinHits[ip]; iphit++ ){ 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()); fTOFCalc.push_back(TOFCalc());
// Do we set back to false for each track, or just once per event? // Do we set back to false for each track, or just once per event?
...@@ -1000,6 +1011,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) ...@@ -1000,6 +1011,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
// ** Calculate time for each tube with a good tdc. 'pos' side first. // ** Calculate time for each tube with a good tdc. 'pos' side first.
fTOFCalc[ihhit].good_tdc_pos = kTRUE; fTOFCalc[ihhit].good_tdc_pos = kTRUE;
fGoodFlags[itrack][ip][iphit].goodTdcPos = kTRUE;
Double_t path = fPlanes[ip]->GetPosLeft() - scinLongCoord; Double_t path = fPlanes[ip]->GetPosLeft() - scinLongCoord;
// * Convert TDC value to time, do pulse height correction, correction for // * Convert TDC value to time, do pulse height correction, correction for
...@@ -1014,6 +1026,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) ...@@ -1014,6 +1026,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
// ** Calculate time for each tube with a good tdc. 'pos' side first. // ** Calculate time for each tube with a good tdc. 'pos' side first.
fTOFCalc[ihhit].good_tdc_neg = kTRUE; fTOFCalc[ihhit].good_tdc_neg = kTRUE;
fGoodFlags[itrack][ip][iphit].goodTdcNeg = kTRUE;
// fNtof ++; // fNtof ++;
Double_t path = scinLongCoord - fPlanes[ip]->GetPosRight(); Double_t path = scinLongCoord - fPlanes[ip]->GetPosRight();
...@@ -1033,11 +1046,13 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) ...@@ -1033,11 +1046,13 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
fTOFCalc[ihhit].scin_sigma = TMath::Sqrt( fHodoPosSigma[fPIndex] * fHodoPosSigma[fPIndex] + fTOFCalc[ihhit].scin_sigma = TMath::Sqrt( fHodoPosSigma[fPIndex] * fHodoPosSigma[fPIndex] +
fHodoNegSigma[fPIndex] * fHodoNegSigma[fPIndex] )/2.; fHodoNegSigma[fPIndex] * fHodoNegSigma[fPIndex] )/2.;
fTOFCalc[ihhit].good_scin_time = kTRUE; fTOFCalc[ihhit].good_scin_time = kTRUE;
fGoodFlags[itrack][ip][iphit].goodScinTime = kTRUE;
} }
else{ else{
fTOFCalc[ihhit].scin_time = fTOFPInfo[iphit].scin_pos_time; fTOFCalc[ihhit].scin_time = fTOFPInfo[iphit].scin_pos_time;
fTOFCalc[ihhit].scin_sigma = fHodoPosSigma[fPIndex]; fTOFCalc[ihhit].scin_sigma = fHodoPosSigma[fPIndex];
fTOFCalc[ihhit].good_scin_time = kTRUE; fTOFCalc[ihhit].good_scin_time = kTRUE;
fGoodFlags[itrack][ip][iphit].goodScinTime = kTRUE;
} }
} }
else { else {
...@@ -1045,6 +1060,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks ) ...@@ -1045,6 +1060,7 @@ Int_t THcHodoscope::FineProcess( TClonesArray& tracks )
fTOFCalc[ihhit].scin_time = fTOFPInfo[iphit].scin_neg_time; fTOFCalc[ihhit].scin_time = fTOFPInfo[iphit].scin_neg_time;
fTOFCalc[ihhit].scin_sigma = fHodoNegSigma[fPIndex]; fTOFCalc[ihhit].scin_sigma = fHodoNegSigma[fPIndex];
fTOFCalc[ihhit].good_scin_time = kTRUE; 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 } // In h_tof.f this includes the following if condition for time at focal plane
// // because it is written in FORTRAN code // // because it is written in FORTRAN code
......
...@@ -76,6 +76,8 @@ public: ...@@ -76,6 +76,8 @@ public:
Int_t GetNScinHits(Int_t iii){return fNScinHits[iii];} Int_t GetNScinHits(Int_t iii){return fNScinHits[iii];}
Int_t GetTotHits(){return fTOFCalc.size();} 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];} UInt_t GetNPaddles(Int_t iii) { return fNPaddle[iii];}
Double_t GetHodoSlop(Int_t iii) { return fHodoSlop[iii];} Double_t GetHodoSlop(Int_t iii) { return fHodoSlop[iii];}
Double_t GetPlaneCenter(Int_t iii) { return fPlaneCenter[iii];} Double_t GetPlaneCenter(Int_t iii) { return fPlaneCenter[iii];}
...@@ -90,6 +92,15 @@ public: ...@@ -90,6 +92,15 @@ public:
Double_t GetHodoPosSigma(Int_t iii) const {return fHodoPosSigma[iii];} Double_t GetHodoPosSigma(Int_t iii) const {return fHodoPosSigma[iii];}
Double_t GetHodoNegSigma(Int_t iii) const {return fHodoNegSigma[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; } const TClonesArray* GetTrackHits() const { return fTrackProj; }
...@@ -285,6 +296,13 @@ protected: ...@@ -285,6 +296,13 @@ protected:
std::vector<Int_t > fGoodScinHitsX; // # hits in fid x range std::vector<Int_t > fGoodScinHitsX; // # hits in fid x range
// Could combine the above into a structure // 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(); void ClearEvent();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment