2 #include "TG4PrimaryParticle.hxx"
3 #include "TG4PrimaryVertex.hxx"
4 #include "TGeomInfo.hxx"
5 #include "TND280Log.hxx"
6 #include "TOADatabase.hxx"
7 #include "TP0DGeom.hxx"
11 fVtx =
new TClonesArray(
"ND::NRooTrackerVtx", 100);
15 fDescription =
"Neut-specific module which fills mc-truth vertex info";
22 std::string name2compare(name);
23 bool is_neut1 = (name2compare.find(
"neut") != name2compare.npos);
24 bool is_neut2 = (name2compare.find(
"nRooTracker") != name2compare.npos);
25 bool is_neut = (is_neut1 || is_neut2);
26 ND280Debug(
"Returning is generator = " << is_neut
27 <<
" for generator name = " << name);
32 if (fCurrNeutVtx == NULL) {
37 (fCurrNeutVtx->EvtCode->GetString().CompareTo(vtx.GetReaction()) == 0);
38 ND280Debug(
"Comparing " << fCurrNeutVtx->EvtCode->GetString().Data()
39 <<
" and " << vtx.GetReaction());
41 double smallnum = 0.000001;
43 (std::abs(fCurrNeutVtx->EvtVtx[0] - vtx.GetPosition().X()) < smallnum) &&
44 (std::abs(fCurrNeutVtx->EvtVtx[1] - vtx.GetPosition().Y()) < smallnum) &&
45 (std::abs(fCurrNeutVtx->EvtVtx[2] - vtx.GetPosition().Z()) < smallnum);
48 if (position && evtcode) {
49 ND280Debug(
"Pass-through vertex passed mismatch test!");
53 ND280Error(
"SEVERE ERROR! Mismatch between G4Vertex and pass-through info!");
58 if (vtx.GetPrimaryParticles().size() == 1 &&
59 vtx.GetInteractionNumber() == 0 && vtx.GetProbability() == 0 &&
60 vtx.GetCrossSection() == 0 && vtx.GetDiffCrossSection() == 0 &&
61 vtx.GetPrimaryParticles().begin()->GetPDGCode() == 0)
68 fCurrNeutVtx->Reset();
69 fRooTrackerTree->GetEntry(entry);
72 fCurrNeutVtx->OrigFileName->SetString(fOrigInputFileName.c_str());
73 fCurrNeutVtx->OrigTreeName->SetString(fInputTreeName.c_str());
74 fCurrNeutVtx->OrigEvtNum = fOrigTreeEntryNumber;
75 fCurrNeutVtx->OrigTreePOT = fOrigInputTreePOT;
76 fCurrNeutVtx->OrigTreeEntries = fOrigInputTreeEntries;
77 fCurrNeutVtx->TimeInSpill = fTimeInSpill;
78 fCurrNeutVtx->TruthVertexID = fTruthVertexID;
81 fCurrNeutVtx->EvtVtx[0] *= 1000.0;
82 fCurrNeutVtx->EvtVtx[1] *= 1000.0;
83 fCurrNeutVtx->EvtVtx[2] *= 1000.0;
86 gGeoManager->FindNode(fCurrNeutVtx->EvtVtx[0], fCurrNeutVtx->EvtVtx[1],
87 fCurrNeutVtx->EvtVtx[2]);
90 fCurrNeutVtx->GeneratorName->SetString(fGeneratorName.c_str());
93 fCurrNeutVtx->GeomPath->SetString(gGeoManager->GetPath());
102 fNRooTrackerVtx->
Copy(fCurrNeutVtx);
111 fRooTrackerTree->SetBranchAddress(
"EvtCode", &(fCurrNeutVtx->EvtCode));
112 fRooTrackerTree->SetBranchAddress(
"EvtNum", &(fCurrNeutVtx->EvtNum));
113 fRooTrackerTree->SetBranchAddress(
"EvtXSec", &(fCurrNeutVtx->EvtXSec));
114 fRooTrackerTree->SetBranchAddress(
"EvtDXSec", &(fCurrNeutVtx->EvtDXSec));
115 fRooTrackerTree->SetBranchAddress(
"EvtWght", &(fCurrNeutVtx->EvtWght));
116 fRooTrackerTree->SetBranchAddress(
"EvtProb", &(fCurrNeutVtx->EvtProb));
117 fRooTrackerTree->SetBranchAddress(
"EvtVtx", (fCurrNeutVtx->EvtVtx));
118 fRooTrackerTree->SetBranchAddress(
"StdHepN", &(fCurrNeutVtx->StdHepN));
119 fRooTrackerTree->SetBranchAddress(
"StdHepPdg",
120 &(fCurrNeutVtx->StdHepPdgTemp));
121 fRooTrackerTree->SetBranchAddress(
"StdHepStatus",
122 &(fCurrNeutVtx->StdHepStatusTemp));
123 fRooTrackerTree->SetBranchAddress(
"StdHepX4", (fCurrNeutVtx->StdHepX4));
124 fRooTrackerTree->SetBranchAddress(
"StdHepP4", (fCurrNeutVtx->StdHepP4));
125 fRooTrackerTree->SetBranchAddress(
"StdHepPolz", (fCurrNeutVtx->StdHepPolz));
126 fRooTrackerTree->SetBranchAddress(
"StdHepFd", (fCurrNeutVtx->StdHepFdTemp));
127 fRooTrackerTree->SetBranchAddress(
"StdHepLd", (fCurrNeutVtx->StdHepLdTemp));
128 fRooTrackerTree->SetBranchAddress(
"StdHepFm", (fCurrNeutVtx->StdHepFmTemp));
129 fRooTrackerTree->SetBranchAddress(
"StdHepLm", (fCurrNeutVtx->StdHepLmTemp));
132 fRooTrackerTree->SetBranchAddress(
"NEnvc", &(fCurrNeutVtx->NEnvc));
133 fRooTrackerTree->SetBranchAddress(
"NEipvc", (fCurrNeutVtx->NEipvcTemp));
134 fRooTrackerTree->SetBranchAddress(
"NEpvc", (fCurrNeutVtx->NEpvc));
135 fRooTrackerTree->SetBranchAddress(
"NEiorgvc", (fCurrNeutVtx->NEiorgvcTemp));
136 fRooTrackerTree->SetBranchAddress(
"NEiflgvc", (fCurrNeutVtx->NEiflgvcTemp));
137 fRooTrackerTree->SetBranchAddress(
"NEicrnvc", (fCurrNeutVtx->NEicrnvcTemp));
139 fRooTrackerTree->SetBranchAddress(
"NEnvert", &(fCurrNeutVtx->NEnvert));
140 fRooTrackerTree->SetBranchAddress(
"NEposvert", (fCurrNeutVtx->NEposvert));
141 fRooTrackerTree->SetBranchAddress(
"NEiflgvert",
142 (fCurrNeutVtx->NEiflgvertTemp));
143 fRooTrackerTree->SetBranchAddress(
"NEnvcvert", &(fCurrNeutVtx->NEnvcvert));
144 fRooTrackerTree->SetBranchAddress(
"NEdirvert", (fCurrNeutVtx->NEdirvert));
145 fRooTrackerTree->SetBranchAddress(
"NEabspvert",
146 (fCurrNeutVtx->NEabspvertTemp));
147 fRooTrackerTree->SetBranchAddress(
"NEabstpvert",
148 (fCurrNeutVtx->NEabstpvertTemp));
149 fRooTrackerTree->SetBranchAddress(
"NEipvert", (fCurrNeutVtx->NEipvertTemp));
150 fRooTrackerTree->SetBranchAddress(
"NEiverti", (fCurrNeutVtx->NEivertiTemp));
151 fRooTrackerTree->SetBranchAddress(
"NEivertf", (fCurrNeutVtx->NEivertfTemp));
155 fRooTrackerTree->SetBranchAddress(
"NEcrsx", &(fCurrNeutVtx->NEcrsx));
156 fRooTrackerTree->SetBranchAddress(
"NEcrsy", &(fCurrNeutVtx->NEcrsy));
157 fRooTrackerTree->SetBranchAddress(
"NEcrsz", &(fCurrNeutVtx->NEcrsz));
158 fRooTrackerTree->SetBranchAddress(
"NEcrsphi", &(fCurrNeutVtx->NEcrsphi));
161 fHaveNFBranches = !fRooTrackerTree->SetBranchAddress(
"NFnvert", &(fCurrNeutVtx->NFnvert));
163 fRooTrackerTree->SetBranchAddress(
"NFiflag", (fCurrNeutVtx->NFiflagTEMP));
164 fRooTrackerTree->SetBranchAddress(
"NFx", (fCurrNeutVtx->NFxTEMP));
165 fRooTrackerTree->SetBranchAddress(
"NFy", (fCurrNeutVtx->NFyTEMP));
166 fRooTrackerTree->SetBranchAddress(
"NFz", (fCurrNeutVtx->NFzTEMP));
167 fRooTrackerTree->SetBranchAddress(
"NFpx", (fCurrNeutVtx->NFpxTEMP));
168 fRooTrackerTree->SetBranchAddress(
"NFpy", (fCurrNeutVtx->NFpyTEMP));
169 fRooTrackerTree->SetBranchAddress(
"NFpz", (fCurrNeutVtx->NFpzTEMP));
170 fRooTrackerTree->SetBranchAddress(
"NFe", (fCurrNeutVtx->NFeTEMP));
171 fRooTrackerTree->SetBranchAddress(
"PCascProb", &(fCurrNeutVtx->PCascProb));
173 fRooTrackerTree->SetBranchAddress(
"NFfirststep",
174 (fCurrNeutVtx->NFfirststepTEMP));
175 fRooTrackerTree->SetBranchAddress(
"NFnstep", &(fCurrNeutVtx->NFnstep));
176 fRooTrackerTree->SetBranchAddress(
"NFecms2", (fCurrNeutVtx->NFecms2TEMP));
177 fRooTrackerTree->SetBranchAddress(
"Prob", (fCurrNeutVtx->ProbTEMP));
178 fRooTrackerTree->SetBranchAddress(
"VertFlagStep", (fCurrNeutVtx->VertFlagStepTEMP));
179 fRooTrackerTree->SetBranchAddress(
"VertFsiRhon", (fCurrNeutVtx->VertFsiRhonTEMP));
180 fRooTrackerTree->SetBranchAddress(
"StepPel", (fCurrNeutVtx->StepPelTEMP));
181 fRooTrackerTree->SetBranchAddress(
"StepPsp", (fCurrNeutVtx->StepPspTEMP));
182 fRooTrackerTree->SetBranchAddress(
"StepPdp", (fCurrNeutVtx->StepPdpTEMP));
184 ND280NamedLog(
"TNRooTrackerVtxModule",
"Passthrough tree doesn't contain"
185 " nucleon FSI tracking information, these branches will remain off.");
187 fRooTrackerTree->SetBranchAddress(
"SPIDelta", &(fCurrNeutVtx->SPIDelta));
188 fRooTrackerTree->SetBranchAddress(
"IRadCorrPht", &(fCurrNeutVtx->IRadCorrPht));
194 if(fFilledConfigTree){
195 ND280NamedWarn(
"TNRooTrackerVtxModule",
"Module: " << this->GetName()
196 <<
" has already written the config tree this run.");
213 configTree->Branch(
"kNStdHepNPmax", &kNStdHepNPmax_hldr,
"kNStdHepNPmax/I");
214 configTree->Branch(
"kNStdHepIdxPx", &kNStdHepIdxPx_hldr,
"kNStdHepIdxPx/I");
215 configTree->Branch(
"kNStdHepIdxPy", &kNStdHepIdxPy_hldr,
"kNStdHepIdxPy/I");
216 configTree->Branch(
"kNStdHepIdxPz", &kNStdHepIdxPz_hldr,
"kNStdHepIdxPz/I");
217 configTree->Branch(
"kNStdHepIdxE", &kNStdHepIdxE_hldr,
"kNStdHepIdxE/I");
218 configTree->Branch(
"kNStdHepIdxX", &kNStdHepIdxX_hldr,
"kNStdHepIdxX/I");
219 configTree->Branch(
"kNStdHepIdxY", &kNStdHepIdxY_hldr,
"kNStdHepIdxY/I");
220 configTree->Branch(
"kNStdHepIdxZ", &kNStdHepIdxZ_hldr,
"kNStdHepIdxZ/I");
221 configTree->Branch(
"kNStdHepIdxT", &kNStdHepIdxT_hldr,
"kNStdHepIdxT/I");
222 configTree->Branch(
"kNEmaxvc", &kNEmaxvc_hldr,
"kNEmaxvc/I");
223 configTree->Branch(
"kNEmaxvert", &kNEmaxvert_hldr,
"kNEmaxvert/I");
224 configTree->Branch(
"kNEmaxvertp", &kNEmaxvertp_hldr,
"kNEmaxvertp/I");
void SetFluxTreeAddresses(ND::JNuBeamFlux *flux)
void Copy(const NRooTrackerVtx *event)
std::string fDescription
A longish descrition of the analysis.
TClonesArray * fVtx
TClonesArray of vertex objects.
TNRooTrackerVtxModule(const char *name="NRooTrackerVtx", const char *title="Truth info for NEUT primary vertices from the ""nRooTracker pass-through tree")
Bool_t IsKnownGenerator(const char *)
void FillConfigTree(TTree *configTree)
void FillConfigTree(TTree *configTree)
virtual ~TNRooTrackerVtxModule()
void SetGeneratorTreeAddresses()
void SetNameTitle(char const *name, char const *title)
Bool_t IsGeantinoVtx(ND::TG4PrimaryVertex vtx)
This is a simple event class which is essentially an objectified version of the NEUT nRooTracker outp...
Bool_t CheckMismatch(ND::TG4PrimaryVertex vtx)
NRooTrackerVtx * fCurrNeutVtx