New visualization possibilities (M. Ivanov)
authorbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 5 Feb 2008 10:56:10 +0000 (10:56 +0000)
committerbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 5 Feb 2008 10:56:10 +0000 (10:56 +0000)
STEER/AliESDtrack.cxx
STEER/AliESDtrack.h
STEER/AliExternalTrackParam.cxx
STEER/AliExternalTrackParam.h

index c0afc7741e6192437594fde241d5301d1fc4cc5e..30ceb14ae596fbbcc6753ff53675967e770d9d01 100644 (file)
@@ -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;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++;
+    }
+  }
+}
index 370382f1dffe94d8e156a47b60f27ce0dd9fe9ae..3fc0befbe5f377bbfd4f4c7c4228b80f4e6458cd 100644 (file)
@@ -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,
index 10a24579c76c87a681967aebe506385c6d1d6887..eeb599e21776a8b5927aba7d592eb1dcc6d77d13 100644 (file)
@@ -28,6 +28,7 @@
 #include <TMatrixDSym.h>
 #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; 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++;
+  }
+}
index 71d0d24f58351f80f4092de92534a0d2810c17ee..896b877e3cac20805c3409b6341cac29d27ee3fd 100644 (file)
@@ -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