20 #ifndef PNDSTTHITCORRECTOR_H_ 21 #define PNDSTTHITCORRECTOR_H_ 35 : fVerbose(0), fHits(data->GetHits()), fStrawMap(data->GetStrawMap()), fGeometryMap(data->GetGeometryMap()), fMapTubeIdToHit(data->GetMapTubeIdToHit()),
36 fHitNeighbors(data->GetHitNeighborsWithoutSkewed()), fSeparations(data->GetSeparationsWithoutSkewed()), fMinIsochrone(0.1), fIsochroneEquality(0.8),
37 fDeltaDiff(TMath::DegToRad() * 20), fMaxDiffBetweenAngles(TMath::DegToRad() * 15)
42 for (std::map<int, FairHit *>::iterator it = fCorrectedIsochrones.begin(); it != fCorrectedIsochrones.end(); ++it) {
59 std::vector<FairHit *> fHits;
62 std::map<int, int> fMapTubeIdToHit;
63 std::map<int, std::vector<int>> fHitNeighbors;
64 std::map<int, std::vector<int>> fSeparations;
66 std::map<int, std::set<double>> fTangentAngles;
67 std::map<int, FairHit *> fCorrectedIsochrones;
70 double fIsochroneEquality;
72 double fMaxDiffBetweenAngles;
80 int GetMiddleHitNeighbor(
int tubeID);
83 std::pair<int, int> GetStraightNeighbors(
int tubeID);
88 std::set<double> GetBestCombinatedPhi(
const std::vector<std::vector<double>> &angles);
92 void CalcDifferencesBetweenAngles(
const std::vector<std::vector<double>> &angles, std::vector<std::vector<std::vector<double>>> &retDifferences,
93 std::vector<std::vector<double>> &retSmallestDiff, std::vector<std::vector<std::pair<int, int>>> &retPairsOfSmallest);
98 std::vector<std::vector<double>> CalcClassification(
const std::vector<std::vector<double>> &smallestDiff);
100 std::vector<std::vector<double>> CalcClassification(
const std::vector<std::vector<std::vector<double>>> &differences);
103 void CorrectIsochrones();
105 void KeepBestAngle(
int tubeID,
double angle);
107 double GetDiffBetweenAngles(
double angle1,
double angle2);
109 double GetAverageOfAngles(
double angle1,
double angle2);
111 double GetBestFittingAngle(
double angle, std::set<double> anglesToTest);
114 bool AreHitNeihbors(
int tubeID1,
int tubeID2);
117 bool HasUnambiguousAngle(
int tubeID);
virtual ~PndSttHitCorrector()
std::map< int, FairHit * > GetCorrectedHits()
void SetVerbose(Int_t verbose)
void PrintTangentAngles()
PndSttHitCorrector(const PndSttCellTrackFinderData *data)