eventAnalysis  7.0-49-g0ac7482
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
TNRooTrackerVtxModule.cxx
Go to the documentation of this file.
2 #include "TG4PrimaryParticle.hxx"
3 #include "TG4PrimaryVertex.hxx"
4 #include "TGeomInfo.hxx"
5 #include "TND280Log.hxx"
6 #include "TOADatabase.hxx"
7 #include "TP0DGeom.hxx"
8 
10  const char *title) {
11  fVtx = new TClonesArray("ND::NRooTrackerVtx", 100);
12  SetNameTitle(name, title);
13  // Enable this module by default:
14  fIsEnabled = kTRUE;
15  fDescription = "Neut-specific module which fills mc-truth vertex info";
17 }
18 
20 
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);
28  return is_neut;
29 }
30 
31 Bool_t ND::TNRooTrackerVtxModule::CheckMismatch(ND::TG4PrimaryVertex vtx) {
32  if (fCurrNeutVtx == NULL) {
33  return false;
34  }
35  // Compare the event codes.
36  bool evtcode =
37  (fCurrNeutVtx->EvtCode->GetString().CompareTo(vtx.GetReaction()) == 0);
38  ND280Debug("Comparing " << fCurrNeutVtx->EvtCode->GetString().Data()
39  << " and " << vtx.GetReaction());
40  // And the vertex position.
41  double smallnum = 0.000001;
42  bool position =
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);
46  // In future can add more but for now this should suffice along
47  // with the validation scripts.
48  if (position && evtcode) {
49  ND280Debug("Pass-through vertex passed mismatch test!");
50  return true;
51  }
52  if (ND::TNRooTrackerVtxModule::IsGeantinoVtx(vtx)) return true;
53  ND280Error("SEVERE ERROR! Mismatch between G4Vertex and pass-through info!");
54  return false;
55 }
56 
57 Bool_t ND::TNRooTrackerVtxModule::IsGeantinoVtx(ND::TG4PrimaryVertex vtx) {
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)
62  return true;
63 
64  return false;
65 }
66 
68  fCurrNeutVtx->Reset();
69  fRooTrackerTree->GetEntry(entry);
70 
71  // first fill up all the book-keeping info
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;
79 
80  // Need to convert to the nd280 length units
81  fCurrNeutVtx->EvtVtx[0] *= 1000.0;
82  fCurrNeutVtx->EvtVtx[1] *= 1000.0;
83  fCurrNeutVtx->EvtVtx[2] *= 1000.0;
84 
85  ///< Fill in the geometry path for the current vertex.
86  gGeoManager->FindNode(fCurrNeutVtx->EvtVtx[0], fCurrNeutVtx->EvtVtx[1],
87  fCurrNeutVtx->EvtVtx[2]);
88 
89  ///< Get the name of the generator that generated this event.
90  fCurrNeutVtx->GeneratorName->SetString(fGeneratorName.c_str());
91 
92  ///< Get the geometry path for this event.
93  fCurrNeutVtx->GeomPath->SetString(gGeoManager->GetPath());
94 
95  ///< Now create another fRooTracker vtx to add to the vertex
96  ///< container.
97  NRooTrackerVtx *fNRooTrackerVtx;
98  fNRooTrackerVtx = new ((*fVtx)[fNVtx++]) NRooTrackerVtx();
99 
100  /// Copy the current neut event. Make sure this is done last so we copy a
101  /// complete event.
102  fNRooTrackerVtx->Copy(fCurrNeutVtx);
103 }
104 
106  // Set the flux branch addresses common to both generators
107  ND::JNuBeamFlux *flux = (ND::JNuBeamFlux *)fCurrNeutVtx;
109 
110  // Now set the tree branch addresses
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));
130 
131  // NEUT > v5.0.7 && MCP > 1 (>10a)
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));
138 
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));
152  // end NEUT > v5.0.7 && MCP > 1 (>10a)
153 
154  // NEUT > v5.1.2 && MCP >= 5
155  fRooTrackerTree->SetBranchAddress("NEcrsx", &(fCurrNeutVtx->NEcrsx));
156  fRooTrackerTree->SetBranchAddress("NEcrsy", &(fCurrNeutVtx->NEcrsy));
157  fRooTrackerTree->SetBranchAddress("NEcrsz", &(fCurrNeutVtx->NEcrsz));
158  fRooTrackerTree->SetBranchAddress("NEcrsphi", &(fCurrNeutVtx->NEcrsphi));
159 
160  // Nucleon FSI information
161  fHaveNFBranches = !fRooTrackerTree->SetBranchAddress("NFnvert", &(fCurrNeutVtx->NFnvert));
162  if(fHaveNFBranches){
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));
172 
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));
183  } else {
184  ND280NamedLog("TNRooTrackerVtxModule", "Passthrough tree doesn't contain"
185  " nucleon FSI tracking information, these branches will remain off.");
186  }
187  fRooTrackerTree->SetBranchAddress("SPIDelta", &(fCurrNeutVtx->SPIDelta));
188  fRooTrackerTree->SetBranchAddress("IRadCorrPht", &(fCurrNeutVtx->IRadCorrPht));
189 
190 }
191 
193 
194  if(fFilledConfigTree){
195  ND280NamedWarn("TNRooTrackerVtxModule", "Module: " << this->GetName()
196  << " has already written the config tree this run.");
197  }
198 
199  int kNStdHepNPmax_hldr = kNStdHepNPmax;
200  int kNStdHepIdxPx_hldr = kNStdHepIdxPx;
201  int kNStdHepIdxPy_hldr = kNStdHepIdxPy;
202  int kNStdHepIdxPz_hldr = kNStdHepIdxPz;
203  int kNStdHepIdxE_hldr = kNStdHepIdxE;
204  int kNStdHepIdxX_hldr = kNStdHepIdxX;
205  int kNStdHepIdxY_hldr = kNStdHepIdxY;
206  int kNStdHepIdxZ_hldr = kNStdHepIdxZ;
207  int kNStdHepIdxT_hldr = kNStdHepIdxT;
208 
209  int kNEmaxvc_hldr = kNEmaxvc;
210  int kNEmaxvert_hldr = kNEmaxvert;
211  int kNEmaxvertp_hldr = kNEmaxvertp;
212 
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");
225 
227 }
void SetFluxTreeAddresses(ND::JNuBeamFlux *flux)
const int kNEmaxvertp
const int kNStdHepNPmax
void Copy(const NRooTrackerVtx *event)
std::string fDescription
A longish descrition of the analysis.
const int kNStdHepIdxY
const int kNEmaxvert
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 *)
const int kNStdHepIdxX
const int kNStdHepIdxPz
void FillConfigTree(TTree *configTree)
const int kNStdHepIdxE
void FillConfigTree(TTree *configTree)
const int kNStdHepIdxPy
void SetNameTitle(char const *name, char const *title)
Bool_t IsGeantinoVtx(ND::TG4PrimaryVertex vtx)
const int kNStdHepIdxPx
const int kNEmaxvc
This is a simple event class which is essentially an objectified version of the NEUT nRooTracker outp...
Bool_t CheckMismatch(ND::TG4PrimaryVertex vtx)
const int kNStdHepIdxZ
const int kNStdHepIdxT

Package Summary
Package Name: eventAnalysis
Package Version: 7.0-49-g0ac7482
Package Manager:

Generated on Mon Mar 25 2024 14:43:59 for eventAnalysis by doxygen 1.8.5