29 #ifndef CALOHITRANGESEARCHHELPER_H
30 #define CALOHITRANGESEARCHHELPER_H
32 #include "Pandora/PandoraInternal.h"
33 #include "Pandora/StatusCodes.h"
39 #include <mlpack/core.hpp>
40 #include <mlpack/core/math/range.hpp>
41 #include <mlpack/methods/range_search/range_search.hpp>
43 #include <mlpack/namespace_compat.hpp>
45 namespace pandora {
class Algorithm;
class CaloHit;
class Track; }
47 namespace april_content
49 typedef mlpack::range::RangeSearch<CaloMetric, arma::mat, mlpack::tree::MeanSplitBallTree> CaloRangeSearch;
58 static pandora::StatusCode FillMatixByPoints(
const std::vector<pandora::CartesianVector>& points, arma::mat& caloHitsMatrix);
60 static pandora::StatusCode BuildRangeSearch(
const pandora::CaloHitList *
const pCaloHitList);
62 static pandora::StatusCode BuildHitCollectionOfLayers(
const pandora::CaloHitList *
const pCaloHitList);
64 static pandora::StatusCode BuildHitCollectionOfEcalLayers(
const pandora::CaloHitList *
const pEcalCaloHitList);
66 static pandora::StatusCode BuildHitCollectionOfHcalLayers(
const pandora::CaloHitList *
const pHcalCaloHitList);
68 static pandora::StatusCode BuildHitCollectionOfMuonLayers(
const pandora::CaloHitList *
const pMuonCaloHitList);
70 static pandora::StatusCode BuildCaloRangeSearch(
const pandora::CaloHitVector& caloHitVector);
74 static pandora::StatusCode SearchNeighbourHitsInRange(pandora::CartesianVector testPosition,
float distance, pandora::CaloHitList& hitsInRange);
76 static pandora::StatusCode SearchHitsInLayer(pandora::CartesianVector testPosition,
int pseudoLayer,
77 float distance, pandora::CaloHitList& hitsInRange);
79 static pandora::StatusCode SearchEcalHitsInLayer(pandora::CartesianVector testPosition,
int pseudoLayer,
80 float distance, pandora::CaloHitList& hitsInRange);
82 static pandora::StatusCode SearchHcalHitsInLayer(pandora::CartesianVector testPosition,
int pseudoLayer,
83 float distance, pandora::CaloHitList& hitsInRange);
85 static pandora::StatusCode SearchMuonHitsInLayer(pandora::CartesianVector testPosition,
int pseudoLayer,
86 float distance, pandora::CaloHitList& hitsInRange);
88 static pandora::StatusCode SearchHitsInRange4D(
const pandora::CaloHitVector& caloHitVector,
const std::vector<float>& testPosition,
89 float distance, pandora::CaloHitList& hitsInRange);
91 static pandora::OrderedCaloHitList* GetOrderedCaloHitList() {
return &m_orderedCaloHitList; }
92 static pandora::OrderedCaloHitList* GetOrderedEcalCaloHitList() {
return &m_orderedEcalCaloHitList; }
93 static pandora::OrderedCaloHitList* GetOrderedHcalCaloHitList() {
return &m_orderedHcalCaloHitList; }
94 static pandora::OrderedCaloHitList* GetOrderedMuonCaloHitList() {
return &m_orderedMuonCaloHitList; }
98 static double m_fFillingTime;
99 static double m_fGetttingTime;
101 static pandora::OrderedCaloHitList m_orderedCaloHitList;
102 static pandora::OrderedCaloHitList m_orderedEcalCaloHitList;
103 static pandora::OrderedCaloHitList m_orderedHcalCaloHitList;
104 static pandora::OrderedCaloHitList m_orderedMuonCaloHitList;
107 static arma::mat m_caloHitsMatrix;
109 static pandora::StatusCode FillMatixFromCaloHits(
const pandora::CaloHitVector& caloHitVector, arma::mat& caloHitsMatrix);
110 static pandora::StatusCode FillMatix4DFromCaloHits(
const pandora::CaloHitVector& caloHitVector, arma::mat& caloHitsMatrix4D);
113 static const pandora::CaloHitList* m_pCaloHitList;
116 static const pandora::CaloHitList* m_pCaloHitListOfLayers;
119 static const pandora::CaloHitList* m_pEcalCaloHitListOfLayers;
122 static const pandora::CaloHitList* m_pHcalCaloHitListOfLayers;
125 static const pandora::CaloHitList* m_pMuonCaloHitListOfLayers;
128 static pandora::CaloHitVector m_caloHitVector;
130 static std::vector<pandora::CaloHitVector> m_caloHitVectorOfLayers;
131 static std::vector<pandora::CaloHitVector> m_ecalCaloHitVectorOfLayers;
132 static std::vector<pandora::CaloHitVector> m_hcalCaloHitVectorOfLayers;
133 static std::vector<pandora::CaloHitVector> m_muonCaloHitVectorOfLayers;
135 static mlpack::range::RangeSearch<> m_rangeSearch;
136 static CaloRangeSearch m_caloRangeSearch;
138 static std::vector< mlpack::range::RangeSearch<> > m_rangeSearchOfLayers;
139 static std::vector< mlpack::range::RangeSearch<> > m_ecalRangeSearchOfLayers;
140 static std::vector< mlpack::range::RangeSearch<> > m_hcalRangeSearchOfLayers;
141 static std::vector< mlpack::range::RangeSearch<> > m_muonRangeSearchOfLayers;
144 static pandora::StatusCode BuildOrderedHitsAndSearchRange(
const pandora::CaloHitList *
const pCaloHitList,
145 pandora::OrderedCaloHitList& orderedCaloHitList, std::vector<pandora::CaloHitVector>& caloHitVectorOfLayers,
146 std::vector< mlpack::range::RangeSearch<> >& rangeSearchOfLayers);
148 static pandora::StatusCode BuildHitCollectionForSearching(
149 const pandora::CaloHitList *
const pCaloHitList,
150 const pandora::CaloHitList*& pCaloHitListOfLayers,
151 pandora::OrderedCaloHitList& orderedCaloHitList,
152 std::vector<pandora::CaloHitVector>& caloHitVectorOfLayers,
153 std::vector< mlpack::range::RangeSearch<> >& rangeSearchOfLayers);
155 static pandora::StatusCode SearchHitsInRange(mlpack::range::RangeSearch<>& rangeSearch, pandora::CaloHitVector& caloHitVector,
156 pandora::CartesianVector testPosition,
float distance, pandora::CaloHitList& hitsInRange);
CaloHitRangeSearchHelper class.
Definition: CaloHitRangeSearchHelper.h:54