All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
numu::NuMuEfficiencyStudy Class Reference
Inheritance diagram for numu::NuMuEfficiencyStudy:

Public Member Functions

 NuMuEfficiencyStudy (fhicl::ParameterSet const &p)
 
 NuMuEfficiencyStudy (NuMuEfficiencyStudy const &)=delete
 
 NuMuEfficiencyStudy (NuMuEfficiencyStudy &&)=delete
 
NuMuEfficiencyStudyoperator= (NuMuEfficiencyStudy const &)=delete
 
NuMuEfficiencyStudyoperator= (NuMuEfficiencyStudy &&)=delete
 
void analyze (art::Event const &e) override
 

Private Member Functions

bool InFV (TVector3 pos)
 
void InitHistos ()
 
void InitHisto (Histos &h, const std::string &prefix)
 
void FillTrue (Histos &h, const simb::MCTruth &interaction, const simb::MCParticle &G4lepton)
 
void FillMatchingMu (Histos &h, float purity, float completeness)
 
void FillMatchingSlc (Histos &h, float purity, float completeness)
 
float ParticleLength (const simb::MCParticle &particle)
 

Private Attributes

Histos fTruth
 
std::vector< HistosfReco
 
std::vector< std::vector
< geo::BoxBoundedGeo > > 
fTPCVolumes
 
std::vector< geo::BoxBoundedGeofActiveVolumes
 
std::array< float, 6 > fFiducialInset
 
std::vector< geo::BoxBoundedGeofFiducialVolumes
 

Static Private Attributes

static const unsigned n_reco_eff = 14
 

Detailed Description

Definition at line 86 of file NuMuEfficiencyStudy_module.cc.

Constructor & Destructor Documentation

numu::NuMuEfficiencyStudy::NuMuEfficiencyStudy ( fhicl::ParameterSet const &  p)
explicit

Definition at line 188 of file NuMuEfficiencyStudy_module.cc.

189  : EDAnalyzer{p},
190  fFiducialInset({p.get<float>("xmin"), p.get<float>("xmax"), p.get<float>("ymin"), p.get<float>("ymax"), p.get<float>("zmin"), p.get<float>("zmax")})
pdgs p
Definition: selectors.fcl:22
numu::NuMuEfficiencyStudy::NuMuEfficiencyStudy ( NuMuEfficiencyStudy const &  )
delete
numu::NuMuEfficiencyStudy::NuMuEfficiencyStudy ( NuMuEfficiencyStudy &&  )
delete

Member Function Documentation

void numu::NuMuEfficiencyStudy::analyze ( art::Event const &  e)
override

Definition at line 265 of file NuMuEfficiencyStudy_module.cc.

266 {
267  art::ServiceHandle<cheat::BackTrackerService> backtracker;
268  art::ServiceHandle<cheat::ParticleInventoryService> inventory_service;
269 
270  auto const clock_data = art::ServiceHandle<detinfo::DetectorClocksService const>()->DataFor(ev);
271 
272  art::ValidHandle<std::vector<simb::MCTruth>> mctruth_handle = ev.getValidHandle<std::vector<simb::MCTruth>>("generator");
273  const std::vector<simb::MCTruth> &mctruth_list = *mctruth_handle;
274  std::vector<art::Ptr<simb::MCTruth>> mctruth_ptrs;
275  art::fill_ptr_vector(mctruth_ptrs, mctruth_handle);
276 
277  art::FindManyP<simb::MCParticle, sim::GeneratedParticleInfo> truth_to_particles(mctruth_handle, ev, "largeant");
278  const std::vector<simb::MCParticle> &g4_particles = *ev.getValidHandle<std::vector<simb::MCParticle>>("largeant");
279  std::map<int, const simb::MCParticle*> g4_particle_map;
280  for (unsigned i_g4 = 0; i_g4 < g4_particles.size(); i_g4++) {
281  g4_particle_map[g4_particles[i_g4].TrackId()] = &g4_particles[i_g4];
282  }
283 
284  std::vector<int> truth_to_numucc;
285  std::vector<simb::MCTruth> numucc;
286  std::vector<simb::MCParticle> G4muons;
287  // iterate over the true interactions
288  for (unsigned i = 0; i < mctruth_list.size(); i++) {
289  const simb::MCTruth &truth = mctruth_list[i];
290  TVector3 vertex(truth.GetNeutrino().Nu().Position().X(), truth.GetNeutrino().Nu().Position().Y(), truth.GetNeutrino().Nu().Position().Z());
291  // fiducial numu CC interactions
292  if (InFV(vertex) && truth.GetNeutrino().CCNC() == 0 && abs(truth.GetNeutrino().Nu().PdgCode()) == 14) {
293  // find the muon in G4
294  const simb::MCParticle *G4muon = Genie2G4MCParticle(truth.GetNeutrino().Lepton(), truth, truth_to_particles.at(i), truth_to_particles.data(i));
295  FillTrue(fTruth, truth, *G4muon);
296  numucc.push_back(truth);
297  G4muons.push_back(*G4muon);
298  truth_to_numucc.push_back(numucc.size()-1);
299  }
300  else truth_to_numucc.push_back(-1);
301  }
302 
303  // no true numu CC? Return
304  if (numucc.size() == 0) return;
305 
306  // get the deposited energy for each muon
307  std::vector<float> muonVisE(G4muons.size(), 0.);
308  for (unsigned i = 0; i < G4muons.size(); i++) {
309  std::vector<const sim::IDE*> particle_ides(backtracker->TrackIdToSimIDEs_Ps(G4muons[i].TrackId()));
310  for (const sim::IDE *ide: particle_ides) muonVisE[i] += ide->energy / 1000.;
311  }
312 
313  // get the deposited energy from primary particles in the neutrino
314  std::vector<float> numuVisE(numucc.size(), 0.);
315  for (unsigned i_g4 = 0; i_g4 < g4_particles.size(); i_g4++) {
316  const simb::MCParticle &particle = g4_particles[i_g4];
317  if (particle.Process() != "primary") continue;
318  art::Ptr<simb::MCTruth> truth = inventory_service->TrackIdToMCTruth_P(particle.TrackId());
319  for (unsigned i_truth = 0; i_truth < mctruth_ptrs.size(); i_truth++) {
320  if (truth == mctruth_ptrs[i_truth]) {
321  if (truth_to_numucc[i_truth] != -1) {
322  std::vector<const sim::IDE*> particle_ides(backtracker->TrackIdToSimIDEs_Ps(particle.TrackId()));
323  for (const sim::IDE *ide: particle_ides) numuVisE[truth_to_numucc[i_truth]] += ide->energy / 1000.;
324  }
325  break;
326  }
327  }
328  }
329 
330  // now collect the reco information
331  //
332  // does a muon track exist?
333  std::vector<int> matching_track(G4muons.size(), -1);
334  std::vector<float> track_purity(G4muons.size(), -1);
335  std::vector<float> track_completeness(G4muons.size(), -1);
336 
337  art::ValidHandle<std::vector<recob::PFParticle>> particle_handle = ev.getValidHandle<std::vector<recob::PFParticle>>("pandora");
338  art::FindManyP<recob::Track> tracks(particle_handle, ev, "pandoraTrack");
339  art::FindManyP<larpandoraobj::PFParticleMetadata> metadatas(particle_handle, ev, "pandora");
340  art::FindManyP<recob::Vertex> particles_to_vertex(particle_handle, ev, "pandora");
341  for (unsigned i_part = 0; i_part < particle_handle->size(); i_part++) {
342  if (!tracks.at(i_part).size()) continue;
343  art::FindManyP<recob::Hit> fmHits(tracks.at(i_part), ev, "pandoraTrack");
344  const std::vector<art::Ptr<recob::Hit>> &this_hits = fmHits.at(0);
345 
346  std::vector<std::pair<int, float>> matches = CAFRecoUtils::AllTrueParticleIDEnergyMatches(clock_data, this_hits);
347 
348  // sort by matching energy
349  std::sort(matches.begin(), matches.end(),
350  [] (auto const &lhs, auto const &rhs) { return lhs.second > rhs.second; });
351 
352  for (unsigned i_cc = 0; i_cc < G4muons.size(); i_cc++) {
353  if (matches.size() && matches[0].first == G4muons[i_cc].TrackId() && matches[0].second / muonVisE[i_cc] > 0.5) {
354  matching_track[i_cc] = particle_handle->at(i_part).Self();
355  track_purity[i_cc] = matches[0].second /
356  std::accumulate(matches.begin(), matches.end(), 0.f,
357  [](auto &a, auto &b){return a + b.second;});
358  track_completeness[i_cc] = matches[0].second / muonVisE[i_cc];
359  }
360  }
361  }
362 
363  // also find a matching slice
364  std::vector<int> matching_slice(numucc.size(), -1);
365  std::vector<float> matching_purity(numucc.size(), -1);
366  std::vector<float> matching_completeness(numucc.size(), -1);
367 
368  art::ValidHandle<std::vector<recob::Slice>> slice_handle = ev.getValidHandle<std::vector<recob::Slice>>("pandora");
369  art::FindManyP<recob::Hit> slice_hits(slice_handle, ev, "pandora");
370  art::FindManyP<recob::PFParticle> slice_particles(slice_handle, ev, "pandora");
371 
372  for (unsigned i_slice = 0; i_slice < slice_handle->size(); i_slice++) {
373  std::vector<float> matchingE(numuVisE.size(), 0.);
374  std::vector<float> matchingPrimaryE(numuVisE.size(), 0.);
375  float totalE = 0.;
376 
377  std::vector<std::pair<int, float>> matches = CAFRecoUtils::AllTrueParticleIDEnergyMatches(clock_data, slice_hits.at(i_slice));
378  for (unsigned i_match = 0; i_match < matches.size(); i_match++) {
379  totalE += matches[i_match].second / 1000.;
380  }
381 
382  for (unsigned i_match = 0; i_match < matches.size(); i_match++) {
383  if (g4_particle_map.count(matches[i_match].first)) {
384  const simb::MCParticle &part = *g4_particle_map.at(matches[i_match].first);
385  art::Ptr<simb::MCTruth> truth = inventory_service->TrackIdToMCTruth_P(part.TrackId());
386  for (unsigned i_truth = 0; i_truth < mctruth_ptrs.size(); i_truth++) {
387  if (truth == mctruth_ptrs[i_truth]) {
388  if (truth_to_numucc[i_truth] != -1) {
389  if (part.Process() == "primary") matchingPrimaryE[truth_to_numucc[i_truth]] += matches[i_match].second / 1000.;
390  matchingE[truth_to_numucc[i_truth]] += matches[i_match].second / 1000.;
391  }
392  break;
393  }
394  }
395  }
396  }
397 
398  unsigned best_match = std::distance(matchingE.begin(), std::max_element(matchingE.begin(), matchingE.end()));
399  if (matchingPrimaryE[best_match] / numuVisE[best_match] > 0.5) {
400  matching_slice[best_match] = i_slice;
401  matching_purity[best_match] = matchingE[best_match] / totalE;
402  matching_completeness[best_match] = matchingPrimaryE[best_match] / numuVisE[best_match];
403  }
404  }
405 
406  // gather information for efficiency calculation
407  for (unsigned i = 0; i < numucc.size(); i++) {
408  bool has_muon_track = matching_track[i] != -1;
409  bool has_slice = matching_slice[i] != -1;
410 
411  bool has_pure_slice = has_slice && matching_purity[i] > 0.5;
412 
413  bool muon_is_reco = false;
414  bool muon_is_fid = false;
415  if (has_muon_track) {
416  const larpandoraobj::PFParticleMetadata &meta = *metadatas.at(matching_track[i]).at(0);
417  auto const &properties = meta.GetPropertiesMap();
418  std::cout << "Muon Track Properties:\n";
419  for (auto pair: properties) std::cout << pair.first << std::endl;
420  if (properties.count("IsClearCosmic")) {
421  muon_is_reco = false;
422  }
423  else {
424  muon_is_reco = true;
425  }
426 
427  auto muon_vert = tracks.at(matching_track[i]).at(0)->Start();
428  TVector3 muon_vert_v(muon_vert.X(), muon_vert.Y(), muon_vert.Z());
429 
430  muon_is_fid = InFV(muon_vert_v);
431  }
432 
433  bool slice_is_neutrino = false;
434  bool slice_is_reco = false;
435  bool slice_is_fiducial = false;
436  bool slice_has_muon = false;
437  if (has_slice) {
438  const std::vector<art::Ptr<recob::PFParticle>> &this_slice_particles = slice_particles.at(matching_slice[i]);
439  for (art::Ptr<recob::PFParticle> pfp: this_slice_particles) {
440  if (pfp->IsPrimary()) {
441  const larpandoraobj::PFParticleMetadata &meta = *metadatas.at(pfp.key()).at(0);
442  auto const &properties = meta.GetPropertiesMap();
443  std::cout << "Particle Properties:\n";
444  for (auto pair: properties) std::cout << pair.first << " " << pair.second << std::endl;
445 
446  if (properties.count("IsNeutrino")) slice_is_neutrino = true;
447  if (properties.count("IsNeutrino") && pfp->PdgCode() == 14) slice_is_reco = true;
448 
449  // check for vertex
450  if (particles_to_vertex.at(pfp.key()).size()) {
451  const recob::Vertex &vert = *particles_to_vertex.at(pfp.key()).at(0);
452  TVector3 vect(vert.position().X(), vert.position().Y(), vert.position().Z());
453  slice_is_fiducial = InFV(vect);
454  }
455  }
456  if (has_muon_track && matching_track[i] == (int)pfp->Self()) {
457  slice_has_muon = true;
458  }
459  }
460  }
461 
462  bool has_pure_nu_slice = has_pure_slice && slice_is_neutrino;
463  bool has_fid_nu_slice = slice_is_fiducial && slice_is_neutrino;
464  bool has_fid_pure_slice = slice_is_fiducial && has_pure_slice;
465  bool has_reco_fid_slice = slice_is_fiducial && slice_is_reco;
466  bool slice_has_reco_muon = slice_has_muon && muon_is_reco;
467 
468  std::array<bool, n_reco_eff> pass = {has_muon_track, muon_is_reco, muon_is_fid, has_slice, has_pure_slice, slice_is_reco, slice_is_fiducial, slice_has_muon, has_fid_pure_slice, has_reco_fid_slice, slice_has_reco_muon, has_fid_nu_slice, has_pure_nu_slice, slice_is_neutrino};
469  for (unsigned j = 0; j < n_reco_eff; j++) {
470  for (unsigned k = 0; k < n_reco_eff; k++) {
471  if (pass[j] && pass[k]) {
472  FillTrue(fReco[j * n_reco_eff + k], numucc[i], G4muons[i]);
473  FillMatchingMu(fReco[j * n_reco_eff + k], track_purity[i], track_completeness[i]);
474  FillMatchingSlc(fReco[j * n_reco_eff + k], matching_purity[i], matching_completeness[i]);
475  }
476  }
477  }
478  }
479 
480 }
process_name vertex
Definition: cheaterreco.fcl:51
void FillMatchingSlc(Histos &h, float purity, float completeness)
ClusterModuleLabel join with tracks
std::size_t size(FixedBins< T, C > const &) noexcept
Definition: FixedBins.h:561
Definition of vertex object for LArSoft.
Definition: Vertex.h:35
process_name gaushit a
std::vector< std::pair< int, float > > AllTrueParticleIDEnergyMatches(const detinfo::DetectorClocksData &clockData, const std::vector< art::Ptr< recob::Hit > > &hits, bool rollup_unsaved_ids=1)
T abs(T value)
double distance(geo::Point_t const &point, CathodeDesc_t const &cathode)
Returns the distance of a point from the cathode.
Metadata associated to PFParticles.
Ionization at a point of the TPC sensitive volume.
Definition: SimChannel.h:86
const PropertiesMap & GetPropertiesMap() const
void FillMatchingMu(Histos &h, float purity, float completeness)
void FillTrue(Histos &h, const simb::MCTruth &interaction, const simb::MCParticle &G4lepton)
const simb::MCParticle * Genie2G4MCParticle(const simb::MCParticle &genie_part, const simb::MCTruth &mctruth, const std::vector< art::Ptr< simb::MCParticle >> &g4_mcparticles, const std::vector< const sim::GeneratedParticleInfo * > infos)
pdgs k
Definition: selectors.fcl:22
const Point_t & position() const
Return vertex 3D position.
Definition: Vertex.h:60
BEGIN_PROLOG could also be cout
void numu::NuMuEfficiencyStudy::FillMatchingMu ( Histos h,
float  purity,
float  completeness 
)
private

Definition at line 245 of file NuMuEfficiencyStudy_module.cc.

245  {
246  h.muon_completeness->Fill(completeness);
247  h.muon_purity->Fill(purity);
248 }
void numu::NuMuEfficiencyStudy::FillMatchingSlc ( Histos h,
float  purity,
float  completeness 
)
private

Definition at line 250 of file NuMuEfficiencyStudy_module.cc.

250  {
251  h.slice_completeness->Fill(completeness);
252  h.slice_purity->Fill(purity);
253 }
void numu::NuMuEfficiencyStudy::FillTrue ( Histos h,
const simb::MCTruth &  interaction,
const simb::MCParticle &  G4lepton 
)
private

Definition at line 255 of file NuMuEfficiencyStudy_module.cc.

255  {
256  h.neutrino_energy->Fill(truth.GetNeutrino().Nu().E());
257  h.muon_momentum->Fill(truth.GetNeutrino().Lepton().Momentum().Vect().Mag());
258  h.muon_length->Fill(ParticleLength(G4lepton));
259 
260  h.vertex_x->Fill(truth.GetNeutrino().Nu().Position().X());
261  h.vertex_y->Fill(truth.GetNeutrino().Nu().Position().Y());
262  h.vertex_z->Fill(truth.GetNeutrino().Nu().Position().Z());
263 }
float ParticleLength(const simb::MCParticle &particle)
bool numu::NuMuEfficiencyStudy::InFV ( TVector3  pos)
private

Definition at line 128 of file NuMuEfficiencyStudy_module.cc.

128  {
129  for (auto const &FV: fFiducialVolumes) {
130  if (FV.ContainsPosition(pos)) return true;
131  }
132  return false;
133 }
std::vector< geo::BoxBoundedGeo > fFiducialVolumes
void numu::NuMuEfficiencyStudy::InitHisto ( Histos h,
const std::string &  prefix 
)
private

Definition at line 163 of file NuMuEfficiencyStudy_module.cc.

163  {
164  art::ServiceHandle<art::TFileService> tfs;
165 
166  h.neutrino_energy = tfs->make<TH1D>((prefix + "_nuE").c_str(), "nuE", 100, 0, 4);
167  h.muon_momentum = tfs->make<TH1D>((prefix + "_muP").c_str(), "muP", 100, 0, 4);
168  h.muon_length = tfs->make<TH1D>((prefix + "_muL").c_str(), "muL", 100, 0, 600);
169 
170  float XMin = std::min_element(fFiducialVolumes.begin(), fFiducialVolumes.end(), [](auto &lhs, auto &rhs) { return lhs.MinX() < rhs.MinX(); })->MinX();
171  float XMax = std::max_element(fFiducialVolumes.begin(), fFiducialVolumes.end(), [](auto &lhs, auto &rhs) { return lhs.MaxX() < rhs.MaxX(); })->MaxX();
172  float YMin = std::min_element(fFiducialVolumes.begin(), fFiducialVolumes.end(), [](auto &lhs, auto &rhs) { return lhs.MinY() < rhs.MinY(); })->MinY();
173  float YMax = std::max_element(fFiducialVolumes.begin(), fFiducialVolumes.end(), [](auto &lhs, auto &rhs) { return lhs.MaxY() < rhs.MaxY(); })->MaxY();
174  float ZMin = std::min_element(fFiducialVolumes.begin(), fFiducialVolumes.end(), [](auto &lhs, auto &rhs) { return lhs.MinZ() < rhs.MinZ(); })->MinZ();
175  float ZMax = std::max_element(fFiducialVolumes.begin(), fFiducialVolumes.end(), [](auto &lhs, auto &rhs) { return lhs.MaxZ() < rhs.MaxZ(); })->MaxZ();
176 
177  h.vertex_x = tfs->make<TH1D>((prefix + "_v_x").c_str(), "v_x", 200, XMin, XMax);
178  h.vertex_y = tfs->make<TH1D>((prefix + "_v_y").c_str(), "v_y", 200, YMin, YMax);
179  h.vertex_z = tfs->make<TH1D>((prefix + "_v_z").c_str(), "v_z", 200, ZMin, ZMax);
180 
181  h.muon_completeness = tfs->make<TH1D>((prefix + "_muC").c_str(), "muC", 100, 0., 1.);
182  h.muon_purity = tfs->make<TH1D>((prefix + "_mupur").c_str(), "mupur", 100, 0., 1.);
183 
184  h.slice_completeness = tfs->make<TH1D>((prefix + "_nuC").c_str(), "nuC", 100, 0., 1.);
185  h.slice_purity = tfs->make<TH1D>((prefix + "_nupur").c_str(), "nupur", 100, 0., 1.);
186 }
std::vector< geo::BoxBoundedGeo > fFiducialVolumes
art::ServiceHandle< art::TFileService > tfs
void numu::NuMuEfficiencyStudy::InitHistos ( )
private

Definition at line 135 of file NuMuEfficiencyStudy_module.cc.

135  {
136  InitHisto(fTruth, "truth");
137 
138  std::array<std::string, n_reco_eff> effnames {"has_muon",
139  "has_reco_muon",
140  "muon_is_fid",
141  "has_slice",
142  "has_pure_slice",
143  "has_reco_slice",
144  "has_fid_slice",
145  "slice_has_muon",
146  "has_fid_pure_slice",
147  "has_reco_fid_slice",
148  "slice_has_reco_muon",
149  "has_fid_nu_slice",
150  "has_pure_nu_slice",
151  "has_neutrino_slice"};
152  for (unsigned i = 0; i < n_reco_eff; i++) {
153  for (unsigned j = 0; j < n_reco_eff; j++) {
154  std::string name;
155  if (i == j) name = effnames[i];
156  else name = effnames[i] + "_" + effnames[j];
157  fReco.emplace_back();
158  InitHisto(fReco.back(), name);
159  }
160  }
161 }
void InitHisto(Histos &h, const std::string &prefix)
then echo fcl name
NuMuEfficiencyStudy& numu::NuMuEfficiencyStudy::operator= ( NuMuEfficiencyStudy const &  )
delete
NuMuEfficiencyStudy& numu::NuMuEfficiencyStudy::operator= ( NuMuEfficiencyStudy &&  )
delete
float numu::NuMuEfficiencyStudy::ParticleLength ( const simb::MCParticle &  particle)
private

Definition at line 228 of file NuMuEfficiencyStudy_module.cc.

228  {
229  std::vector<geoalgo::AABox> aa_volumes;
230  for (const geo::BoxBoundedGeo &AV: fActiveVolumes) {
231  if (AV.ContainsPosition(particle.Position().Vect())) {
232  aa_volumes.emplace_back(AV.MinX(), AV.MinY(), AV.MinZ(), AV.MaxX(), AV.MaxY(), AV.MaxZ());
233  break;
234  }
235  }
236 
237  float length = 0.;
238  for (unsigned i = 1; i < particle.NumberTrajectoryPoints(); i++) {
239  length += ContainedLength(particle.Position(i-1).Vect(), particle.Position(i).Vect(), aa_volumes);
240  }
241 
242  return length;
243 }
double ContainedLength(const TVector3 &v0, const TVector3 &v1, const std::vector< geo::BoxBoundedGeo > &boxes)
Definition: Interaction.cxx:28
std::vector< geo::BoxBoundedGeo > fActiveVolumes
A base class aware of world box coordinatesAn object describing a simple shape can inherit from this ...
Definition: BoxBoundedGeo.h:33

Member Data Documentation

std::vector<geo::BoxBoundedGeo> numu::NuMuEfficiencyStudy::fActiveVolumes
private

Definition at line 106 of file NuMuEfficiencyStudy_module.cc.

std::array<float, 6> numu::NuMuEfficiencyStudy::fFiducialInset
private

Definition at line 110 of file NuMuEfficiencyStudy_module.cc.

std::vector<geo::BoxBoundedGeo> numu::NuMuEfficiencyStudy::fFiducialVolumes
private

Definition at line 111 of file NuMuEfficiencyStudy_module.cc.

std::vector<Histos> numu::NuMuEfficiencyStudy::fReco
private

Definition at line 103 of file NuMuEfficiencyStudy_module.cc.

std::vector<std::vector<geo::BoxBoundedGeo> > numu::NuMuEfficiencyStudy::fTPCVolumes
private

Definition at line 105 of file NuMuEfficiencyStudy_module.cc.

Histos numu::NuMuEfficiencyStudy::fTruth
private

Definition at line 102 of file NuMuEfficiencyStudy_module.cc.

const unsigned numu::NuMuEfficiencyStudy::n_reco_eff = 14
staticprivate

Definition at line 108 of file NuMuEfficiencyStudy_module.cc.


The documentation for this class was generated from the following file: