LArSoft  v09_90_00
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 227 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 308 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().

308  : EDAnalyzer(p)
309 {
310  fConvGood = 0;
311  fConvWrong = 0;
312  fConvBothGood = 0;
313  fEvFidVol = 0;
314  fEvComp = 0;
315  fEvGMomCut = 0;
316  fEvReco = 0;
317  fEvInput = 0;
318  fEv2Groups = 0;
319  fEv2Good = 0;
320  fHitsModuleLabel = p.get<art::InputTag>("HitsModuleLabel");
321  fCluModuleLabel = p.get<art::InputTag>("ClustersModuleLabel");
322  fTrk3DModuleLabel = p.get<art::InputTag>("Trk3DModuleLabel");
323  fVtxModuleLabel = p.get<art::InputTag>("VtxModuleLabel");
324  fShsModuleLabel = p.get<art::InputTag>("ShsModuleLabel");
325 }
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 385 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().

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

328 {
330 
331  fEvTree = tfs->make<TTree>("MultiShowers", "showers3d");
332  fEvTree->Branch("fEvNumber", &fEvNumber, "fEvNumber/I");
333  fEvTree->Branch("fNGroups", &fNGroups, "fNGroups/I");
334  fEvTree->Branch("fPi0mom", &fPi0mom, "fPi0mom/D");
335  fEvTree->Branch("fNgammas", &fNgammas, "fNgammas/I");
336  fEvTree->Branch("fGmom1", &fGmom1, "fGmom1/D");
337  fEvTree->Branch("fGmom2", &fGmom2, "fGmom2/D");
338  fEvTree->Branch("fMcth", &fMcth, "fMcth/D");
339  fEvTree->Branch("fRecth", &fRecth, "fRecth/D");
340  fEvTree->Branch("fMCrecovtx", &fMCrecovtx, "fMCrecovtx/D");
341  fEvTree->Branch("fMCrecoTh", &fMCrecoTh, "fMCrecoTh/D");
342  fEvTree->Branch("fConvGood", &fConvGood, "fConvGood/I");
343  fEvTree->Branch("fConvWrong", &fConvWrong, "fConvWrong/I");
344  fEvTree->Branch("fConvBothGood", &fConvBothGood, "fConvBothGood/I");
345  fEvTree->Branch("fGammasInside", &fGammasInside, "fGammasInside/I");
346  fEvTree->Branch("fCountph", &fCountph, "fCountph/I");
347  fEvTree->Branch("fCountreco", &fCountreco, "fCountreco/I");
348 
349  fRecoTree = tfs->make<TTree>("Cascades", "conv points");
350  fRecoTree->Branch("fRecth", &fRecth, "fRecth/D");
351  fRecoTree->Branch("fMCrecovtx", &fMCrecovtx, "fMCrecovtx/D");
352  fRecoTree->Branch("fMCrecoTh", &fMCrecoTh, "fMCrecoTh/D");
353  fRecoTree->Branch("fRecthgood", &fRecthgood, "fRecthgood/D");
354  fRecoTree->Branch("fMCrecovtxgood", &fMCrecovtxgood, "fMCrecovtxgood/D");
355  fRecoTree->Branch("fMCrecoThgood", &fMCrecoThgood, "fMCrecoThgood/D");
356  fRecoTree->Branch("fGdirmcreco1", &fGdirmcreco1, "fGdirmcreco1/D");
357  fRecoTree->Branch("fGdirmcreco2", &fGdirmcreco2, "fGdirmcreco2/D");
358  fRecoTree->Branch("fGdirmcreco1good", &fGdirmcreco1good, "fGdirmcreco1good/D");
359  fRecoTree->Branch("fGdirmcreco2good", &fGdirmcreco2good, "fGdirmcreco2good/D");
360 
361  fShTree = tfs->make<TTree>("Shower", "conv point");
362 
363  fShTree->Branch("fStartX", &fStartX, "fStartX/D");
364  fShTree->Branch("fStartY", &fStartY, "fStartY/D");
365  fShTree->Branch("fStartZ", &fStartZ, "fStartZ/D");
366  fShTree->Branch("fDedxZ", &fDedxZ, "fDedxZ/D");
367  fShTree->Branch("fDedxV", &fDedxV, "fDedxV/D");
368  fShTree->Branch("fDedxU", &fDedxU, "fDedxU/D");
369 }
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 591 of file MultiEMShowers_module.cc.

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

Referenced by analyze().

592 {
593  ems::MCinfo mc;
594  TVector3 const convp[2]{mc.GetPosgamma1(), mc.GetPosgamma2()};
595 
596  geo::Point_t const vtx{convp[0].X(), convp[0].Y(), convp[0].Z()};
597 
599  geo::TPCID idtpc = geom->FindTPCAtPosition(vtx);
600  size_t cryoid = geom->PositionToCryostatID(vtx).Cryostat;
601 
604 
605  //map: conversion point, vec of id clusters in each view
606  std::map<size_t, std::vector<size_t>> used;
607 
608  art::FindManyP<recob::Hit> fbc(cluListHandle, evt, fCluModuleLabel);
609 
610  auto const detProp = art::ServiceHandle<detinfo::DetectorPropertiesService const>()->DataFor(evt);
611  double maxdist = 1.0; // 1 cm
612  if (geom->HasTPC(idtpc)) {
613  const geo::CryostatGeo& cryostat = geom->Cryostat(geo::CryostatID(cryoid));
614  if (evt.getByLabel(fHitsModuleLabel, hitListHandle) &&
615  evt.getByLabel(fCluModuleLabel, cluListHandle)) {
616  size_t conv = 0;
617  while (conv < 2) {
618  for (size_t view = 0; view < cryostat.MaxPlanes(); view++) {
619 
620  double mindist = maxdist;
621  int clid = 0;
622  for (size_t c = 0; c < cluListHandle->size(); ++c) {
623 
624  bool exist = false;
625  for (auto const& ids : used)
626  for (auto i : ids.second)
627  if (i == c) exist = true;
628  if (exist) continue;
629 
630  std::vector<art::Ptr<recob::Hit>> hits = fbc.at(c);
631  if (hits.size() < 20) continue;
632  if (hits[0]->WireID().Plane != view) continue;
633 
634  double dist = getMinDist(detProp, hits, convp[conv], view, idtpc.TPC, cryoid);
635  if (dist < mindist) {
636  mindist = dist;
637  clid = c;
638  }
639  }
640  if (mindist < maxdist) used[conv].push_back(clid);
641  }
642  conv++;
643  }
644  }
645  }
646  bool result = false;
647 
648  if (used.size() > 1)
649  for (auto const& ids : used) {
650  if (ids.second.size() > 1)
651  result = true;
652  else {
653  result = false;
654  break;
655  }
656  }
657 
658  return result;
659 }
unsigned int MaxPlanes() const
Returns the largest number of planes among the TPCs in this cryostat.
CryostatID_t Cryostat
Index of cryostat.
Definition: geo_types.h:211
Geometry information for a single cryostat.
Definition: CryostatGeo.h:43
CryostatGeo const & Cryostat(CryostatID const &cryoid=cryostat_zero) const
Returns the specified cryostat.
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
The data type to uniquely identify a TPC.
Definition: geo_types.h:381
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
constexpr 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:399
TVector3 const & GetPosgamma2() const
bool HasTPC(TPCID const &tpcid) const
Returns whether we have the specified TPC.
Definition: GeometryCore.h:699
The data type to uniquely identify a cryostat.
Definition: geo_types.h:192
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 371 of file MultiEMShowers_module.cc.

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

372 {
373  mf::LogInfo log("MultiEMShower");
374  log << "******************** fEvFidVol = " << fEvFidVol << "\n";
375  log << "******************** fEvGMomCut = " << fEvGMomCut << "\n";
376  log << "******************** fEvComp = " << fEvComp << "\n";
377  log << "******************** fEvReco = " << fEvReco << "\n";
378  log << "******************** fEvInput = " << fEvInput << "\n";
379  log << "******************** fEv2Groups = " << fEv2Groups << "\n";
380  log << "******************** fEv2Good = " << fEv2Good << "\n";
381  if (fEvInput)
382  log << "******************** reco % = " << double(fEvReco) / double(fEvInput) << "\n";
383 }
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 661 of file MultiEMShowers_module.cc.

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

Referenced by convCluster().

667 {
668  double mindist = 9999;
669  // MC vertex projected to view
670  TVector2 proj = pma::GetProjectionToPlane(convmc, view, tpc, cryo);
671 
672  // loop over hits to find the closest to MC 2d vtx
673  for (size_t h = 0; h < v.size(); ++h) {
674  if ((v[h]->WireID().Plane == view) && (v[h]->WireID().TPC == tpc)) {
675  TVector2 hpoint =
676  pma::WireDriftToCm(detProp, v[h]->WireID().Wire, v[h]->PeakTime(), view, tpc, cryo);
677 
678  double dist = pma::Dist2(proj, hpoint);
679  if (dist < mindist) { mindist = dist; }
680  }
681  }
682 
683  return mindist;
684 }
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.
constexpr 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 302 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fConvBothGood
private

Definition at line 251 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fConvGood
private

Definition at line 249 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fConvWrong
private

Definition at line 250 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fCountph
private

Definition at line 277 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fCountreco
private

Definition at line 278 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fDedxU
private

Definition at line 287 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fDedxV
private

Definition at line 286 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fDedxZ
private

Definition at line 285 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fDistConvrecomc1
private

Definition at line 294 of file MultiEMShowers_module.cc.

Referenced by analyze().

double ems::MultiEMShowers::fDistConvrecomc2
private

Definition at line 295 of file MultiEMShowers_module.cc.

Referenced by analyze().

int ems::MultiEMShowers::fEv2Good
private

Definition at line 276 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fEv2Groups
private

Definition at line 275 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fEvComp
private

Definition at line 266 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fEvFidVol
private

Definition at line 265 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fEvGMomCut
private

Definition at line 267 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fEvInput
private

Definition at line 268 of file MultiEMShowers_module.cc.

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

int ems::MultiEMShowers::fEvNumber
private

Definition at line 256 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fEvReco
private

Definition at line 274 of file MultiEMShowers_module.cc.

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

TTree* ems::MultiEMShowers::fEvTree
private

Definition at line 255 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fGammasInside
private

Definition at line 252 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

TVector3 ems::MultiEMShowers::fGdir1
private

Definition at line 269 of file MultiEMShowers_module.cc.

Referenced by analyze().

TVector3 ems::MultiEMShowers::fGdir2
private

Definition at line 270 of file MultiEMShowers_module.cc.

Referenced by analyze().

double ems::MultiEMShowers::fGdirmcreco1
private

Definition at line 296 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGdirmcreco1good
private

Definition at line 298 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGdirmcreco2
private

Definition at line 297 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGdirmcreco2good
private

Definition at line 299 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGmom1
private

Definition at line 261 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fGmom2
private

Definition at line 262 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

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

Definition at line 301 of file MultiEMShowers_module.cc.

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

double ems::MultiEMShowers::fMCrecoTh
private

Definition at line 289 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fMCrecoThgood
private

Definition at line 291 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fMCrecovtx
private

Definition at line 288 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fMCrecovtxgood
private

Definition at line 290 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fMcth
private

Definition at line 263 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fNgammas
private

Definition at line 264 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

int ems::MultiEMShowers::fNGroups
private

Definition at line 257 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fPi0mom
private

Definition at line 260 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

TVector3 ems::MultiEMShowers::fPrimary
private

Definition at line 271 of file MultiEMShowers_module.cc.

Referenced by analyze().

TTree* ems::MultiEMShowers::fRecoTree
private

Definition at line 281 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fRecth
private

Definition at line 292 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fRecthgood
private

Definition at line 293 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

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

Definition at line 305 of file MultiEMShowers_module.cc.

Referenced by analyze(), and MultiEMShowers().

TTree* ems::MultiEMShowers::fShTree
private

Definition at line 280 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fStartX
private

Definition at line 282 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fStartY
private

Definition at line 283 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

double ems::MultiEMShowers::fStartZ
private

Definition at line 284 of file MultiEMShowers_module.cc.

Referenced by analyze(), and beginJob().

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

Definition at line 303 of file MultiEMShowers_module.cc.

Referenced by analyze(), and MultiEMShowers().

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

Definition at line 304 of file MultiEMShowers_module.cc.

Referenced by analyze(), and MultiEMShowers().


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