#include "AliKalmanTrack.h"
#include "AliLog.h"
#include "AliTrackPointArray.h"
+#include "TPolyMarker3D.h"
ClassImp(AliESDtrack)
}
}
+
+//
+// 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;i<entries;i++){
+ Double_t pos[3];
+ ((AliExternalTrackParam*)arrayRef.At(i))->GetXYZ(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;i<entries;i++){
+ Bool_t res = ((AliExternalTrackParam*)arrayRef.At(i))->Rotate(fi);
+ if (!res) delete arrayRef.RemoveAt(i);
+ }
+ Int_t counter=0;
+ for (Double_t r=minR; r<maxR; r+=stepR){
+ Double_t sweight=0;
+ Double_t mlpos[3]={0,0,0};
+ for (Int_t i=0;i<entries;i++){
+ Double_t point[3]={0,0,0};
+ AliExternalTrackParam *param = ((AliExternalTrackParam*)arrayRef.At(i));
+ if (!param) continue;
+ if (param->GetXYZAt(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++;
+ }
+ }
+}
class AliESDVertex;
class AliKalmanTrack;
class AliTrackPointArray;
+class TPolyMarker3D;
class AliESDtrack : public AliExternalTrackParam {
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,
#include <TMatrixDSym.h>
#include "AliExternalTrackParam.h"
#include "AliESDVertex.h"
+#include "TPolyMarker3D.h"
#include "AliLog.h"
ClassImp(AliExternalTrackParam)
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; r<maxR; r+=stepR){
+ Double_t point[3];
+ GetXYZAt(r,magF,point);
+ pol->SetPoint(counter,point[0],point[1], point[2]);
+ printf("xyz\t%f\t%f\t%f\n",point[0], point[1],point[2]);
+ counter++;
+ }
+}
Double_t ApproximateBetheBloch(Double_t);
class AliESDVertex;
+class TPolyMarker3D;
class AliExternalTrackParam: public AliVParticle {
public:
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