PandaRoot
PndHoughUtilities.h
Go to the documentation of this file.
1 // PndHoughUtilities
3 // This class contains different methods to handle PndTracks vs Circles
5 
16 #ifndef PndHoughUtilities_H_
17 #define PndHoughUtilities_H_
18 #include "FairTask.h"
19 #include "FairRootManager.h"
20 //#include "PndGeoSttPar.h"
21 //#include "PndSttGeometryMap.h"
22 //#include "PndSttStrawMap.h"
23 //#include "PndSttCellTrackFinder.h"
24 #include "PndSttHit.h"
25 #include "PndMCTrack.h"
26 
27 //#include "TEllipse.h"
28 #include "TH2F.h"
29 #include "TGraph.h"
30 //#include "TCanvas.h" // DRAW
31 
32 #include <vector>
33 #include <tuple>
34 //#include "TDatabasePDG.h"
35 #include "PndHoughData.h"
36 
38 
39  public:
40  PndHoughUtilities(PndHoughData *fData) : fMapFairLinktoFairHit(fData->GetMapFairLinktoFairHit()), fMapFairLinktoIsochrone(fData->GetMapFairLinktoIsochrone())
41  {
42  ioman = FairRootManager::Instance();
43  };
44 
45  PndHoughUtilities() { ioman = FairRootManager::Instance(); };
46 
47  virtual ~PndHoughUtilities(){};
48 
50  std::vector<double> getCircleFromPndTrack(PndTrack &tr);
52  double Pt(double B, double r);
54  std::tuple<TVector3, Int_t> getPandqforHit(int i, double B, TVector3 &circle, PndTrackCand &myCand);
56  FairTrackParP getTrackParPForHit(Int_t i, Double_t B, PndTrackCand &myCand, TVector3 &circle);
58  PndTrack getPndTrack(Double_t B, PndTrackCand &myCand, TVector3 &circle);
59 
61  TVector2 calcPointOnCircle(Int_t i, PndTrackCand &myCand, std::vector<double> &circle);
63  TVector2 findCorrectIntersectionPoint(std::vector<double> &intersectionPoints, TVector2 &point);
65  std::vector<double> calcIntersectionPointCircleLine(std::vector<double> &circle, double m, double b, double Ax);
66 
68  double calcDistanceTrackCandToTrack(PndTrackCand &trackCand, std::vector<double> &circle);
70  double calcDistanceFromIsochroneToCircle(double &xi, double &yi, double &ri, double &xT, double &yT, double &rT);
71 
72  private:
73  FairRootManager *ioman = nullptr;
74 
75  std::map<FairLink, FairHit *> fMapFairLinktoFairHit;
76  std::map<FairLink, double> fMapFairLinktoIsochrone;
77 
78  ClassDef(PndHoughUtilities, 1);
79 };
80 
81 #endif /*PndHoughUtilities_H_*/
std::vector< double > calcIntersectionPointCircleLine(std::vector< double > &circle, double m, double b, double Ax)
Finds the intersection point between a line and a circle.
__m128 m
Definition: P4_F32vec4.h:26
double Pt(double B, double r)
Determines the transverse momentum.
unsigned int i
Definition: P4_F32vec4.h:21
PndHoughUtilities(PndHoughData *fData)
std::vector< double > getCircleFromPndTrack(PndTrack &tr)
Determines the circle from a PndTrack.
PndTrack getPndTrack(Double_t B, PndTrackCand &myCand, TVector3 &circle)
Determined the PndTrack for a given track candidate and a circle.
std::tuple< TVector3, Int_t > getPandqforHit(int i, double B, TVector3 &circle, PndTrackCand &myCand)
Determines the charge q and the momentum p of a hit.
virtual ~PndHoughUtilities()
TVector2 findCorrectIntersectionPoint(std::vector< double > &intersectionPoints, TVector2 &point)
Finds the correct intersection point.
FairTrackParP getTrackParPForHit(Int_t i, Double_t B, PndTrackCand &myCand, TVector3 &circle)
Helper function to find PndTrack parameters from a circle.
double calcDistanceFromIsochroneToCircle(double &xi, double &yi, double &ri, double &xT, double &yT, double &rT)
Calculates the distance from a hitpoint (MVD hit or nearest point of stt isochrone to track) to a cir...
TVector2 calcPointOnCircle(Int_t i, PndTrackCand &myCand, std::vector< double > &circle)
Finds the point on a circle closest to the given hit point.
double calcDistanceTrackCandToTrack(PndTrackCand &trackCand, std::vector< double > &circle)
Calculates the sum of distances from each hit of a track to the track circle.