ToFAnalysisMini_module.cc
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////
2 /// \file ToFAnalysisMini_module.cc
3 /// \module analyzer
4 /// \brief Analyze and benchmark various reconstructions for the
5 /// ToF reconstruction.
6 /// \author Mike Wallbank (University of Cincinnati) <wallbank@fnal.gov>
7 /// \date March 2019
8 ////////////////////////////////////////////////////////////////////////////
9 
10 // framework
14 #include "fhiclcpp/ParameterSet.h"
23 
24 // nova
25 #include "RawData/RawBeamline.h"
29 #include "BeamlineRecoBase/ToF.h"
32 
33 // ROOT
34 #include "TH1D.h"
35 #include "TH1I.h"
36 #include "TH2D.h"
37 #include "TCanvas.h"
38 #include "TGraph.h"
39 
40 // stl
41 #include <iostream>
42 
43 double usdAdt_p0[16] = { 0, 18.1964, 25.9501, 33.2925,
44  0, 0, 16.4043, 6.37935,
45  0, 0, 0, -2.86907 };
46 double usdAdt_p1[16] = { 0, -242.363, -234.132, -166.019,
47  0, 0, -178.13, -202.087,
48  0, 0, 0, -230.957 };
49 
50 double dsdAdt_p0[16] = { 0, 5.97536, 37.8588, 48.2966,
51  0, 0, 31.7485, 44.1583,
52  0, 0, 0, 16.6721 };
53 double dsdAdt_p1[16] = { 0, -273.239, -298.339, -276.039,
54  0, 0, -295.588, -278.701,
55  0, 0, 0, -293.992 };
56 //double dsdAdt_p0_err[6] = { 0.954828, 0.950335, 1.01149, 0.998099, 1.0556, 1.0184 };
57 //double dsdAdt_p1_err[6] = { 2.02869, 1.58815, 1.93185, 1.83471, 1.5977, 2.02183 };
58 
60 
61 // -----------------------------------------------------------------------
62 namespace beamlinereco {
64 
65  public:
66 
68 
69  void reconfigure(const fhicl::ParameterSet& pset);
70  void beginJob() override;
71  void analyze(const art::Event& evt);
72  void endJob() override;
73 
74  private:
75 
81  unsigned int fTriggerBitTOFPrompt;
82  unsigned int fTriggerBitTOFSlow;
83  unsigned int fTriggerBitWCHDWR;
85 
86  TH1D *hToF_any;
87 
88 
89  TH1D *hToF_all;
91  TH1D *hToF_TOFSlow;
92  TH1D *hToF_WCHDWR;
93 
94  TH1D *hToF_SiPM;
95 
96  TH1D *hMomentum;
99 
101 
102  std::map<ChannelID, TH1D*> hPeakADC_GoodHits_channel;
103  std::map<ChannelID, TH1D*> hStartTime_GoodHits_channel;
104 
105  std::map<ChannelID, TH1D*> hPeakADC_AllHits_channel;
106  std::map<ChannelID, TH1D*> hStartTime_AllHits_channel;
107 
111 
112  TH1D *hUSdt[4][4];
113  TH1D *hUSdA[4][4];
114  TH1D *hUSrA[4][4];
115  TH2D *hUSAvdt[4][4];
116  TH2D *hUSdAvdt[4][4];
117 
118  TH1D *hDSdt[4][4];
119  TH1D *hDSdA[4][4];
120  TH1D *hDSrA[4][4];
121  TH2D *hDSAvdt[4][4];
122  TH2D *hDSdAvdt[4][4];
123 
124  TH1D *hSiPMdt[4][4];
125  TH1D *hSiPMdA[4][4];
126  TH1D *hSiPMrA[4][4];
127  TH2D *hSiPMAvdt[4][4];
128  TH2D *hSiPMdAvdt[4][4];
129 
133 
134  // services
137 
138  };
139 
141 
142 }
143 
144 // -----------------------------------------------------------------------
146  this->reconfigure(pset);
147 }
148 
149 // -----------------------------------------------------------------------
151  fTriggerLabel = pset.get<art::InputTag>("TriggerLabel");
152  fRecoToFLabel = pset.get<art::InputTag>("RecoToFLabel");
153  fToFDigitLabel = pset.get<art::InputTag>("ToFDigitLabel");
154  fRecoWCLabel = pset.get<art::InputTag>("RecoWCLabel", "wctrackreco");
155  fRecoCherenkovLabel = pset.get<art::InputTag>("RecoCherenkovDigitLabel");
156  fSamplingInterval = pset.get<double>("TimeSamplingInterval");
157  fTriggerBitTOFPrompt = pset.get<unsigned int>("TriggerBitTOFPrompt");
158  fTriggerBitTOFSlow = pset.get<unsigned int>("TriggerBitTOFSlow");
159  fTriggerBitWCHDWR = pset.get<unsigned int>("TriggerBitWCHDWR");
160 }
161 
162 // -----------------------------------------------------------------------
164  double endtime = 1024.*fSamplingInterval;
165 
166  this->hToF_all = tfs->make<TH1D>("hToF_all", "Time of Flight (TOFPrompt & TOFSlow & WCHDWR)", 2*int(endtime), 0., int(endtime));
167  this->hToF_any = tfs->make<TH1D>("hToF_any", "Time of Flight (TOFPrompt | TOFSlow | WCHDWR)", 100, 0., 220);
168  this->hToF_TOFPrompt = tfs->make<TH1D>("hToF_TOFPrompt", "Time of Flight (TOFPrompt)", 2*int(endtime), 0., int(endtime));
169  this->hToF_TOFSlow = tfs->make<TH1D>("hToF_TOFSlow", "Time of Flight (TOFSlow)", 2*int(endtime), 0., int(endtime));
170  this->hToF_WCHDWR = tfs->make<TH1D>("hToF_WCHDWR", "Time of Flight (WCHDWR)", 2*int(endtime), 0., int(endtime));
171  this->hToF_SiPM = tfs->make<TH1D>("hToF_SiPM", "Time of Flight (SiPM)", 2*int(endtime), 0, int(endtime));
172 
173  this->hMomentum = tfs->make<TH1D>("hMomentum", "Momentum", 125, 0, 2500);
174  this->hTof_vs_momentum = tfs->make<TH2D>("hToFvsMomentum", "ToF vs. Momentum", 80, 0, 2500, 80, 0, 125);
175  this->hTof_vs_momentum_SiPM = tfs->make<TH2D>("hToFvsMomentum_SiPM", "ToF vs. Momentum (SiPM)", 100, 0, 2500, 400, 0, 400);
176 
177  for (auto channel : fChannelMap->ChannelIDs()) {
178  unsigned int online_channel = fChannelMap->OnlineDigitChannel(channel);
179  art::TFileDirectory chdir
180  //= tfs->mkdir(Form("System%dDetector%dChannel%d", channel.System, channel.Detector, channel.Channel));
181  = tfs->mkdir(Form("Channel%d", online_channel));
182  this->hPeakADC_GoodHits_channel[channel]
183  = chdir.make<TH1D>(Form("hPeakADC_GoodHits_channel%d",online_channel),
184  Form("Peak ADC Channel %d (good hits)",online_channel), 200, 0, 4000);
185  this->hStartTime_GoodHits_channel[channel]
186  = chdir.make<TH1D>(Form("hStartTime_GoodHits_channel%d",online_channel),
187  Form("Start Time Channel %d (good hits)",online_channel), 200, 0, endtime);
188  this->hPeakADC_AllHits_channel[channel]
189  = chdir.make<TH1D>(Form("hPeakADC_AllHits_channel%d",online_channel),
190  Form("Peak ADC Channel %d (all hits)",online_channel), 200, 0, 4000);
191  this->hStartTime_AllHits_channel[channel]
192  = chdir.make<TH1D>(Form("hStartTime_AllHits_channel%d",online_channel),
193  Form("Start Time Channel %d (all hits)",online_channel), 200, 0, endtime);
194  }
195 
196  this->hUSHitMultiplicity = tfs->make<TH1I>("hUSHitMultiplicity", "US Hits per Event", 15, 0, 15);
197  this->hDSHitMultiplicity = tfs->make<TH1I>("hDSHitMultiplicity", "DS Hits per Event", 15, 0, 15);
198  this->hSiPMHitMultiplicity = tfs->make<TH1I>("hSiPMHitMultiplicity", "SiPM Hits per Event", 15, 0, 15);
199 
200  hUSdt12vdt14 = tfs->make<TH2D>("hUSdt12vdt14", "ToF dt chs. 8+9 vs dt chs. 8+11", 100, -5, 5, 100, -5, 5);
201  hUSdt12vdt13 = tfs->make<TH2D>("hUSdt12vdt13", "ToF dt chs. 8+9 vs dt chs. 8+10", 100, -5, 5, 100, -5, 5);
202  hUSdt14vdt13 = tfs->make<TH2D>("hUSdt14vdt13", "ToF dt chs. 8+11 vs dt chs. 8+10", 100, -5, 5, 100, -5, 5);
203 
204  for (int i=0; i<4; i++) {
205  for (int j=i+1; j<4; j++) {
206  double dABound = 4000;
207  hUSdt[i][j] = tfs->make<TH1D>(Form("hUSdt%d%d",i+1,j+1), Form("ToF dt between channels %d and %d",i+8,j+8), 100., -5., 5.);
208  hDSdt[i][j] = tfs->make<TH1D>(Form("hDSdt%d%d",i+1,j+1), Form("ToF dt between channels %d and %d",i+12,j+12), 100., -5., 5.);
209  hSiPMdt[i][j] = tfs->make<TH1D>(Form("hSiPMdt%d%d",i+1,j+1), Form("ToF dt between channels %d and %d",i+4,j+4), 100., -5., 5.);
210 
211  hUSdA[i][j] = tfs->make<TH1D>(Form("hUSdA%d%d",i+1,j+1), Form("ToF dA between channels %d and %d",i+8,j+8), 400., -dABound, dABound);
212  hDSdA[i][j] = tfs->make<TH1D>(Form("hDSdA%d%d",i+1,j+1), Form("ToF dA between channels %d and %d",i+12,j+12), 400., -dABound, dABound);
213  hSiPMdA[i][j] = tfs->make<TH1D>(Form("hSiPMdA%d%d",i+1,j+1), Form("ToF dA between channels %d and %d",i+4,j+4), 400., -dABound, dABound);
214 
215  hUSrA[i][j] = tfs->make<TH1D>(Form("hUSrA%d%d",i+1,j+1), Form("ToF amplitude ratio between channels %d and %d",i+8,j+8), 100., 0, 4);
216  hDSrA[i][j] = tfs->make<TH1D>(Form("hDSrA%d%d",i+1,j+1), Form("ToF amplitude ratio between channels %d and %d",i+12,j+12), 100., 0, 4);
217  hSiPMrA[i][j] = tfs->make<TH1D>(Form("hSiPMrA%d%d",i+1,j+1), Form("ToF amplitude ratio between channels %d and %d",i+4,j+4), 100., 0, 4);
218 
219  hUSAvdt[i][j] = tfs->make<TH2D>(Form("hUSAvdt%d%d",i+1,j+1), Form("ToF amplitude ratio vs dt channels %d and %d",i+8,j+8), 100., -5.,5., 100, 0, 8);
220  hDSAvdt[i][j] = tfs->make<TH2D>(Form("hDSAvdt%d%d",i+1,j+1), Form("ToF amplitude ratio vs dt channels %d and %d",i+12,j+12), 100., -5.,5., 100, 0, 8);
221  hSiPMAvdt[i][j] = tfs->make<TH2D>(Form("hSiPMAvdt%d%d",i+1,j+1), Form("ToF amplitude ratio vs dt channels %d and %d",i+4,j+4), 100., -5.,5., 100, 0, 8);
222 
223  hUSdAvdt[i][j] = tfs->make<TH2D>(Form("hUSdAvdt%d%d",i+1,j+1), Form("ToF dA vs dt channels %d and %d",i+8,j+8), 100., -5.,5., 100, -dABound, dABound);
224  hDSdAvdt[i][j] = tfs->make<TH2D>(Form("hDSdAvdt%d%d",i+1,j+1), Form("ToF dA vs dt channels %d and %d",i+12,j+12), 100., -5.,5., 100, -dABound, dABound);
225  hSiPMdAvdt[i][j] = tfs->make<TH2D>(Form("hSiPMdAvdt%d%d",i+1,j+1), Form("ToF dA vs dt channels %d and %d",i+4,j+4), 100., -5.,5., 100, -dABound, dABound);
226  }
227  }
228 }
229 
230 // -----------------------------------------------------------------------
232  // Trigger bits
234  std::vector<art::Ptr<rawdata::RawBeamlineTrigger>> triggers;
235  if (e.getByLabel(fTriggerLabel, triggerHandle))
236  art::fill_ptr_vector(triggers, triggerHandle);
237 
238  bool isTOFPromptTrig = false;
239  bool isTOFSlowTrig = false;
240  bool isWCHDWRTrig = false;
241 
242  //if (triggers.size() != 1) {
243  //std::cerr << "WARNING: Got " << triggers.size() << " triggers instead of 1" << std::endl;
244  //}
245  for (auto trig : triggers) {
246  unsigned int pattern = trig->Pattern();
247  isTOFPromptTrig = bool(pattern & (1 << fTriggerBitTOFPrompt));
248  isTOFSlowTrig = bool(pattern & (1 << fTriggerBitTOFSlow));
249  isWCHDWRTrig = bool(pattern & (1 << fTriggerBitWCHDWR));
250  }
251  /*std::cout << "Event " << e.event() << " has trigger bits:";
252  if (isTOFPromptTrig) std::cout << " TOFPrompt";
253  if (isTOFSlowTrig) std::cout << " TOFSlow";
254  if (isWCHDWRTrig) std::cout << " WCHDWR";
255  std::cout << std::endl;*/
256 
257  // Get ToFs
259  std::vector<art::Ptr<brb::ToF>> tofs;
260  if (e.getByLabel(fRecoToFLabel, tofHandle))
261  art::fill_ptr_vector(tofs, tofHandle);
262 
264  std::vector<art::Ptr<brb::BeamlineDigit>> tofDigits;
265  if (e.getByLabel(fToFDigitLabel, tofDigitHandle))
266  art::fill_ptr_vector(tofDigits, tofDigitHandle);
267 
268  // Cherenkov
270  std::vector<art::Ptr<brb::BeamlineDigit>> cherenkovs;
271  if (e.getByLabel(fRecoCherenkovLabel, cherenkovHandle))
272  art::fill_ptr_vector(cherenkovs, cherenkovHandle);
273 
274  // Retrieve BeamlineDigits for tof reco
276 
277  // Get WC reco (for momentum)
279  std::vector<art::Ptr<brb::WCTrack>> wcs;
280  if (e.getByLabel(fRecoWCLabel, wcHandle))
281  art::fill_ptr_vector(wcs, wcHandle);
282 
283  // Fill all hits data
284  unsigned int nushits = 0;
285  unsigned int ndshits = 0;
286  for (auto d : tofDigits) {
287  if (d->ChannelID().Detector == beamlinegeo::ToFCounter::US) {
288  ++nushits;
289  } else if (d->ChannelID().Detector == beamlinegeo::ToFCounter::DS) {
290  ++ndshits;
291  }
292  hPeakADC_AllHits_channel[d->ChannelID()]->Fill(d->PeakADC());
293  hStartTime_AllHits_channel[d->ChannelID()]->Fill(d->StartTimeInNanoSec());
294  }
295  hUSHitMultiplicity->Fill(nushits);
296  hDSHitMultiplicity->Fill(ndshits);
297 
298  // Cherenkov
299  for (auto d : cherenkovs) {
300  if (d->ChannelID().System == beamlinegeo::BeamlineSystem::Cherenkov) {
301  hPeakADC_AllHits_channel[d->ChannelID()]->Fill(d->PeakADC());
302  hStartTime_AllHits_channel[d->ChannelID()]->Fill(d->StartTimeInNanoSec());
303  }
304  }
305  //bool hasCherenkov = (cherenkovs.size() > 0);
306  /*double cherenkovTime = -999;
307  if (hasCherenkov) {
308  cherenkovTime = cherenkovs[cherenkovs.size() - 1]->StartTimeInNanoSec();
309  }*/
310 
311  // SiPM
312  double sipmtimes[4] = { -1, -1, -1, -1 };
313  double sipmamps[4] = { -1, -1, -1, -1 };
314  unsigned int nsipmhits = 0;
315  for (auto d : tofDigits) {
316  if (d->ChannelID().Detector == beamlinegeo::ToFCounter::DSSiPM) {
317  ++nsipmhits;
318  hPeakADC_AllHits_channel[d->ChannelID()]->Fill(d->PeakADC());
319  hStartTime_AllHits_channel[d->ChannelID()]->Fill(d->StartTimeInNanoSec());
320  sipmtimes[d->ChannelID().Channel - 4] = d->StartTimeInNanoSec();
321  sipmamps[d->ChannelID().Channel - 4] = d->PeakADC();
322  }
323  }
324  for (int i=0; i<4; i++) {
325  for (int j=i+1; j<4; j++) {
326  if ((sipmtimes[i] >= 0) && (sipmtimes[j] >= 0)) {
327  double a_ratio = sipmamps[j] / sipmamps[i];
328  double dA = sipmamps[j] - sipmamps[i];
329  double dt = sipmtimes[j] - sipmtimes[i];
330  //double dt = (1.0/sipmdAdt_p1[4*i+j]) * (-sipmdAdt_p0[4*i+j] + dA);
331  hSiPMdt[i][j]->Fill(dt);
332  hSiPMdA[i][j]->Fill(dA);
333  hSiPMrA[i][j]->Fill(a_ratio);
334  hSiPMAvdt[i][j]->Fill(dt, a_ratio);
335  hSiPMdAvdt[i][j]->Fill(dt, dA);
336  }
337  }
338  }
339  hSiPMHitMultiplicity->Fill(nsipmhits);
340 
341  //if (tofs.size() > 1) return;
342 
343  for (auto wc : wcs) {
344  hMomentum->Fill(wc->Momentum());
345  }
346 
347  for (auto tof : tofs) {
348  // Get associated reco digits
349  const std::vector<art::Ptr<brb::BeamlineDigit>> tofdigits = fmbd.at(tof.key());
350  double ustimes[4] = { -1, -1, -1, -1 };
351  double usamps[4] = { -1, -1, -1, -1 };
352  double dstimes[4] = { -1, -1, -1, -1 };
353  double dsamps[4] = { -1, -1, -1, -1 };
354  for (auto d : tofdigits) {
355  hPeakADC_GoodHits_channel[d->ChannelID()]->Fill(d->PeakADC());
356  hStartTime_GoodHits_channel[d->ChannelID()]->Fill(d->StartTimeInNanoSec());
357  if (d->ChannelID().Detector == beamlinegeo::ToFCounter::US) {
358  ustimes[d->ChannelID().Channel - 8] = d->StartTimeInNanoSec();
359  usamps[d->ChannelID().Channel - 8] = d->PeakADC();
360  } else if (d->ChannelID().Detector == beamlinegeo::ToFCounter::DS) {
361  dstimes[d->ChannelID().Channel - 12] = d->StartTimeInNanoSec();
362  dsamps[d->ChannelID().Channel - 12] = d->PeakADC();
363  }
364  }
365 
366  for (int i=0; i<4; i++) {
367  for (int j=i+1; j<4; j++) {
368  if ((ustimes[i] >= 0) && (ustimes[j] >= 0)) {
369  double a_ratio = usamps[j] / usamps[i];
370  double dA = usamps[j] - usamps[i];
371  double dt = ustimes[j] - ustimes[i];
372  //double dt = (1.0/usdAdt_p1[4*i+j]) * (-usdAdt_p0[4*i+j] + dA);
373  hUSdt[i][j]->Fill(dt);
374  hUSdA[i][j]->Fill(dA);
375  hUSrA[i][j]->Fill(a_ratio);
376  hUSAvdt[i][j]->Fill(dt, a_ratio);
377  hUSdAvdt[i][j]->Fill(dt, dA);
378  }
379  if ((dstimes[i] >= 0) && (dstimes[j] >= 0)) {
380  double a_ratio = dsamps[j] / dsamps[i];
381  double dA = dsamps[j] - dsamps[i];
382  //double dt = (1.0/dsdAdt_p1[4*i+j]) * (-dsdAdt_p0[4*i+j] + dA);
383  double dt = dstimes[j] - dstimes[i];
384  hDSdt[i][j]->Fill(dt);
385  hDSdA[i][j]->Fill(dA);
386  hDSrA[i][j]->Fill(a_ratio);
387  hDSAvdt[i][j]->Fill(dt, a_ratio);
388  hDSdAvdt[i][j]->Fill(dt, dA);
389  }
390  }
391  }
392 
393  if ((ustimes[0]>=0) && (ustimes[1]>=0) && (ustimes[2]>=0) && (ustimes[3]>=0)) {
394  double dt12 = ustimes[1] - ustimes[0];
395  double dt13 = ustimes[2] - ustimes[0];
396  double dt14 = ustimes[3] - ustimes[0];
397  hUSdt12vdt14->Fill(dt14, dt12);
398  hUSdt12vdt13->Fill(dt13, dt12);
399  hUSdt14vdt13->Fill(dt13, dt14);
400  }
401 
402  // fill
403  bool sipm = false;
404  for (auto d : tofdigits) { if (d->ChannelID().Detector == beamlinegeo::ToFCounter::DSSiPM) sipm = true; }
405  if (sipm) {
406  hToF_SiPM->Fill(tof->Time());
407  for (auto wc : wcs) {
408  hTof_vs_momentum_SiPM->Fill(wc->Momentum(), tof->Time());
409  }
410  } else {
411  //if (!hasCherenkov) {
412  double t = tof->Time();
413  if (e.run() < 2889) t += 31.8;
414  t -= 21.0;
415  hToF_any->Fill(t);
416  if (isTOFPromptTrig) {
417  hToF_TOFPrompt->Fill(t);
418  }
419  if (isTOFSlowTrig) {
420  hToF_TOFSlow->Fill(t);
421  }
422  if (isWCHDWRTrig) {
423  hToF_WCHDWR->Fill(t);
424  }
425  if (isTOFPromptTrig && isTOFSlowTrig && isWCHDWRTrig) {
426  hToF_all->Fill(t);
427  }
428  for (auto wc : wcs) {
429  hTof_vs_momentum->Fill(wc->Momentum(), t);
430  }
431  //}
432  }
433  }
434 }
435 
437  TH1D htof(*hToF_any);
438  TCanvas c1("c1", "", 600, 600);
439 
440  //suppress stats
441  htof.SetStats(kFALSE);
442 
443  //set range
444  htof.GetXaxis()->SetRangeUser(0.,220);
445 
446 
447  //draw options
448  htof.SetMarkerStyle(2);
449  htof.GetXaxis()->CenterTitle();
450  htof.GetYaxis()->CenterTitle();
451 
452  //labels
453  htof.GetXaxis()->SetTitle("#Deltat [ns]");
454  htof.SetTitle("Time of Flight Distribution");
455  htof.SetTitleSize(0.05, "XY");
456  htof.SetTitleOffset(.9, "XY");
457 
458  htof.Draw();
459 
460  c1.SaveAs("TOFPrompt_Rates_Monitoring.pdf");
461 }
double usdAdt_p1[16]
double dsdAdt_p0[16]
TFileDirectory mkdir(std::string const &dir, std::string const &descr="")
std::map< ChannelID, TH1D * > hPeakADC_AllHits_channel
std::vector< ChannelID > ChannelIDs() const
All the ChannelIDs in this channel mapping.
DEFINE_ART_MODULE(TestTMapFile)
unsigned int OnlineDigitChannel(ChannelID channel) const
Online digiziter channel number for this offline ChannelID.
Definition: Cand.cxx:23
Encapsulation of reconstructed digitizer &#39;hits&#39;. Used for ToF PMTs and SiPMs, and Cherenkov and Muon ...
std::map< ChannelID, TH1D * > hStartTime_AllHits_channel
T get(std::string const &key) const
Definition: ParameterSet.h:231
Encapsulation of reconstructed Time-of-Flight (ToF) information. Part of beamline reconstruction for ...
art::ServiceHandle< beamlineutil::BeamlineChannelMap > fChannelMap
Float_t d
Definition: plot.C:236
Encapsulation of reconstructed Wire Chamber track. Part of beamline reconstruction for NOvA test beam...
const double j
Definition: BetheBloch.cxx:29
std::map< ChannelID, TH1D * > hStartTime_GoodHits_channel
EDAnalyzer(Table< Config > const &config)
Definition: EDAnalyzer.h:100
void reconfigure(const fhicl::ParameterSet &pset)
T * make(ARGS...args) const
std::map< ChannelID, TH1D * > hPeakADC_GoodHits_channel
double usdAdt_p0[16]
bool getByLabel(std::string const &label, std::string const &productInstanceName, Handle< PROD > &result) const
Definition: DataViewImpl.h:344
c1
Definition: demo5.py:24
Raw data definitions for beamline data used in NOvA test beam experiment.
double dsdAdt_p1[16]
void fill_ptr_vector(std::vector< Ptr< T >> &ptrs, H const &h)
Definition: Ptr.h:464
Encapsulation of reconstructed PID information from detectors in the beamline (ToF, WCs, Cherenkov). Part of beamline reconstruction for NOvA test beam.
Float_t e
Definition: plot.C:35
RunNumber_t run() const
Definition: Event.h:77
ToFAnalysisMini(const fhicl::ParameterSet &pset)
Channel mapping service which may be used to interpret the channels which are read out by the various...
Encapsulation of reconstructed track in the muon stack downstream of test beam detector. Part of beamline reconstruction for NOvA test beam.
void analyze(const art::Event &evt)
art::ServiceHandle< art::TFileService > tfs