PandoraInterface_module.cc
Go to the documentation of this file.
1 /*
2 Art producer module to run Pandora on GArSoft data
3 Author: Eldwan Brianne
4 Date 15.05.2020
5 */
6 
14 #include "nug4/MagneticFieldServices/MagneticFieldService.h"
16 #include "fhiclcpp/ParameterSet.h"
17 
18 #include "CaloHitCreator.h"
19 #include "GeometryCreator.h"
20 #include "MCParticleCreator.h"
21 #include "PfoCreator.h"
22 #include "TrackCreator.h"
23 #include "BFieldPlugin.h"
24 #include "PseudoLayerPlugin.h"
25 
26 #include "Geometry/GeometryGAr.h"
27 #include "CoreUtils/ServiceUtil.h"
29 
30 //Pandora
31 #include "Api/PandoraApi.h"
32 
33 //LCContent
34 #include "LCContent.h"
35 #include "LCPlugins/LCSoftwareCompensation.h"
36 #include "LCPlugins/LCEnergyCorrectionPlugins.h"
37 #include "LCPlugins/LCParticleIdPlugins.h"
38 #include "LCPlugins/LCShowerProfilePlugin.h"
39 
40 #include <exception>
41 
42 namespace gar {
43  namespace gar_pandora {
44 
46 
47  public:
48 
49  class Settings
50  {
51  public:
52  /**
53  * @brief Default constructor
54  */
55  Settings();
56 
57  std::string m_pandoraSettingsXmlFile = ""; ///< The pandora settings xml file
58  float m_innerBField = 0.0; ///< The bfield in the main tracker and ecal, units Tesla
59  std::vector<float> m_inputEnergyCorrectionPoints{}; ///< The input energy points for non-linearity energy correction
60  std::vector<float> m_outputEnergyCorrectionPoints{}; ///< The output energy points for non-linearity energy correction
61  };
62 
63  explicit PandoraInterface(fhicl::ParameterSet const & p);
64  // The compiler-generated destructor is fine for non-base
65  // classes without bare pointers or other resource use.
66 
67  // Plugins should not be copied or assigned.
68  PandoraInterface(PandoraInterface const &) = delete;
70  PandoraInterface & operator = (PandoraInterface const &) = delete;
72 
73  // Required functions.
74  void beginJob() override;
75  void produce(art::Event & e) override;
76  void endJob() override;
77  const pandora::Pandora *GetPandora() const;
78 
79  private:
80  pandora::StatusCode RegisterUserComponents() const;
81  void reconfigure(fhicl::ParameterSet const& pset);
83  void Reset();
84 
85  pandora::Pandora *m_pPandora = nullptr; ///< Address of the pandora instance
86  CaloHitCreator *m_pCaloHitCreator = nullptr; ///< The calo hit creator
87  GeometryCreator *m_pGeometryCreator = nullptr; ///< The geometry creator
88  TrackCreator *m_pTrackCreator = nullptr; ///< The track creator
89  MCParticleCreator *m_pMCParticleCreator = nullptr; ///< The mc particle creator
90  PfoCreator *m_pPfoCreator = nullptr; ///< The pfo creator
91  RotationTransformation *m_pRotation = nullptr; ///< The transformation tool for rotations
92 
93  Settings m_settings{}; ///< The settings for the pandora interface module
94  CaloHitCreator::Settings m_caloHitCreatorSettings{}; ///< The calo hit creator settings
95  GeometryCreator::Settings m_geometryCreatorSettings{}; ///< The geometry creator settings
96  MCParticleCreator::Settings m_mcParticleCreatorSettings{}; ///< The mc particle creator settings
97  TrackCreator::Settings m_trackCreatorSettings{}; ///< The track creator settings
98  PfoCreator::Settings m_pfoCreatorSettings{}; ///< The pfo creator settings
99 
100  const geo::GeometryCore* fGeo; ///< pointer to the geometry
101  };
102 
103  //-----------------------------------------------------------------------------------
105  : EDProducer{pset}
106  {
107  this->reconfigure(pset);
108  }
109 
110  //-----------------------------------------------------------------------------------
112  {
113  try
114  {
115  MF_LOG_INFO("PandoraInterface - beginJob");
116 
118 
119  m_pPandora = new pandora::Pandora();
126 
127  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, this->RegisterUserComponents());
128  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, m_pGeometryCreator->CreateGeometry());
129  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::ReadSettings(*m_pPandora, m_settings.m_pandoraSettingsXmlFile));
130  }
131  catch (pandora::StatusCodeException &statusCodeException)
132  {
133  MF_LOG_ERROR("Failed to initialize PandoraInterface: ") << statusCodeException.ToString();
134  throw statusCodeException;
135  }
136  catch (std::exception &exception)
137  {
138  MF_LOG_ERROR("Failed to initialize PandoraInterface: std exception ") << exception.what();
139  throw exception;
140  }
141  catch (...)
142  {
143  MF_LOG_ERROR("Failed to initialize PandoraInterface: unrecognized exception");
144  throw;
145  }
146  }
147 
148  //-----------------------------------------------------------------------------------
150  {
151  try
152  {
153  MF_LOG_INFO("PandoraInterface - produce");
154 
155  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, m_pMCParticleCreator->CreateMCParticles(e));
156 
157  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, m_pTrackCreator->CreateTracks(e));
158  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, m_pTrackCreator->CreateTrackAssociations(e));
159  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, m_pMCParticleCreator->CreateTrackToMCParticleRelationships(m_pTrackCreator->GetTrackVector()));
160 
161  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, m_pCaloHitCreator->CreateCaloHits(e));
162  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, m_pMCParticleCreator->CreateCaloHitToMCParticleRelationships(m_pCaloHitCreator->GetCalorimeterHitVector()));
163 
164  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::ProcessEvent(*m_pPandora));
165  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, m_pPfoCreator->CreateParticleFlowObjects(e));
166 
167  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::Reset(*m_pPandora));
168  this->Reset();
169  }
170  catch (pandora::StatusCodeException &statusCodeException)
171  {
172  MF_LOG_ERROR("pandora failed to process event: ") << statusCodeException.ToString();
173  throw statusCodeException;
174  }
175  catch (std::exception &exception)
176  {
177  MF_LOG_ERROR("pandora failed to process event: std exception ") << exception.what();
178  throw exception;
179  }
180  catch (...)
181  {
182  MF_LOG_ERROR("pandora failed to process event: unrecognized exception");
183  throw;
184  }
185  }
186 
187  //-----------------------------------------------------------------------------------
189  {
190  delete m_pPandora;
191  delete m_pGeometryCreator;
192  delete m_pCaloHitCreator;
193  delete m_pTrackCreator;
194  delete m_pMCParticleCreator;
195  delete m_pPfoCreator;
196 
197  MF_LOG_INFO("PandoraInterface::endJob()");
198  }
199 
200  //-----------------------------------------------------------------------------------
201  const pandora::Pandora *PandoraInterface::GetPandora() const
202  {
203  if (NULL == m_pPandora)
204  throw pandora::StatusCodeException(pandora::STATUS_CODE_NOT_INITIALIZED);
205 
206  return m_pPandora;
207  }
208 
209  //-----------------------------------------------------------------------------------
210  pandora::StatusCode PandoraInterface::RegisterUserComponents() const
211  {
212  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, LCContent::RegisterAlgorithms(*m_pPandora));
213 
214  //Shower profile Plugin
215  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::SetShowerProfilePlugin(*m_pPandora, new lc_content::LCShowerProfilePlugin));
216  //Energy Correction LCPlugins
217  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::RegisterEnergyCorrectionPlugin(*m_pPandora, "CleanClusters", pandora::HADRONIC, new lc_content::LCEnergyCorrectionPlugins::CleanCluster));
218  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::RegisterEnergyCorrectionPlugin(*m_pPandora, "ScaleHotHadrons", pandora::HADRONIC, new lc_content::LCEnergyCorrectionPlugins::ScaleHotHadrons));
219  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::RegisterEnergyCorrectionPlugin(*m_pPandora, "MuonCoilCorrection", pandora::HADRONIC, new lc_content::LCEnergyCorrectionPlugins::MuonCoilCorrection));
220 
221  //PID LCPlugins
222  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::RegisterParticleIdPlugin(*m_pPandora, "LCEmShowerId" , new lc_content::LCParticleIdPlugins::LCEmShowerId));
223  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::RegisterParticleIdPlugin(*m_pPandora, "LCPhotonId" , new lc_content::LCParticleIdPlugins::LCPhotonId));
224  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::RegisterParticleIdPlugin(*m_pPandora, "LCElectronId" , new lc_content::LCParticleIdPlugins::LCElectronId));
225  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::RegisterParticleIdPlugin(*m_pPandora, "LCMuonId" , new lc_content::LCParticleIdPlugins::LCMuonId));
226 
227  //Custom Plugins
228  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::SetBFieldPlugin(*m_pPandora,
229  new BFieldPlugin()));
230  PANDORA_THROW_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, PandoraApi::SetPseudoLayerPlugin(*m_pPandora, new PseudoLayerPlugin));
231 
232  PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, LCContent::RegisterNonLinearityEnergyCorrection(*m_pPandora,
234 
235  return pandora::STATUS_CODE_SUCCESS;
236  }
237 
238  //-----------------------------------------------------------------------------------
240  {
241  //Find pandora xml config file
242  cet::search_path sp("FW_SEARCH_PATH");
243  std::string fullConfigFileName;
244  std::string pandora_file = pset.get<std::string>("PandoraXML");
245 
246  if( !sp.find_file(pandora_file, fullConfigFileName) )
247  throw cet::exception("PandoraInterface") << " Failed to find xml configuration file " << pandora_file << " in FW search path";
248  m_settings.m_pandoraSettingsXmlFile = fullConfigFileName;
249 
250  m_trackCreatorSettings.m_trackCollection = pset.get<std::string>("TrackLabel", "track"); //Track hits
251  m_trackCreatorSettings.m_V0Collection = pset.get<std::string>("V0Label", "vee"); //Vees
252  m_trackCreatorSettings.m_minTrackHits = pset.get<unsigned int>("MinTrackHits", 3); //Track quality cut: the minimum number of track hits
253  m_trackCreatorSettings.m_maxTrackHits = pset.get<unsigned int>("MaxTrackHits", 5000); //Track quality cut: the maximum number of track hits
254  m_trackCreatorSettings.m_d0TrackCut = pset.get<float>("d0TrackCut", 50.); //Track quality cut: d0
255  m_trackCreatorSettings.m_z0TrackCut = pset.get<float>("z0TrackCut", 50.); //Track quality cut: z0
256  m_trackCreatorSettings.m_minTrackECalDistanceFromIp = pset.get<float>("MinTrackECalDistanceFromIp", 100.); //Track quality cut: separation between ip and track projected at ECAL
257  m_trackCreatorSettings.m_maxTrackSigmaPOverP = pset.get<float>("MaxTrackSigmaPOverP", 0.15); //Cut on fractional track momentum error
258 
259  m_caloHitCreatorSettings.m_CaloHitCollection = pset.get<std::string>("CaloHitLabel", "sscalohit"); //Calo hits
260  m_caloHitCreatorSettings.m_CaloHitInstanceName = pset.get<std::string>("CaloHitInstanceCalo", ""); //Calo hits instance name
261  m_caloHitCreatorSettings.m_eCalToMip = pset.get<float>("ECaltoMipCalibration", 1.); //The calibration from deposited ECal energy to mip
262  m_caloHitCreatorSettings.m_eCalMipThreshold = pset.get<float>("ECalMipThreshold", 0.25); //Threshold for creating calo hits in the ECal, units mip
263  m_caloHitCreatorSettings.m_eCalToEMGeV = pset.get<float>("ECalToEMGeVCalibration", 1.); //The calibration from deposited ECal energy to EM energy
264  m_caloHitCreatorSettings.m_eCalToHadGeVBarrel = pset.get<float>("ECalToHadGeVCalibrationBarrel", 1.); //The calibration from deposited ECal energy to hadronic energy in the barrel
265  m_caloHitCreatorSettings.m_eCalToHadGeVEndCap = pset.get<float>("ECalToHadGeVCalibrationEndCap", 1.); //The calibration from deposited ECal energy to hadronic energy in the endcap
266  m_caloHitCreatorSettings.m_maxECalHitHadronicEnergy = pset.get<float>("MaxECalHitHadronicEnergy", 10000.); //The maximum hadronic energy allowed for a single ecal hit
267  m_caloHitCreatorSettings.m_nOuterSamplingLayers = pset.get<unsigned int>("NOuterSamplingLayers", 3); //Number of layers from edge for hit to be flagged as an outer layer hit
268  m_caloHitCreatorSettings.m_layersFromEdgeMaxRearDistance = pset.get<float>("LayersFromEdgeMaxRearDistance", 250.); //Maximum number of layers from candidate outer layer hit to rear of detector
269  m_caloHitCreatorSettings.m_eCalBarrelNormalVector = pset.get<std::vector<float>>("ECalBarrelNormalVector", std::vector<float>{0., 0., 1.}); //Normal vector for the ECal barrel sensitive layers in local coordinates
270 
271  m_mcParticleCreatorSettings.m_geantModuleLabel = pset.get<std::string>("Geant4Label", "geant"); //geant4
272  m_mcParticleCreatorSettings.m_generatorModuleLabel = pset.get<std::string>("GeneratorLabel", "genie"); //generator
273 
274  m_pfoCreatorSettings.m_emStochasticTerm = pset.get<float>("EMStockasticTerm", 0.17);
275  m_pfoCreatorSettings.m_emConstantTerm = pset.get<float>("EMConstantTerm", 0.01);
276  m_pfoCreatorSettings.m_hadStochasticTerm = pset.get<float>("HADStockasticTerm", 0.3);
277  m_pfoCreatorSettings.m_hadStochasticTerm = pset.get<float>("HADConstantTerm", 0.1);
278 
279  produces< std::vector<gar::rec::Cluster> >();
280  produces< std::vector<gar::rec::PFParticle> >();
281  }
282 
283  //-----------------------------------------------------------------------------------
285  {
286  auto const *magFieldService = gar::providerFrom<mag::MagneticFieldService>();
287  G4ThreeVector zerovec(0,0,0);
288  G4ThreeVector magfield = magFieldService->FieldAtPoint(zerovec);
289  m_settings.m_innerBField = magfield[0]; //x component at (0, 0, 0)
290 
291  fGeo = gar::providerFrom<geo::GeometryGAr>();
292 
295 
296  m_trackCreatorSettings.m_bField = magfield[0];
297  m_trackCreatorSettings.m_eCalBarrelInnerSymmetry = eCalBarrelExtension->inner_symmetry;
298  m_trackCreatorSettings.m_eCalBarrelInnerPhi0 = eCalBarrelExtension->inner_phi0;
299  m_trackCreatorSettings.m_eCalBarrelInnerR = eCalBarrelExtension->extent[0] * CLHEP::cm;
300  m_trackCreatorSettings.m_eCalEndCapInnerZ = eCalEndcapExtension->extent[2] * CLHEP::cm;
303 
304  m_caloHitCreatorSettings.m_eCalBarrelOuterZ = eCalBarrelExtension->extent[3] * CLHEP::cm;
305  m_caloHitCreatorSettings.m_eCalBarrelInnerPhi0 = eCalBarrelExtension->inner_phi0;
306  m_caloHitCreatorSettings.m_eCalBarrelInnerSymmetry = eCalBarrelExtension->inner_symmetry;
307  m_caloHitCreatorSettings.m_eCalBarrelOuterR = eCalBarrelExtension->extent[1] * CLHEP::cm;
308  m_caloHitCreatorSettings.m_eCalBarrelOuterPhi0 = eCalBarrelExtension->outer_phi0;
309  m_caloHitCreatorSettings.m_eCalBarrelOuterSymmetry = eCalBarrelExtension->outer_symmetry;
310  m_caloHitCreatorSettings.m_eCalEndCapOuterR = eCalEndcapExtension->extent[1] * CLHEP::cm;
311  m_caloHitCreatorSettings.m_eCalEndCapOuterZ = eCalEndcapExtension->extent[3] * CLHEP::cm;
314  }
315 
316  //-----------------------------------------------------------------------------------
318  {
322  }
323 
324  //-----------------------------------------------------------------------------------
326  m_innerBField(0.5),
327  m_inputEnergyCorrectionPoints(0),
328  m_outputEnergyCorrectionPoints(0)
329  {
330  }
331 
332  } //namespace gar_pandora
333  } // namespace gar
334 
335  namespace gar {
336  namespace gar_pandora {
338  }
339  }
static constexpr double cm
Definition: Units.h:68
float m_eCalBarrelInnerR
ECal barrel inner radius.
Definition: TrackCreator.h:43
const TrackVector & GetTrackVector() const
Definition: TrackCreator.h:93
PfoCreator * m_pPfoCreator
The pfo creator.
float m_eCalToHadGeVEndCap
The calibration from deposited ECal endcap energy to hadronic energy.
std::string m_geantModuleLabel
The geant4 label.
std::string m_CaloHitCollection
The calorimeter hit collection.
int m_eCalBarrelInnerSymmetry
ECal barrel inner symmetry order.
Definition: TrackCreator.h:41
float m_eCalMipThreshold
Threshold for creating calo hits in the ECal, units mip.
float m_eCalEndCapInnerZ
ECal endcap inner z.
Definition: TrackCreator.h:44
std::string m_V0Collection
The vees collection.
Definition: TrackCreator.h:26
RotationTransformation * m_pRotation
The transformation tool for rotations.
const pandora::Pandora * GetPandora() const
unsigned int m_maxTrackHits
Track quality cut: the maximum number of track hits.
Definition: TrackCreator.h:29
float m_eCalEndCapOuterR
ECal endcap outer r coordinate.
std::string string
Definition: nybbler.cc:12
std::string m_generatorModuleLabel
The generator label.
float m_innerBField
The bfield in the main tracker and ecal, units Tesla.
EDProducer(fhicl::ParameterSet const &pset)
Definition: EDProducer.h:20
const CalorimeterHitVector & GetCalorimeterHitVector() const
float m_eCalEndCapOuterZ
ECal endcap outer z coordinate.
float m_d0TrackCut
Track d0 cut used to determine whether track can be used to form pfo.
Definition: TrackCreator.h:31
float m_eCalToEMGeV
The calibration from deposited ECal energy to EM energy.
float m_minTrackECalDistanceFromIp
Sanity check on separation between ip and track projected ecal position.
Definition: TrackCreator.h:37
#define MF_LOG_ERROR(category)
float m_eCalBarrelInnerPhi0
ECal barrel inner phi0 coordinate.
int m_nOuterSamplingLayers
Number of layers from edge for hit to be flagged as an outer layer hit.
float m_hadStochasticTerm
The stochastic term for HAD shower energy resolution.
Definition: PfoCreator.h:34
const geo::GeometryCore * fGeo
pointer to the geometry
Description of geometry of one entire detector.
Definition: GeometryCore.h:436
float m_z0TrackCut
Track z0 cut used to determine whether track can be used to form pfo.
Definition: TrackCreator.h:32
std::vector< float > m_inputEnergyCorrectionPoints
The input energy points for non-linearity energy correction.
void reconfigure(fhicl::ParameterSet const &pset)
pandora::StatusCode CreateTrackAssociations(const art::Event &pEvent)
float m_eCalToHadGeVBarrel
The calibration from deposited ECal barrel energy to hadronic energy.
Settings m_settings
The settings for the pandora interface module.
pandora::StatusCode CreateCaloHits(const art::Event &pEvent)
const double e
float m_eCalBarrelOuterZ
ECal barrel outer z coordinate.
#define DEFINE_ART_MODULE(klass)
Definition: ModuleMacros.h:67
pandora::StatusCode RegisterUserComponents() const
float m_emConstantTerm
The constant term for EM shower energy resolution.
Definition: PfoCreator.h:33
pandora::StatusCode CreateCaloHitToMCParticleRelationships(const CalorimeterHitVector &calorimeterHitVector) const
float m_eCalBarrelOuterPhi0
ECal barrel outer phi0 coordinate.
T get(std::string const &key) const
Definition: ParameterSet.h:271
TrackCreator::Settings m_trackCreatorSettings
The track creator settings.
std::string m_CaloHitInstanceName
The calorimeter hit instance name.
p
Definition: test.py:223
float m_eCalBarrelOuterR
ECal barrel outer r coordinate.
float TPCZCent() const
Returns the Z location of the center of the TPC in cm.
Definition: GeometryCore.h:792
GeometryCreator::Settings m_geometryCreatorSettings
The geometry creator settings.
float m_eCalBarrelInnerPhi0
ECal barrel inner phi 0.
Definition: TrackCreator.h:42
CaloHitCreator * m_pCaloHitCreator
The calo hit creator.
#define MF_LOG_INFO(category)
TrackCreator * m_pTrackCreator
The track creator.
pandora::StatusCode CreateTracks(const art::Event &pEvent)
FloatVector m_eCalBarrelNormalVector
ECal barrel normal vector.
float m_emStochasticTerm
The stochastic term for EM shower energy resolution.
Definition: PfoCreator.h:32
CaloHitCreator::Settings m_caloHitCreatorSettings
The calo hit creator settings.
pandora::Pandora * m_pPandora
Address of the pandora instance.
std::string m_pandoraSettingsXmlFile
The pandora settings xml file.
General GArSoft Utilities.
unsigned int m_minTrackHits
Track quality cut: the minimum number of track hits.
Definition: TrackCreator.h:28
unsigned int m_eCalEndCapInnerSymmetryOrder
ECal endcap inner symmetry.
unsigned int m_eCalBarrelOuterSymmetry
ECal barrel outer symmetry order.
std::string m_trackCollection
The reconstructed track collection.
Definition: TrackCreator.h:25
pandora::StatusCode CreateMCParticles(const art::Event &pEvent)
MCParticleCreator::Settings m_mcParticleCreatorSettings
The mc particle creator settings.
float TPCYCent() const
Returns the Y location of the center of the TPC in cm.
Definition: GeometryCore.h:785
float m_eCalToMip
The calibration from deposited ECal energy to mip.
pandora::StatusCode CreateParticleFlowObjects(art::Event &pEvent)
Definition: PfoCreator.cxx:35
PandoraInterface(fhicl::ParameterSet const &p)
pandora::StatusCode CreateTrackToMCParticleRelationships(const TrackVector &trackVector) const
std::string find_file(std::string const &filename) const
Definition: search_path.cc:96
std::vector< float > m_outputEnergyCorrectionPoints
The output energy points for non-linearity energy correction.
MCParticleCreator * m_pMCParticleCreator
The mc particle creator.
float m_maxTrackSigmaPOverP
Track fraction momentum error cut.
Definition: TrackCreator.h:38
float m_maxECalHitHadronicEnergy
The maximum hadronic energy allowed for a single hcal hit.
GeometryCreator * m_pGeometryCreator
The geometry creator.
PfoCreator::Settings m_pfoCreatorSettings
The pfo creator settings.
float m_layersFromEdgeMaxRearDistance
Maximum number of layers from candidate outer layer hit to rear of detector.
art framework interface to geometry description
unsigned int m_eCalBarrelInnerSymmetry
ECal barrel inner symmetry order.
pandora::StatusCode CreateGeometry() const
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
std::map< gar::geo::LayeredCalorimeterData::LayoutType, std::shared_ptr< gar::geo::LayeredCalorimeterData > > GetECALLayeredCalorimeterData() const
Definition: GeometryCore.h:628
PandoraInterface & operator=(PandoraInterface const &)=delete
float m_eCalEndCapInnerPhiCoordinate
ECal endcap inner phi.