From 0c19adf7709e3b0a04ff53836f09c1cabf5d2807 Mon Sep 17 00:00:00 2001 From: belikov Date: Tue, 5 Feb 2008 10:56:10 +0000 Subject: [PATCH] New visualization possibilities (M. Ivanov) --- STEER/AliESDtrack.cxx | 57 +++++++++++++++++++++++++++++++++ STEER/AliESDtrack.h | 5 +++ STEER/AliExternalTrackParam.cxx | 35 ++++++++++++++++++++ STEER/AliExternalTrackParam.h | 14 +++++--- 4 files changed, 106 insertions(+), 5 deletions(-) diff --git a/STEER/AliESDtrack.cxx b/STEER/AliESDtrack.cxx index c0afc7741e6..30ceb14ae59 100644 --- a/STEER/AliESDtrack.cxx +++ b/STEER/AliESDtrack.cxx @@ -28,6 +28,7 @@ #include "AliKalmanTrack.h" #include "AliLog.h" #include "AliTrackPointArray.h" +#include "TPolyMarker3D.h" ClassImp(AliESDtrack) @@ -1203,3 +1204,59 @@ void AliESDtrack::Print(Option_t *) const { } } + +// +// Draw functionality +// Origin: Marian Ivanov, Marian.Ivanov@cern.ch +// +void AliESDtrack::FillPolymarker(TPolyMarker3D *pol, Float_t magF, Float_t minR, Float_t maxR, Float_t stepR){ + // + // Fill points in the polymarker + // + TObjArray arrayRef; + arrayRef.AddLast(new AliExternalTrackParam(*this)); + if (fIp) arrayRef.AddLast(new AliExternalTrackParam(*fIp)); + if (fOp) arrayRef.AddLast(new AliExternalTrackParam(*fOp)); + // + Double_t mpos[3]={0,0,0}; + Int_t entries=arrayRef.GetEntries(); + for (Int_t i=0;iGetXYZ(pos); + mpos[0]+=pos[0]/entries; + mpos[1]+=pos[1]/entries; + mpos[2]+=pos[2]/entries; + } + // Rotate to the mean position + // + Float_t fi= TMath::ATan2(mpos[1],mpos[0]); + for (Int_t i=0;iRotate(fi); + if (!res) delete arrayRef.RemoveAt(i); + } + Int_t counter=0; + for (Double_t r=minR; rGetXYZAt(r,magF,point)){ + Double_t weight = 1./(10.+(r-param->GetX())*(r-param->GetX())); + sweight+=weight; + mlpos[0]+=point[0]*weight; + mlpos[1]+=point[1]*weight; + mlpos[2]+=point[2]*weight; + } + } + if (sweight>0){ + mlpos[0]/=sweight; + mlpos[1]/=sweight; + mlpos[2]/=sweight; + pol->SetPoint(counter,mlpos[0],mlpos[1], mlpos[2]); + printf("xyz\t%f\t%f\t%f\n",mlpos[0], mlpos[1],mlpos[2]); + counter++; + } + } +} diff --git a/STEER/AliESDtrack.h b/STEER/AliESDtrack.h index 370382f1dff..3fc0befbe5f 100644 --- a/STEER/AliESDtrack.h +++ b/STEER/AliESDtrack.h @@ -32,6 +32,7 @@ class TParticle; class AliESDVertex; class AliKalmanTrack; class AliTrackPointArray; +class TPolyMarker3D; class AliESDtrack : public AliExternalTrackParam { public: @@ -266,6 +267,10 @@ public: p[0]=fD; p[1]=fZ; cov[0]=fCdd; cov[1]=fCdz; cov[2]=fCzz; } virtual void Print(Option_t * opt) const ; + // + // visualization (M. Ivanov) + // + void FillPolymarker(TPolyMarker3D *pol, Float_t magf, Float_t minR, Float_t maxR, Float_t stepR); enum { kITSin=0x0001,kITSout=0x0002,kITSrefit=0x0004,kITSpid=0x0008, diff --git a/STEER/AliExternalTrackParam.cxx b/STEER/AliExternalTrackParam.cxx index 10a24579c76..eeb599e2177 100644 --- a/STEER/AliExternalTrackParam.cxx +++ b/STEER/AliExternalTrackParam.cxx @@ -28,6 +28,7 @@ #include #include "AliExternalTrackParam.h" #include "AliESDVertex.h" +#include "TPolyMarker3D.h" #include "AliLog.h" ClassImp(AliExternalTrackParam) @@ -1313,3 +1314,37 @@ Bool_t AliExternalTrackParam::GetDistance(AliExternalTrackParam *param2, Double_ return kTRUE; } + + +// +// Draw functionality. +// Origin: Marian Ivanov, Marian.Ivanov@cern.ch +// + +void AliExternalTrackParam::DrawTrack(Float_t magf, Float_t minR, Float_t maxR, Float_t stepR){ + // + // Draw track line + // + if (minR>maxR) return ; + if (stepR<=0) return ; + Int_t npoints = TMath::Nint((maxR-minR)/stepR)+1; + if (npoints<1) return; + TPolyMarker3D *polymarker = new TPolyMarker3D(npoints); + FillPolymarker(polymarker, magf,minR,maxR,stepR); + polymarker->Draw(); +} + +// +void AliExternalTrackParam::FillPolymarker(TPolyMarker3D *pol, Float_t magF, Float_t minR, Float_t maxR, Float_t stepR){ + // + // Fill points in the polymarker + // + Int_t counter=0; + for (Double_t r=minR; rSetPoint(counter,point[0],point[1], point[2]); + printf("xyz\t%f\t%f\t%f\n",point[0], point[1],point[2]); + counter++; + } +} diff --git a/STEER/AliExternalTrackParam.h b/STEER/AliExternalTrackParam.h index 71d0d24f583..896b877e3ca 100644 --- a/STEER/AliExternalTrackParam.h +++ b/STEER/AliExternalTrackParam.h @@ -28,6 +28,7 @@ const Double_t kMostProbablePt=0.35; Double_t ApproximateBetheBloch(Double_t); class AliESDVertex; +class TPolyMarker3D; class AliExternalTrackParam: public AliVParticle { public: @@ -153,13 +154,16 @@ class AliExternalTrackParam: public AliVParticle { Bool_t GetDistance(AliExternalTrackParam *param2, Double_t x, Double_t dist[3], Double_t b); Int_t GetIndex(Int_t i, Int_t j) const {return i+(j+1)*j/2;} - - -protected: + // + // visualization (M. Ivanov) + // + virtual void FillPolymarker(TPolyMarker3D *pol, Float_t magf, Float_t minR, Float_t maxR, Float_t stepR); + virtual void DrawTrack(Float_t magF, Float_t minR, Float_t maxR, Float_t stepR); + protected: Double_t &Par(Int_t i) {return fP[i];} Double_t &Cov(Int_t i) {return fC[i];} - -private: + + private: Double32_t fX; // X coordinate for the point of parametrisation Double32_t fAlpha; // Local <-->global coor.system rotation angle Double32_t fP[5]; // The track parameters -- 2.39.3