LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
PrincipalComponentsAlg.h
Go to the documentation of this file.
1 
8 #ifndef PrincipalComponentsAlg_h
9 #define PrincipalComponentsAlg_h
10 
11 // Framework Includes
12 #include "fhiclcpp/ParameterSet.h"
13 
14 // LArSoft includes
17 
18 // Algorithm includes
20 
21 // Eigen
22 #include <Eigen/Dense>
23 
24 // std includes
25 #include <string>
26 #include <functional>
27 #include <iostream>
28 #include <memory>
29 
30 
31 //------------------------------------------------------------------------------------------------------------------------------------------
32 
33 namespace lar_cluster3d
34 {
35 
40 {
41 public:
48 
52  virtual ~PrincipalComponentsAlg();
53 
57  void reconfigure(fhicl::ParameterSet const &pset);
58 
62  void PCAAnalysis(const reco::HitPairListPtr& hitPairVector, reco::PrincipalComponents& pca, float doca3DScl = 3.) const;
63 
64  void PCAAnalysis_3D(const reco::HitPairListPtr& hitPairList, reco::PrincipalComponents& pca, bool skeletonOnly = false) const;
65 
66  void PCAAnalysis_2D(const reco::HitPairListPtr& hitPairVector, reco::PrincipalComponents& pca, bool updateAvePos = false) const;
67 
68  void PCAAnalysis_calc3DDocas(const reco::HitPairListPtr& hitPairVector, const reco::PrincipalComponents& pca) const;
69 
70  void PCAAnalysis_calc2DDocas(const reco::Hit2DListPtr& hit2DVector, const reco::PrincipalComponents& pca) const;
71 
72  int PCAAnalysis_reject2DOutliers(const reco::HitPairListPtr& hitPairVector, reco::PrincipalComponents& pca, float aveHitDoca) const;
73 
74  int PCAAnalysis_reject3DOutliers(const reco::HitPairListPtr& hitPairVector, const reco::PrincipalComponents& pca, float aveHitDoca) const;
75 
76 
77 
78 private:
82  void getHit2DPocaToAxis(const Eigen::Vector3f& axisPos,
83  const Eigen::Vector3f& axisDir,
84  const reco::ClusterHit2D* hit2D,
85  Eigen::Vector3f& poca,
86  float& arcLenAxis,
87  float& arcLenWire,
88  float& doca);
89 
90  float m_parallel;
91 
92  geo::Geometry* m_geometry; // pointer to the Geometry service
93  const detinfo::DetectorProperties* m_detector; // Pointer to the detector properties
94 };
95 
96 } // namespace lar_cluster3d
97 #endif
float m_parallel
means lines are parallel
void PCAAnalysis_2D(const reco::HitPairListPtr &hitPairVector, reco::PrincipalComponents &pca, bool updateAvePos=false) const
std::list< const reco::ClusterHit2D * > Hit2DListPtr
export some data structure definitions
Definition: Cluster3D.h:314
void PCAAnalysis_calc3DDocas(const reco::HitPairListPtr &hitPairVector, const reco::PrincipalComponents &pca) const
int PCAAnalysis_reject3DOutliers(const reco::HitPairListPtr &hitPairVector, const reco::PrincipalComponents &pca, float aveHitDoca) const
void PCAAnalysis_3D(const reco::HitPairListPtr &hitPairList, reco::PrincipalComponents &pca, bool skeletonOnly=false) const
PrincipalComponentsAlg(fhicl::ParameterSet const &pset)
Constructor.
void reconfigure(fhicl::ParameterSet const &pset)
a handler for the case where the algorithm control parameters are to be reset
int PCAAnalysis_reject2DOutliers(const reco::HitPairListPtr &hitPairVector, reco::PrincipalComponents &pca, float aveHitDoca) const
std::list< const reco::ClusterHit3D * > HitPairListPtr
Definition: Cluster3D.h:315
The geometry of one entire detector, as served by art.
Definition: Geometry.h:110
void getHit2DPocaToAxis(const Eigen::Vector3f &axisPos, const Eigen::Vector3f &axisDir, const reco::ClusterHit2D *hit2D, Eigen::Vector3f &poca, float &arcLenAxis, float &arcLenWire, float &doca)
This is used to get the poca, doca and arclen along cluster axis to 2D hit.
void PCAAnalysis_calc2DDocas(const reco::Hit2DListPtr &hit2DVector, const reco::PrincipalComponents &pca) const
const detinfo::DetectorProperties * m_detector
art framework interface to geometry description
void PCAAnalysis(const reco::HitPairListPtr &hitPairVector, reco::PrincipalComponents &pca, float doca3DScl=3.) const
Run the Principal Components Analysis.