LArSoft  v06_85_00
Liquid Argon Software toolkit - http://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 
12 
14 
16 
17 namespace lar_content
18 {
19 
24 {
25 public:
30 
36  BdtBeamParticleIdTool(const BdtBeamParticleIdTool &rhs) = default;
37 
44 
48  ~BdtBeamParticleIdTool() = default;
49 
50  void SelectOutputPfos(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &beamSliceHypotheses, const SliceHypotheses &crSliceHypotheses, pandora::PfoList &selectedPfos);
51 
52 private:
56  class Plane
57  {
58  public:
65  Plane(const pandora::CartesianVector &normal, const pandora::CartesianVector &point);
66 
73  pandora::CartesianVector GetLineIntersection(const pandora::CartesianVector &point, const pandora::CartesianVector &direction) const;
74 
75  private:
76  pandora::CartesianVector m_unitNormal;
77  pandora::CartesianVector m_point;
78  double m_d;
79  };
80 
81  typedef std::vector<Plane> PlaneVector;
82 
87  {
88  public:
93 
104  void Initialize(const float larTPCMinX, const float larTPCMaxX, const float larTPCMinY, const float larTPCMaxY, const float larTPCMinZ, const float larTPCMaxZ);
105 
111  void SetBeamLArTPCIntersection(const pandora::CartesianVector &beamLArTPCIntersection);
112 
118  void SetBeamDirection(const pandora::CartesianVector &beamDirection);
119 
125  void SetSelectedFraction(const float selectedFraction);
126 
132  void SetNSelectedHits(const unsigned int nSelectedHits);
133 
139  void SetContainmentLimit(const float containmentLimit);
140 
144  float GetLArTPCMinX() const;
145 
149  float GetLArTPCMaxX() const;
150 
154  float GetLArTPCMinY() const;
155 
159  float GetLArTPCMaxY() const;
160 
164  float GetLArTPCMinZ() const;
165 
169  float GetLArTPCMaxZ() const;
170 
174  const PlaneVector &GetPlanes() const;
175 
179  const pandora::CartesianVector &GetBeamLArTPCIntersection() const;
180 
184  const pandora::CartesianVector &GetBeamDirection() const;
185 
189  float GetSelectedFraction() const;
190 
194  unsigned int GetNSelectedHits() const;
195 
199  float GetContainmentLimit() const;
200 
201  private:
202  float m_larTPCMinX;
203  float m_larTPCMaxX;
204  float m_larTPCMinY;
205  float m_larTPCMaxY;
206  float m_larTPCMinZ;
207  float m_larTPCMaxZ;
208  PlaneVector m_larTPCPlanes;
209  pandora::CartesianVector m_beamLArTPCIntersection;
210  pandora::CartesianVector m_beamDirection;
212  unsigned int m_nSelectedHits;
214  };
215 
220  {
221  public:
230  SliceFeatures(const pandora::PfoList &nuPfos, const pandora::PfoList &crPfos, const BdtBeamParticleIdTool *const pTool, const SliceFeatureParameters &sliceFeatureParameters);
231 
237  SliceFeatures(const SliceFeatures &rhs) = default;
238 
244  SliceFeatures &operator=(const SliceFeatures &rhs) = default;
245 
249  ~SliceFeatures() = default;
250 
256  bool IsFeatureVectorAvailable() const;
257 
263  void FillFeatureVector(LArMvaHelper::MvaFeatureVector &featureVector) const;
264 
272  float GetAdaBoostDecisionTreeScore(const AdaBoostDecisionTree &adaBoostDecisionTree) const;
273 
274  private:
282  void GetLeadingCaloHits(const pandora::CaloHitList &inputCaloHitList, pandora::CaloHitList &outputCaloHitList,
283  double &closestHitToFaceDistance) const;
284 
293  void GetLArTPCIntercepts(const pandora::CartesianVector &a0, const pandora::CartesianVector &majorAxis,
294  pandora::CartesianVector &interceptOne, pandora::CartesianVector &interceptTwo) const;
295 
301  bool IsContained(const pandora::CartesianVector &spacePoint, const float limit) const;
302 
307  };
308 
309  typedef std::vector<SliceFeatures> SliceFeaturesVector;
310  typedef std::pair<unsigned int, float> UintFloatPair;
311  typedef std::unordered_map<const pandora::MCParticle*, int> MCParticleToIntMap;
312 
313  pandora::StatusCode Initialize();
314 
323  void GetSliceFeatures(const BdtBeamParticleIdTool *const pTool, const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, SliceFeaturesVector &sliceFeaturesVector) const;
324 
332  void SelectAllPfos(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &hypotheses, pandora::PfoList &selectedPfos) const;
333 
340  void SelectPfos(const pandora::PfoList &pfos, pandora::PfoList &selectedPfos) const;
341 
350  void GetBestMCSliceIndices(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, pandora::IntVector &bestSliceIndices) const;
351 
358  void PopulateMCParticleToHitsMap(MCParticleToIntMap &mcParticleToIntMap, const pandora::CaloHitList &caloHitList) const;
359 
367  void Collect2DHits(const pandora::PfoList &pfos, pandora::CaloHitList &caloHitList, const pandora::CaloHitSet &reconstructableCaloHitSet) const;
368 
377  bool PassesQualityCuts(const float purity, const float completeness) const;
378 
388  void SelectPfosByAdaBDTScore(const pandora::Algorithm *const pAlgorithm, const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, const SliceFeaturesVector &sliceFeaturesVector, pandora::PfoList &selectedPfos) const;
389 
390  pandora::StatusCode ReadSettings(const pandora::TiXmlHandle xmlHandle);
391 
392  // Training
394  std::string m_trainingOutputFile;
395  std::string m_caloHitListName;
396  std::string m_mcParticleListName;
397  float m_minPurity;
399 
400  // Classification
403  unsigned int m_maxNeutrinos;
406 };
407 
408 //------------------------------------------------------------------------------------------------------------------------------------------
409 
410 inline void BdtBeamParticleIdTool::SliceFeatureParameters::SetBeamLArTPCIntersection(const pandora::CartesianVector &beamLArTPCIntersection)
411 {
412  m_beamLArTPCIntersection = beamLArTPCIntersection;
413 }
414 
415 //------------------------------------------------------------------------------------------------------------------------------------------
416 
417 inline void BdtBeamParticleIdTool::SliceFeatureParameters::SetBeamDirection(const pandora::CartesianVector &beamDirection)
418 {
419  m_beamDirection = beamDirection;
420 }
421 
422 //------------------------------------------------------------------------------------------------------------------------------------------
423 
425 {
426  m_selectedFraction = selectedFraction;
427 }
428 
429 //------------------------------------------------------------------------------------------------------------------------------------------
430 
431 inline void BdtBeamParticleIdTool::SliceFeatureParameters::SetNSelectedHits(const unsigned int nSelectedHits)
432 {
433  m_nSelectedHits = nSelectedHits;
434 }
435 
436 //------------------------------------------------------------------------------------------------------------------------------------------
437 
439 {
440  m_containmentLimit = containmentLimit;
441 }
442 
443 //------------------------------------------------------------------------------------------------------------------------------------------
444 
446 {
447  return m_larTPCMinX;
448 }
449 
450 //------------------------------------------------------------------------------------------------------------------------------------------
451 
453 {
454  return m_larTPCMaxX;
455 }
456 
457 //------------------------------------------------------------------------------------------------------------------------------------------
458 
460 {
461  return m_larTPCMinY;
462 }
463 
464 //------------------------------------------------------------------------------------------------------------------------------------------
465 
467 {
468  return m_larTPCMaxY;
469 }
470 
471 //------------------------------------------------------------------------------------------------------------------------------------------
472 
474 {
475  return m_larTPCMinZ;
476 }
477 
478 //------------------------------------------------------------------------------------------------------------------------------------------
479 
481 {
482  return m_larTPCMaxZ;
483 }
484 
485 //------------------------------------------------------------------------------------------------------------------------------------------
486 
488 {
489  return m_larTPCPlanes;
490 }
491 
492 //------------------------------------------------------------------------------------------------------------------------------------------
493 
495 {
496  return m_beamLArTPCIntersection;
497 }
498 
499 //------------------------------------------------------------------------------------------------------------------------------------------
500 
501 inline const pandora::CartesianVector &BdtBeamParticleIdTool::SliceFeatureParameters::GetBeamDirection() const
502 {
503  return m_beamDirection;
504 }
505 
506 //------------------------------------------------------------------------------------------------------------------------------------------
507 
509 {
510  return m_selectedFraction;
511 }
512 
513 //------------------------------------------------------------------------------------------------------------------------------------------
514 
516 {
517  return m_nSelectedHits;
518 }
519 
520 //------------------------------------------------------------------------------------------------------------------------------------------
521 
523 {
524  return m_containmentLimit;
525 }
526 
527 //------------------------------------------------------------------------------------------------------------------------------------------
528 
530 {
531  return m_isAvailable;
532 }
533 
534 } // namespace lar_content
535 
536 #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.
const SliceFeatureParameters m_sliceFeatureParameters
Geometry information block.
MvaTypes::MvaFeatureVector MvaFeatureVector
Definition: LArMvaHelper.h:58
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.
const BdtBeamParticleIdTool * m_pTool
The tool that owns this.
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.
std::vector< pandora::PfoList > SliceHypotheses
BdtBeamParticleIdTool & operator=(const BdtBeamParticleIdTool &rhs)=default
Assignment operator.
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.
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.
float m_larTPCMinX
Global LArTPC volume minimum x extent.
SliceIdBaseTool class.
std::unordered_map< const pandora::MCParticle *, int > MCParticleToIntMap
float m_larTPCMaxZ
Global LArTPC volume maximum z extent.
void GetSliceFeatures(const BdtBeamParticleIdTool *const pTool, const SliceHypotheses &nuSliceHypotheses, const SliceHypotheses &crSliceHypotheses, SliceFeaturesVector &sliceFeaturesVector) const
Get the features of each slice.
pandora::CartesianVector m_point
A point on the plane.
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.
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.