LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
FeatureVertexFinderAna_module.cc
Go to the documentation of this file.
1 //
3 // FeatureVertexFinder designed to analyze 2d & 3d verticies found in the TPC
4 //
5 // jaasaadi@syr.edu
6 //
7 // Note: This ana module will utilize MC truth information for verticies and is not (yet)
8 // intended as a unit test for data...though many of the same methods will likely be used
9 // for real data (when the time comes)
11 
12 // LArSoft
20 
21 // Framework
27 #include "art_root_io/TFileService.h"
30 #include "fhiclcpp/ParameterSet.h"
32 
33 // ROOT
34 #include "TH1F.h"
35 #include "TH2D.h"
36 
37 // C++
38 #include <string>
39 
40 namespace vertex {
41 
43  public:
44  explicit FeatureVertexFinderAna(fhicl::ParameterSet const& pset);
45 
46  private:
47  void analyze(const art::Event& evt) override;
48  void beginJob() override;
49 
50  std::string fLArG4ModuleLabel;
51  std::string fGenieModuleLabel;
52  std::string fVertexModuleLabel;
53  std::string fEndPoint2dModuleLabel; //<---2d Vertex Module Label (EndPoint2d)
54 
55  // Outputting histograms for analysis
56 
57  TH1F* fRun;
58  TH1F* fEvt;
74 
78 
91 
95 
100 
105 
110 
111  TH1F* fRecoVtxN3d;
115 
119 
123 
124  }; // End class VertexFinderAna
125 
127  {
128  fLArG4ModuleLabel = pset.get<std::string>("LArGeantModuleLabel");
129  fGenieModuleLabel = pset.get<std::string>("GenieModuleLabel");
130  fVertexModuleLabel = pset.get<std::string>("VertexModuleLabel");
131  fEndPoint2dModuleLabel = pset.get<std::string>("EndPoint2dModuleLabel");
132  }
133 
135  {
136  // get access to the TFile service
138 
139  // Outputting TH1F Histograms
140  fRun = tfs->make<TH1F>("fRun", "Run Number", 1000, 0, 1000);
141  fEvt = tfs->make<TH1F>("fEvt", "Event Number", 1000, 0, 1000);
142  fTruthVtxXPos = tfs->make<TH1F>("fTruthVtxXPos", "Truth Vertex X Position", 400, 0, 200);
143  fTruthVtxYPos = tfs->make<TH1F>("fTruthVtxYPos", "Truth Vertex Y Position", 400, -100, 100);
144  fTruthVtxZPos = tfs->make<TH1F>("fTruthVtxZPos", "Truth Vertex Z Position", 2000, 0, 1000);
146  tfs->make<TH1F>("fTruthWireNumberPlane0", "Truth Wire Number Plane 0", 3000, 0, 3000);
148  tfs->make<TH1F>("fTruthTimeTickPlane0", "Truth Time Tick Plane 0", 3200, 0, 3200);
150  tfs->make<TH1F>("fTruthWireNumberPlane1", "Truth Wire Number Plane 1", 3000, 0, 3000);
152  tfs->make<TH1F>("fTruthTimeTickPlane1", "Truth Time Tick Plane 1", 3200, 0, 3200);
154  tfs->make<TH1F>("fTruthWireNumberPlane2", "Truth Wire Number Plane 2", 3000, 0, 3000);
156  tfs->make<TH1F>("fTruthTimeTickPlane2", "Truth Time Tick Plane 2", 3200, 0, 3200);
158  tfs->make<TH1F>("fTruthWireInCmPlane0", "Truth Wire In CM Plane 0", 2000, 0, 1000);
160  tfs->make<TH1F>("fTruthTimeInCmPlane0", "Truth Time In Cm Plane 0", 2000, 0, 1000);
162  tfs->make<TH1F>("fTruthWireInCmPlane1", "Truth Wire In CM Plane 1", 2000, 0, 1000);
164  tfs->make<TH1F>("fTruthTimeInCmPlane1", "Truth Time In Cm Plane 1", 2000, 0, 1000);
166  tfs->make<TH1F>("fTruthWireInCmPlane2", "Truth Wire In CM Plane 2", 2000, 0, 1000);
168  tfs->make<TH1F>("fTruthTimeInCmPlane2", "Truth Time In Cm Plane 2", 2000, 0, 1000);
169 
171  tfs->make<TH1F>("fTwoDNVtxPlane0", "TwoD Number of Verticies Found in Plane 0", 400, 0, 200);
173  tfs->make<TH1F>("fTwoDNVtxPlane1", "TwoD Number of Verticies Found in Plane 1", 400, 0, 200);
175  tfs->make<TH1F>("fTwoDNVtxPlane2", "TwoD Number of Verticies Found in Plane 2", 400, 0, 200);
176 
178  tfs->make<TH1F>("fTwoDWireNumberPlane0", "TwoD Wire Number Plane 0", 3000, 0, 3000);
180  tfs->make<TH1F>("fTwoDTimeTickPlane0", "TwoD Time Tick Plane 0", 3200, 0, 3200);
182  tfs->make<TH1F>("fTwoDWireNumberPlane1", "TwoD Wire Number Plane 1", 3000, 0, 3000);
184  tfs->make<TH1F>("fTwoDTimeTickPlane1", "TwoD Time Tick Plane 1", 3200, 0, 3200);
186  tfs->make<TH1F>("fTwoDWireNumberPlane2", "TwoD Wire Number Plane 2", 3000, 0, 3000);
188  tfs->make<TH1F>("fTwoDTimeTickPlane2", "TwoD Time Tick Plane 2", 3200, 0, 3200);
190  tfs->make<TH1F>("fTwoDWireInCmPlane0", "TwoD Wire In CM Plane 0", 2000, 0, 1000);
192  tfs->make<TH1F>("fTwoDTimeInCmPlane0", "TwoD Time In Cm Plane 0", 2000, 0, 1000);
194  tfs->make<TH1F>("fTwoDWireInCmPlane1", "TwoD Wire In CM Plane 1", 2000, 0, 1000);
196  tfs->make<TH1F>("fTwoDTimeInCmPlane1", "TwoD Time In Cm Plane 1", 2000, 0, 1000);
198  tfs->make<TH1F>("fTwoDWireInCmPlane2", "TwoD Wire In CM Plane 2", 2000, 0, 1000);
200  tfs->make<TH1F>("fTwoDTimeInCmPlane2", "TwoD Time In Cm Plane 2", 2000, 0, 1000);
201 
203  tfs->make<TH1F>("fTwoDStrengthPlane0", "TwoD Strength Plane 0", 1000, 0, 500);
205  tfs->make<TH1F>("fTwoDStrengthPlane1", "TwoD Strength Plane 1", 1000, 0, 500);
207  tfs->make<TH1F>("fTwoDStrengthPlane2", "TwoD Strength Plane 2", 1000, 0, 500);
208 
209  fRecoCheck2dWireNumPlane0 = tfs->make<TH1F>(
210  "fRecoCheck2dWireNumPlane0", "Reco Wire Number - True Wire Number Plane 0", 400, -200, 200);
211  fRecoCheck2dTimeTickPlane0 = tfs->make<TH1F>(
212  "fRecoCheck2dTimeTickPlane0", "Reco Time Tick - True Time Tick Plane 0", 1000, -500, 500);
213  fRecoCheck2dWireInCmPlane0 = tfs->make<TH1F>(
214  "fRecoCheck2dWireInCmPlane0", "Reco Wire in CM - True Wire in CM Plane 0", 200, -50, 50);
215  fRecoCheck2dTimeInCmPlane0 = tfs->make<TH1F>(
216  "fRecoCheck2dTimeInCmPlane0", "Reco Time in CM - True Time in CM Plane 0", 200, -50, 50);
217 
218  fRecoCheck2dWireNumPlane1 = tfs->make<TH1F>(
219  "fRecoCheck2dWireNumPlane1", "Reco Wire Number - True Wire Number Plane 1", 400, -200, 200);
220  fRecoCheck2dTimeTickPlane1 = tfs->make<TH1F>(
221  "fRecoCheck2dTimeTickPlane1", "Reco Time Tick - True Time Tick Plane 1", 1000, -500, 500);
222  fRecoCheck2dWireInCmPlane1 = tfs->make<TH1F>(
223  "fRecoCheck2dWireInCmPlane1", "Reco Wire in CM - True Wire in CM Plane 1", 200, -50, 50);
224  fRecoCheck2dTimeInCmPlane1 = tfs->make<TH1F>(
225  "fRecoCheck2dTimeInCmPlane1", "Reco Time in CM - True Time in CM Plane 1", 200, -50, 50);
226 
227  fRecoCheck2dWireNumPlane2 = tfs->make<TH1F>(
228  "fRecoCheck2dWireNumPlane2", "Reco Wire Number - True Wire Number Plane 2", 400, -200, 200);
229  fRecoCheck2dTimeTickPlane2 = tfs->make<TH1F>(
230  "fRecoCheck2dTimeTickPlane2", "Reco Time Tick - True Time Tick Plane 2", 1000, -500, 500);
231  fRecoCheck2dWireInCmPlane2 = tfs->make<TH1F>(
232  "fRecoCheck2dWireInCmPlane2", "Reco Wire in CM - True Wire in CM Plane 2", 200, -50, 50);
233  fRecoCheck2dTimeInCmPlane2 = tfs->make<TH1F>(
234  "fRecoCheck2dTimeInCmPlane2", "Reco Time in CM - True Time in CM Plane 2", 200, -50, 50);
235 
236  fRecoVtxN3d = tfs->make<TH1F>("fRecoVtxN3d", "Number of 3d-Reco Verticies", 400, 0, 200);
237  fRecoVtxXPos = tfs->make<TH1F>("fRecoVtxXPos", "Reco Vertex X Position", 400, -10, 200);
238  fRecoVtxYPos = tfs->make<TH1F>("fRecoVtxYPos", "Reco Vertex Y Position", 400, -100, 100);
239  fRecoVtxZPos = tfs->make<TH1F>("fRecoVtxZPos", "Reco Vertex Z Position", 2000, -10, 1000);
240 
242  tfs->make<TH1F>("fRecoCheck3dVtxX", "Reco X Position - True X Postion", 800, -100, 100);
244  tfs->make<TH1F>("fRecoCheck3dVtxY", "Reco Y Position - True Y Postion", 800, -100, 100);
246  tfs->make<TH1F>("fRecoCheck3dVtxZ", "Reco Z Position - True Z Postion", 800, -100, 100);
247 
248  fRecoCheck3dVtxXvsX = tfs->make<TH2D>(
249  "fRecoCheck3dVtxXvsX", "(Reco X - True X)/True X vs True X", 400, -10, 200, 120, -20, 20);
250  fRecoCheck3dVtxYvsY = tfs->make<TH2D>(
251  "fRecoCheck3dVtxYvsY", "(Reco Y - True Y)/True Y vs True Y", 400, -100, 100, 120, -20, 20);
252  fRecoCheck3dVtxZvsZ = tfs->make<TH2D>(
253  "fRecoCheck3dVtxZvsZ", "(Reco Z - True Z)/True Z vs True Z", 1000, -10, 1000, 120, -20, 20);
254  }
255 
257  {
258  // Filling Run/Event Histo
259  fRun->Fill(evt.run());
260  fEvt->Fill(evt.id().event());
261 
262  // Getting the Geant Information Directly
264  evt.getByLabel(fLArG4ModuleLabel, mcParticleHandle);
265 
266  // Getting MC Truth Info from simb
267  auto const& mctruthList = *evt.getValidHandle<std::vector<simb::MCTruth>>(fGenieModuleLabel);
268 
269  // Getting information from BackTrackerService
271 
272  auto const& wireReadoutGeom = art::ServiceHandle<geo::WireReadout>()->Get();
273  auto const clock_data =
275  auto const det_prop =
277 
278  // Getting 2d Vertex information (vertex2dHandle)
280  evt.getByLabel(fEndPoint2dModuleLabel, vertex2dHandle);
281 
282  // Getting the 3d Vertex (vertex3dListHandle)
283  art::Handle<std::vector<recob::Vertex>> vertex3dListHandle;
284  evt.getByLabel(fVertexModuleLabel, vertex3dListHandle);
285 
286  // Detector numbers that are useful (to be set later)
287  std::vector<double> WirePitch_CurrentPlane(wireReadoutGeom.Views().size(),
288  0.); //<---Setting the Wire pitch for each plane
289  // Right now assuming only 3 planes
290  // get the wire pitch for each view
291  size_t vn = 0;
292  for (auto v : wireReadoutGeom.Views()) {
293  WirePitch_CurrentPlane[vn] = wireReadoutGeom.Plane({0, 0, v}).WirePitch();
294  ++vn;
295  }
296 
297  // Calculating the Timetick to CM conversion
298  float TimeTick =
299  sampling_rate(clock_data) / 1000.; //<---To get units of microsecond...not nanosec
300  float DriftVelocity = det_prop.DriftVelocity(det_prop.Efield(), det_prop.Temperature());
301  float TimetoCm = TimeTick * DriftVelocity;
302 
303  // Looping over MC information
304 
305  // Variables for truth vertex information
306  geo::Point_t truth_vertex{}; //<---Truth x,y,z information
307 
308  uint32_t VtxWireNum[3] = {0}; //<---Wire number in each plane ( WireNum[plane#] )
309  double VtxTimeTick[3] = {0.}; //<---Time tick in each plane ( TimeTick[plane#] )
310 
311  double VtxWireNum_InCM[3] = {0.}; //<---Wire number in each plane in CM ( WireNum[plane#] )
312  double VtxTimeTick_InCM[3] = {0.}; //<---Time tick in each plane in CM ( TimeTick[plane#] )
313 
314  // Finding the MC truth vertex
315 
316  // FIXME: Can this be right? We're looping over all of the
317  // MCTruth particles just so that we can use the last one
318  // (i.e. truth_vertex is set each time but only the last
319  // iteration is relevant)?
320  for (std::size_t i = 0; i != mctruthList.size(); ++i) {
321  auto const& neut = mctruthList[i].GetParticle(i);
322  truth_vertex.SetX(neut.Vx());
323  truth_vertex.SetY(neut.Vy());
324  truth_vertex.SetZ(neut.Vz());
325  } // end i loop
326 
327  // Filling Histograms
328  fTruthVtxXPos->Fill(truth_vertex.X());
329  fTruthVtxYPos->Fill(truth_vertex.Y());
330  fTruthVtxZPos->Fill(truth_vertex.Z());
331 
332  // Looping over geo::PlaneIDs
333  for (auto const& plane : wireReadoutGeom.Iterate<geo::PlaneGeo>()) {
334  auto const& pid = plane.ID();
335  // Calculating the nearest wire the vertex corresponds to in each plane
336  try {
337  VtxWireNum[pid.Plane] = plane.NearestWireID(truth_vertex).Wire;
338  }
339  catch (...) {
340  mf::LogWarning("FeatureVertexFinderAna") << "Can't find nearest wire";
341  continue;
342  }
343  VtxTimeTick[pid.Plane] =
344  det_prop.ConvertXToTicks(truth_vertex.X(), pid) + det_prop.GetXTicksOffset(pid);
345 
346  // Translating each of these in cm
347  VtxWireNum_InCM[pid.Plane] = VtxWireNum[pid.Plane] * WirePitch_CurrentPlane[pid.Plane];
348  VtxTimeTick_InCM[pid.Plane] = VtxTimeTick[pid.Plane] * TimetoCm;
349  } //<---End pid loop
350 
351  // Filling Histograms
352  fTruthWireNumberPlane0->Fill(VtxWireNum[0]);
353  fTruthTimeTickPlane0->Fill(VtxTimeTick[0]);
354  fTruthWireNumberPlane1->Fill(VtxWireNum[1]);
355  fTruthTimeTickPlane1->Fill(VtxTimeTick[1]);
356  fTruthWireNumberPlane2->Fill(VtxWireNum[2]);
357  fTruthTimeTickPlane2->Fill(VtxTimeTick[2]);
358 
359  fTruthWireInCmPlane0->Fill(VtxWireNum_InCM[0]);
360  fTruthTimeInCmPlane0->Fill(VtxTimeTick_InCM[0]);
361  fTruthWireInCmPlane1->Fill(VtxWireNum_InCM[1]);
362  fTruthTimeInCmPlane1->Fill(VtxTimeTick_InCM[1]);
363  fTruthWireInCmPlane2->Fill(VtxWireNum_InCM[2]);
364  fTruthTimeInCmPlane2->Fill(VtxTimeTick_InCM[2]);
365 
366  // Looping over EndPoint2d information
367 
369 
370  // Variables for Vertex2d
371  double Vertex2d_TimeTick[10000] = {
372  0.}; //<---Vertex2d Time Tick for the current plane ( TimeTick[#2d] )
373  double Vertex2d_Wire[10000] = {0.}; //<---Veretx2d Wire # ( Wire[#2d] )
374 
375  double Vertex2d_TimeTick_InCM[10000] = {0.}; //<---Vertex 2d Time tick in CM ( TimeTick[#2d] )
376  double Vertex2d_Wire_InCM[10000] = {0.}; //<---Veretx2d Wire in CM ( Wire[#2d] )
377  int n2dVtx = 0;
378 
379  int n2dVtxPlane0 = 0, n2dVtxPlane1 = 0, n2dVtxPlane2 = 0;
380 
381  bool vertexWstrengthplane0 = false,
382  vertexWstrengthplane1 =
383  false; //, vertexWstrengthplane2 = false; //commented out, Wes, 12.4.13
384 
385  // Loop over the EndPoint2d List
386  for (size_t ii = 0; ii < vertex2dHandle->size(); ++ii) {
387  art::Ptr<recob::EndPoint2D> vertex(vertex2dHandle, ii);
388  vert2d.push_back(vertex);
389  }
390 
391  // If we have 2d vertex, loop over them
392  if (vert2d.size() > 0) {
393 
394  // Looping over geo::PlaneIDs
395  for (auto const& pid : wireReadoutGeom.Iterate<geo::PlaneID>()) {
396  for (size_t ww = 0; ww < vert2d.size(); ++ww) {
397  // Only look at this 2d vertex if it is in the current plane
398  if (vert2d[ww]->WireID().planeID() != pid) { continue; }
399 
400  Vertex2d_TimeTick[n2dVtx] = vert2d[ww]->DriftTime();
401  Vertex2d_Wire[n2dVtx] = vert2d[ww]->WireID().Wire;
402 
403  // Translating each of these in cm
404  Vertex2d_Wire_InCM[n2dVtx] = Vertex2d_Wire[n2dVtx] * WirePitch_CurrentPlane[pid.Plane];
405  Vertex2d_TimeTick_InCM[n2dVtx] = Vertex2d_TimeTick[n2dVtx] * TimetoCm;
406 
407  // Checking how well we did in reconstructing the vertex (Reco - True)
408 
409  float RecoCheck_TimeTick = Vertex2d_TimeTick[n2dVtx] - VtxTimeTick[pid.Plane];
410  float RecoCheck_WireNum = Vertex2d_Wire[n2dVtx] - VtxWireNum[pid.Plane];
411 
412  float RecoCheck_TimeInCm = Vertex2d_TimeTick_InCM[n2dVtx] - VtxTimeTick_InCM[pid.Plane];
413  float RecoCheck_WireInCm = Vertex2d_Wire_InCM[n2dVtx] - VtxWireNum_InCM[pid.Plane];
414 
415  if (vert2d[ww]->Strength() > -1) {
416  if (pid.Plane == 0) {
417  vertexWstrengthplane0 = true;
418 
419  fTwoDWireNumberPlane0->Fill(Vertex2d_Wire[n2dVtx]);
420  fTwoDTimeTickPlane0->Fill(Vertex2d_TimeTick[n2dVtx]);
421  fTwoDWireInCmPlane0->Fill(Vertex2d_Wire_InCM[n2dVtx]);
422  fTwoDTimeInCmPlane0->Fill(Vertex2d_TimeTick_InCM[n2dVtx]);
423 
424  fTwoDStrengthPlane0->Fill(vert2d[ww]->Strength());
425 
426  fRecoCheck2dWireNumPlane0->Fill(RecoCheck_WireNum);
427  fRecoCheck2dTimeTickPlane0->Fill(RecoCheck_TimeTick);
428  fRecoCheck2dWireInCmPlane0->Fill(RecoCheck_WireInCm);
429  fRecoCheck2dTimeInCmPlane0->Fill(RecoCheck_TimeInCm);
430 
431  n2dVtxPlane0++;
432 
433  } //<---End Plane 0
434 
435  if (pid.Plane == 1) {
436  vertexWstrengthplane1 = true;
437  fTwoDWireNumberPlane1->Fill(Vertex2d_Wire[n2dVtx]);
438  fTwoDTimeTickPlane1->Fill(Vertex2d_TimeTick[n2dVtx]);
439  fTwoDWireInCmPlane1->Fill(Vertex2d_Wire_InCM[n2dVtx]);
440  fTwoDTimeInCmPlane1->Fill(Vertex2d_TimeTick_InCM[n2dVtx]);
441 
442  fTwoDStrengthPlane1->Fill(vert2d[ww]->Strength());
443 
444  fRecoCheck2dWireNumPlane1->Fill(RecoCheck_WireNum);
445  fRecoCheck2dTimeTickPlane1->Fill(RecoCheck_TimeTick);
446  fRecoCheck2dWireInCmPlane1->Fill(RecoCheck_WireInCm);
447  fRecoCheck2dTimeInCmPlane1->Fill(RecoCheck_TimeInCm);
448 
449  n2dVtxPlane1++;
450 
451  } //<---End Plane 1
452 
453  if (pid.Plane == 2) {
454  fTwoDWireNumberPlane2->Fill(Vertex2d_Wire[n2dVtx]);
455  fTwoDTimeTickPlane2->Fill(Vertex2d_TimeTick[n2dVtx]);
456  fTwoDWireInCmPlane2->Fill(Vertex2d_Wire_InCM[n2dVtx]);
457  fTwoDTimeInCmPlane2->Fill(Vertex2d_TimeTick_InCM[n2dVtx]);
458 
459  fTwoDStrengthPlane2->Fill(vert2d[ww]->Strength());
460 
461  fRecoCheck2dWireNumPlane2->Fill(RecoCheck_WireNum);
462  fRecoCheck2dTimeTickPlane2->Fill(RecoCheck_TimeTick);
463  fRecoCheck2dWireInCmPlane2->Fill(RecoCheck_WireInCm);
464  fRecoCheck2dTimeInCmPlane2->Fill(RecoCheck_TimeInCm);
465 
466  n2dVtxPlane2++;
467 
468  } //<---End Plane 2
469  }
470 
471  ++n2dVtx;
472  } //<--end ww loop
473 
474  } //<---End plane ID
475 
476  } //<--End checking if we have 2d end points
477 
478  fTwoDNVtxPlane0->Fill(n2dVtxPlane0);
479  fTwoDNVtxPlane1->Fill(n2dVtxPlane1);
480  fTwoDNVtxPlane2->Fill(n2dVtxPlane2);
481 
482  // Looping over 3dVertex information
484 
485  double xyz[3] = {0.};
486 
487  for (unsigned int ii = 0; ii < vertex3dListHandle->size(); ++ii) {
488  art::Ptr<recob::Vertex> vertex3d(vertex3dListHandle, ii);
489  Vertexlist.push_back(vertex3d); // class member
490 
491  } //<---End ii loop
492 
493  if (Vertexlist.size() > 0 && vertexWstrengthplane0 && vertexWstrengthplane1) {
494 
495  fRecoVtxN3d->Fill(Vertexlist.size());
496  for (unsigned int ww = 0; ww < Vertexlist.size(); ww++) {
497  Vertexlist[ww]->XYZ(xyz);
498 
499  // Checking how well we did in reconstructing the vertex (Reco - True)
500 
501  // Finding the Delta X, Y, Z between Reco vtx and truth
502  double DeltaX = xyz[0] - truth_vertex.X();
503  double DeltaY = xyz[1] - truth_vertex.Y();
504  double DeltaZ = xyz[2] - truth_vertex.Z();
505 
506  double DeltaXoverTrueX = DeltaX / truth_vertex.X();
507  double DeltaYoverTrueY = DeltaY / truth_vertex.X();
508  double DeltaZoverTrueZ = DeltaZ / truth_vertex.X();
509 
510  fRecoVtxXPos->Fill(xyz[0]);
511  fRecoVtxYPos->Fill(xyz[1]);
512  fRecoVtxZPos->Fill(xyz[2]);
513 
514  fRecoCheck3dVtxX->Fill(DeltaX);
515  fRecoCheck3dVtxY->Fill(DeltaY);
516  fRecoCheck3dVtxZ->Fill(DeltaZ);
517 
518  fRecoCheck3dVtxXvsX->Fill(xyz[0], DeltaXoverTrueX);
519  fRecoCheck3dVtxYvsY->Fill(xyz[1], DeltaYoverTrueY);
520  fRecoCheck3dVtxZvsZ->Fill(xyz[2], DeltaZoverTrueZ);
521  }
522  }
523  } //<---End access the event
524 
526 
527 } // end of vertex namespace
The data type to uniquely identify a Plane.
Definition: geo_types.h:364
void analyze(const art::Event &evt) override
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
Definition: AddMC.C:8
EDAnalyzer(fhicl::ParameterSet const &pset)
Definition: EDAnalyzer.cc:6
FeatureVertexFinderAna(fhicl::ParameterSet const &pset)
#define DEFINE_ART_MODULE(klass)
Definition: ModuleMacros.h:65
IDparameter< geo::WireID > WireID
Member type of validated geo::WireID parameter.
void push_back(Ptr< U > const &p)
Definition: PtrVector.h:435
T get(std::string const &key) const
Definition: ParameterSet.h:314
Geometry information for a single wire plane.The plane is represented in the geometry by a solid whic...
Definition: PlaneGeo.h:67
size_type size() const
Definition: PtrVector.h:302
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double >, ROOT::Math::GlobalCoordinateSystemTag > Point_t
Type for representation of position in physical 3D space.
Definition: geo_vectors.h:180
ValidHandle< PROD > getValidHandle(InputTag const &tag) const
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
Encapsulate the construction of a single detector plane .
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
EventNumber_t event() const
Definition: EventID.h:116
TCEvent evt
Definition: DataStructs.cxx:8
RunNumber_t run() const
Definition: Event.cc:29
double sampling_rate(DetectorClocksData const &data)
Returns the period of the TPC readout electronics clock.
Definition: fwd.h:26
EventID id() const
Definition: Event.cc:23
vertex reconstruction