LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
ems::MultiEMShowers Class Reference
Inheritance diagram for ems::MultiEMShowers:
art::EDAnalyzer art::detail::Analyzer art::detail::LegacyModule art::Observer art::ModuleBase

Public Types

using ModuleType = EDAnalyzer
 

Public Member Functions

 MultiEMShowers (fhicl::ParameterSet const &p)
 
 MultiEMShowers (MultiEMShowers const &)=delete
 
 MultiEMShowers (MultiEMShowers &&)=delete
 
MultiEMShowersoperator= (MultiEMShowers const &)=delete
 
MultiEMShowersoperator= (MultiEMShowers &&)=delete
 
void doBeginJob (SharedResources const &resources)
 
void doEndJob ()
 
void doRespondToOpenInputFile (FileBlock const &fb)
 
void doRespondToCloseInputFile (FileBlock const &fb)
 
void doRespondToOpenOutputFiles (FileBlock const &fb)
 
void doRespondToCloseOutputFiles (FileBlock const &fb)
 
bool doBeginRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doEndRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doBeginSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEndSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEvent (EventPrincipal &ep, ModuleContext const &mc, std::atomic< std::size_t > &counts_run, std::atomic< std::size_t > &counts_passed, std::atomic< std::size_t > &counts_failed)
 
ModuleDescription const & moduleDescription () const
 
void setModuleDescription (ModuleDescription const &)
 
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables () const
 
void sortConsumables (std::string const &current_process_name)
 
std::unique_ptr< Worker > makeWorker (WorkerParams const &wp)
 
template<typename T , BranchType BT>
ViewToken< T > consumesView (InputTag const &tag)
 
template<typename T , BranchType BT>
ViewToken< T > mayConsumeView (InputTag const &tag)
 

Protected Member Functions

std::string const & processName () const
 
bool wantAllEvents () const noexcept
 
bool wantEvent (ScheduleID id, Event const &e) const
 
Handle< TriggerResults > getTriggerResults (Event const &e) const
 
ConsumesCollector & consumesCollector ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 

Private Member Functions

void beginJob () override
 
void endJob () override
 
void analyze (art::Event const &e) override
 
bool convCluster (art::Event const &evt)
 
double getMinDist (detinfo::DetectorPropertiesData const &detProp, std::vector< art::Ptr< recob::Hit >> const &v, TVector3 const &convmc, size_t view, size_t tpc, size_t cryo)
 

Private Attributes

int fConvGood
 
int fConvWrong
 
int fConvBothGood
 
int fGammasInside
 
TTree * fEvTree
 
int fEvNumber
 
int fNGroups
 
double fPi0mom
 
double fGmom1
 
double fGmom2
 
double fMcth
 
int fNgammas
 
int fEvFidVol
 
int fEvComp
 
int fEvGMomCut
 
int fEvInput
 
TVector3 fGdir1
 
TVector3 fGdir2
 
TVector3 fPrimary
 
int fEvReco
 
int fEv2Groups
 
int fEv2Good
 
int fCountph
 
int fCountreco
 
TTree * fShTree
 
TTree * fRecoTree
 
double fStartX
 
double fStartY
 
double fStartZ
 
double fDedxZ
 
double fDedxV
 
double fDedxU
 
double fMCrecovtx
 
double fMCrecoTh
 
double fMCrecovtxgood
 
double fMCrecoThgood
 
double fRecth
 
double fRecthgood
 
double fDistConvrecomc1
 
double fDistConvrecomc2
 
double fGdirmcreco1
 
double fGdirmcreco2
 
double fGdirmcreco1good
 
double fGdirmcreco2good
 
art::InputTag fHitsModuleLabel
 
art::InputTag fCluModuleLabel
 
art::InputTag fTrk3DModuleLabel
 
art::InputTag fVtxModuleLabel
 
art::InputTag fShsModuleLabel
 

Detailed Description

Definition at line 228 of file MultiEMShowers_module.cc.

Member Typedef Documentation

Definition at line 22 of file EDAnalyzer.h.

Constructor & Destructor Documentation

ems::MultiEMShowers::MultiEMShowers ( fhicl::ParameterSet const &  p)
explicit

Definition at line 309 of file MultiEMShowers_module.cc.

References fCluModuleLabel, fConvBothGood, fConvGood, fConvWrong, fEv2Good, fEv2Groups, fEvComp, fEvFidVol, fEvGMomCut, fEvInput, fEvReco, fHitsModuleLabel, fShsModuleLabel, fTrk3DModuleLabel, fVtxModuleLabel, and fhicl::ParameterSet::get().

309  : EDAnalyzer(p)
310 {
311  fConvGood = 0;
312  fConvWrong = 0;
313  fConvBothGood = 0;
314  fEvFidVol = 0;
315  fEvComp = 0;
316  fEvGMomCut = 0;
317  fEvReco = 0;
318  fEvInput = 0;
319  fEv2Groups = 0;
320  fEv2Good = 0;
321  fHitsModuleLabel = p.get<art::InputTag>("HitsModuleLabel");
322  fCluModuleLabel = p.get<art::InputTag>("ClustersModuleLabel");
323  fTrk3DModuleLabel = p.get<art::InputTag>("Trk3DModuleLabel");
324  fVtxModuleLabel = p.get<art::InputTag>("VtxModuleLabel");
325  fShsModuleLabel = p.get<art::InputTag>("ShsModuleLabel");
326 }
EDAnalyzer(fhicl::ParameterSet const &pset)
Definition: EDAnalyzer.cc:6
ems::MultiEMShowers::MultiEMShowers ( MultiEMShowers const &  )
delete
ems::MultiEMShowers::MultiEMShowers ( MultiEMShowers &&  )
delete

Member Function Documentation

void ems::MultiEMShowers::analyze ( art::Event const &  e)
overrideprivatevirtual

Implements art::EDAnalyzer.

Definition at line 386 of file MultiEMShowers_module.cc.

References convCluster(), recob::Shower::dEdx(), recob::Shower::Direction(), larg4::dist(), pma::Dist2(), art::EventID::event(), fCluModuleLabel, fConvBothGood, fConvGood, fConvWrong, fCountph, fCountreco, fDedxU, fDedxV, fDedxZ, fDistConvrecomc1, fDistConvrecomc2, fEv2Good, fEv2Groups, fEvComp, fEvFidVol, fEvGMomCut, fEvInput, fEvNumber, fEvReco, fEvTree, fGammasInside, fGdir1, fGdir2, fGdirmcreco1, fGdirmcreco1good, fGdirmcreco2, fGdirmcreco2good, fGmom1, fGmom2, fHitsModuleLabel, fMCrecoTh, fMCrecoThgood, fMCrecovtx, fMCrecovtxgood, fMcth, fNgammas, fNGroups, fPi0mom, fPrimary, fRecoTree, fRecth, fRecthgood, fShsModuleLabel, fShTree, fStartX, fStartY, fStartZ, fTrk3DModuleLabel, fVtxModuleLabel, art::ProductRetriever::getByLabel(), ems::MCinfo::GetCosine(), ems::MCinfo::GetDirgamma1(), ems::MCinfo::GetDirgamma2(), ems::MCinfo::GetMomGamma1(), ems::MCinfo::GetMomGamma2(), ems::MCinfo::GetMompi0(), ems::MCinfo::GetNgammas(), ems::MCinfo::GetPosgamma1(), ems::MCinfo::GetPosgamma2(), ems::MCinfo::GetPospi0(), ems::MCinfo::GetPrimary(), art::Event::id(), ems::MCinfo::IsCompton(), ems::MCinfo::IsInside1(), ems::MCinfo::IsInside2(), recob::Shower::ShowerStart(), and pma::SolveLeastSquares3D().

387 {
388  fEvNumber = e.id().event();
389  fNGroups = 0;
390  fStartX = 0.0;
391  fStartY = 0.0;
392  fStartZ = 0.0;
393  fPi0mom = 0.0;
394  fNgammas = 0;
395  fDistConvrecomc1 = 0.0;
396  fDistConvrecomc2 = 0.0;
397  fMCrecovtx = -400.0;
398  fMCrecovtxgood = -400.0;
399  fRecth = -400.0;
400  fRecthgood = -400.0;
401  fMCrecoTh = -400.0;
402  fMCrecoThgood = -400.0;
403  fGammasInside = 0;
404  fCountph = 0;
405  fCountreco = 0;
406  fGdirmcreco1 = 0.0;
407  fGdirmcreco2 = 0.0;
408  fGdirmcreco1good = 0.0;
409  fGdirmcreco2good = 0.0;
410  fDedxZ = 0.0;
411  fDedxV = 0.0;
412  fDedxU = 0.0;
413 
414  ems::MCinfo mc;
415  fPrimary = mc.GetPrimary();
416  fPi0mom = mc.GetMompi0();
417  fGmom1 = mc.GetMomGamma1();
418  fGmom2 = mc.GetMomGamma2();
419  fGdir1 = mc.GetDirgamma1();
420  fGdir2 = mc.GetDirgamma2();
421  fNgammas = mc.GetNgammas();
422  TVector3 pospi0 = mc.GetPospi0();
423 
424  double cosinemc = mc.GetCosine();
425  fMcth = 180.0F * (std::acos(cosinemc)) / TMath::Pi();
426  TVector3 convp[2];
427  convp[0] = mc.GetPosgamma1();
428  convp[1] = mc.GetPosgamma2();
429  const double maxdist = 2.0; //cm
430 
431  // check whether two photons are inside fid vol
432  if (mc.IsInside1() && mc.IsInside2()) {
433  fGammasInside = 1;
434  fEvFidVol++;
435  }
436 
437  if ((fGmom1 > 0.1) && (fGmom2 > 0.1)) fEvGMomCut++;
438 
439  if (mc.IsCompton()) fEvComp++;
440 
446  if (e.getByLabel(fShsModuleLabel, shsListHandle) &&
447  e.getByLabel(fTrk3DModuleLabel, trkListHandle) &&
448  e.getByLabel(fVtxModuleLabel, vtxListHandle) &&
449  e.getByLabel(fCluModuleLabel, cluListHandle) &&
450  e.getByLabel(fHitsModuleLabel, hitListHandle)) {
451  art::FindManyP<recob::Cluster> cluFromShs(shsListHandle, e, fShsModuleLabel);
452  art::FindManyP<recob::Cluster> cluFromTrk(trkListHandle, e, fTrk3DModuleLabel);
453  art::FindManyP<recob::Vertex> vtxFromTrk(trkListHandle, e, fVtxModuleLabel);
454  art::FindManyP<recob::Hit> hitFromClu(cluListHandle, e, fCluModuleLabel);
455 
456  fNGroups = shsListHandle->size();
457 
458  fCountph = 0;
459  if (fNgammas == 2) // pi0
460  {
461  int idph = -1;
462  for (size_t s = 0; s < shsListHandle->size(); ++s) {
463  const recob::Shower& sh = (*shsListHandle)[s];
464  double mindist = maxdist;
465  bool found = false;
466 
467  for (int i = 0; i < fNgammas; ++i) {
468  double dist = sqrt(pma::Dist2(sh.ShowerStart(), convp[i]));
469  if ((dist < mindist) && (idph != i)) {
470  mindist = dist;
471  idph = i;
472  found = true;
473  }
474  }
475  if (found) {
476  fConvGood++;
477  fCountph++;
478  }
479  else {
480  fConvWrong++;
481  }
482  }
483  if (fCountph == 2) fConvBothGood++;
484 
485  // plot a few variables if there are 2 showers
486  if (fCountph == 2)
487  for (size_t s = 0; s < shsListHandle->size(); ++s) {
488  const recob::Shower& sh = (*shsListHandle)[s];
489  TVector3 pos = sh.ShowerStart();
490  fStartX = pos.X();
491  fStartY = pos.Y();
492  fStartZ = pos.Z();
493  std::vector<double> const& vecdedx = sh.dEdx();
494 
495  if (vecdedx.size() == 3) {
496  fDedxZ = vecdedx[0];
497  fDedxV = vecdedx[1];
498  fDedxU = vecdedx[2];
499  }
500 
501  fShTree->Fill();
502  }
503  }
504  else // other than pi0
505  {
506  for (size_t s = 0; s < shsListHandle->size(); ++s) {
507  const recob::Shower& sh = (*shsListHandle)[s];
508  double mindist = maxdist;
509 
510  double dist = sqrt(pma::Dist2(sh.ShowerStart(), fPrimary));
511  if (dist < mindist) {
512  TVector3 pos = sh.ShowerStart();
513  fStartX = pos.X();
514  fStartY = pos.Y();
515  fStartZ = pos.Z();
516  std::vector<double> vecdedx = sh.dEdx();
517  if (vecdedx.size() == 3) {
518  fDedxZ = vecdedx[0];
519  fDedxV = vecdedx[1];
520  fDedxU = vecdedx[2];
521  }
522  }
523 
524  fShTree->Fill();
525  }
526  }
527  // compute the crossing point
528 
529  //cut from mc and clusters
530 
531  if (mc.IsInside1() && mc.IsInside2() && (fGmom1 > 0.1) && (fGmom2 > 0.1) && (!mc.IsCompton()) &&
532  convCluster(e)) {
533  fCountreco = 1;
534  if (fNGroups == 2) fEv2Groups++;
535  if ((fNGroups == 2) && (fCountph == 2)) fEv2Good++;
536  // cut from reco
537  //if (countph == 2)
538  if (fNGroups == 2) {
539  std::vector<std::pair<TVector3, TVector3>> lines;
540  const recob::Shower& sh1 = (*shsListHandle)[0];
541  const recob::Shower& sh2 = (*shsListHandle)[1];
542 
543  std::pair<TVector3, TVector3> frontback1(sh1.ShowerStart(),
544  sh1.ShowerStart() + sh1.Direction());
545  std::pair<TVector3, TVector3> frontback2(sh2.ShowerStart(),
546  sh2.ShowerStart() + sh2.Direction());
547  lines.push_back(frontback1);
548  lines.push_back(frontback2);
549 
550  TVector3 result;
551  pma::SolveLeastSquares3D(lines, result); // mse.
552 
553  double dist1_0 = pma::Dist2(result, sh1.ShowerStart());
554  double dist2_0 = pma::Dist2(result, sh1.ShowerStart() + sh1.Direction());
555  double dist1_1 = pma::Dist2(result, sh2.ShowerStart());
556  double dist2_1 = pma::Dist2(result, sh2.ShowerStart() + sh2.Direction());
557  if ((dist1_0 > dist2_0) || (dist1_1 > dist2_1)) {}
558  else {
559  fMCrecovtx = std::sqrt(pma::Dist2(pospi0, result));
560 
561  if (fCountph == 2) fMCrecovtxgood = fMCrecovtx;
562 
563  double cosine_reco = sh1.Direction() * sh2.Direction();
564  fRecth = 180.0F * (std::acos(cosine_reco)) / TMath::Pi();
565 
566  fGdirmcreco1 = fGdir1 * sh1.Direction();
567  fGdirmcreco2 = fGdir2 * sh2.Direction();
568  if (fCountph == 2) {
571  }
572 
573  if (fCountph == 2) fRecthgood = fRecth;
574 
575  fMCrecoTh = fRecth - fMcth;
576 
577  if (fCountph == 2) fMCrecoThgood = fMCrecoTh;
578 
579  fEvReco++;
580  fRecoTree->Fill();
581  }
582  }
583  fEvInput++;
584  //fRecoTree->Fill();
585  }
586  }
587 
588  fEvTree->Fill();
589 }
const TVector3 & ShowerStart() const
Definition: Shower.h:197
TVector3 const & GetDirgamma2() const
double SolveLeastSquares3D(const std::vector< std::pair< TVector3, TVector3 >> &lines, TVector3 &result)
Definition: Utilities.cxx:158
double Dist2(const TVector2 &v1, const TVector2 &v2)
Definition: Utilities.cxx:39
bool convCluster(art::Event const &evt)
double GetMomGamma2() const
double GetMompi0() const
const std::vector< double > & dEdx() const
Definition: Shower.h:235
TVector3 const & GetPosgamma1() const
int GetNgammas() const
const TVector3 & Direction() const
Definition: Shower.h:188
TVector3 const & GetPrimary() const
TVector3 const & GetDirgamma1() const
bool IsInside2() const
bool IsCompton() const
TVector3 const & GetPospi0() const
double GetMomGamma1() const
double dist(const TReal *x, const TReal *y, const unsigned int dimension)
Float_t e
Definition: plot.C:35
TVector3 const & GetPosgamma2() const
bool IsInside1() const
void ems::MultiEMShowers::beginJob ( )
overrideprivatevirtual

Reimplemented from art::EDAnalyzer.

Definition at line 328 of file MultiEMShowers_module.cc.

References fConvBothGood, fConvGood, fConvWrong, fCountph, fCountreco, fDedxU, fDedxV, fDedxZ, fEvNumber, fEvTree, fGammasInside, fGdirmcreco1, fGdirmcreco1good, fGdirmcreco2, fGdirmcreco2good, fGmom1, fGmom2, fMCrecoTh, fMCrecoThgood, fMCrecovtx, fMCrecovtxgood, fMcth, fNgammas, fNGroups, fPi0mom, fRecoTree, fRecth, fRecthgood, fShTree, fStartX, fStartY, and fStartZ.

329 {
331 
332  fEvTree = tfs->make<TTree>("MultiShowers", "showers3d");
333  fEvTree->Branch("fEvNumber", &fEvNumber, "fEvNumber/I");
334  fEvTree->Branch("fNGroups", &fNGroups, "fNGroups/I");
335  fEvTree->Branch("fPi0mom", &fPi0mom, "fPi0mom/D");
336  fEvTree->Branch("fNgammas", &fNgammas, "fNgammas/I");
337  fEvTree->Branch("fGmom1", &fGmom1, "fGmom1/D");
338  fEvTree->Branch("fGmom2", &fGmom2, "fGmom2/D");
339  fEvTree->Branch("fMcth", &fMcth, "fMcth/D");
340  fEvTree->Branch("fRecth", &fRecth, "fRecth/D");
341  fEvTree->Branch("fMCrecovtx", &fMCrecovtx, "fMCrecovtx/D");
342  fEvTree->Branch("fMCrecoTh", &fMCrecoTh, "fMCrecoTh/D");
343  fEvTree->Branch("fConvGood", &fConvGood, "fConvGood/I");
344  fEvTree->Branch("fConvWrong", &fConvWrong, "fConvWrong/I");
345  fEvTree->Branch("fConvBothGood", &fConvBothGood, "fConvBothGood/I");
346  fEvTree->Branch("fGammasInside", &fGammasInside, "fGammasInside/I");
347  fEvTree->Branch("fCountph", &fCountph, "fCountph/I");
348  fEvTree->Branch("fCountreco", &fCountreco, "fCountreco/I");
349 
350  fRecoTree = tfs->make<TTree>("Cascades", "conv points");
351  fRecoTree->Branch("fRecth", &fRecth, "fRecth/D");
352  fRecoTree->Branch("fMCrecovtx", &fMCrecovtx, "fMCrecovtx/D");
353  fRecoTree->Branch("fMCrecoTh", &fMCrecoTh, "fMCrecoTh/D");
354  fRecoTree->Branch("fRecthgood", &fRecthgood, "fRecthgood/D");
355  fRecoTree->Branch("fMCrecovtxgood", &fMCrecovtxgood, "fMCrecovtxgood/D");
356  fRecoTree->Branch("fMCrecoThgood", &fMCrecoThgood, "fMCrecoThgood/D");
357  fRecoTree->Branch("fGdirmcreco1", &fGdirmcreco1, "fGdirmcreco1/D");
358  fRecoTree->Branch("fGdirmcreco2", &fGdirmcreco2, "fGdirmcreco2/D");
359  fRecoTree->Branch("fGdirmcreco1good", &fGdirmcreco1good, "fGdirmcreco1good/D");
360  fRecoTree->Branch("fGdirmcreco2good", &fGdirmcreco2good, "fGdirmcreco2good/D");
361 
362  fShTree = tfs->make<TTree>("Shower", "conv point");
363 
364  fShTree->Branch("fStartX", &fStartX, "fStartX/D");
365  fShTree->Branch("fStartY", &fStartY, "fStartY/D");
366  fShTree->Branch("fStartZ", &fStartZ, "fStartZ/D");
367  fShTree->Branch("fDedxZ", &fDedxZ, "fDedxZ/D");
368  fShTree->Branch("fDedxV", &fDedxV, "fDedxV/D");
369  fShTree->Branch("fDedxU", &fDedxU, "fDedxU/D");
370 }
template<typename T , BranchType BT>
ProductToken< T > art::ModuleBase::consumes ( InputTag const &  tag)
protectedinherited

Definition at line 61 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumes().

62  {
63  return collector_.consumes<T, BT>(tag);
64  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ProductToken< T > consumes(InputTag const &)
ConsumesCollector & art::ModuleBase::consumesCollector ( )
protectedinherited

Definition at line 57 of file ModuleBase.cc.

References art::ModuleBase::collector_.

58  {
59  return collector_;
60  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename T , BranchType BT>
void art::ModuleBase::consumesMany ( )
protectedinherited

Definition at line 75 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumesMany().

76  {
77  collector_.consumesMany<T, BT>();
78  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::ModuleBase::consumesView ( InputTag const &  )
protectedinherited
template<typename T , BranchType BT>
ViewToken<T> art::ModuleBase::consumesView ( InputTag const &  tag)
inherited

Definition at line 68 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumesView().

69  {
70  return collector_.consumesView<T, BT>(tag);
71  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ViewToken< Element > consumesView(InputTag const &)
bool ems::MultiEMShowers::convCluster ( art::Event const &  evt)
private

Definition at line 592 of file MultiEMShowers_module.cc.

References geo::CryostatID::Cryostat, larg4::dist(), fCluModuleLabel, fHitsModuleLabel, geo::GeometryCore::FindTPCAtPosition(), Get, art::ProductRetriever::getByLabel(), getMinDist(), ems::MCinfo::GetPosgamma1(), ems::MCinfo::GetPosgamma2(), geo::GeometryCore::HasTPC(), hits(), geo::GeometryCore::PositionToCryostatID(), and geo::TPCID::TPC.

Referenced by analyze().

593 {
594  ems::MCinfo mc;
595  TVector3 const convp[2]{mc.GetPosgamma1(), mc.GetPosgamma2()};
596 
597  geo::Point_t const vtx{convp[0].X(), convp[0].Y(), convp[0].Z()};
598 
600  geo::TPCID idtpc = geom->FindTPCAtPosition(vtx);
601  geo::CryostatID const cryoid = geom->PositionToCryostatID(vtx);
602 
605 
606  //map: conversion point, vec of id clusters in each view
607  std::map<size_t, std::vector<size_t>> used;
608 
609  art::FindManyP<recob::Hit> fbc(cluListHandle, evt, fCluModuleLabel);
610 
611  auto const detProp = art::ServiceHandle<detinfo::DetectorPropertiesService const>()->DataFor(evt);
612  auto const& readoutGeom = art::ServiceHandle<geo::WireReadout>()->Get();
613  double maxdist = 1.0; // 1 cm
614  if (geom->HasTPC(idtpc)) {
615  if (evt.getByLabel(fHitsModuleLabel, hitListHandle) &&
616  evt.getByLabel(fCluModuleLabel, cluListHandle)) {
617  size_t conv = 0;
618  while (conv < 2) {
619  for (auto const& plane : readoutGeom.Iterate<geo::PlaneGeo>(cryoid)) {
620 
621  double mindist = maxdist;
622  int clid = 0;
623  for (size_t c = 0; c < cluListHandle->size(); ++c) {
624 
625  bool exist = false;
626  for (auto const& ids : used)
627  for (auto i : ids.second)
628  if (i == c) exist = true;
629  if (exist) continue;
630 
631  std::vector<art::Ptr<recob::Hit>> hits = fbc.at(c);
632  if (hits.size() < 20) continue;
633  if (hits[0]->WireID().Plane != plane.View()) continue;
634 
635  double dist =
636  getMinDist(detProp, hits, convp[conv], plane.View(), idtpc.TPC, cryoid.Cryostat);
637  if (dist < mindist) {
638  mindist = dist;
639  clid = c;
640  }
641  }
642  if (mindist < maxdist) used[conv].push_back(clid);
643  }
644  conv++;
645  }
646  }
647  }
648  bool result = false;
649 
650  if (used.size() > 1)
651  for (auto const& ids : used) {
652  if (ids.second.size() > 1)
653  result = true;
654  else {
655  result = false;
656  break;
657  }
658  }
659 
660  return result;
661 }
CryostatID_t Cryostat
Index of cryostat.
Definition: geo_types.h:195
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
Definition: AddMC.C:8
double getMinDist(detinfo::DetectorPropertiesData const &detProp, std::vector< art::Ptr< recob::Hit >> const &v, TVector3 const &convmc, size_t view, size_t tpc, size_t cryo)
void hits()
Definition: readHits.C:15
TPCID FindTPCAtPosition(Point_t const &point) const
Returns the ID of the TPC at specified location.
IDparameter< geo::WireID > WireID
Member type of validated geo::WireID parameter.
TVector3 const & GetPosgamma1() const
Geometry information for a single wire plane.The plane is represented in the geometry by a solid whic...
Definition: PlaneGeo.h:67
The data type to uniquely identify a TPC.
Definition: geo_types.h:306
CryostatID PositionToCryostatID(Point_t const &point) const
Returns the ID of the cryostat at specified location.
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
double dist(const TReal *x, const TReal *y, const unsigned int dimension)
TCEvent evt
Definition: DataStructs.cxx:8
TPCID_t TPC
Index of the TPC within its cryostat.
Definition: geo_types.h:315
TVector3 const & GetPosgamma2() const
bool HasTPC(TPCID const &tpcid) const
Returns whether we have the specified TPC.
Definition: GeometryCore.h:429
The data type to uniquely identify a cryostat.
Definition: geo_types.h:187
void art::detail::Analyzer::doBeginJob ( SharedResources const &  resources)
inherited

Definition at line 25 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

26  {
27  setupQueues(resources);
28  ProcessingFrame const frame{ScheduleID{}};
29  beginJobWithFrame(frame);
30  }
virtual void beginJobWithFrame(ProcessingFrame const &)=0
virtual void setupQueues(SharedResources const &)=0
bool art::detail::Analyzer::doBeginRun ( RunPrincipal rp,
ModuleContext const &  mc 
)
inherited

Definition at line 68 of file Analyzer.cc.

References art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

69  {
70  ProcessingFrame const frame{mc.scheduleID()};
71  beginRunWithFrame(std::as_const(rp).makeRun(mc), frame);
72  return true;
73  }
virtual void beginRunWithFrame(Run const &, ProcessingFrame const &)=0
bool art::detail::Analyzer::doBeginSubRun ( SubRunPrincipal srp,
ModuleContext const &  mc 
)
inherited

Definition at line 84 of file Analyzer.cc.

References art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

85  {
86  ProcessingFrame const frame{mc.scheduleID()};
87  beginSubRunWithFrame(std::as_const(srp).makeSubRun(mc), frame);
88  return true;
89  }
virtual void beginSubRunWithFrame(SubRun const &, ProcessingFrame const &)=0
void art::detail::Analyzer::doEndJob ( )
inherited

Definition at line 33 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

34  {
35  ProcessingFrame const frame{ScheduleID{}};
36  endJobWithFrame(frame);
37  }
virtual void endJobWithFrame(ProcessingFrame const &)=0
bool art::detail::Analyzer::doEndRun ( RunPrincipal rp,
ModuleContext const &  mc 
)
inherited

Definition at line 76 of file Analyzer.cc.

References art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

77  {
78  ProcessingFrame const frame{mc.scheduleID()};
79  endRunWithFrame(std::as_const(rp).makeRun(mc), frame);
80  return true;
81  }
virtual void endRunWithFrame(Run const &, ProcessingFrame const &)=0
bool art::detail::Analyzer::doEndSubRun ( SubRunPrincipal srp,
ModuleContext const &  mc 
)
inherited

Definition at line 92 of file Analyzer.cc.

References art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

93  {
94  ProcessingFrame const frame{mc.scheduleID()};
95  endSubRunWithFrame(std::as_const(srp).makeSubRun(mc), frame);
96  return true;
97  }
virtual void endSubRunWithFrame(SubRun const &, ProcessingFrame const &)=0
bool art::detail::Analyzer::doEvent ( EventPrincipal ep,
ModuleContext const &  mc,
std::atomic< std::size_t > &  counts_run,
std::atomic< std::size_t > &  counts_passed,
std::atomic< std::size_t > &  counts_failed 
)
inherited

Definition at line 100 of file Analyzer.cc.

References e, and art::ModuleContext::scheduleID().

Referenced by art::detail::Analyzer::Analyzer().

105  {
106  auto const e = std::as_const(ep).makeEvent(mc);
107  if (wantEvent(mc.scheduleID(), e)) {
108  ++counts_run;
109  ProcessingFrame const frame{mc.scheduleID()};
110  analyzeWithFrame(e, frame);
111  ++counts_passed;
112  }
113  return true;
114  }
bool wantEvent(ScheduleID id, Event const &e) const
Definition: Observer.cc:63
Float_t e
Definition: plot.C:35
virtual void analyzeWithFrame(Event const &, ProcessingFrame const &)=0
void art::detail::Analyzer::doRespondToCloseInputFile ( FileBlock const &  fb)
inherited

Definition at line 47 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

48  {
49  ProcessingFrame const frame{ScheduleID{}};
51  }
TFile fb("Li6.root")
virtual void respondToCloseInputFileWithFrame(FileBlock const &, ProcessingFrame const &)=0
void art::detail::Analyzer::doRespondToCloseOutputFiles ( FileBlock const &  fb)
inherited

Definition at line 61 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

62  {
63  ProcessingFrame const frame{ScheduleID{}};
65  }
virtual void respondToCloseOutputFilesWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::detail::Analyzer::doRespondToOpenInputFile ( FileBlock const &  fb)
inherited

Definition at line 40 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

41  {
42  ProcessingFrame const frame{ScheduleID{}};
44  }
TFile fb("Li6.root")
virtual void respondToOpenInputFileWithFrame(FileBlock const &, ProcessingFrame const &)=0
void art::detail::Analyzer::doRespondToOpenOutputFiles ( FileBlock const &  fb)
inherited

Definition at line 54 of file Analyzer.cc.

Referenced by art::detail::Analyzer::Analyzer().

55  {
56  ProcessingFrame const frame{ScheduleID{}};
58  }
virtual void respondToOpenOutputFilesWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void ems::MultiEMShowers::endJob ( )
overrideprivatevirtual

Reimplemented from art::EDAnalyzer.

Definition at line 372 of file MultiEMShowers_module.cc.

References fEv2Good, fEv2Groups, fEvComp, fEvFidVol, fEvGMomCut, fEvInput, and fEvReco.

373 {
374  mf::LogInfo log("MultiEMShower");
375  log << "******************** fEvFidVol = " << fEvFidVol << "\n";
376  log << "******************** fEvGMomCut = " << fEvGMomCut << "\n";
377  log << "******************** fEvComp = " << fEvComp << "\n";
378  log << "******************** fEvReco = " << fEvReco << "\n";
379  log << "******************** fEvInput = " << fEvInput << "\n";
380  log << "******************** fEv2Groups = " << fEv2Groups << "\n";
381  log << "******************** fEv2Good = " << fEv2Good << "\n";
382  if (fEvInput)
383  log << "******************** reco % = " << double(fEvReco) / double(fEvInput) << "\n";
384 }
std::array< std::vector< ProductInfo >, NumBranchTypes > const & art::ModuleBase::getConsumables ( ) const
inherited

Definition at line 43 of file ModuleBase.cc.

References art::ModuleBase::collector_, and art::ConsumesCollector::getConsumables().

44  {
45  return collector_.getConsumables();
46  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables() const
double ems::MultiEMShowers::getMinDist ( detinfo::DetectorPropertiesData const &  detProp,
std::vector< art::Ptr< recob::Hit >> const &  v,
TVector3 const &  convmc,
size_t  view,
size_t  tpc,
size_t  cryo 
)
private

Definition at line 663 of file MultiEMShowers_module.cc.

References DEFINE_ART_MODULE, larg4::dist(), pma::Dist2(), pma::GetProjectionToPlane(), proj, and pma::WireDriftToCm().

Referenced by convCluster().

669 {
670  double mindist = 9999;
671  // MC vertex projected to view
672  TVector2 proj = pma::GetProjectionToPlane(convmc, view, tpc, cryo);
673 
674  // loop over hits to find the closest to MC 2d vtx
675  for (size_t h = 0; h < v.size(); ++h) {
676  if ((v[h]->WireID().Plane == view) && (v[h]->WireID().TPC == tpc)) {
677  TVector2 hpoint =
678  pma::WireDriftToCm(detProp, v[h]->WireID().Wire, v[h]->PeakTime(), view, tpc, cryo);
679 
680  double dist = pma::Dist2(proj, hpoint);
681  if (dist < mindist) { mindist = dist; }
682  }
683  }
684 
685  return mindist;
686 }
double Dist2(const TVector2 &v1, const TVector2 &v2)
Definition: Utilities.cxx:39
TVector2 WireDriftToCm(detinfo::DetectorPropertiesData const &detProp, unsigned int wire, float drift, unsigned int plane, unsigned int tpc, unsigned int cryo)
Definition: Utilities.cxx:286
IDparameter< geo::WireID > WireID
Member type of validated geo::WireID parameter.
double dist(const TReal *x, const TReal *y, const unsigned int dimension)
TVector2 GetProjectionToPlane(const TVector3 &p, unsigned int plane, unsigned int tpc, unsigned int cryo)
Definition: Utilities.cxx:263
Float_t proj
Definition: plot.C:35
recob::tracking::Plane Plane
Definition: TrackState.h:17
Handle< TriggerResults > art::Observer::getTriggerResults ( Event const &  e) const
protectedinherited

Definition at line 75 of file Observer.cc.

References art::ProductRetriever::get(), and art::Observer::selectors_.

Referenced by art::OutputModule::doWriteEvent(), and art::Observer::wantAllEvents().

76  {
77  if (selectors_) {
78  return selectors_->getOneTriggerResults(e);
79  }
80 
81  // The following applies for cases where no SelectEvents entries
82  // exist.
83  Handle<TriggerResults> h;
84  if (e.get(empty_process_name, h)) {
85  return h;
86  }
87  return Handle<TriggerResults>{};
88  }
Float_t e
Definition: plot.C:35
std::optional< detail::ProcessAndEventSelectors > selectors_
Definition: Observer.h:79
std::unique_ptr< Worker > art::ModuleBase::makeWorker ( WorkerParams const &  wp)
inherited

Definition at line 37 of file ModuleBase.cc.

References art::ModuleBase::doMakeWorker(), and art::NumBranchTypes.

38  {
39  return doMakeWorker(wp);
40  }
virtual std::unique_ptr< Worker > doMakeWorker(WorkerParams const &wp)=0
template<typename T , BranchType BT>
ProductToken< T > art::ModuleBase::mayConsume ( InputTag const &  tag)
protectedinherited

Definition at line 82 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsume().

83  {
84  return collector_.mayConsume<T, BT>(tag);
85  }
ProductToken< T > mayConsume(InputTag const &)
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename T , BranchType BT>
void art::ModuleBase::mayConsumeMany ( )
protectedinherited

Definition at line 96 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsumeMany().

97  {
98  collector_.mayConsumeMany<T, BT>();
99  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::ModuleBase::mayConsumeView ( InputTag const &  )
protectedinherited
template<typename T , BranchType BT>
ViewToken<T> art::ModuleBase::mayConsumeView ( InputTag const &  tag)
inherited

Definition at line 89 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsumeView().

90  {
91  return collector_.mayConsumeView<T, BT>(tag);
92  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ViewToken< Element > mayConsumeView(InputTag const &)
ModuleDescription const & art::ModuleBase::moduleDescription ( ) const
inherited

Definition at line 13 of file ModuleBase.cc.

References art::errors::LogicError.

Referenced by art::OutputModule::doRespondToOpenInputFile(), art::OutputModule::doWriteEvent(), art::Modifier::fillProductDescriptions(), art::OutputModule::makePlugins_(), art::OutputWorker::OutputWorker(), reco::shower::LArPandoraModularShowerCreation::produce(), art::Modifier::registerProducts(), and art::OutputModule::registerProducts().

14  {
15  if (md_.has_value()) {
16  return *md_;
17  }
18 
20  "There was an error while calling moduleDescription().\n"}
21  << "The moduleDescription() base-class member function cannot be called\n"
22  "during module construction. To determine which module is "
23  "responsible\n"
24  "for calling it, find the '<module type>:<module "
25  "label>@Construction'\n"
26  "tag in the message prefix above. Please contact artists@fnal.gov\n"
27  "for guidance.\n";
28  }
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
std::optional< ModuleDescription > md_
Definition: ModuleBase.h:55
MultiEMShowers& ems::MultiEMShowers::operator= ( MultiEMShowers const &  )
delete
MultiEMShowers& ems::MultiEMShowers::operator= ( MultiEMShowers &&  )
delete
string const & art::Observer::processName ( ) const
protectedinherited

Definition at line 57 of file Observer.cc.

References art::Observer::process_name_.

Referenced by art::FileDumperOutput::printPrincipal().

58  {
59  return process_name_;
60  }
std::string process_name_
Definition: Observer.h:76
void art::ModuleBase::setModuleDescription ( ModuleDescription const &  md)
inherited

Definition at line 31 of file ModuleBase.cc.

References art::ModuleBase::md_.

32  {
33  md_ = md;
34  }
std::optional< ModuleDescription > md_
Definition: ModuleBase.h:55
void art::ModuleBase::sortConsumables ( std::string const &  current_process_name)
inherited

Definition at line 49 of file ModuleBase.cc.

References art::ModuleBase::collector_, and art::ConsumesCollector::sortConsumables().

50  {
51  // Now that we know we have seen all the consumes declarations,
52  // sort the results for fast lookup later.
53  collector_.sortConsumables(current_process_name);
54  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
void sortConsumables(std::string const &current_process_name)
bool art::Observer::wantAllEvents ( ) const
inlineprotectednoexceptinherited

Definition at line 31 of file Observer.h.

References e, art::Observer::getTriggerResults(), art::Observer::wantAllEvents_, and art::Observer::wantEvent().

32  {
33  return wantAllEvents_;
34  }
bool wantAllEvents_
Definition: Observer.h:75
bool art::Observer::wantEvent ( ScheduleID  id,
Event const &  e 
) const
protectedinherited

Definition at line 63 of file Observer.cc.

References art::Observer::rejectors_, art::Observer::selectors_, and art::Observer::wantAllEvents_.

Referenced by art::OutputModule::doEvent(), art::OutputModule::doWriteEvent(), and art::Observer::wantAllEvents().

64  {
65  if (wantAllEvents_) {
66  return true;
67  }
68  bool const select_event = selectors_ ? selectors_->matchEvent(id, e) : true;
69  bool const reject_event =
70  rejectors_ ? rejectors_->matchEvent(id, e) : false;
71  return select_event and not reject_event;
72  }
bool wantAllEvents_
Definition: Observer.h:75
std::optional< detail::ProcessAndEventSelectors > rejectors_
Definition: Observer.h:80
Float_t e
Definition: plot.C:35
std::optional< detail::ProcessAndEventSelectors > selectors_
Definition: Observer.h:79

Member Data Documentation

art::InputTag ems::MultiEMShowers::fCluModuleLabel
private

Definition at line 303 of file MultiEMShowers_module.cc.

Referenced by analyze(), convCluster(), and MultiEMShowers().

int ems::MultiEMShowers::fConvBothGood
private

Definition at line 252 of file MultiEMShowers_module.cc.

Referenced by analyze(), beginJob(), and MultiEMShowers().

int ems::MultiEMShowers::fConvGood
private

Definition at line 250 of file MultiEMShowers_module.cc.

Referenced by analyze(), beginJob(), and MultiEMShowers().

int ems::MultiEMShowers::fConvWrong
private

Definition at line 251 of file MultiEMShowers_module.cc.

Referenced by analyze(), beginJob(), and MultiEMShowers().

int ems::MultiEMShowers::fCountph
private

Definition at line 278 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fCountreco
private

Definition at line 279 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fDedxU
private

Definition at line 288 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fDedxV
private

Definition at line 287 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fDedxZ
private

Definition at line 286 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fDistConvrecomc1
private

Definition at line 295 of file MultiEMShowers_module.cc.

Referenced by analyze().

double ems::MultiEMShowers::fDistConvrecomc2
private

Definition at line 296 of file MultiEMShowers_module.cc.

Referenced by analyze().

int ems::MultiEMShowers::fEv2Good
private

Definition at line 277 of file MultiEMShowers_module.cc.

Referenced by analyze(), endJob(), and MultiEMShowers().

int ems::MultiEMShowers::fEv2Groups
private

Definition at line 276 of file MultiEMShowers_module.cc.

Referenced by analyze(), endJob(), and MultiEMShowers().

int ems::MultiEMShowers::fEvComp
private

Definition at line 267 of file MultiEMShowers_module.cc.

Referenced by analyze(), endJob(), and MultiEMShowers().

int ems::MultiEMShowers::fEvFidVol
private

Definition at line 266 of file MultiEMShowers_module.cc.

Referenced by analyze(), endJob(), and MultiEMShowers().

int ems::MultiEMShowers::fEvGMomCut
private

Definition at line 268 of file MultiEMShowers_module.cc.

Referenced by analyze(), endJob(), and MultiEMShowers().

int ems::MultiEMShowers::fEvInput
private

Definition at line 269 of file MultiEMShowers_module.cc.

Referenced by analyze(), endJob(), and MultiEMShowers().

int ems::MultiEMShowers::fEvNumber
private

Definition at line 257 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fEvReco
private

Definition at line 275 of file MultiEMShowers_module.cc.

Referenced by analyze(), endJob(), and MultiEMShowers().

TTree* ems::MultiEMShowers::fEvTree
private

Definition at line 256 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fGammasInside
private

Definition at line 253 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

TVector3 ems::MultiEMShowers::fGdir1
private

Definition at line 270 of file MultiEMShowers_module.cc.

Referenced by analyze().

TVector3 ems::MultiEMShowers::fGdir2
private

Definition at line 271 of file MultiEMShowers_module.cc.

Referenced by analyze().

double ems::MultiEMShowers::fGdirmcreco1
private

Definition at line 297 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGdirmcreco1good
private

Definition at line 299 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGdirmcreco2
private

Definition at line 298 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGdirmcreco2good
private

Definition at line 300 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGmom1
private

Definition at line 262 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGmom2
private

Definition at line 263 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

art::InputTag ems::MultiEMShowers::fHitsModuleLabel
private

Definition at line 302 of file MultiEMShowers_module.cc.

Referenced by analyze(), convCluster(), and MultiEMShowers().

double ems::MultiEMShowers::fMCrecoTh
private

Definition at line 290 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fMCrecoThgood
private

Definition at line 292 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fMCrecovtx
private

Definition at line 289 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fMCrecovtxgood
private

Definition at line 291 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fMcth
private

Definition at line 264 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fNgammas
private

Definition at line 265 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fNGroups
private

Definition at line 258 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fPi0mom
private

Definition at line 261 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

TVector3 ems::MultiEMShowers::fPrimary
private

Definition at line 272 of file MultiEMShowers_module.cc.

Referenced by analyze().

TTree* ems::MultiEMShowers::fRecoTree
private

Definition at line 282 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fRecth
private

Definition at line 293 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fRecthgood
private

Definition at line 294 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

art::InputTag ems::MultiEMShowers::fShsModuleLabel
private

Definition at line 306 of file MultiEMShowers_module.cc.

Referenced by analyze(), and MultiEMShowers().

TTree* ems::MultiEMShowers::fShTree
private

Definition at line 281 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fStartX
private

Definition at line 283 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fStartY
private

Definition at line 284 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fStartZ
private

Definition at line 285 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

art::InputTag ems::MultiEMShowers::fTrk3DModuleLabel
private

Definition at line 304 of file MultiEMShowers_module.cc.

Referenced by analyze(), and MultiEMShowers().

art::InputTag ems::MultiEMShowers::fVtxModuleLabel
private

Definition at line 305 of file MultiEMShowers_module.cc.

Referenced by analyze(), and MultiEMShowers().


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