-// 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;
}