HighLAND
CreateFlatTree.hxx
1 #ifndef CreateFlatTree_h
2 #define CreateFlatTree_h
3 
4 #include "SimpleLoopBase.hxx"
5 #include "DataClassesIO.hxx"
6 #include "InputManager.hxx"
7 #include "RooTrackerVtxManager.hxx"
8 #include <set>
9 
11  public:
12 
13  CreateFlatTree(int argc, char *argv[]);
14  virtual ~CreateFlatTree(){}
15 
16 protected:
17 
18  //---- These are mandatory functions
19  virtual bool Initialize ();
20  virtual bool InitializeSpill(){return _rooVtxManager.InitializeEntry();}
21 
22  virtual void DefineOutputTree();
23 
24  virtual void FinalizeSpill(){}
25  virtual void Finalize ();
26 
27  virtual bool Process();
28  //--------------------
29 
30  virtual void FillSpillVariables();
31 
32  virtual bool CheckTruthFillFlatTree(const AnaSpill& spill);
33  virtual bool CheckReconFillFlatTree(const AnaBunch& bunch);
34  virtual bool CheckReconFillFlatTreeOutOfBunch(const AnaBunch& bunch);
35 
36  virtual bool CheckTrueVertexReaction(const AnaTrueVertex& vtx);
37  virtual bool CheckTrueVertexDetector(unsigned long det);
38  virtual void CreateListOfTrueParticlesToSave();
39  virtual AnaTrueParticleB* GetTrueParticleByID(int ID);
40 
41  virtual void FillFlatTree();
42 
43  virtual void DefineSpill (AnaSpillIO* spill ){spill ->Define(*this,"s" );}
44  virtual void DefineTrueVertex (AnaTrueVertexIO* trueVertex ){trueVertex ->Define(*this,"sNTrueVertices", "sTrueVertex" );}
45  virtual void DefineTrueParticle (AnaTrueParticleIO* trueParticle){trueParticle ->Define(*this,"sNTrueTracks", "sTrueTrack" );}
46  virtual void DefineFgdTimeBin (AnaFgdTimeBinIO* fgdTimeBin ){fgdTimeBin ->Define(*this,"sNFgdTimeBins", "sFgdTimeBin" );}
47  virtual void DefineBunch (AnaBunchIO* bunch ){bunch ->Define(*this,"" );}
48  virtual void DefineTrack (AnaTrackIO* track ){track ->Define(*this,"NTracks", "tr" );}
49  virtual void DefineVertex (AnaVertexIO* vertex ){vertex ->Define(*this,"NVertices", "v" );}
50  virtual void DefineTPCParticle (AnaTPCParticleIO* tpc ){tpc ->Define(*this,"NTracks", "trTpc" );}
51  virtual void DefineFGDParticle (AnaFGDParticleIO* fgd ){fgd ->Define(*this,"NTracks", "trFgd" );}
52  virtual void DefineECALParticle (AnaECALParticleIO* ecal ){ecal ->Define(*this,"NTracks", "trECAL" );}
53  virtual void DefineSMRDParticle (AnaSMRDParticleIO* smrd ){smrd ->Define(*this,"NTracks", "trSMRD" );}
54  virtual void DefineP0DParticle (AnaP0DParticleIO* p0d ){p0d ->Define(*this,"NTracks", "trP0D" );}
55  virtual void DefineTrackerTrack (AnaTrackerTrackIO* tracker ){tracker ->Define(*this,"NTracks", "trTRACKER" );}
56  virtual void DefineTECALReconObject (AnaTECALReconObjectIO* tecal ){tecal ->Define(*this,"tecalReconCounter", "tecalRecon" );}
57  virtual void DefineTECALUnmatchedObject(AnaTECALUnmatchedObjectIO* tecal ){tecal ->Define(*this,"tecalUnmatchedCounter","tecalUnmatched");}
58  virtual void DefineP0DReconVertex (AnaP0DReconVertexIO* p0dVertex ){p0dVertex ->Define(*this,"p0dVertexCounter", "p0dVertex" );}
59  virtual void DefineP0DReconParticle (AnaP0DReconParticleIO* p0dParticle){p0dParticle->Define(*this,"p0dParticleCounter", "p0dParticle" );}
60 
61  virtual void WriteTrueParticle(AnaTrueParticleIO *trueParticle, int trueVertexIndex ){trueParticle->Write(*this, trueVertexIndex,"sTrueTrack");}
62  virtual void WriteVertex (AnaVertexIO *vertex, const std::vector<int> trueVertexIndices){vertex ->Write(*this, trueVertexIndices,"v" );}
63 
64  virtual void WriteTrueVertex (AnaTrueVertexIO *trueVertex ){trueVertex ->Write(*this, "sTrueVertex" );}
65  virtual void WriteFgdTimeBin (AnaFgdTimeBinIO *fgdTimeBin ){fgdTimeBin ->Write(*this, "sFgdTimeBin" );}
66  virtual void WriteBunch (AnaBunchIO *bunch ){bunch ->Write(*this, "" );}
67  virtual void WriteTrack (AnaTrackIO *track ){track ->Write(*this, "tr" );}
68  virtual void WriteTPCParticle (AnaTPCParticleIO *tpc ){tpc ->Write(*this, "trTpc" );}
69  virtual void WriteFGDParticle (AnaFGDParticleIO *fgd ){fgd ->Write(*this, "trFgd" );}
70  virtual void WriteECALParticle (AnaECALParticleIO *ecal ){ecal ->Write(*this, "trECAL" );}
71  virtual void WriteSMRDParticle (AnaSMRDParticleIO *smrd ){smrd ->Write(*this, "trSMRD" );}
72  virtual void WriteP0DParticle (AnaP0DParticleIO *p0d ){p0d ->Write(*this, "trP0D" );}
73  virtual void WriteTrackerTrack (AnaTrackerTrackIO *tracker, int j ){tracker ->Write(*this, "trTRACKER", -1, j );}
74  virtual void WriteTECALReconObject (AnaTECALReconObjectIO *tecal ){tecal ->Write(*this, "tecalRecon" );}
75  virtual void WriteTECALUnmatchedObject(AnaTECALUnmatchedObjectIO *tecal ){tecal ->Write(*this, "tecalUnmatched" );}
76  virtual void WriteP0DReconVertex (AnaP0DReconVertexIO *p0dVertex ){p0dVertex ->Write(*this, "p0dVertex" );}
77  virtual void WriteP0DReconParticle (AnaP0DReconParticleIO *p0dParticle ){p0dParticle ->Write(*this, "p0dParticle" );}
78 
79  virtual int FindTrueVertexIndex(AnaTrueVertexB* vertex);
80 
81  bool CheckWriteSegment(SubDetId::SubDetEnum det, const AnaParticleB& seg);
82  void ResetCheckWriteSegment();
83 
84 
85  enum flatTreeVars{
86  sPOTSincePreviousSpill = TreeVars::TreeVarsLast+1
87  };
88 
89  enum flatTreeIndex{
90  flattree = OutputManager::enumSpecialTreesLast+1
91  };
92 
93 
94 protected:
95 
96  RooTrackerVtxManager _rooVtxManager;
97 
98  bool _saveTruthWithRecon;
99  bool _saveRoo;
100 
101  bool _saveTPCInfo;
102  bool _saveFGDInfo;
103  bool _saveECALInfo;
104  bool _saveP0DInfo;
105  bool _saveSMRDInfo;
106  bool _saveTrackerInfo;
107 
108  // read the parameters file to decide if information from the local reconstruction should
109  // be saved to the flat tree.
110  bool _saveReconDirTECALInfo;
111  bool _saveReconDirPECALInfo;
112  bool _saveReconDirP0DInfo;
113  bool _saveReconDirFGDOnlyInfo;
114 
115  bool _useTPC1;
116  bool _useTPC2;
117  bool _useTPC3;
118  bool _useFGD1;
119  bool _useFGD2;
120  bool _useP0D;
121  bool _useDsECal;
122  bool _useTrECal;
123  bool _useP0DECal;
124  bool _useSMRD;
125 
126  bool _useTPC1outOfBunch;
127  bool _useTPC2outOfBunch;
128  bool _useTPC3outOfBunch;
129  bool _useFGD1outOfBunch;
130  bool _useFGD2outOfBunch;
131  bool _useP0DoutOfBunch;
132  bool _useDsECaloutOfBunch;
133  bool _useTrECaloutOfBunch;
134  bool _useP0DECaloutOfBunch;
135  bool _useSMRDoutOfBunch;
136 
137  bool _saveTrueNuNC;
138  bool _saveTrueAntiNuNC;
139  bool _saveTrueNumuCC;
140  bool _saveTrueAntiNumuCC;
141  bool _saveTrueNueCC;
142  bool _saveTrueAntiNueCC;
143 
144  double _POTSincePreviousSpill;
145 
146  bool _spill_filled;
147 
148  std::set<int> _trueParticleIDs;
149 
150  std::vector<SubDetId::SubDetEnum> _saveTrueVertexInDet;
151 
152  std::vector<AnaTrueVertex*> _savedTrueVertices;
153 
154  Int_t _max_nodes[10];
155 
156 
157 };
158 
159 #endif
Representation of a true Monte Carlo trajectory/particle.
Representation of an ECAL segment of a global track.
Representation of a true Monte Carlo vertex.
Representation of a true Monte Carlo vertex.
Representation of an SMRD segment of a global track.
virtual void FinalizeSpill()
Finalize each spill, including cleaning up data read from the input file.
virtual bool Process()
Representation of a true Monte Carlo vertex.
Definition: DataClasses.hxx:50
Representation of a true Monte Carlo trajectory/particle.
virtual bool InitializeSpill()
SubDetEnum
Enumeration of all detector systems and subdetectors.
Definition: SubDetId.hxx:25
Representation of a Tracker segment of a global track.
Representation of a FGD segment of a global track.
Representation of a P0D segment of a global track.
virtual bool Initialize()
Representation of a global track.
Representation of a reconstructed particle (track or shower).
virtual void DefineOutputTree()
Define the tree that should be written to the output file.
Representation of a TPC segment of a global particle.
virtual void Finalize()
Representation of a global vertex.