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  virtual ~PndHoughUtilities(){};
46 
48  std::vector<double> getCircleFromPndTrack(PndTrack &tr);
50  double Pt(double B, double r);
52  std::tuple<TVector3, Int_t> getPandqforHit(int i, double B, TVector3 &circle, PndTrackCand &myCand);
54  FairTrackParP getTrackParPForHit(Int_t i, Double_t B, PndTrackCand &myCand, TVector3 &circle);
56  PndTrack getPndTrack(Double_t B, PndTrackCand &myCand, TVector3 &circle);
57 
59  TVector2 calcPointOnCircle(Int_t i, PndTrackCand &myCand, std::vector<double> &circle);
61  TVector2 findCorrectIntersectionPoint(std::vector<double> &intersectionPoints, TVector2 &point);
63  std::vector<double> calcIntersectionPointCircleLine(std::vector<double> &circle, double m, double b, double Ax);
64 
66  double calcDistanceTrackCandToTrack(PndTrackCand &trackCand, std::vector<double> &circle);
68  double calcDistanceFromIsochroneToCircle(double &xi, double &yi, double &ri, double &xT, double &yT, double &rT);
69 
70  private:
71  FairRootManager *ioman = nullptr;
72 
73  std::map<FairLink, FairHit *> fMapFairLinktoFairHit;
74  std::map<FairLink, double> fMapFairLinktoIsochrone;
75 
76  ClassDef(PndHoughUtilities, 1);
77 };
78 
79 #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.