LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
BdtBeamParticleIdTool.h
Go to the documentation of this file.
1 
8 #ifndef LAR_BDT_BEAM_PARTICLE_ID_TOOL_H
9 #define LAR_BDT_BEAM_PARTICLE_ID_TOOL_H 1
10 
13 
15 
17 
18 namespace lar_content
19 {
20 
25 {
26 public:
31 
38 
45 
49  ~BdtBeamParticleIdTool() = default;
50 
51  void SelectOutputPfos(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &beamSliceHypotheses,
52  const SliceHypotheses &crSliceHypotheses, pandora::PfoList &selectedPfos);
53 
54 private:
58  class Plane
59  {
60  public:
67  Plane(const pandora::CartesianVector &normal, const pandora::CartesianVector &point);
68 
75  pandora::CartesianVector GetLineIntersection(const pandora::CartesianVector &point, const pandora::CartesianVector &direction) const;
76 
77  private:
78  pandora::CartesianVector m_unitNormal;
79  pandora::CartesianVector m_point;
80  double m_d;
81  };
82 
83  typedef std::vector<Plane> PlaneVector;
84 
89  {
90  public:
95 
106  void Initialize(const float larTPCMinX, const float larTPCMaxX, const float larTPCMinY, const float larTPCMaxY,
107  const float larTPCMinZ, const float larTPCMaxZ);
108 
114  void SetBeamLArTPCIntersection(const pandora::CartesianVector &beamLArTPCIntersection);
115 
121  void SetBeamDirection(const pandora::CartesianVector &beamDirection);
122 
128  void SetSelectedFraction(const float selectedFraction);
129 
135  void SetNSelectedHits(const unsigned int nSelectedHits);
136 
142  void SetContainmentLimit(const float containmentLimit);
143 
147  float GetLArTPCMinX() const;
148 
152  float GetLArTPCMaxX() const;
153 
157  float GetLArTPCMinY() const;
158 
162  float GetLArTPCMaxY() const;
163 
167  float GetLArTPCMinZ() const;
168 
172  float GetLArTPCMaxZ() const;
173 
177  const PlaneVector &GetPlanes() const;
178 
182  const pandora::CartesianVector &GetBeamLArTPCIntersection() const;
183 
187  const pandora::CartesianVector &GetBeamDirection() const;
188 
192  float GetSelectedFraction() const;
193 
197  unsigned int GetNSelectedHits() const;
198 
202  float GetContainmentLimit() const;
203 
204  private:
205  float m_larTPCMinX;
206  float m_larTPCMaxX;
207  float m_larTPCMinY;
208  float m_larTPCMaxY;
209  float m_larTPCMinZ;
210  float m_larTPCMaxZ;
211  PlaneVector m_larTPCPlanes;
212  pandora::CartesianVector m_beamLArTPCIntersection;
213  pandora::CartesianVector m_beamDirection;
215  unsigned int m_nSelectedHits;
217  };
218 
223  {
224  public:
232  SliceFeatures(const pandora::PfoList &nuPfos, const pandora::PfoList &crPfos, const SliceFeatureParameters &sliceFeatureParameters);
233 
239  SliceFeatures(const SliceFeatures &) = default;
240 
244  ~SliceFeatures() = default;
245 
251  bool IsFeatureVectorAvailable() const;
252 
258  void FillFeatureVector(LArMvaHelper::MvaFeatureVector &featureVector) const;
259 
267  float GetAdaBoostDecisionTreeScore(const AdaBoostDecisionTree &adaBoostDecisionTree) const;
268 
269  private:
277  void GetLeadingCaloHits(
278  const pandora::CaloHitList &inputCaloHitList, pandora::CaloHitList &outputCaloHitList, double &closestHitToFaceDistance) const;
279 
288  void GetLArTPCIntercepts(const pandora::CartesianVector &a0, const pandora::CartesianVector &majorAxis,
289  pandora::CartesianVector &interceptOne, pandora::CartesianVector &interceptTwo) const;
290 
296  bool IsContained(const pandora::CartesianVector &spacePoint, const float limit) const;
297 
301  };
302 
303  typedef std::vector<SliceFeatures> SliceFeaturesVector;
304  typedef std::pair<unsigned int, float> UintFloatPair;
305  typedef std::unordered_map<const pandora::MCParticle *, int> MCParticleToIntMap;
306 
307  pandora::StatusCode Initialize();
308 
316  void GetSliceFeatures(
317  const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, SliceFeaturesVector &sliceFeaturesVector) const;
318 
326  void SelectAllPfos(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &hypotheses, pandora::PfoList &selectedPfos) const;
327 
334  void SelectPfos(const pandora::PfoList &pfos, pandora::PfoList &selectedPfos) const;
335 
344  void GetBestMCSliceIndices(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses,
345  const SliceHypotheses &crSliceHypotheses, pandora::IntVector &bestSliceIndices) const;
346 
353  void PopulateMCParticleToHitsMap(MCParticleToIntMap &mcParticleToIntMap, const pandora::CaloHitList &caloHitList) const;
354 
362  void Collect2DHits(const pandora::PfoList &pfos, pandora::CaloHitList &caloHitList, const pandora::CaloHitSet &reconstructableCaloHitSet) const;
363 
372  bool PassesQualityCuts(const float purity, const float completeness) const;
373 
383  void SelectPfosByAdaBDTScore(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses,
384  const SliceHypotheses &crSliceHypotheses, const SliceFeaturesVector &sliceFeaturesVector, pandora::PfoList &selectedPfos) const;
385 
386  pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle);
387 
388  // Training
390  std::string m_trainingOutputFile;
391  std::string m_caloHitListName;
392  std::string m_mcParticleListName;
393  float m_minPurity;
395 
396  // Classification
399  unsigned int m_maxNeutrinos;
402 };
403 
404 //------------------------------------------------------------------------------------------------------------------------------------------
405 
406 inline void BdtBeamParticleIdTool::SliceFeatureParameters::SetBeamLArTPCIntersection(const pandora::CartesianVector &beamLArTPCIntersection)
407 {
408  m_beamLArTPCIntersection = beamLArTPCIntersection;
409 }
410 
411 //------------------------------------------------------------------------------------------------------------------------------------------
412 
413 inline void BdtBeamParticleIdTool::SliceFeatureParameters::SetBeamDirection(const pandora::CartesianVector &beamDirection)
414 {
415  m_beamDirection = beamDirection;
416 }
417 
418 //------------------------------------------------------------------------------------------------------------------------------------------
419 
421 {
422  m_selectedFraction = selectedFraction;
423 }
424 
425 //------------------------------------------------------------------------------------------------------------------------------------------
426 
427 inline void BdtBeamParticleIdTool::SliceFeatureParameters::SetNSelectedHits(const unsigned int nSelectedHits)
428 {
429  m_nSelectedHits = nSelectedHits;
430 }
431 
432 //------------------------------------------------------------------------------------------------------------------------------------------
433 
435 {
436  m_containmentLimit = containmentLimit;
437 }
438 
439 //------------------------------------------------------------------------------------------------------------------------------------------
440 
442 {
443  return m_larTPCMinX;
444 }
445 
446 //------------------------------------------------------------------------------------------------------------------------------------------
447 
449 {
450  return m_larTPCMaxX;
451 }
452 
453 //------------------------------------------------------------------------------------------------------------------------------------------
454 
456 {
457  return m_larTPCMinY;
458 }
459 
460 //------------------------------------------------------------------------------------------------------------------------------------------
461 
463 {
464  return m_larTPCMaxY;
465 }
466 
467 //------------------------------------------------------------------------------------------------------------------------------------------
468 
470 {
471  return m_larTPCMinZ;
472 }
473 
474 //------------------------------------------------------------------------------------------------------------------------------------------
475 
477 {
478  return m_larTPCMaxZ;
479 }
480 
481 //------------------------------------------------------------------------------------------------------------------------------------------
482 
484 {
485  return m_larTPCPlanes;
486 }
487 
488 //------------------------------------------------------------------------------------------------------------------------------------------
489 
491 {
492  return m_beamLArTPCIntersection;
493 }
494 
495 //------------------------------------------------------------------------------------------------------------------------------------------
496 
497 inline const pandora::CartesianVector &BdtBeamParticleIdTool::SliceFeatureParameters::GetBeamDirection() const
498 {
499  return m_beamDirection;
500 }
501 
502 //------------------------------------------------------------------------------------------------------------------------------------------
503 
505 {
506  return m_selectedFraction;
507 }
508 
509 //------------------------------------------------------------------------------------------------------------------------------------------
510 
512 {
513  return m_nSelectedHits;
514 }
515 
516 //------------------------------------------------------------------------------------------------------------------------------------------
517 
519 {
520  return m_containmentLimit;
521 }
522 
523 //------------------------------------------------------------------------------------------------------------------------------------------
524 
526 {
527  return m_isAvailable;
528 }
529 
530 } // namespace lar_content
531 
532 #endif // #ifndef LAR_BDT_BEAM_PARTICLE_ID_TOOL_H
void SetBeamLArTPCIntersection(const pandora::CartesianVector &beamLArTPCIntersection)
Set m_beamLArTPCIntersection.
double m_d
Parameter defining a plane.
std::vector< pandora::PfoList > SliceHypotheses
const SliceFeatureParameters m_sliceFeatureParameters
Geometry information block.
MvaTypes::MvaFeatureVector MvaFeatureVector
Definition: LArMvaHelper.h:75
std::string m_filePathEnvironmentVariable
The environment variable providing a list of paths to bdt files.
std::string m_mcParticleListName
Name of input MC particle list.
float m_larTPCMinY
Global LArTPC volume minimum y extent.
Plane(const pandora::CartesianVector &normal, const pandora::CartesianVector &point)
Constructor, using equation of plane: m_a*x + m_b*y + m_c*z + m_d = 0.
float m_minAdaBDTScore
Minimum score required to classify a slice as a beam particle.
float m_larTPCMaxX
Global LArTPC volume maximum x extent.
unsigned int GetNSelectedHits() const
Get m_nSelectedHits.
pandora::CartesianVector GetLineIntersection(const pandora::CartesianVector &point, const pandora::CartesianVector &direction) const
Return the intersection between the plane and a line.
#define a0
PlaneVector m_larTPCPlanes
Vector of all planes making up global LArTPC volume.
unsigned int m_nSelectedHits
Minimum number of hits to use in 3D cluster fits.
bool m_useTrainingMode
Should use training mode. If true, training examples will be written to the output file...
void SelectPfosByAdaBDTScore(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, const SliceFeaturesVector &sliceFeaturesVector, pandora::PfoList &selectedPfos) const
Select pfos based on the AdaBDT score that the slice contains a beam particle interaction.
float m_selectedFraction
Fraction of hits to use in 3D cluster fits.
std::vector< SliceFeatures > SliceFeaturesVector
void SelectAllPfos(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &hypotheses, pandora::PfoList &selectedPfos) const
Select all pfos under the same hypothesis.
pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle)
std::vector< int > IntVector
bool IsFeatureVectorAvailable() const
Check if all features were calculable.
float m_larTPCMaxY
Global LArTPC volume maximum y extent.
bool m_isAvailable
Is the feature vector available.
void SelectPfos(const pandora::PfoList &pfos, pandora::PfoList &selectedPfos) const
Add the given pfos to the selected Pfo list.
bool PassesQualityCuts(const float purity, const float completeness) const
Determine if the event passes the selection cuts for training.
void SetBeamDirection(const pandora::CartesianVector &beamDirection)
Set m_beamDirection.
void SetNSelectedHits(const unsigned int nSelectedHits)
Set m_nSelectedHits.
const pandora::CartesianVector & GetBeamDirection() const
Get the beam direction.
Header file for the master algorithm class.
Header file for the lar adaptive boosted decision tree class.
std::string m_trainingOutputFile
Output file name for training examples.
void SetSelectedFraction(const float selectedFraction)
Set m_selectedFraction.
pandora::CartesianVector m_beamDirection
Beam direction.
float m_minPurity
Minimum purity of the best slice to use event for training.
void Collect2DHits(const pandora::PfoList &pfos, pandora::CaloHitList &caloHitList, const pandora::CaloHitSet &reconstructableCaloHitSet) const
Collect all 2D hits in a supplied list of Pfos and push them on to an existing hit list...
void GetBestMCSliceIndices(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, pandora::IntVector &bestSliceIndices) const
Get the slice with the most neutrino induced hits using Monte-Carlo information.
LArMvaHelper::MvaFeatureVector m_featureVector
The MVA feature vector.
float m_minCompleteness
Minimum completeness of the best slice to use event for training.
void PopulateMCParticleToHitsMap(MCParticleToIntMap &mcParticleToIntMap, const pandora::CaloHitList &caloHitList) const
Fill mc particle to nHits map from calo hit list.
BdtBeamParticleIdTool & operator=(const BdtBeamParticleIdTool &)=default
Assignment operator.
const pandora::CartesianVector & GetBeamLArTPCIntersection() const
Get the beam LArTPC intersection.
pandora::CartesianVector m_unitNormal
Unit normal to plane.
~BdtBeamParticleIdTool()=default
Destructor.
float m_containmentLimit
Limit applied in is contained definition.
void SetContainmentLimit(const float containmentLimit)
Set m_containmentLimit.
const PlaneVector & GetPlanes() const
Get vector of planes.
void GetSliceFeatures(const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, SliceFeaturesVector &sliceFeaturesVector) const
Get the features of each slice.
float m_larTPCMinX
Global LArTPC volume minimum x extent.
SliceIdBaseTool class.
float m_larTPCMaxZ
Global LArTPC volume maximum z extent.
pandora::CartesianVector m_point
A point on the plane.
std::unordered_map< const pandora::MCParticle *, int > MCParticleToIntMap
void SelectOutputPfos(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &beamSliceHypotheses, const SliceHypotheses &crSliceHypotheses, pandora::PfoList &selectedPfos)
Select which reconstruction hypotheses to use; neutrino outcomes or cosmic-ray muon outcomes for each...
BdtBeamParticleIdTool class.
Header file for the stitching tool base class.
unsigned int m_maxNeutrinos
The maximum number of neutrinos to select in any one event.
std::string m_caloHitListName
Name of input calo hit list.
std::pair< unsigned int, float > UintFloatPair
pandora::CartesianVector m_beamLArTPCIntersection
Intersection of beam and global LArTPC volume.
float m_larTPCMinZ
Global LArTPC volume minimum z extent.
AdaBoostDecisionTree m_adaBoostDecisionTree
The adaptive boost decision tree.
SliceFeatureParameters m_sliceFeatureParameters
Geometry information block.