9#include "larcore/Geometry/Geometry.h"
10#include "larcorealg/Geometry/PlaneGeo.h"
11#include "larcorealg/Geometry/TPCGeo.h"
12#include "larcoreobj/SimpleTypesAndConstants/PhysicalConstants.h"
13#include "larcoreobj/SimpleTypesAndConstants/RawTypes.h"
15#include "lardataobj/RecoBase/Hit.h"
17#include "larevt/CalibrationDBI/Interface/ChannelStatusProvider.h"
18#include "larevt/CalibrationDBI/Interface/ChannelStatusService.h"
20#include "nusimdata/SimulationBase/MCTruth.h"
22#include "larsim/MCCheater/ParticleInventoryService.h"
24#include "lardata/DetectorInfoServices/DetectorClocksService.h"
25#include "lardata/DetectorInfoServices/DetectorPropertiesService.h"
26#include "lardata/DetectorInfoServices/LArPropertiesService.h"
38#include "messagefacility/MessageLogger/MessageLogger.h"
51 mf::LogDebug(
"LArPandora") <<
" *** LArPandoraInput::CreatePandoraHits2D(...) *** "
55 throw cet::exception(
"LArPandora")
56 <<
"CreatePandoraHits2D - primary Pandora instance does not exist ";
60 art::ServiceHandle<geo::Geometry const> theGeometry;
61 auto const detProp = art::ServiceHandle<detinfo::DetectorPropertiesService const>()->DataFor(e);
69 for (HitVector::const_iterator iter = hitVector.begin(), iterEnd = hitVector.end();
72 const art::Ptr<recob::Hit> hit = *iter;
73 const geo::WireID hit_WireID(hit->WireID());
76 const geo::View_t hit_View(hit->View());
77 const double hit_Charge(hit->Integral());
78 const double hit_Time(hit->PeakTime());
79 const double hit_TimeStart(hit->PeakTimeMinusRMS());
80 const double hit_TimeEnd(hit->PeakTimePlusRMS());
84 detProp.ConvertTicksToX(hit_Time, hit_WireID.Plane, hit_WireID.TPC, hit_WireID.Cryostat));
85 const double dxpos_cm(
86 std::fabs(detProp.ConvertTicksToX(
87 hit_TimeEnd, hit_WireID.Plane, hit_WireID.TPC, hit_WireID.Cryostat) -
88 detProp.ConvertTicksToX(
89 hit_TimeStart, hit_WireID.Plane, hit_WireID.TPC, hit_WireID.Cryostat)));
92 auto const xyz = theGeometry->Wire(hit_WireID).GetCenter();
93 const double y0_cm(xyz.Y());
94 const double z0_cm(xyz.Z());
97 const double wire_pitch_cm(theGeometry->WirePitch(hit_View));
106 caloHitParameters.m_cellSize0 = settings.
m_dx_cm;
108 caloHitParameters.m_cellThickness = wire_pitch_cm;
110 caloHitParameters.m_time = 0.;
111 caloHitParameters.m_nCellRadiationLengths = settings.
m_dx_cm / settings.
m_rad_cm;
112 caloHitParameters.m_nCellInteractionLengths = settings.
m_dx_cm / settings.
m_int_cm;
113 caloHitParameters.m_isDigital =
false;
115 caloHitParameters.m_layer = 0;
116 caloHitParameters.m_isInOuterSamplingLayer =
false;
117 caloHitParameters.m_inputEnergy = hit_Charge;
118 caloHitParameters.m_mipEquivalentEnergy = mips;
119 caloHitParameters.m_electromagneticEnergy = mips * settings.
m_mips_to_gev;
120 caloHitParameters.m_hadronicEnergy = mips * settings.
m_mips_to_gev;
121 caloHitParameters.m_pParentAddress = (
void*)((intptr_t)(++hitCounter));
125 driftVolumeMap, hit_WireID.Cryostat, hit_WireID.TPC);
127 if (hit_View == detType->
TargetViewW(hit_WireID.TPC, hit_WireID.Cryostat)) {
129 const double wpos_cm(
133 else if (hit_View == detType->
TargetViewU(hit_WireID.TPC, hit_WireID.Cryostat)) {
135 const double upos_cm(
139 else if (hit_View == detType->
TargetViewV(hit_WireID.TPC, hit_WireID.Cryostat)) {
141 const double vpos_cm(
146 throw cet::exception(
"LArPandora")
147 <<
"CreatePandoraHits2D - this wire view not recognised (View=" << hit_View <<
") ";
151 mf::LogWarning(
"LArPandora")
152 <<
"CreatePandoraHits2D - invalid calo hit parameter provided, all assigned values must "
153 "be finite, calo hit omitted "
160 throw cet::exception(
"LArPandora")
161 <<
"CreatePandoraHits2D - detected an excessive number of hits (" << hitCounter <<
") ";
163 idToHitMap[hitCounter] = hit;
168 pandora::STATUS_CODE_SUCCESS,
170 PandoraApi::CaloHit::Create(*pPandora, caloHitParameters, caloHitFactory));
173 mf::LogWarning(
"LArPandora") <<
"CreatePandoraHits2D - unable to create calo hit, "
174 "insufficient or invalid information supplied "
186 mf::LogDebug(
"LArPandora") <<
" *** LArPandoraInput::CreatePandoraLArTPCs(...) *** "
190 throw cet::exception(
"LArPandora")
191 <<
"CreatePandoraDetectorGaps - primary Pandora instance does not exist ";
199 parameters.m_larTPCVolumeId = driftVolume.GetVolumeID();
200 parameters.m_centerX = driftVolume.GetCenterX();
201 parameters.m_centerY = driftVolume.GetCenterY();
202 parameters.m_centerZ = driftVolume.GetCenterZ();
203 parameters.m_widthX = driftVolume.GetWidthX();
204 parameters.m_widthY = driftVolume.GetWidthY();
205 parameters.m_widthZ = driftVolume.GetWidthZ();
206 parameters.m_wirePitchU = driftVolume.GetWirePitchU();
207 parameters.m_wirePitchV = driftVolume.GetWirePitchV();
208 parameters.m_wirePitchW = driftVolume.GetWirePitchW();
209 parameters.m_wireAngleU = driftVolume.GetWireAngleU();
210 parameters.m_wireAngleV = driftVolume.GetWireAngleV();
211 parameters.m_wireAngleW = driftVolume.GetWireAngleW();
212 parameters.m_sigmaUVW = driftVolume.GetSigmaUVZ();
213 parameters.m_isDriftInPositiveX = driftVolume.IsPositiveDrift();
216 mf::LogWarning(
"LArPandora") <<
"CreatePandoraLArTPCs - invalid tpc parameter provided, "
217 "all assigned values must be finite, tpc omitted "
228 mf::LogWarning(
"LArPandora") <<
"CreatePandoraLArTPCs - unable to create tpc, insufficient "
229 "or invalid information supplied "
243 art::ServiceHandle<geo::Geometry const> theGeometry;
246 mf::LogDebug(
"LArPandora") <<
" *** LArPandoraInput::CreatePandoraDetectorGaps(...) *** "
250 throw cet::exception(
"LArPandora")
251 <<
"CreatePandoraDetectorGaps - primary Pandora instance does not exist ";
262 mf::LogWarning(
"LArPandora")
263 <<
"CreatePandoraDetectorGaps - invalid line gap parameter provided, all assigned values "
264 "must be finite, line gap omitted "
274 mf::LogWarning(
"LArPandora") <<
"CreatePandoraDetectorGaps - unable to create line gap, "
275 "insufficient or invalid information supplied "
287 mf::LogDebug(
"LArPandora") <<
" *** LArPandoraInput::CreatePandoraReadoutGaps(...) *** "
291 throw cet::exception(
"LArPandora")
292 <<
"CreatePandoraReadoutGaps - primary Pandora instance does not exist ";
296 art::ServiceHandle<geo::Geometry const> theGeometry;
297 const lariov::ChannelStatusProvider& channelStatus(
298 art::ServiceHandle<lariov::ChannelStatusService const>()->GetProvider());
302 for (
auto const& plane : theGeometry->Iterate<geo::PlaneGeo>()) {
303 const float halfWirePitch(0.5f * theGeometry->WirePitch(plane.View()));
304 const unsigned int nWires(theGeometry->Nwires(plane.ID()));
306 int firstBadWire(-1), lastBadWire(-1);
308 for (
unsigned int iwire = 0; iwire < nWires; ++iwire) {
309 const raw::ChannelID_t channel(
310 theGeometry->PlaneWireToChannel(geo::WireID{plane.ID(), iwire}));
311 const bool isBadChannel(channelStatus.IsBad(channel));
312 const bool isLastWire(nWires == (iwire + 1));
314 if (isBadChannel && (firstBadWire < 0)) firstBadWire = iwire;
316 if (isBadChannel || isLastWire) lastBadWire = iwire;
318 if (isBadChannel && !isLastWire)
continue;
320 if ((firstBadWire < 0) || (lastBadWire < 0))
continue;
322 auto const firstXYZ = plane.Wire(firstBadWire).GetCenter();
323 auto const lastXYZ = plane.Wire(lastBadWire).GetCenter();
331 float xFirst(-std::numeric_limits<float>::max());
332 float xLast(std::numeric_limits<float>::max());
334 auto const [icstat, itpc] = std::make_pair(plane.ID().Cryostat, plane.ID().TPC);
335 const unsigned int volumeId(
337 LArDriftVolumeMap::const_iterator volumeIter(driftVolumeMap.find(volumeId));
339 if (driftVolumeMap.end() != volumeIter) {
340 xFirst = volumeIter->second.GetCenterX() - 0.5f * volumeIter->second.GetWidthX();
341 xLast = volumeIter->second.GetCenterX() + 0.5f * volumeIter->second.GetWidthX();
344 const geo::View_t iview = plane.View();
346 iview, itpc, icstat, firstXYZ, lastXYZ, halfWirePitch, xFirst, xLast, pPandora);
349 mf::LogWarning(
"LArPandora")
350 <<
"CreatePandoraReadoutGaps - invalid line gap parameter provided, all assigned "
351 "values must be finite, line gap omitted "
362 mf::LogWarning(
"LArPandora") <<
"CreatePandoraReadoutGaps - unable to create line "
363 "gap, insufficient or invalid information supplied "
379 mf::LogDebug(
"LArPandora") <<
" *** LArPandoraInput::CreatePandoraMCParticles(...) *** "
381 art::ServiceHandle<cheat::ParticleInventoryService const> particleInventoryService;
384 throw cet::exception(
"LArPandora")
385 <<
"CreatePandoraMCParticles - primary Pandora instance does not exist ";
392 for (MCParticlesToMCTruth::const_iterator iter = particleToTruthMap.begin(),
393 iterEnd = particleToTruthMap.end();
396 const art::Ptr<simb::MCParticle> particle = iter->first;
397 particleMap[particle->TrackId()] = particle;
401 int neutrinoCounter(0);
405 for (MCTruthToMCParticles::const_iterator iter1 = truthToParticleMap.begin(),
406 iterEnd1 = truthToParticleMap.end();
409 const art::Ptr<simb::MCTruth> truth = iter1->first;
411 if (truth->NeutrinoSet()) {
412 const simb::MCNeutrino neutrino(truth->GetNeutrino());
416 throw cet::exception(
"LArPandora")
417 <<
"CreatePandoraMCParticles - detected an excessive number of mc neutrinos ("
418 << neutrinoCounter <<
")";
420 const int neutrinoID(neutrinoCounter + 9 * settings.
m_uidOffset);
426 mcParticleParameters.
m_nuanceCode = neutrino.InteractionType();
428 mcParticleParameters.m_energy = neutrino.Nu().E();
429 mcParticleParameters.m_momentum =
431 mcParticleParameters.m_vertex =
433 mcParticleParameters.m_endpoint =
435 mcParticleParameters.m_particleId = neutrino.Nu().PdgCode();
437 mcParticleParameters.m_pParentAddress = (
void*)((intptr_t)neutrinoID);
440 mf::LogWarning(
"LArPandora")
441 <<
"CreatePandoraMCParticles - invalid mc neutrino parameter provided, all assigned "
442 "values must be finite, mc neutrino omitted "
449 pandora::STATUS_CODE_SUCCESS,
451 PandoraApi::MCParticle::Create(*pPandora, mcParticleParameters, mcParticleFactory));
454 mf::LogWarning(
"LArPandora") <<
"CreatePandoraMCParticles - unable to create mc "
455 "neutrino, insufficient or invalid information supplied "
463 for (MCParticleVector::const_iterator iter2 = particleVector.begin(),
464 iterEnd2 = particleVector.end();
467 const art::Ptr<simb::MCParticle> particle = *iter2;
468 const int trackID(particle->TrackId());
471 if (particle->Mother() == 0) {
474 pandora::STATUS_CODE_SUCCESS,
477 *pPandora, (
void*)((intptr_t)neutrinoID), (
void*)((intptr_t)trackID)));
480 mf::LogWarning(
"LArPandora") <<
"CreatePandoraMCParticles - unable to create mc "
481 "particle relationship, invalid information supplied "
490 mf::LogDebug(
"LArPandora") <<
" Number of Pandora neutrinos: " << neutrinoCounter
494 int particleCounter(0);
497 std::map<const simb::MCParticle, bool> primaryGeneratorMCParticleMap;
500 for (MCParticleMap::const_iterator iterI = particleMap.begin(), iterEndI = particleMap.end();
503 const art::Ptr<simb::MCParticle> particle = iterI->second;
505 if (particle->TrackId() != iterI->first)
506 throw cet::exception(
"LArPandora") <<
"CreatePandoraMCParticles - mc truth information "
507 "appears to be scrambled in this event";
510 throw cet::exception(
"LArPandora")
511 <<
"CreatePandoraMCParticles - detected an excessive number of MC particles ("
512 << particle->TrackId() <<
")";
517 int firstT(-1), lastT(-1);
520 if (firstT < 0 && lastT < 0) {
526 const float vtxX(particle->Vx(firstT));
527 const float vtxY(particle->Vy(firstT));
528 const float vtxZ(particle->Vz(firstT));
530 const float endX(particle->Vx(lastT));
531 const float endY(particle->Vy(lastT));
532 const float endZ(particle->Vz(lastT));
534 const float pX(particle->Px(firstT));
535 const float pY(particle->Py(firstT));
536 const float pZ(particle->Pz(firstT));
537 const float E(particle->E(firstT));
541 const int trackID(particle->TrackId());
542 const simb::Origin_t origin(particleInventoryService->TrackIdToMCTruth(trackID).Origin());
547 else if (simb::kCosmicRay == origin) {
550 else if (simb::kSingleParticle == origin) {
561 if (processMap.find(particle->Process()) != processMap.end()) {
562 mcParticleParameters.
m_process = processMap[particle->Process()];
566 mf::LogWarning(
"LArPandora")
567 <<
"CreatePandoraMCParticles - found an unknown process" << std::endl;
569 mcParticleParameters.m_energy = E;
570 mcParticleParameters.m_particleId = particle->PdgCode();
575 mcParticleParameters.m_pParentAddress = (
void*)((intptr_t)particle->TrackId());
578 mf::LogWarning(
"LArPandora")
579 <<
"CreatePandoraMCParticles - invalid mc particle parameter provided, all assigned "
580 "values must be finite, mc particle omitted "
587 pandora::STATUS_CODE_SUCCESS,
589 PandoraApi::MCParticle::Create(*pPandora, mcParticleParameters, mcParticleFactory));
592 mf::LogWarning(
"LArPandora") <<
"CreatePandoraMCParticles - unable to create mc particle, "
593 "insufficient or invalid information supplied "
599 const int id_mother(particle->Mother());
600 MCParticleMap::const_iterator iterJ = particleMap.find(id_mother);
602 if (iterJ != particleMap.end()) {
605 pandora::STATUS_CODE_SUCCESS,
608 *pPandora, (
void*)((intptr_t)id_mother), (
void*)((intptr_t)particle->TrackId())));
611 mf::LogWarning(
"LArPandora") <<
"CreatePandoraMCParticles - Unable to create mc particle "
612 "relationship, invalid information supplied "
619 mf::LogDebug(
"LArPandora") <<
"Number of mc particles: " << particleCounter << std::endl;
626 std::map<const simb::MCParticle, bool>& primaryMCParticleMap)
628 for (
const simb::MCParticle& mcParticle : mcParticleVector) {
629 if (
"primary" == mcParticle.Process()) {
630 primaryMCParticleMap.emplace(std::make_pair(mcParticle,
false));
638 const art::Ptr<simb::MCParticle>& mcParticle,
639 std::map<const simb::MCParticle, bool>& primaryMCParticleMap)
641 for (
auto& mcParticleIter : primaryMCParticleMap) {
642 if (!mcParticleIter.second) {
643 const simb::MCParticle primaryMCParticle(mcParticleIter.first);
645 if (std::fabs(primaryMCParticle.Px() - mcParticle->Px()) <
646 std::numeric_limits<double>::epsilon() &&
647 std::fabs(primaryMCParticle.Py() - mcParticle->Py()) <
648 std::numeric_limits<double>::epsilon() &&
649 std::fabs(primaryMCParticle.Pz() - mcParticle->Pz()) <
650 std::numeric_limits<double>::epsilon()) {
651 mcParticleIter.second =
true;
665 mf::LogDebug(
"LArPandora") <<
" *** LArPandoraInput::CreatePandoraMCLinks(...) *** "
669 throw cet::exception(
"LArPandora")
670 <<
"CreatePandoraMCLinks2D - primary Pandora instance does not exist ";
674 for (IdToHitMap::const_iterator iterI = idToHitMap.begin(), iterEndI = idToHitMap.end();
677 const int hitID(iterI->first);
678 const art::Ptr<recob::Hit> hit(iterI->second);
682 HitsToTrackIDEs::const_iterator iterJ = hitToParticleMap.find(hit);
684 if (hitToParticleMap.end() == iterJ)
continue;
688 if (trackCollection.size() == 0)
689 throw cet::exception(
"LArPandora")
690 <<
"CreatePandoraMCLinks2D - found a hit without any associated MC truth information ";
693 for (
unsigned int k = 0; k < trackCollection.size(); ++k) {
694 const sim::TrackIDE trackIDE(trackCollection.at(k));
695 const int trackID(std::abs(trackIDE.trackID));
696 const float energyFrac(trackIDE.energyFrac);
700 pandora::STATUS_CODE_SUCCESS,
703 *pPandora, (
void*)((intptr_t)hitID), (
void*)((intptr_t)trackID), energyFrac));
706 mf::LogWarning(
"LArPandora") <<
"CreatePandoraMCLinks2D - unable to create calo hit to "
707 "mc particle relationship, invalid information supplied "
718 const art::Ptr<simb::MCParticle>& particle,
722 art::ServiceHandle<geo::Geometry const> theGeometry;
726 for (
auto const& tpcid : theGeometry->Iterate<geo::TPCID>()) {
727 int thisfirstT(-1), thislastT(-1);
730 if (thisfirstT < 0)
continue;
732 if (firstT < 0 || thisfirstT < firstT) firstT = thisfirstT;
734 if (lastT < 0 || thislastT > lastT) lastT = thislastT;
741 const art::Ptr<simb::MCParticle>& particle,
745 art::ServiceHandle<geo::Geometry const> theGeometry;
747 bool foundStartPosition(
false);
748 const int numTrajectoryPoints(
static_cast<int>(particle->NumberTrajectoryPoints()));
750 for (
int nt = 0; nt < numTrajectoryPoints; ++nt) {
751 const geo::Point_t pos{particle->Vx(nt), particle->Vy(nt), particle->Vz(nt)};
752 geo::TPCID tpcID = theGeometry->FindTPCAtPosition(pos);
754 if (!tpcID.isValid)
continue;
756 if (tpcID != ref_tpcid)
continue;
760 if (!foundStartPosition) {
762 foundStartPosition =
true;
770 const art::Ptr<simb::MCParticle>& particle,
773 art::ServiceHandle<geo::Geometry const> theGeometry;
774 auto const clock_data = art::ServiceHandle<detinfo::DetectorClocksService const>()->DataFor(e);
775 auto const det_prop =
776 art::ServiceHandle<detinfo::DetectorPropertiesService const>()->DataFor(e, clock_data);
778 geo::Point_t
const pos{particle->Vx(nt), particle->Vy(nt), particle->Vz(nt)};
779 auto const tpcID = theGeometry->PositionToTPCID(pos);
781 const float vtxT(particle->T(nt));
782 const float vtxTDC(clock_data.TPCG4Time2Tick(vtxT));
783 const float vtxTDC0(trigger_offset(clock_data));
785 const geo::TPCGeo& theTpc = theGeometry->TPC(tpcID);
786 const float driftDir((theTpc.DriftDirection() == geo::kNegX) ? +1.0 : -1.0);
787 return (driftDir * (vtxTDC - vtxTDC0) * det_prop.GetXTicksCoefficient());
794 const double hit_Charge,
795 const geo::View_t hit_View)
797 art::ServiceHandle<geo::Geometry const> theGeometry;
800 const double dQdX(hit_Charge / (theGeometry->WirePitch(hit_View)));
801 const double dQdX_e(dQdX /
804 detProp.BirksCorrection(dQdX_e) :
805 dQdX_e * 1000. / util::kGeVToElectrons);
875 : m_pPrimaryPandora(nullptr)
876 , m_useHitWidths(true)
877 , m_useBirksCorrection(false)
878 , m_useActiveBoundingBox(false)
879 , m_uidOffset(100000000)
880 , m_hitCounterOffset(0)
886 , m_mips_if_negative(0.)
887 , m_mips_to_gev(3.5e-4)
888 , m_recombination_factor(0.63)
Interface class for LArPandora producer modules, which reconstruct recob::PFParticles from recob::Hit...
Header file for the lar calo hit class.
Helper functions for extracting detector geometry for use in reconsruction.
Header file for the pandora api class.
Header file for the pandora plugin manager class.
#define PANDORA_THROW_RESULT_IF(StatusCode1, Operator, Command)
static pandora::StatusCode SetMCParentDaughterRelationship(const pandora::Pandora &pandora, const void *const pParentAddress, const void *const pDaughterAddress)
Set parent-daughter mc particle relationship.
static pandora::StatusCode SetCaloHitToMCParticleRelationship(const pandora::Pandora &pandora, const void *const pCaloHitParentAddress, const void *const pMCParticleParentAddress, const float mcParticleWeight=1)
Set calo hit to mc particle relationship.
LArCaloHitFactory responsible for object creation.
pandora::InputUInt m_daughterVolumeId
The daughter volume id.
pandora::InputUInt m_larTPCVolumeId
The lar tpc volume id.
LArMCParticleFactory responsible for object creation.
LAr mc particle parameters.
pandora::InputInt m_nuanceCode
The nuance code.
pandora::InputInt m_process
The process creating the particle.
drift volume class to hold properties of drift volume
drift volume class to hold properties of drift volume
Empty interface to map pandora to specifics in the LArSoft geometry.
virtual PandoraApi::Geometry::LineGap::Parameters CreateLineGapParametersFromDetectorGaps(const LArDetectorGap &gap) const =0
Create the line gap parameters to give to the pandora API.
virtual PandoraApi::Geometry::LineGap::Parameters CreateLineGapParametersFromReadoutGaps(const geo::View_t view, const geo::TPCID::TPCID_t tpc, const geo::CryostatID::CryostatID_t cstat, const geo::Point_t &firstXYZ, const geo::Point_t &lastXYZ, const float halfWirePitch, const float xFirst, const float xLast, const pandora::Pandora *pPandora) const =0
Create the line gap parameters to give to the pandora API.
virtual geo::View_t TargetViewU(const geo::TPCID::TPCID_t tpc, const geo::CryostatID::CryostatID_t cstat) const =0
Map a LArSoft view to Pandora's U view.
virtual geo::View_t TargetViewV(const geo::TPCID::TPCID_t tpc, const geo::CryostatID::CryostatID_t cstat) const =0
Map a LArSoft view to Pandora's V view.
virtual geo::View_t TargetViewW(const geo::TPCID::TPCID_t tpc, const geo::CryostatID::CryostatID_t cstat) const =0
Map a LArSoft view to Pandora's W view.
static unsigned int GetDaughterVolumeID(const LArDriftVolumeMap &driftVolumeMap, const unsigned int cstat, const unsigned int tpc)
Get daughter volume ID from a specified cryostat/tpc pair.
static unsigned int GetVolumeID(const LArDriftVolumeMap &driftVolumeMap, const unsigned int cstat, const unsigned int tpc)
Get drift volume ID from a specified cryostat/tpc pair.
static pandora::StatusCode Create(const pandora::Pandora &pandora, const Parameters ¶meters, const pandora::ObjectFactory< Parameters, Object > &factory=pandora::PandoraObjectFactory< Parameters, Object >())
Create a new object from a user factory.
const PluginManager * GetPlugins() const
Get the pandora plugin instance, providing access to user registered functions and calculators.
const LArTransformationPlugin * GetLArTransformationPlugin() const
Get the address of the lar transformation plugin.
StatusCodeException class.
@ MC_PROC_HAD_BERTINI_CAPTURE_AT_REST
@ MC_PROC_NEUTRON_INELASTIC
@ MC_PROC_ALPHA_INELASTIC
@ MC_PROC_DEUTERON_INELASTIC
@ MC_PROC_TRITON_INELASTIC
@ MC_PROC_ANTI_DEUTERON_INELASTIC
@ MC_PROC_PI_PLUS_INELASTIC
@ MC_PROC_ANTI_NEUTRON_INELASTIC
@ MC_PROC_ANTI_ALPHA_INELASTIC
@ MC_PROC_CHIPS_NUCLEAR_CAPTURE_AT_REST
@ MC_PROC_PRIMARY_BACKGROUND
@ MC_PROC_ANTI_TRITON_INELASTIC
@ MC_PROC_ELECTRON_NUCLEAR
@ MC_PROC_ANTI_PROTON_INELASTIC
@ MC_PROC_PI_MINUS_INELASTIC
@ MC_PROC_PROTON_INELASTIC
@ MC_PROC_PHOTON_INELASTIC
@ MC_PROC_MU_MINUS_CAPTURE_AT_REST
@ MC_PROC_HAD_FRITIOF_CAPTURE_AT_REST
@ MC_PROC_KAON_PLUS_INELASTIC
@ MC_PROC_LAMBDA_INELASTIC
@ MC_PROC_ANTI_HE3_INELASTIC
@ MC_PROC_KAON_MINUS_INELASTIC
LArPandoraDetectorType * GetDetectorType()
Factory class that returns the correct detector type interface.
std::map< int, art::Ptr< simb::MCParticle > > MCParticleMap
std::map< art::Ptr< simb::MCParticle >, art::Ptr< simb::MCTruth > > MCParticlesToMCTruth
std::vector< sim::TrackIDE > TrackIDEVector
std::map< art::Ptr< recob::Hit >, TrackIDEVector > HitsToTrackIDEs
std::vector< simb::MCParticle > RawMCParticleVector
std::map< art::Ptr< simb::MCTruth >, MCParticleVector > MCTruthToMCParticles
std::vector< art::Ptr< recob::Hit > > HitVector
std::map< int, art::Ptr< recob::Hit > > IdToHitMap
std::vector< art::Ptr< simb::MCParticle > > MCParticleVector
std::vector< LArDetectorGap > LArDetectorGapList
std::vector< LArDriftVolume > LArDriftVolumeList
std::map< unsigned int, LArDriftVolume > LArDriftVolumeMap