]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/alice-macros/esd_spd_tracklets.C
In muon-related macros in EVE:
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_spd_tracklets.C
index 8205cfe9a348ab4e50b5b8fda10acab7f950bdbf..999492dc0a0210c95cadce9fe26ea91ab3689ddd 100644 (file)
@@ -1,37 +1,89 @@
-// To use when per-line id is supported
-class TrackletId : public TObject
-{
-public:
-  // label, phi, theta
-  // virtual void Print(const Option_t* opt="") {}
-};
+// $Id$
+// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
+ * full copyright notice.                                                 *
+ **************************************************************************/
 
-Reve::StraightLineSet* esd_spd_tracklets(Float_t rad=8)
+TEveElementList* esd_spd_tracklets(Float_t radius=8, Width_t line_width=2,
+                                  Float_t dPhiWindow=0.080, Float_t dThetaWindow=0.025, 
+                                  Float_t dPhiShift05T=0.0045)
 {
-  AliESD         * esd = Alieve::Event::AssertESD();
-  AliESDVertex   * pv  = esd->GetPrimaryVertex();
-  AliMultiplicity* mul = esd->GetMultiplicity();
+  // radius - cylindrical radius to which the tracklets should be extrapolated
+
+  AliESDEvent     *esd = AliEveEventManager::AssertESD();
+  AliESDVertex    *pv  = esd->GetPrimaryVertexSPD();
+  AliMultiplicity *mul = esd->GetMultiplicity();
+
+  AliMagF *field = AliEveEventManager::AssertMagField();
+
+  TEveElementList* cont = new TEveElementList("SPD Tracklets");
+  gEve->AddElement(cont);
+
+  TEveTrackList *tg = new TEveTrackList("Good");
+  tg->SetMainColor(kCyan);
+  tg->SetLineWidth(line_width);
+  cont->AddElement(tg);
+
+  TEveTrackPropagator* pg = tg->GetPropagator();
+  pg->SetMaxR(radius);
+
+  TEveTrackList *tb = new TEveTrackList("Bad");
+  tb->SetMainColor(kMagenta);
+  tb->SetLineWidth(line_width);
+  cont->AddElement(tb);
+
+  TEveTrackPropagator* pb = tb->GetPropagator();
+  pb->SetMaxR(radius);
+
+  const Float_t  Bz = TMath::Abs(field->SolenoidField());
 
-  Double_t pvx[3], pve[3];
-  pv->GetXYZ(pvx);
-  pv->GetSigmaXYZ(pve);
+  const Double_t dPhiShift     = dPhiShift05T / 5.0 * Bz;
+  const Double_t dPhiWindow2   = dPhiWindow * dPhiWindow;
+  const Double_t dThetaWindow2 = dThetaWindow * dThetaWindow;
 
-  Reve::StraightLineSet* ls = new Reve::StraightLineSet();
+  for (Int_t i = 0; i < mul->GetNumberOfTracklets(); ++i)
+  {
+    Float_t theta  = mul->GetTheta(i);
+    Float_t phi    = mul->GetPhi(i);
+    Float_t dTheta = mul->GetDeltaTheta(i);
+    Float_t dPhi   = mul->GetDeltaPhi(i) - dPhiShift;
+    Float_t d      = dPhi*dPhi/dPhiWindow2 + dTheta*dTheta/dThetaWindow2;
+
+    TEveTrackList* tl = (d < 1.0f) ? tg : tb;
+
+    AliEveTracklet *t = new AliEveTracklet(i, pv, theta, phi, tl->GetPropagator());
+    t->SetAttLineAttMarker(tl);
+    t->SetElementName(Form("Tracklet %d", i));
+    t->SetElementTitle(Form("Id = %d\nEta=%.3f, Theta=%.3f, dTheta=%.3f\nPhi=%.3f dPhi=%.3f",
+                           i, mul->GetEta(i), theta, dTheta, phi, dPhi));
+
+    tl->AddElement(t);
+  }
 
-  for (Int_t i=0; i<mul->GetNumberOfTracklets(); ++i)
+  tg->MakeTracks();
+  tg->SetTitle(Form("N=%d", tg->NumChildren()));
+
+  tb->MakeTracks();
+  tb->SetTitle(Form("N=%d", tb->NumChildren()));
+
+  if (AliEveTrackCounter::IsActive())
   {
-    using namespace TMath;
-    Float_t dr[3];
-    Float_t phi = PiOver2() - mul->GetPhi(i); // strange people
-    dr[0] = rad*Cos(phi);
-    dr[1] = rad*Sin(phi);
-    dr[2] = rad/Tan(mul->GetTheta(i));
-    ls->AddLine(pvx[0], pvx[1], pvx[2],
-               pvx[0]+dr[0], pvx[1]+dr[1], pvx[2]+dr[2]);
+    AliEveTrackCounter::fgInstance->RegisterTracklets(tg, kTRUE);
+    AliEveTrackCounter::fgInstance->RegisterTracklets(tb, kFALSE);
+  }
+  else
+  {
+//==========================================
+    tb->SetLineStyle(1);
+    tb->SetLineWidth(2);
+//==========================================
+
   }
 
-  gReve->AddRenderElement(ls);
-  gReve->Redraw3D();
+  gEve->Redraw3D();
 
-  return ls;
+  return cont;
 }