there have been some changes in the on-line tracklet and GTU track
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Jun 2010 07:02:37 +0000 (07:02 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Jun 2010 07:02:37 +0000 (07:02 +0000)
implementation which require adaptations also of the visualization
code (Jochen)

EVE/EveDet/AliEveTRDData.cxx
EVE/EveDet/AliEveTRDData.h
EVE/alice-macros/trd_gtutracks.C
EVE/alice-macros/trd_tracklets.C

index b593a49..96e4e0c 100644 (file)
@@ -11,6 +11,7 @@
 #include "TVector.h"
 #include "TLinearFitter.h"
 #include "TCanvas.h"
+#include "TGeoMatrix.h"
 
 #include "TEveTrans.h"
 #include "TEveManager.h"
@@ -633,41 +634,38 @@ AliEveTRDTrackletOnline::AliEveTRDTrackletOnline(AliTRDtrackletMCM *tracklet) :
   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) :
@@ -679,47 +677,44 @@ 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
index 3f4bce6..d781292 100644 (file)
@@ -161,7 +161,6 @@ public:
   AliEveTRDTrackletOnline(AliTRDtrackletWord *tracklet);
   ~AliEveTRDTrackletOnline();
 
-//  void               Print(Option_t *o="") const; // *MENU*
   void               ShowMCM(Option_t *opt = "RHT") const; // *MENU*
 private:
   Int_t fDetector;
index 9d526f1..ef88699 100644 (file)
@@ -1,30 +1,50 @@
+#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)
@@ -36,13 +56,10 @@ trd_gtutracks()
     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]);
@@ -51,35 +68,35 @@ trd_gtutracks()
     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();
index 8f8f709..c7d850b 100644 (file)
@@ -1,51 +1,85 @@
+#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);
+      }
     }
   }