#include "TVector.h"
#include "TLinearFitter.h"
#include "TCanvas.h"
+#include "TGeoMatrix.h"
#include "TEveTrans.h"
#include "TEveManager.h"
fROB = trkl->GetROB();
fMCM = trkl->GetMCM();
- SetName("TRD tracklet");
+ SetName("sim. tracklet");
SetTitle(Form("Det: %i, ROB: %i, MCM: %i, Label: %i\n0x%08x",
trkl->GetDetector(), trkl->GetROB(), trkl->GetMCM(), trkl->GetLabel(),
trkl->GetTrackletWord()));
SetLineColor(kGreen);
+ SetLineWidth(3);
- AliTRDgeometry *geo = new AliTRDgeometry();
-// TGeoHMatrix *matrix = geo->GetClusterMatrix(trkl->GetDetector());
+ AliTRDgeometry geo;
+ TGeoHMatrix *matrix = geo.GetClusterMatrix(trkl->GetDetector());
+ fDetector = trkl->GetDetector();
+ fROB = trkl->GetROB();
+ fMCM = trkl->GetMCM();
+
Float_t length = 3.;
Double_t x[3];
Double_t p[3];
- x[0] = trkl->GetX();
+ Double_t p2[3];
+ x[0] = AliTRDgeometry::AnodePos();
x[1] = trkl->GetY();
- x[2] = trkl->GetZ();
+ x[2] = trkl->GetLocalZ();
- fDetector = trkl->GetDetector();
- AliTRDpadPlane *pp = geo->GetPadPlane(geo->GetLayer(fDetector), geo->GetStack(fDetector));
- fROB = 2 * (trkl->GetZbin() / 4) + (trkl->GetY() > 0 ? 1 : 0);
- fMCM = (((Int_t) ((trkl->GetY()) / pp->GetWidthIPad()) + 72) / 18) % 4
- + 4 * (trkl->GetZbin() % 4) ;
- AliInfo(Form("From position/tracklet: ROB: %i/%i, MCM: %i/%i",
- fROB, trkl->GetROB(), fMCM, trkl->GetMCM()));
-
- geo->RotateBack(trkl->GetDetector(), x, p);
-// matrix->LocalToMaster(x, p);
- SetPoint(0, p[0], p[1], p[2]);
+ matrix->LocalToMaster(x, p);
+ geo.RotateBack(trkl->GetDetector(), p, p2);
+ SetPoint(0, p2[0], p2[1], p2[2]);
x[0] -= length;
x[1] -= length * trkl->GetdYdX();
- x[2] *= x[0] / (x[0] + length);
- geo->RotateBack(trkl->GetDetector(), x, p);
-// matrix->LocalToMaster(x, p);
- SetPoint(1, p[0], p[1], p[2]);
- delete geo;
+ matrix->LocalToMaster(x, p);
+ p[2] *= p[0] / (p[0] + length);
+ geo.RotateBack(trkl->GetDetector(), p, p2);
+ SetPoint(1, p2[0], p2[1], p2[2]);
}
AliEveTRDTrackletOnline::AliEveTRDTrackletOnline(AliTRDtrackletWord *tracklet) :
AliTRDtrackletWord *trkl = new AliTRDtrackletWord(*tracklet);
SetUserData(trkl);
- AliTRDgeometry *geo = new AliTRDgeometry();
fDetector = trkl->GetDetector();
- AliTRDpadPlane *pp = geo->GetPadPlane(geo->GetLayer(fDetector), geo->GetStack(fDetector));
- fROB = 2 * (trkl->GetZbin() / 4) + (trkl->GetY() > 0 ? 1 : 0);
- fMCM = (((Int_t) ((trkl->GetY()) / pp->GetWidthIPad()) + 72) / 18) % 4
- + 4 * (trkl->GetZbin() % 4) ;
+ fROB = trkl->GetROB();
+ fMCM = trkl->GetMCM();
- SetName("TRD tracklet");
+ SetName("raw tracklet");
SetTitle(Form("Det: %i, ROB: %i, MCM: %i, Label: %i\n0x%08x",
trkl->GetDetector(), fROB, fMCM, -1,
trkl->GetTrackletWord()));
SetLineColor(kRed);
+ SetLineWidth(3);
-// AliTRDgeometry *geo = new AliTRDgeometry();
+ AliTRDgeometry geo;
+ TGeoHMatrix *matrix = geo.GetClusterMatrix(trkl->GetDetector());
Float_t length = 3.;
Double_t x[3];
Double_t p[3];
- x[0] = trkl->GetX();
+ Double_t p2[3];
+ x[0] = AliTRDgeometry::AnodePos();
x[1] = trkl->GetY();
- x[2] = trkl->GetZ();
+ x[2] = trkl->GetLocalZ();
- geo->RotateBack(trkl->GetDetector(), x, p);
- SetPoint(0, p[0], p[1], p[2]);
+ matrix->LocalToMaster(x, p);
+ geo.RotateBack(trkl->GetDetector(), p, p2);
+ SetPoint(0, p2[0], p2[1], p2[2]);
x[0] -= length;
x[1] -= length * trkl->GetdYdX();
- x[2] *= x[0] / (x[0] + length);
- geo->RotateBack(trkl->GetDetector(), x, p);
- SetPoint(1, p[0], p[1], p[2]);
- delete geo;
+ matrix->LocalToMaster(x, p);
+ p[2] *= p[0] / (p[0] + length);
+ geo.RotateBack(trkl->GetDetector(), p, p2);
+ SetPoint(1, p2[0], p2[1], p2[2]);
}
AliEveTRDTrackletOnline::~AliEveTRDTrackletOnline()
{
- AliTRDtrackletMCM *trkl = dynamic_cast<AliTRDtrackletMCM*> ((AliTRDtrackletBase*) GetUserData());
- printf("trkl: %p\n", (void*)trkl);
-// delete trkl;
- AliTRDtrackletWord *trklWord = dynamic_cast<AliTRDtrackletWord*> ((AliTRDtrackletBase*) GetUserData());
- printf("trklWord: %p\n", (void*)trklWord);
-// delete trklWord;
+ delete ((AliTRDtrackletBase*) GetUserData());
+ SetUserData(0x0);
}
void AliEveTRDTrackletOnline::ShowMCM(Option_t *opt) const
AliEveTRDTrackletOnline(AliTRDtrackletWord *tracklet);
~AliEveTRDTrackletOnline();
-// void Print(Option_t *o="") const; // *MENU*
void ShowMCM(Option_t *opt = "RHT") const; // *MENU*
private:
Int_t fDetector;
+#ifndef __CINT__
+#include "TEveManager.h"
+#include "TEveLine.h"
+#include "TEveStraightLineSet.h"
+#include "TClonesArray.h"
+#include "EveBase/AliEveEventManager.h"
+
+#include "AliRunLoader.h"
+#include "AliLoader.h"
+#include "AliDataLoader.h"
+#include "AliTreeLoader.h"
+#include "TRD/AliTRDarrayADC.h"
+#include "EveDet/AliEveTRDData.h"
+#include "TRD/AliTRDtrackletWord.h"
+#include "TRD/AliTRDtrackletMCM.h"
+#include "TRD/AliTRDtrackGTU.h"
+#include "TRD/AliTRDtrackletGTU.h"
#include "TParticlePDG.h"
+#endif
TEveElementList *
trd_gtutracks()
{
- // AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
- // rl->LoadKinematics();
- // AliLoader *loader = rl->GetLoader("TRDLoader");
- /*
- loader->LoadTracks();
- TTree *trktree = loader->TreeT();
- TBranch *branch = trktree->GetBranch("TRDmcmTracklet");
- TObjArray *tracklets = new TObjArray();
- branch->SetAddress(&tracklets);
- */
+ AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
+ AliLoader *loader = rl->GetLoader("TRDLoader");
+ AliDataLoader *dl = loader->GetDataLoader("gtutracks");
+ if (!dl) {
+ dl = new AliDataLoader("TRD.GtuTracks.root","gtutracks", "gtutracks");
+ rl->GetLoader("TRDLoader")->AddDataLoader(dl);
+ }
- TFile *f = TFile::Open("TRD.GtuTracking.root");
- TTree *trktree = f->Get("gtutracks");
- TBranch *branch = trktree->GetBranch("TRDgtuTrack");
+ dl->Load();
+ TTree *trktree = dl->Tree();
+ if (!trktree) {
+ printf("No GTU track tree");
+ return 0x0;
+ }
AliTRDtrackGTU *trk = 0x0;
- branch->SetAddress(&trk);
-
+ trktree->SetBranchAddress("TRDtrackGTU", &trk);
+
gEve->DisableRedraw();
TEveElementList* listOfTracks = new TEveElementList("GTU Tracks");
gEve->AddElement(listOfTracks);
AliTRDgeometry *geo = new AliTRDgeometry;
+
+ // printf("found %i tracks\n", trktree->GetEntriesFast());
for (Int_t i = 0; i < trktree->GetEntriesFast(); i++) {
trktree->GetEntry(i);
if (!trk)
x[0] = x[1] = x[2] = 0;
x[1] = trk->GetA() / 2 * 160e-4;
geo->RotateBack(sector*30, x, p);
- printf("Line: %f, %f, %f\n", x[0], x[1], x[2]);
x[0] = 400;
x[1] = x[0] * trk->GetB() + trk->GetA() / 2 * 160e-4;
x[2] = -1 * x[0] * trk->GetC() / TMath::Tan( -2.0 / 180.0 * TMath::Pi() );
geo->RotateBack(sector*30, x, p2);
- printf("Line: %f, %f, %f\n", p2[0], p2[1], p2[2]);
- // cont->AddLine(p[0], p[1], p[2], p2[0], p2[1], p2[2]);
TEveLine *track = new TEveLine(Form("GTU track pt: %4.2f (%i)", trk->GetPt(), trk->GetLabel()));
track->SetMainColor((Color_t) 4);
track->SetNextPoint(p[0], p[1], p[2]);
delete[] x;
delete[] p;
delete[] p2;
- TEveStraightLineSet* trkl = new TEveStraightLineSet("TRD Tracklets");
- trkl->SetMainColor((Color_t) 2);
- gEve->AddElement(trkl, track);
- Int_t det = trk->GetSector() * 30 + trk->GetStack() * 6;
- printf("Track in SM: %i, Stack: %i => Det: %i\n", trk->GetSector(), trk->GetStack(), det);
- for (Int_t layer = 0; layer < 6; layer++) {
- printf("checking for tracklet in layer %i\n", layer);
- if (trk->IsTrackletInLayer(layer)) {
- printf("tracklet in layer %i\n", layer);
- AliTRDtrackletGTU *trklet = trk->GetTracklet(layer);
- Double_t *x = new Double_t[3];
- x[0] = geo->GetTime0(layer);
- AliTRDpadPlane *pp = geo->GetPadPlane(layer, trk->GetStack());
- x[1] = trklet.GetYbin() * 0.0160;
- x[2] = pp->GetRowPos(trklet->GetZbin()) - pp->GetRowSize(trklet->GetZbin())/2;
- Double_t *p = new Double_t[3];
- Double_t *p2 = new Double_t[3];
- geo->RotateBack(det, x, p);
- x[0] -= 10;
- x[1] += 10 * trklet->GetdYdX();
- x[2] *= x[0]/(x[0]+10);
- geo->RotateBack(det, x, p2);
- trkl->AddLine(p[0], p[1], p[2], p2[0], p2[1], p2[2]);
- delete[] x;
- delete[] p;
- delete[] p2;
-
- }
- }
+// TEveStraightLineSet* trkl = new TEveStraightLineSet("TRD Tracklets");
+// trkl->SetMainColor((Color_t) 2);
+// gEve->AddElement(trkl, track);
+// Int_t det = trk->GetSector() * 30 + trk->GetStack() * 6;
+// printf("Track in SM: %i, Stack: %i => Det: %i\n", trk->GetSector(), trk->GetStack(), det);
+// for (Int_t layer = 0; layer < 6; layer++) {
+// printf("checking for tracklet in layer %i\n", layer);
+// if (trk->IsTrackletInLayer(layer)) {
+// printf("tracklet in layer %i\n", layer);
+// AliTRDtrackletGTU *trklet = trk->GetTracklet(layer);
+// Double_t *x = new Double_t[3];
+// x[0] = geo->GetTime0(layer);
+// AliTRDpadPlane *pp = geo->GetPadPlane(layer, trk->GetStack());
+// x[1] = trklet->GetYbin() * 0.0160;
+// x[2] = pp->GetRowPos(trklet->GetZbin()) - pp->GetRowSize(trklet->GetZbin())/2;
+// Double_t *p = new Double_t[3];
+// Double_t *p2 = new Double_t[3];
+// geo->RotateBack(det, x, p);
+// x[0] -= 10;
+// x[1] += 10 * trklet->GetdYdX();
+// x[2] *= x[0]/(x[0]+10);
+// geo->RotateBack(det, x, p2);
+// trkl->AddLine(p[0], p[1], p[2], p2[0], p2[1], p2[2]);
+// delete[] x;
+// delete[] p;
+// delete[] p2;
+//
+// }
+// }
}
gEve->EnableRedraw();
+#ifdef __CINT__
+class TEveLine;
+#else
+#include <TEveManager.h>
#include "TEveLine.h"
+#include "TClonesArray.h"
+#include <EveBase/AliEveEventManager.h>
+
+#include "AliRunLoader.h"
+#include "AliLoader.h"
+#include "AliDataLoader.h"
+#include "AliTreeLoader.h"
+#include "TRD/AliTRDarrayADC.h"
+#include "EveDet/AliEveTRDData.h"
+#include "TRD/AliTRDtrackletWord.h"
+#include "TRD/AliTRDtrackletMCM.h"
+#endif
TEveElementList *trd_tracklets()
{
AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
AliLoader *loader = rl ? rl->GetLoader("TRDLoader") : 0x0;
- AliDataLoader *dl = loader ? loader->GetDataLoader("tracklets") : 0x0;
- if (!dl)
- return;
- dl->Load();
- TTree *trklTree = dl->Tree();
+ TTree *trklTree = 0x0;
- TBranch *trklBranch = 0x0;
+ AliDataLoader *dl = loader ? loader->GetDataLoader("tracklets") : 0x0;
+ if (!dl) {
+ printf("No tracklet loader\n");
+ return 0x0;
+ }
gEve->DisableRedraw();
- if (trklBranch = trklTree->GetBranch("trkbranch")) {
- TEveElementList* listOfTracklets = new TEveElementList("Online tracklets");
- gEve->AddElement(listOfTracklets);
-
- UInt_t *leaves = new UInt_t[258];
- trklBranch->SetAddress(leaves);
-
- for (Int_t iEntry = 0; iEntry < trklBranch->GetEntries(); iEntry++) {
- trklBranch->GetEntry(iEntry);
- for (Int_t iTracklet = 0; iTracklet < 256; iTracklet++) {
- if (leaves[2 + iTracklet] == 0)
- break;
- AliEveTRDTrackletOnline *evetrkl = new AliEveTRDTrackletOnline(new AliTRDtrackletWord(leaves[2 + iTracklet], 2*leaves[0] + leaves[1]));
- gEve->AddElement(evetrkl, listOfTracklets);
+ // ----- simulated tracklets -----
+ dl->Load();
+ trklTree = dl->Tree();
+
+ if (trklTree) {
+ TBranch *trklBranch = 0x0;
+ if ((trklBranch = trklTree->GetBranch("mcmtrklbranch"))) {
+ AliTRDtrackletMCM *trkl = 0x0;
+ trklBranch->SetAddress(&trkl);
+
+ TEveElementList* listOfTracklets = new TEveElementList("TRD tracklets (sim)");
+ gEve->AddElement(listOfTracklets);
+
+ for (Int_t i = 0; i < trklBranch->GetEntries(); i++) {
+ trklBranch->GetEntry(i);
+ if (!trkl)
+ continue;
+ gEve->AddElement(new AliEveTRDTrackletOnline(trkl), listOfTracklets);
}
}
- delete [] leaves;
}
- if (trklBranch = trklTree->GetBranch("mcmtrklbranch")) {
- AliTRDtrackletMCM *trkl = 0x0; //new AliTRDtrackletMCM;
- trklBranch->SetAddress(&trkl);
+ // raw tracklets
+ AliTreeLoader *tl = (AliTreeLoader*) dl->GetBaseLoader("tracklets-raw");
+ if (tl) {
+ tl->Load();
+ trklTree = tl->Tree();
+ }
+ else
+ trklTree = 0x0;
+ // trklTree = tl ? tl->Load(), tl->Tree : 0x0;
- TEveElementList* listOfTracklets = new TEveElementList("MCM tracklets");
+ if (trklTree) {
+ TEveElementList* listOfTracklets = new TEveElementList("TRD tracklets (raw)");
gEve->AddElement(listOfTracklets);
+
+ Int_t hc;
+ TClonesArray *ar = 0x0;
+ trklTree->SetBranchAddress("hc", &hc);
+ trklTree->SetBranchAddress("trkl", &ar);
- for (Int_t i = 0; i < trklBranch->GetEntries(); i++) {
- trklBranch->GetEntry(i);
- if (!trkl)
- continue;
- gEve->AddElement(new AliEveTRDTrackletOnline(trkl), listOfTracklets);
+ for (Int_t iEntry = 0; iEntry < trklTree->GetEntries(); iEntry++) {
+ trklTree->GetEntry(iEntry);
+ // printf("%i tracklets in HC %i\n", ar->GetEntriesFast(), hc);
+ for (Int_t iTracklet = 0; iTracklet < ar->GetEntriesFast(); iTracklet++) {
+ AliTRDtrackletWord *trklWord = (AliTRDtrackletWord*) (*ar)[iTracklet];
+ AliEveTRDTrackletOnline *evetrkl = new AliEveTRDTrackletOnline(new AliTRDtrackletWord(trklWord->GetTrackletWord(), hc));
+ gEve->AddElement(evetrkl, listOfTracklets);
+ }
}
}