8 #ifndef oaAnalysisTreeConverter_h 9 #define oaAnalysisTreeConverter_h 14 #include <TClonesArray.h> 15 #include <TRefArray.h> 22 #include "InputConverter.hxx" 23 #include "DataClasses.hxx" 24 #include <AnalysisTools/TTruthUtils.hxx> 25 #include "AnalysisTools/libReadoaAnalysis/libReadoaAnalysisProjectHeaders.h" 26 #include <AnalysisTools/TECALPidLikelihood.hxx> 27 #include "GeometryManager.hxx" 28 #include "ND280AnalysisUtils.hxx" 29 #include <ND280BeamBunching.hxx> 32 #include <P0DDataClasses.hxx> 34 const UInt_t NMAXP0DALGORES=50;
37 const double _trueBunchShift = 2690.;
55 virtual Int_t ReadEntries(Long64_t& entry);
87 virtual void GetBunchLocalP0DObjects();
88 virtual void GetBunchLocalP0DObjectsInAlgoResult(Int_t iAlgoRes);
90 virtual void FillP0DBunch(
AnaBunchB* bunch,
int ibunch, Int_t iAlgoRes);
91 virtual void FillP0DVertices(
const std::vector<Int_t>& indices,
AnaP0DBunch* bunch);
92 virtual void FillP0DParticles(
const std::vector<Int_t>& indices,
AnaP0DBunch* bunch);
93 virtual void FillP0DParticlesFromTracks(
const std::vector<Int_t>& indices,
AnaP0DBunch* bunch);
94 virtual void FillP0DParticlesFromShowers(
const std::vector<Int_t>& indices,
AnaP0DBunch* bunch);
95 virtual void FillP0DClusters(
const std::vector<Int_t>& indices,
AnaP0DBunch* bunch);
97 ND::TP0DReconModule::TP0DParticle* GetP0DReconParticleWithUniqueID(UInt_t uniqueID);
99 void FillDelayedClustersInfo(
AnaSpill& spill);
114 virtual void FillInfo(
AnaSpill* spill);
115 virtual void FillBunchInfo(
AnaSpill* spill);
116 virtual void FillPIDs(
AnaBunch* bunch,
int ibunch);
117 virtual void FillTECALReconObjects(
AnaBunch* bunch,
int ibunch);
118 virtual void FillTECALReconUnmatchedObjects(
AnaBunch* bunch,
int ibunch);
119 virtual void FillP0DReconVertices(
AnaBunch* bunch,
int ibunch);
120 virtual void FillP0DReconParticles(
AnaBunch* bunch,
int ibunch);
121 virtual void FillP0DReconClusters(
AnaBunch* bunch,
int ibunch);
122 virtual void FillGlobalVertices(
AnaSpill* spill);
123 virtual void DeleteBadObjects(
AnaSpill* spill);
127 virtual void FillTrackInfo(ND::TGlobalReconModule::TGlobalPID& PID,
AnaTrack* track);
128 virtual void FillVertexInfo(ND::TGlobalReconModule::TGlobalVertex& global_vertex,
AnaVertex* vertex,
AnaBunch* bunch,
AnaSpill* spill);
130 virtual void FillTrueVerticesMatchInfo(ND::TTrueVertex* matchedTrueVertex,
AnaVertex* vertex,
AnaBunch* bunch);
132 virtual void FillTrueParticleRecoInfo(ND::TTrueParticle& trueParticle,
AnaTrueObjectC*& trueObj,
bool setpurity);
133 virtual void FillTrueParticleInfo(ND::TTruthTrajectoriesModule::TTruthTrajectory* truthTraj,
AnaTrueParticle* truePart,
AnaSpill* spill);
135 virtual void FillTrackHits(ND::TGlobalReconModule::TGlobalPID& PID,
AnaTrack* track);
137 virtual void FillTpcInfo(ND::TGlobalReconModule::TGlobalPID& PID,
AnaTrack* track);
138 virtual void FillTrackerInfo(ND::TGlobalReconModule::TGlobalPID& PID,
AnaTrack* track);
139 virtual void FillFgdInfo(ND::TGlobalReconModule::TGlobalPID& PID,
AnaTrack* track);
140 virtual void FillEcalInfo(ND::TGlobalReconModule::TGlobalPID& PID,
AnaTrack* track);
141 virtual void FillSmrdInfo(ND::TGlobalReconModule::TGlobalPID& PID,
AnaTrack* track);
142 virtual void FillP0dInfo(ND::TGlobalReconModule::TGlobalPID& PID,
AnaTrack* track);
144 virtual void FillTpcTrackInfo( ND::TGlobalReconModule::TTPCObject& tpcTrack,
AnaTPCParticle* seg);
145 virtual void FillTrackerTrackInfo( ND::TGlobalReconModule::TTrackerObject& trTrack,
AnaTrackerTrack* seg);
146 virtual void FillFgdTrackInfo( ND::TGlobalReconModule::TFGDObject& fgdTrack,
AnaFGDParticle* seg);
147 virtual void FillEcalTrackInfo(ND::TGlobalReconModule::TECALObject& ecalTrack,
AnaECALParticle* seg);
148 virtual void FillSmrdTrackInfo(ND::TGlobalReconModule::TSMRDObject& smrdTrack,
AnaSMRDParticle* seg);
149 virtual void FillP0dTrackInfo( ND::TGlobalReconModule::TP0DObject& p0dTrack,
AnaP0DParticle* seg);
150 virtual void FillSubdetectorTrackInfo(ND::TSubBaseObject& subTrack,
AnaParticleB* seg);
152 virtual void FillTrueInfo(
AnaSpill* spill);
153 virtual bool FillTrueVertexInfo(ND::TTruthVerticesModule::TTruthVertex* true_vertex,
AnaTrueVertex* vertex,
int v,
AnaSpill* spill);
154 virtual void FillFgdTimeBinInfo(std::vector<AnaFgdTimeBinB*>* AnaFgdTimeBins);
156 virtual void FillBeamInfo(
bool isMC,
AnaBeam* beam);
157 virtual void FillTriggerInfo(
AnaTrigger* trigger);
161 virtual void FillTECALUnmatchedObjectInfo(ND::TTrackerECALReconModule::TECALReconUnmatchedObject& tecalUnmatchedObject,
AnaTECALUnmatchedObject* anaTECALUnmatchedObject,
AnaLocalReconBunch* anaLocalBunch);
168 virtual void FillP0DReconVertexLinks( ND::TP0DReconModule::TP0DVertex& p0dVertex,
AnaP0DReconVertex* anaP0DReconVertex);
169 virtual void FillP0DReconParticleLinks(ND::TP0DReconModule::TP0DParticle& p0dParticle,
AnaP0DReconParticle* anaP0DReconParticle);
170 virtual void FillP0DReconClusterLinks( ND::TP0DReconModule::TP0DCluster& p0dCluster,
AnaP0DReconCluster* anaP0DReconCluster);
174 virtual void FillP0DVertexInfo( ND::TP0DReconModule::TP0DVertex& p0dVertex,
AnaP0DVertex* anaP0DVertex,
AnaBunchB* bunch);
175 virtual void FillP0DParticleInfo(ND::TP0DReconModule::TP0DParticle& p0dParticle,
AnaP0DParticle* anaP0DParticle);
176 virtual void FillP0DParticleInfo(ND::TP0DReconModule::TP0DTrack& p0dTrack,
AnaP0DParticle* anaP0DParticle);
177 virtual void FillP0DParticleInfo(ND::TP0DReconModule::TP0DShower& p0dShower,
AnaP0DParticle* anaP0DParticle);
178 virtual void FillP0DClusterInfo( ND::TP0DReconModule::TP0DCluster& p0dCluster,
AnaP0DCluster* anaP0DCluster);
179 virtual void FillP0DClusterInfo( ND::TP0DReconModule::TP0DNode& p0dNode,
AnaP0DCluster* anaP0DCluster);
180 virtual void FillP0DHitInfo( ND::TP0DReconModule::TP0DHit& p0dHit,
AnaP0DHit* anaP0DHit);
185 virtual void GetBunchPIDs();
186 virtual void GetBunchVertices();
187 virtual void GetBunchLocalObjects();
188 virtual double GetVertexTime(ND::TGlobalReconModule::TGlobalPID& globalTrack);
190 virtual int GetGenieReactionCode(
const std::string& reactionCode);
192 Double_t GetPOTFromRooTrackerVtx();
197 Int_t GetNVtx(){
if (NVtx)
return NNVtx;
else if (GVtx)
return NGVtx;
else return 0;}
198 TClonesArray * GetVtx() {
if (NVtx)
return NVtx;
else if (GVtx)
return GVtx;
else return NULL;}
203 std::vector<ND::TGlobalReconModule::TGlobalPID*> _bunchPIDs[NBUNCHES+1];
204 std::vector<ND::TGlobalReconModule::TGlobalVertex*> _bunchVertices[NBUNCHES+1];
207 std::vector<ND::TP0DReconModule::TP0DVertex*> _bunchP0DVertices[NBUNCHES+1];
208 std::vector<ND::TP0DReconModule::TP0DParticle*> _bunchP0DParticles[NBUNCHES+1];
209 std::vector<ND::TP0DReconModule::TP0DCluster*> _bunchP0DClusters[NBUNCHES+1];
210 std::vector<ND::TTrackerECALReconModule::TECALReconObject*> _bunchTECALObjects[NBUNCHES+1];
211 std::vector<ND::TTrackerECALReconModule::TECALReconUnmatchedObject*> _bunchTECALUnmatchedObjects[NBUNCHES+1];
214 std::map<ND::TP0DReconModule::TP0DVertex*, AnaP0DReconVertex*> _P0DReconVerticesMap;
215 std::map<ND::TP0DReconModule::TP0DParticle*, AnaP0DReconParticle*> _P0DReconParticlesMap;
216 std::map<ND::TP0DReconModule::TP0DCluster*, AnaP0DReconCluster*> _P0DReconClustersMap;
220 std::vector<Int_t> _bunchP0DVerticesInAlgoRes [NBUNCHES+1][NMAXP0DALGORES];
221 std::vector<Int_t> _bunchP0DClustersInAlgoRes [NBUNCHES+1][NMAXP0DALGORES];
222 std::vector<Int_t> _bunchP0DParticlesInAlgoRes[NBUNCHES+1][NMAXP0DALGORES];
223 std::vector<Int_t> _bunchP0DTracksInAlgoRes [NBUNCHES+1][NMAXP0DALGORES];
224 std::vector<Int_t> _bunchP0DShowersInAlgoRes [NBUNCHES+1][NMAXP0DALGORES];
226 std::vector<AnaP0DVertex*> _AnaP0DVertices;
227 std::vector<AnaP0DParticle*> _AnaP0DParticles;
228 std::vector<AnaP0DParticle*> _AnaP0DTracks;
229 std::vector<AnaP0DParticle*> _AnaP0DShowers;
230 std::vector<AnaP0DCluster*> _AnaP0DClusters;
238 Int_t _RooVtxEntryInCurrentInputFile;
240 TTruthUtils _truthUtils;
246 std::string _previousFile;
247 Int_t _previousRunID;
248 Int_t _previousSubrunID;
249 Int_t _previousRefEventID;
258 TChain *mcTruthVertices;
259 TChain *mcTruthTrajectories;
260 TChain *GRooTrackerVTX;
261 TChain *NRooTrackerVTX;
287 Bool_t FGDCosmicEvent;
288 Bool_t TripTCosmicEvent;
289 Bool_t P0DWaterStatus;
290 Char_t SoftwareVersion[50];
294 Int_t NTrECalObjects;
295 TClonesArray *TrECalObjects;
296 Int_t NTrECalUnmatched;
297 TClonesArray *TrECalUnmatched;
301 Short_t NP0DAlgoResults;
302 TClonesArray *P0DAlgoResults;
303 Short_t NP0DReconVertices;
304 TClonesArray *P0DReconVertices;
305 Short_t NP0DReconParticles;
306 TClonesArray *P0DReconParticles;
307 Short_t NP0DReconTracks;
308 TClonesArray *P0DReconTracks;
309 Short_t NP0DReconShowers;
310 TClonesArray *P0DReconShowers;
311 Short_t NP0DReconClusters;
312 TClonesArray *P0DReconClusters;
313 Short_t NP0DReconNodes;
314 TClonesArray *P0DReconNodes;
315 Short_t NP0DReconHits;
316 TClonesArray *P0DReconHits;
324 TClonesArray *Vertices;
325 Int_t NFGD1Unused,NFGD2Unused,NP0DUnused,NTPCUnused;
326 Int_t NDelayedClusters;
327 TClonesArray *DelayedClusters;
329 TClonesArray *TPCOthers;
332 TClonesArray *FgdTimeBins;
335 Int_t NTruthVertices;
339 TClonesArray *TruthVertices;
340 std::string TruthVerticesName[9];
343 TClonesArray *TruthTrajs;
344 std::string TruthTrajsName[7];
354 Int_t NXZTracks_Radon2,NYZTracks_Radon2,NXYZTracks_Radon2,NXZTracksAllFGD_Radon2,NYZTracksAllFGD_Radon2,NXYZTracksAllFGD_Radon2;
355 TClonesArray *XZTracks_Radon2;
356 TClonesArray *YZTracks_Radon2;
357 TClonesArray *XYZTracks_Radon2;
358 TClonesArray *XZTracksAllFGD_Radon2;
359 TClonesArray *YZTracksAllFGD_Radon2;
360 TClonesArray *XYZTracksAllFGD_Radon2;
363 TClonesArray *VtxP0DECal;
364 TClonesArray *beamSummary;
365 int beamSummaryDataStatus;
369 Int_t fBarECALFlag,fDSECALFlag,fECALFlag,fFGD1Flag,fFGD2Flag,fFGDFlag,fINGRIDFlag,fMAGNETFlag,fND280OffFlag;
370 Int_t fP0DECALFlag,fP0DFlag,fSMRDFlag,fTPC1Flag,fTPC2Flag,fTPC3Flag,fTPCFlag;
380 bool _isUsingReconDirP0D;
381 bool _isUsingReconDirPECAL;
382 bool _isUsingReconDirTECAL;
385 bool _isUsingReconDirP0DNew;
386 std::string _p0dAlgoResName;
387 Int_t _topP0DAlgoRes;
388 bool _addGlobalTracksToP0DVertices;
393 bool _ignoreP0DECalContainedTrueObjects;
394 bool _ignoreBrECalContainedTrueObjects;
395 bool _ignoreDsECalContainedTrueObjects;
396 bool _ignoreINGRIDContainedTrueObjects;
402 std::vector<AnaTrueParticleB*> _containedTrueParticles;
405 bool _foundPauliBlocked;
422 bool operator()(std::pair<AnaTrueVertexB*, AnaRecTrueMatchB> t1, std::pair<AnaTrueVertexB*, AnaRecTrueMatchB> t2) {
427 if (t1.first != NULL) m1 = t1.second.Cleanliness;
428 if (t2.first != NULL) m2 = t2.second.Cleanliness;
431 if (m1 != m1) m1 = -1;
432 if (m2 != m2) m2 = -1;
434 if (m1 != m2)
return m1 > m2;
441 if (vertex->
Bunch == t1.first->Bunch && vertex->
Bunch != t2.first->Bunch)
return true;
442 if (vertex->
Bunch == t2.first->Bunch && vertex->
Bunch != t1.first->Bunch)
return false;
446 return t1dist < t2dist;
bool cosmic_mode
Whether we're running in "cosmic" mode, where there is only one bunch.
Representation of the beam quality and perhaps other beam information as needed.
Representation of a global track.
Representation of the ND280 data quality flags.
void IncrementPOTBySpill()
bool _removeTrueVerticesWithNoTrueParticles
Remove uninteresting vertices.
Representation of the ND280 trigger bits.
Representation of a true Monte Carlo vertex.
Float_t Position[4]
The identified position of the global vertex.
virtual Int_t GetSpill(Long64_t &entry, AnaSpillC *&spill)
Representation of an ECAL segment of a global track.
Representation of the ND280 data quality flags.
virtual bool AddFileToTChain(const std::string &inputString)
Add the file specified to fChain, and any friend chains that were set up.
This Ana* object is used to flatten TECALReconObjects from ReconDir/TrackerECal.
Int_t Bunch
The bunch of the global vertex, based on the Position.T()
float GetSeparationSquared(const Float_t *pos1, const Float_t *pos2)
Calculate the distance between two points.
Representation of a true Monte Carlo vertex.
Representation of a true Monte Carlo trajectory/particle.
Representation of an SMRD segment of a global track.
Representation of a Tracker segment of a global track.
Representation of a global track.
Representation of a TPC segment of a global track.
Representation of a global vertex.
ecalPid::TECALPidLikelihood * _ecalPidCalc
To calculate the ECal PID likelihood variables.
Representation of a FGD segment of a global track.
Int_t GetEvent(Long64_t &entry, AnaEventC *&event)
This Ana* object is used to flatten TECALUnmatchedObjects from ReconDir/TrackerECal.
virtual bool Initialize()
bool _ignoreSMRDContainedTrueObjects
ignore some true objects when there are fully contained in the specified subdetectors ...
Representation of a TPC segment of a global track.
virtual void SetCosmicMode(const bool cosmic)
Representation of a P0D segment of a global track.
Representation of a reconstructed particle (track or shower).
Representation of a true Monte Carlo trajectory/particle.
Representation of the beam information, including POT and quality.
bool _isUsingReconDirFGDOnly
Use local reconstruction information?