FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PndTrkTrack Class Reference

#include <PndTrkTrack.h>

Inheritance diagram for PndTrkTrack:

Public Member Functions

 PndTrkTrack ()
 
 PndTrkTrack (PndTrkCluster *cluster)
 
 PndTrkTrack (PndTrkCluster *cluster, double x, double y, double radius)
 
 PndTrkTrack (PndTrkHit *hit, PndTrkCluster *cluster, double x, double y, double radius)
 
 PndTrkTrack (double x, double y, double radius)
 
 PndTrkTrack (PndTrack *trk)
 
 PndTrkTrack (const PndTrkTrack &track)
 
 ~PndTrkTrack ()
 
PndTrkTrackoperator= (const PndTrkTrack &track)
 
Bool_t operator== (PndTrkTrack track)
 
void SetRadius (double radius)
 
void SetCenter (double x, double y)
 
void SetCenter (TVector3 center)
 
void SetTanL (double tanl)
 
void SetZ0 (double z0)
 
void SetCluster (PndTrkCluster *cluster)
 
void SetRefHit (PndTrkHit *hit)
 
Double_t GetRadius ()
 
TVector2 GetCenter ()
 
Double_t GetTanL ()
 
Double_t GetZ0 ()
 
PndTrkCluster GetCluster ()
 
Double_t ComputePhi (TVector3 hit)
 
Double_t ComputePhiFrom (TVector3 hit, TVector3 from)
 
TVector3 ComputeMomentumAtPosition (TVector3 position, TVector3 &newposition)
 
void ComputeCharge ()
 
PndTrackCand ConvertToPndTrackCand ()
 
PndTrack ConvertToPndTrack ()
 
Int_t GetCharge ()
 
void Draw (Color_t color=kBlack)
 
void LightUp ()
 
void Clear (Option_t *opt="")
 

Protected Member Functions

 ClassDef (PndTrkTrack, 1)
 

Protected Attributes

PndTrkCluster fCluster
 
PndTrkHitfRefHit
 
double fCenterX
 
double fCenterY
 
double fRadius
 
double fTanL
 
double fZ0
 
int fCharge
 
double fPhiMin
 
double fPhiMax
 

Detailed Description

PndTrkTrack

Author
Lia Lavezzi

Definition at line 17 of file PndTrkTrack.h.

Constructor & Destructor Documentation

PndTrkTrack::PndTrkTrack ( )

Definition at line 17 of file PndTrkTrack.cxx.

17 : fCluster(PndTrkCluster()), fRefHit(NULL), fCenterX(0), fCenterY(0), fRadius(0), fTanL(0), fZ0(0), fCharge(0), fPhiMin(0), fPhiMax(360) {}
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
double fZ0
Definition: PndTrkTrack.h:68
double fCenterY
Definition: PndTrkTrack.h:68
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrkTrack::PndTrkTrack ( PndTrkCluster cluster)

Definition at line 19 of file PndTrkTrack.cxx.

19 : fCluster(*cluster), fRefHit(NULL), fCenterX(0), fCenterY(0), fRadius(0), fTanL(0), fZ0(0), fCharge(0), fPhiMin(0), fPhiMax(360){}
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
double fZ0
Definition: PndTrkTrack.h:68
double fCenterY
Definition: PndTrkTrack.h:68
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrkTrack::PndTrkTrack ( PndTrkCluster cluster,
double  x,
double  y,
double  radius 
)

Definition at line 21 of file PndTrkTrack.cxx.

21 : fCluster(*cluster), fRefHit(NULL), fCenterX(x), fCenterY(y), fRadius(radius), fTanL(0), fZ0(0), fCharge(0) , fPhiMin(0), fPhiMax(360){}
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
double fZ0
Definition: PndTrkTrack.h:68
double fCenterY
Definition: PndTrkTrack.h:68
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
Double_t x
Double_t y
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrkTrack::PndTrkTrack ( PndTrkHit hit,
PndTrkCluster cluster,
double  x,
double  y,
double  radius 
)

Definition at line 23 of file PndTrkTrack.cxx.

23 : fCluster(*cluster), fRefHit(hit), fCenterX(x), fCenterY(y), fRadius(radius), fTanL(0), fZ0(0), fCharge(0), fPhiMin(0), fPhiMax(360) {}
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
double fZ0
Definition: PndTrkTrack.h:68
double fCenterY
Definition: PndTrkTrack.h:68
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
Double_t x
Double_t y
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrkTrack::PndTrkTrack ( double  x,
double  y,
double  radius 
)

Definition at line 25 of file PndTrkTrack.cxx.

25 : fCluster(PndTrkCluster()), fRefHit(NULL), fCenterX(x), fCenterY(y), fRadius(radius), fTanL(0), fZ0(0), fCharge(0), fPhiMin(0), fPhiMax(360) {}
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
double fZ0
Definition: PndTrkTrack.h:68
double fCenterY
Definition: PndTrkTrack.h:68
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
Double_t x
Double_t y
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrkTrack::PndTrkTrack ( PndTrack trk)

Definition at line 28 of file PndTrkTrack.cxx.

References ComputePhi(), Double_t, fCenterX, fCenterY, fCharge, fPhiMax, fPhiMin, fRadius, fTanL, fZ0, PndTrack::GetParamFirst(), PndTrack::GetParamLast(), and pt().

28  : fCluster(PndTrkCluster()), fRefHit(NULL), fCenterX(0), fCenterY(0), fRadius(0), fTanL(0), fZ0(0), fCharge(0), fPhiMin(0), fPhiMax(360){
29 
30  TVector3 momentum = trk->GetParamFirst().GetMomentum();
31  TVector3 position = trk->GetParamFirst().GetPosition();
32 
33  fCharge = TMath::Sign(1., trk->GetParamFirst().GetQp());
34 
35  Double_t pl = trk->GetParamFirst().GetMomentum().Z();
36  Double_t pt = trk->GetParamFirst().GetMomentum().Perp();
37  fRadius = pt/0.006;
38  fTanL = pl/pt;
39 
40  TVector2 radius = momentum.XYvector();
41  radius = radius.Unit();
42  double rotx = radius.X();
43  double roty = radius.Y();
44  TVector2 myrad(fCharge * roty, - fCharge * rotx);
45  myrad *= fRadius;
46 
47  TVector2 center = myrad + position.XYvector();
48  fCenterX = center.X();
49  fCenterY = center.Y();
50 
51  fZ0 = 0; // CHECK
52 
53  // ----------------------------------------------
54  // cluster? // CHECK
55 
56 
57 
58 
59  fPhiMin = ComputePhi(trk->GetParamFirst().GetPosition());
60  if(fPhiMin > 180) fPhiMin -= 360;
61 
62  fPhiMax = ComputePhi(trk->GetParamLast().GetPosition());
63  if(fPhiMax > 180) fPhiMax -= 360;
64 
65  if(fCharge > 0 && fPhiMin < fPhiMax) fPhiMin += 360;
66  else if(fCharge < 0 && fPhiMin > fPhiMax) fPhiMax += 360;
67 
68 
69 }
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
double fZ0
Definition: PndTrkTrack.h:68
TString pt(TString pts, TString exts="px py pz")
Definition: invexp.C:133
Double_t ComputePhi(TVector3 hit)
double fCenterY
Definition: PndTrkTrack.h:68
Double_t
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrkTrack::PndTrkTrack ( const PndTrkTrack track)

Definition at line 71 of file PndTrkTrack.cxx.

References track.

71  : TObject(track), fCluster(PndTrkCluster()), fRefHit(NULL), fCenterX(0), fCenterY(0), fRadius(0), fTanL(0), fZ0(0), fCharge(0), fPhiMin(0), fPhiMax(360) {
72  *this = track;
73 }
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
double fZ0
Definition: PndTrkTrack.h:68
double fCenterY
Definition: PndTrkTrack.h:68
PndMCTrack * track
Definition: anaLmdCluster.C:89
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrkTrack::~PndTrkTrack ( )

Definition at line 76 of file PndTrkTrack.cxx.

References fRefHit.

76  {
77  delete fRefHit;
78 
79 }
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67

Member Function Documentation

PndTrkTrack::ClassDef ( PndTrkTrack  ,
 
)
protected
void PndTrkTrack::Clear ( Option_t *  opt = "")

Definition at line 102 of file PndTrkTrack.cxx.

References PndTrkCluster::Clear(), fCluster, and fRefHit.

102  {
103  delete fRefHit;
104  fCluster.Clear(opt);
105 }
void Clear(Option_t *="")
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
void PndTrkTrack::ComputeCharge ( )

consider the centers Int_t nleft, nright = 0;

first PndTrkHit *hit1 = fCluster.GetHit(0); last PndTrkHit *hit2 = fCluster.GetHit(fCluster->GetNofHits() - 1);

vector from 1st to last hit TVector3 firsttolast = hit2->GetPosition() - hit1->GetPosition();

for(int ihit = 1; ihit < fCluster.GetNofHits() - 1; ihit++) { PndTrkHit *hit = fCluster.GetHit(ihit);

vector from 1st to this hit TVector3 position = hit->GetPosition() - hit1->GetPosition();

double crossz = position.Cross(firsttolast).Z();

if crossz > 0 hits stays 'on the right' (counterclockwise) –> negative otherwise it stays 'on the left' (clockwise) –> positive if (crossz > 0.) nright++; else nleft++; }

if(nright > nleft) fCharge = -1; else fCharge = 1;

first PndTrkHit hit1 = (PndTrkHit) fCluster.GetHit(0); TVector3 pos1 = hit1->GetPosition(); last PndTrkHit hit2 = (PndTrkHit) fCluster.GetHit(fCluster.GetNofHits() - 1); TVector3 pos2 = hit2->GetPosition();

double m = (pos2.Y() - pos1.Y())/(pos2.X() - pos1.X()); double q = pos1.Y() - m + pos1.X();

TVector3 posbar(0.5 * (pos1.X() + pos2.X()), 0.5 * (pos1.Y() + pos2.Y()));

double mortho = -1./m; double qortho = posbar.Y() - mortho * posbar.X();

solve the system (x - xc)**2 + (y - yc)**2 = R**2 y = mortho * x + qortho and find xI xII double alpha = 1 + mortho * mortho; double beta = mortho * (qortho - fCenterY) - fCenterX; double gamma = fCenterX * fCenterX + (qortho - fCenterY) * (qortho - fCenterY) - fRadius * fRadius;

double xI = (-beta + TMath::Sqrt(beta * beta - alpha * gamma))/alpha; double yI = xI * mortho + qortho; double xII = (-beta - TMath::Sqrt(beta * beta - alpha * gamma))/alpha; double yII = xII * mortho + qortho;

mean hit int mean = (int) (fCluster.GetNofHits() * 0.5); PndTrkHit hit_mean = (PndTrkHit) fCluster.GetHit(mean); double distI = hit_mean->GetXYDistance(TVector3(xI, yI, 0.)); double distII = hit_mean->GetXYDistance(TVector3(xII, yII, 0.));

double x, y; if(distI < distII) { x = xI; y = yI; } else { x = xII; y = yII; }

translation x -= pos1.X(); y -= pos1.Y();

double delta = (pos2 - pos1).Phi(); double xrot = x * TMath::Cos(delta) + y * TMath::Sin(delta); double yrot = -x * TMath::Sin(delta) + y * TMath::Cos(delta);

cout << "x, y " << xrot << " " << yrot << endl;

Definition at line 171 of file PndTrkTrack.cxx.

References PndTrkTools::ComputePocaToPointOnCircle3(), fCenterX, fCenterY, fCharge, fCluster, fRadius, PndTrkCluster::GetHit(), PndTrkCluster::GetNofHits(), PndTrkHit::GetPosition(), hit, phi, and Pi.

Referenced by ConvertToPndTrack(), PndTrkLegendreSecTask::Exec(), PndTrkLegendreSecTask2::Exec(), PndTrkLegendreTask::Exec(), and PndTrkTrackFinder::Exec().

171  { // CHECK!!!
172 
202  // consider the poca on track
203  Int_t nmore = 0, nless = 0;
204 
205  // first
206  PndTrkHit *hit1 = (PndTrkHit*) fCluster.GetHit(0);
207  PndTrkTools tools;
208  TVector3 position1 = tools.ComputePocaToPointOnCircle3(hit1->GetPosition().X(), hit1->GetPosition().Y(), fCenterX, fCenterY, fRadius);
209 
210  // phi of first hit with respect to center of curvature
211  TVector3 direction1 = position1 - TVector3(fCenterX, fCenterY, 0);
212  double tmpphi = direction1.Phi();
213  //
214  if(direction1.Y()) tmpphi += 2 * TMath::Pi(); // CHECK
215 
216  for(int ihit = 1; ihit < fCluster.GetNofHits(); ihit++) {
217  PndTrkHit *hit = fCluster.GetHit(ihit);
218  TVector3 position = tools.ComputePocaToPointOnCircle3(hit->GetPosition().X(), hit->GetPosition().Y(), fCenterX, fCenterY, fRadius);
219 
220  // vector from 1st to this hit
221  TVector3 direction = position - TVector3(fCenterX, fCenterY, 0);
222  double phi = direction.Phi();
223  if(ihit > 1) phi >= tmpphi ? nmore++ : nless++;
224  tmpphi = phi;
225  // cout << "phi " << phi * TMath::RadToDeg() << " " << hit->GetHitID() << " " << hit->GetDetectorID() << endl;
226  }
227 
228  if(nmore > nless) fCharge = -1;
229  else fCharge = 1;
230 
231  // cout << "fCharge " << fCharge << " " << nmore << " " << nless << endl;
232 
290 }
double fRadius
Definition: PndTrkTrack.h:68
PndTrkHit * GetHit(int index)
double fCenterY
Definition: PndTrkTrack.h:68
TVector3 GetPosition()
Definition: PndTrkHit.h:62
TVector3 ComputePocaToPointOnCircle3(double x, double y, double xc, double yc, double R)
Definition: PndTrkTools.cxx:52
PndSdsMCPoint * hit
Definition: anasim.C:70
Int_t GetNofHits()
Definition: PndTrkCluster.h:52
double fCenterX
Definition: PndTrkTrack.h:68
Double_t Pi
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
TVector3 PndTrkTrack::ComputeMomentumAtPosition ( TVector3  position,
TVector3 &  newposition 
)

Definition at line 293 of file PndTrkTrack.cxx.

References CAMath::Abs(), PndTrkTools::ComputePocaToPointOnCircle3(), Double_t, fCenterX, fCenterY, fCharge, fRadius, fTanL, pos, and pt().

Referenced by ConvertToPndTrack().

293  {
294  TVector3 momentum(-999, -999, -999);
295  newposition = position;
296  if(fCharge == 0) {
297  // cout << "ComputeMomentumAtPos: CHARGE = 0!" << endl;
298  return momentum;
299  }
300 
301  TVector2 center(fCenterX, fCenterY);
302  TVector2 pos = TVector2(position.X(), position.Y());
303  TVector2 myrad = center - pos;
304  double distance = TMath::Abs(myrad.Mod() - fRadius);
305  if(distance > 0.5) {
306  // cout << "ComputeMomentumAtPosition: POINT NOT ON THE TRACK " << distance << endl;
307  // return momentum; // CHECK
308  // alternative
309  // CHECK
310  PndTrkTools tools;
311  newposition = tools.ComputePocaToPointOnCircle3(pos.X(), pos.Y(), fCenterX, fCenterY, fRadius);
312  myrad = center - pos;
313  distance = TMath::Abs(myrad.Mod() - fRadius);
314  // if(distance > 0.5) {
315  // cout << "ComputeMomentumAtPosition: AGAIN POINT NOT ON THE TRACK " << distance << endl;
316  // return momentum;
317  // }
318  }
319 
320 
321  Double_t rotx, roty;
322  rotx = - fCharge * myrad.Y();
323  roty = fCharge * myrad.X();
324 
325 
326 // cout << "COMPUTE MOMENTUM " << fRadius << endl;
327  Double_t pt = 0.006 * fRadius;
328 
329 // cout << "pt " << pt << endl;
330  Double_t pl = -999;
331  if(fTanL != -999) pl = pt * fTanL;
332 // cout << "pl " << pl << " tanl " << fTanL << endl;
333 
334  //Double_t ptot = TMath::Sqrt(pt * pt + pl * pl); //[R.K. 01/2017] unused variable
335 
336 
337 // cout << rotx << " " << roty << endl;
338  momentum.SetX(rotx); // CHECK magnitude?
339  momentum.SetY(roty); // CHECK magnitude?
340  momentum.SetZ(0.); // CHECK magnitude?
341  // momentum.Print();
342  momentum.SetMag(pt);
343  // momentum.Print();
344  momentum.SetZ(pl);
345  // momentum.Print();
346  return momentum;
347 }
TVector3 pos
double fRadius
Definition: PndTrkTrack.h:68
TString pt(TString pts, TString exts="px py pz")
Definition: invexp.C:133
static T Abs(const T &x)
Definition: PndCAMath.h:39
double fCenterY
Definition: PndTrkTrack.h:68
Double_t
TVector3 ComputePocaToPointOnCircle3(double x, double y, double xc, double yc, double R)
Definition: PndTrkTools.cxx:52
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
Double_t PndTrkTrack::ComputePhi ( TVector3  hit)
 TVector3 center(fCenterX, fCenterY, 0.);
 TVector3 fromcentertohit = hit - center;

I want the positive phi angle from x axis in range [0, 360[. I use TVector3::Phi() [fromcentertohit.Phi()]:

x y Phi use!

  • + 0/90 phi
  • + 90/180 phi
  • - -180/-90 phi + 360
  • - -90/0 phi + 360 cout << "phi " << hit.X() << " " << hit.Y() << endl;
     double phi = fromcentertohit.Phi();
     if(fromcentertohit.Y() < 0) phi += (2 * TMath::Pi());
    
    cout << "final phi in rad " << phi << endl; return phi * TMath::RadToDeg();

Definition at line 349 of file PndTrkTrack.cxx.

References alpha, CAMath::ATan2(), CAMath::Cos(), d, Double_t, fCenterX, fCenterY, fCharge, fRadius, p, phi, Pi, pi, CAMath::Sin(), CAMath::Sqrt(), v, x0, and y0.

Referenced by PndTrkLegendreSecTask::CreateSkewHitList(), PndTrkLegendreTask::CreateSkewHitList(), PndTrkLegendreSecTask2::CreateSkewHitList(), PndTrkTrackFinder::CreateSkewHitList(), Draw(), PndTrkLegendreSecTask2::Exec(), PndTrkLegendreSecTask::Exec(), PndTrkLegendreTask::Exec(), PndTrkTrackFinder::Exec(), and PndTrkTrack().

350 {
372  // x0 y0
375 
376  Double_t x0 = d * TMath::Cos(phi);
377  Double_t y0 = d * TMath::Sin(phi);
378 
379  Double_t Phi0 = TMath::ATan2((y0 - fCenterY),(x0 - fCenterX));
380 
381  // CHECK :-)GOOD! ...
382  TVector2 v(x0 - fCenterX, y0 - fCenterY);
383  double alpha = TMath::ATan2(hit.Y() - y0 + fRadius * TMath::Sin(Phi0), hit.X() - x0 + fRadius * TMath::Cos(Phi0));
384  TVector2 p(hit.X() - fCenterX, hit.Y() - fCenterY);
385 
386  Double_t Fi = - fCharge * TMath::ACos(v * p / (v.Mod() * p.Mod()));
387  double pi = TMath::Pi();
388  double pi2 = 2 * pi;
389 
390  // Fi = h * (pi2 - h * Fi) // should be correct
391  if((fCharge > 0 && ((Phi0 > 0 && ((alpha > 0 && alpha > Phi0) ||
392  (alpha < 0 && alpha < Phi0 - pi)))
393  ||
394  ((Phi0 < 0 && ((alpha > 0 && alpha < pi + Phi0) ||
395  (alpha < 0 && alpha > Phi0)))) ))) Fi = - (pi2 + Fi) ;
396  else if((fCharge < 0 && ((Phi0 > 0 && ((alpha > 0 && alpha < Phi0) ||
397  (alpha < 0 && alpha > Phi0 - pi)))
398  ||
399  ((Phi0 < 0 && ((alpha > 0 && alpha > pi + Phi0) ||
400  (alpha < 0 && alpha < Phi0)))) ))) Fi = pi2 - Fi ;
401 
402  // cout << "PHI ----------------- " << Fi * TMath::RadToDeg() << endl;
403 
404  return (Phi0 + Fi) * TMath::RadToDeg();
405 
406 }
Double_t x0
Definition: checkhelixhit.C:70
Double_t p
Definition: anasim.C:58
TObjArray * d
double fRadius
Definition: PndTrkTrack.h:68
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
static T Sin(const T &x)
Definition: PndCAMath.h:42
#define pi
Definition: createSTT.C:60
static T Cos(const T &x)
Definition: PndCAMath.h:43
__m128 v
Definition: P4_F32vec4.h:4
double fCenterY
Definition: PndTrkTrack.h:68
Double_t
Double_t y0
Definition: checkhelixhit.C:71
static T ATan2(const T &y, const T &x)
PndSdsMCPoint * hit
Definition: anasim.C:70
double alpha
Definition: f_Init.h:9
double fCenterX
Definition: PndTrkTrack.h:68
Double_t Pi
Double_t PndTrkTrack::ComputePhiFrom ( TVector3  hit,
TVector3  from 
)

Definition at line 408 of file PndTrkTrack.cxx.

References alpha, CAMath::ATan2(), CAMath::Cos(), Double_t, fCenterX, fCenterY, fCharge, fRadius, phi, phi0, Pi, pi, CAMath::Sin(), x0, and y0.

Referenced by PndTrkTrackFinder::Exec().

409 {
410  // cout << "phi " << hit.X() << " " << hit.Y() << endl;
411 
412  TVector3 center(fCenterX, fCenterY, 0.);
413  TVector3 fromcentertofrom = from - center;
414  double phi0 = fromcentertofrom.Phi();
415 
416  double xtr = hit.X() - fCenterX;
417  double ytr = hit.Y() - fCenterY;
418  double xp = TMath::Cos(phi0) * xtr + TMath::Sin(phi0) * ytr;
419  double yp = -TMath::Sin(phi0) * xtr + TMath::Cos(phi0) * ytr;
420 
421  TVector3 trarothit = TVector3(xp, yp, 0.);
422 
423  // I want the positive phi angle from x axis
424  // in range [0, 360[.
425  // I use TVector3::Phi() [fromcentertohit.Phi()]:
426  // x y Phi use!
427  // -------------------------
428  // + + 0/90 phi
429  // - + 90/180 phi
430  // - - -180/-90 phi + 360
431  // + - -90/0 phi + 360
432 
433 
434  double phi = trarothit.Phi();
435  // if(trarothit.Y() < 0) phi += (2 * TMath::Pi());
436 
437  // cout << "final phi in rad " << phi << endl;
438  // return phi * TMath::RadToDeg();
439 
440  Double_t Phi0 = phi0;
441 
442  Double_t x0 = from.X();
443  Double_t y0 = from.Y();
444 
445 // Double_t Phi0 = TMath::ATan2((y0 - fCenterY),(x0 - fCenterX));
446 
447 // // CHECK :-)GOOD! ...
448 // TVector2 v(x0 - fCenterX, y0 - fCenterY);
449  double alpha = TMath::ATan2(hit.Y() - y0 + fRadius * TMath::Sin(Phi0), hit.X() - x0 + fRadius * TMath::Cos(Phi0));
450 // TVector2 p(hit.X() - fCenterX, hit.Y() - fCenterY);
451 
452 // Double_t Fi = - fCharge * TMath::ACos(v * p / (v.Mod() * p.Mod()));
453  double pi = TMath::Pi();
454  double pi2 = 2 * pi;
455 
456 // // Fi = h * (pi2 - h * Fi) // should be correct
457 
458  Double_t Fi = phi;
459  if((fCharge > 0 && ((Phi0 > 0 && ((alpha > 0 && alpha > Phi0) ||
460  (alpha < 0 && alpha < Phi0 - pi)))
461  ||
462  ((Phi0 < 0 && ((alpha > 0 && alpha < pi + Phi0) ||
463  (alpha < 0 && alpha > Phi0)))) ))) Fi = - (pi2 + Fi) ;
464  else if((fCharge < 0 && ((Phi0 > 0 && ((alpha > 0 && alpha < Phi0) ||
465  (alpha < 0 && alpha > Phi0 - pi)))
466  ||
467  ((Phi0 < 0 && ((alpha > 0 && alpha > pi + Phi0) ||
468  (alpha < 0 && alpha < Phi0)))) ))) Fi = pi2 - Fi ;
469 
470  // cout << "PHI ----------------- " << Fi * TMath::RadToDeg() << endl;
471 
472  return Fi * TMath::RadToDeg();
473 
474 
475 }
Double_t x0
Definition: checkhelixhit.C:70
double fRadius
Definition: PndTrkTrack.h:68
static T Sin(const T &x)
Definition: PndCAMath.h:42
#define pi
Definition: createSTT.C:60
static T Cos(const T &x)
Definition: PndCAMath.h:43
double fCenterY
Definition: PndTrkTrack.h:68
Double_t
Double_t phi0
Definition: checkhelixhit.C:60
Double_t y0
Definition: checkhelixhit.C:71
static T ATan2(const T &y, const T &x)
PndSdsMCPoint * hit
Definition: anasim.C:70
double alpha
Definition: f_Init.h:9
double fCenterX
Definition: PndTrkTrack.h:68
Double_t Pi
PndTrack PndTrkTrack::ConvertToPndTrack ( )

Definition at line 119 of file PndTrkTrack.cxx.

References ComputeCharge(), ComputeMomentumAtPosition(), ConvertToPndTrackCand(), fCharge, fCluster, PndTrkCluster::GetHit(), PndTrkCluster::GetNofHits(), PndTrkHit::GetPosition(), PndTrack::SetFlag(), and track.

Referenced by PndTrkTrackFinder::Exec(), PndTrkLegendreSecTask::RegisterTrack(), PndTrkLegendreTask::RegisterTrack(), and PndTrkLegendreSecTask2::RegisterTrack().

119  {
120 
121  ComputeCharge();
122 
123  // first
124  TVector3 pos1, mom1;
125  PndTrkHit *hit1 = fCluster.GetHit(0);
126  mom1 = ComputeMomentumAtPosition(hit1->GetPosition(), pos1);
127 
128  // last
129  TVector3 pos2, mom2;
131  mom2 = ComputeMomentumAtPosition(hit2->GetPosition(), pos2);
132 
133  TVector3 dj(1, 0, 0), dk(0, 0, 1); // CHECK
134  TVector3 dpos1(2., 2., 10.); // CHECK
135  TVector3 dpos2(2., 2., 10.); // CHECK
136  TVector3 dmom1(0.2, 0.2, 0.5); // CHECK
137  TVector3 dmom2(0.2, 0.2, 0.5); // CHECK
138 
139  FairTrackParP firstpar(pos1, mom1,
140  dpos1, dmom1, fCharge,
141  pos1, dj, dk);
142 
143  FairTrackParP lastpar(pos2, mom2,
144  dpos2, dmom2, fCharge,
145  pos2, dj, dk);
146 
148  PndTrack track(firstpar, lastpar, trkcand);
149  if(mom1.Z() == -999) track.SetFlag(-1);
150  return track;
151 }
PndTrackCand ConvertToPndTrackCand()
PndTrkHit * GetHit(int index)
void ComputeCharge()
TVector3 ComputeMomentumAtPosition(TVector3 position, TVector3 &newposition)
TVector3 GetPosition()
Definition: PndTrkHit.h:62
PndMCTrack * track
Definition: anaLmdCluster.C:89
Int_t GetNofHits()
Definition: PndTrkCluster.h:52
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrackCand PndTrkTrack::ConvertToPndTrackCand ( )

Definition at line 108 of file PndTrkTrack.cxx.

References PndTrackCand::AddHit(), fCluster, PndTrkHit::GetDetectorID(), PndTrkCluster::GetHit(), PndTrkHit::GetHitID(), PndTrkCluster::GetNofHits(), and hit.

Referenced by ConvertToPndTrack().

108  {
109  PndTrackCand trkcand;
110  for(int ihit = 0; ihit < fCluster.GetNofHits(); ihit++) {
111  PndTrkHit *hit = fCluster.GetHit(ihit);
112  int detid = hit->GetDetectorID();
113  int hitid = hit->GetHitID();
114  trkcand.AddHit(detid, hitid, ihit);
115  }
116  return trkcand;
117 }
PndTrkHit * GetHit(int index)
Int_t GetHitID()
Definition: PndTrkHit.h:56
void AddHit(UInt_t detId, UInt_t hitId, Double_t rho)
Int_t GetDetectorID()
Definition: PndTrkHit.h:57
PndSdsMCPoint * hit
Definition: anasim.C:70
Int_t GetNofHits()
Definition: PndTrkCluster.h:52
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
void PndTrkTrack::Draw ( Color_t  color = kBlack)

Definition at line 477 of file PndTrkTrack.cxx.

References ComputePhi(), fCenterX, fCenterY, fCharge, fCluster, fPhiMax, fPhiMin, fRadius, PndTrkCluster::GetHit(), PndTrkCluster::GetNofHits(), PndTrkHit::GetPosition(), and track.

Referenced by PndTrkCombiLegendreTask::CleanTrack(), PndTrkLegendreNew::CreateClusterAroundTrack(), PndTrkTrackFinder::CreateClusterAroundTrack(), PndTrkLegendreSecTask2::Exec(), PndTrkLegendreNew::Exec(), PndTrkLegendreTask::Exec(), PndTrkLegendreSecTask::Exec(), PndTrkCombiLegendreTask::Exec(), PndTrkTrackFinder::Exec(), PndTrkCombiLegendreTask::LegendreFit(), LightUp(), PndTrkLegendreTask::RegisterTrack(), PndTrkLegendreSecTask::RegisterTrack(), and PndTrkLegendreSecTask2::RegisterTrack().

477  {
478  cout << "draw" << endl;
479 
480  if(fCluster.GetNofHits() > 0) {
481  PndTrkHit *hit0 = fCluster.GetHit(0);
482  fPhiMin = ComputePhi(hit0->GetPosition());
483  // if(fPhiMin > 180) fPhiMin -= 360;
484  hit0->GetPosition().Print();
485 
487  fPhiMax = ComputePhi(hitN->GetPosition());
488  // if(fPhiMax > 180) fPhiMax -= 360;
489  hitN->GetPosition().Print();
490 
491 
492  // if(fCharge > 0 && fPhiMin < fPhiMax) fPhiMin += 360;
493 // else if(fCharge < 0 && fPhiMin > fPhiMax) fPhiMax += 360;
494 
495  }
496  TArc *track = new TArc(fCenterX, fCenterY, fRadius, fPhiMin, fPhiMax);
497 
498 
499 
500 
501  cout << fCharge << " " << fCenterX << " " << fCenterY << " " << fRadius << " " << fPhiMin << " " << fPhiMax << endl;
502  track->SetFillStyle(0);
503  track->SetLineColor(color);
504  track->Draw("only SAME");
505 }
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
PndTrkHit * GetHit(int index)
Double_t ComputePhi(TVector3 hit)
double fCenterY
Definition: PndTrkTrack.h:68
TVector3 GetPosition()
Definition: PndTrkHit.h:62
PndMCTrack * track
Definition: anaLmdCluster.C:89
Int_t GetNofHits()
Definition: PndTrkCluster.h:52
double fCenterX
Definition: PndTrkTrack.h:68
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
TVector2 PndTrkTrack::GetCenter ( )
inline
Int_t PndTrkTrack::GetCharge ( )
inline
PndTrkCluster PndTrkTrack::GetCluster ( )
inline
Double_t PndTrkTrack::GetRadius ( )
inline
Double_t PndTrkTrack::GetTanL ( )
inline
Double_t PndTrkTrack::GetZ0 ( )
inline
void PndTrkTrack::LightUp ( )

Definition at line 507 of file PndTrkTrack.cxx.

References Draw(), fCluster, and PndTrkCluster::LightUp().

507  {
508  Draw(kYellow);
509  fCluster.LightUp();
510 }
void Draw(Color_t color=kBlack)
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
PndTrkTrack & PndTrkTrack::operator= ( const PndTrkTrack track)

Definition at line 83 of file PndTrkTrack.cxx.

References fCenterX, fCenterY, fCharge, fCluster, fPhiMax, fPhiMin, fRadius, fRefHit, fTanL, and fZ0.

83  {
84  fRefHit = track.fRefHit;
85  fCluster = track.fCluster;
86  fCenterX = track.fCenterX;
87  fCenterY = track.fCenterY;
88  fRadius = track.fRadius;
89  fTanL = track.fTanL;
90  fZ0 = track.fZ0;
91  fCharge = track.fCharge;
92  fPhiMin = track.fPhiMin;
93  fPhiMax = track.fPhiMax;
94  return *this;
95 }
double fPhiMax
Definition: PndTrkTrack.h:71
double fRadius
Definition: PndTrkTrack.h:68
double fPhiMin
Definition: PndTrkTrack.h:70
double fZ0
Definition: PndTrkTrack.h:68
double fCenterY
Definition: PndTrkTrack.h:68
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
double fTanL
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
Bool_t PndTrkTrack::operator== ( PndTrkTrack  track)

Definition at line 97 of file PndTrkTrack.cxx.

References fCenterX, fCenterY, fRadius, GetCenter(), GetCluster(), PndTrkCluster::GetNofHits(), and GetRadius().

97  {
98  int nofhits = GetCluster().GetNofHits();
99  return nofhits == track.GetCluster().GetNofHits() && fRadius == track.GetRadius() && fCenterX == track.GetCenter().X() && fCenterY == track.GetCenter().Y(); // CHECK
100 }
Double_t GetRadius()
Definition: PndTrkTrack.h:43
double fRadius
Definition: PndTrkTrack.h:68
PndTrkCluster GetCluster()
Definition: PndTrkTrack.h:48
TVector2 GetCenter()
Definition: PndTrkTrack.h:44
double fCenterY
Definition: PndTrkTrack.h:68
Int_t GetNofHits()
Definition: PndTrkCluster.h:52
double fCenterX
Definition: PndTrkTrack.h:68
void PndTrkTrack::SetCenter ( double  x,
double  y 
)
inline

Definition at line 37 of file PndTrkTrack.h.

References fCenterX, fCenterY, x, and y.

Referenced by PndTrkLegendreNew::Exec(), PndTrkLegendreSecTask2::Exec(), PndTrkCombiLegendreTask::Exec(), and PndTrkTrackFinder::Exec().

37 { fCenterX = x; fCenterY = y; }
double fCenterY
Definition: PndTrkTrack.h:68
Double_t x
Double_t y
double fCenterX
Definition: PndTrkTrack.h:68
void PndTrkTrack::SetCenter ( TVector3  center)
inline

Definition at line 38 of file PndTrkTrack.h.

References fCenterX, and fCenterY.

38 { fCenterX = center.X(); fCenterY = center.Y(); }
double fCenterY
Definition: PndTrkTrack.h:68
double fCenterX
Definition: PndTrkTrack.h:68
void PndTrkTrack::SetCluster ( PndTrkCluster cluster)
inline

Definition at line 41 of file PndTrkTrack.h.

References fCluster.

Referenced by PndTrkLegendreNew::Exec(), PndTrkCombiLegendreTask::Exec(), and PndTrkTrackFinder::Exec().

41 { fCluster = *cluster; }
PndTrkCluster fCluster
Definition: PndTrkTrack.h:66
void PndTrkTrack::SetRadius ( double  radius)
inline
void PndTrkTrack::SetRefHit ( PndTrkHit hit)
inline

Definition at line 42 of file PndTrkTrack.h.

References fRefHit, and hit.

42 { fRefHit = hit; }
PndTrkHit * fRefHit
Definition: PndTrkTrack.h:67
PndSdsMCPoint * hit
Definition: anasim.C:70
void PndTrkTrack::SetTanL ( double  tanl)
inline

Definition at line 39 of file PndTrkTrack.h.

References fTanL, and tanl.

Referenced by PndTrkLegendreSecTask::Exec(), PndTrkLegendreSecTask2::Exec(), PndTrkLegendreTask::Exec(), and PndTrkTrackFinder::Exec().

39 { fTanL = tanl; }
Double_t tanl
Definition: checkhelixhit.C:63
double fTanL
Definition: PndTrkTrack.h:68
void PndTrkTrack::SetZ0 ( double  z0)
inline

Definition at line 40 of file PndTrkTrack.h.

References fZ0, and z0.

Referenced by PndTrkLegendreSecTask::Exec(), PndTrkLegendreSecTask2::Exec(), PndTrkLegendreTask::Exec(), and PndTrkTrackFinder::Exec().

40 { fZ0 = z0;}
Double_t z0
Definition: checkhelixhit.C:62
double fZ0
Definition: PndTrkTrack.h:68

Member Data Documentation

double PndTrkTrack::fCenterX
protected
double PndTrkTrack::fCenterY
protected
int PndTrkTrack::fCharge
protected
PndTrkCluster PndTrkTrack::fCluster
protected
double PndTrkTrack::fPhiMax
protected

Definition at line 71 of file PndTrkTrack.h.

Referenced by Draw(), operator=(), and PndTrkTrack().

double PndTrkTrack::fPhiMin
protected

Definition at line 70 of file PndTrkTrack.h.

Referenced by Draw(), operator=(), and PndTrkTrack().

double PndTrkTrack::fRadius
protected
PndTrkHit* PndTrkTrack::fRefHit
protected

Definition at line 67 of file PndTrkTrack.h.

Referenced by Clear(), operator=(), SetRefHit(), and ~PndTrkTrack().

double PndTrkTrack::fTanL
protected

Definition at line 68 of file PndTrkTrack.h.

Referenced by ComputeMomentumAtPosition(), GetTanL(), operator=(), PndTrkTrack(), and SetTanL().

double PndTrkTrack::fZ0
protected

Definition at line 68 of file PndTrkTrack.h.

Referenced by GetZ0(), operator=(), PndTrkTrack(), and SetZ0().


The documentation for this class was generated from the following files: