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 )
}
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
......
......@@ -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();
......
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