implementation of online tracklets (Jochen)
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 25 Jun 2009 09:31:34 +0000 (09:31 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 25 Jun 2009 09:31:34 +0000 (09:31 +0000)
EVE/EveDet/AliEveTRDData.cxx
EVE/EveDet/AliEveTRDData.h
EVE/EveDet/AliEveTRDLoader.cxx
EVE/EveDet/AliEveTRDLoader.h
EVE/EveDet/AliEveTRDModuleImp.cxx
EVE/EveDet/AliEveTRDModuleImp.h
EVE/EveDet/EveDetLinkDef.h

index 9f58f74..05670f2 100644 (file)
@@ -7,8 +7,10 @@
  * full copyright notice.                                                 *
  **************************************************************************/
 
+#include "TROOT.h"
 #include "TVector.h"
 #include "TLinearFitter.h"
+#include "TCanvas.h"
 
 #include "TEveTrans.h"
 #include "TEveManager.h"
 #include "AliTRDcluster.h"
 #include "AliTRDseedV1.h"
 #include "AliTRDtrackletMCM.h"
+#include "AliTRDtrackletWord.h"
 #include "AliTRDmcmSim.h"
 #include "AliTRDtrackV1.h"
 #include "AliTRDtrackerV1.h"
 #include "AliTRDpadPlane.h"
 #include "AliTRDdigitsManager.h"
+#include "AliTRDmcmSim.h"
 #include "AliTRDarrayADC.h"
 #include "AliTRDSignalIndex.h"
 #include "AliTRDgeometry.h"
@@ -46,6 +50,8 @@ ClassImp(AliEveTRDDigits)
 ClassImp(AliEveTRDClusters)
 ClassImp(AliEveTRDTracklet)
 ClassImp(AliEveTRDTrack)
+ClassImp(AliEveTRDTrackletOnline)
+ClassImp(AliEveTRDmcm)
 
 ///////////////////////////////////////////////////////////
 /////////////   AliEveTRDDigits       /////////////////////
@@ -401,55 +407,10 @@ AliEveTRDTracklet::AliEveTRDTracklet(AliTRDseedV1 *trklt):TEveLine()
   //SetPoint(1, x0, y0, z0);
 }
 
-AliEveTRDTracklet::AliEveTRDTracklet(AliTRDtrackletMCM *tracklet) : 
-  TEveLine(),
-  fClusters(0x0)
-{
-  SetName("TRD tracklet");
-  AliTRDtrackletMCM *trkl = new AliTRDtrackletMCM(*tracklet);
-  SetUserData(trkl);
-
-  SetTitle(Form("Det: %i, ROB: %i, MCM: %i, Label: %i\n0x%08x", 
-                trkl->GetDetector(), trkl->GetROB(), trkl->GetMCM(), trkl->GetLabel(),
-                trkl->GetTrackletWord()));
-  SetLineColor(kRed);
-
-  AliTRDgeometry *geo = new AliTRDgeometry();
-
-  Float_t length = 10;
-  Double_t x[3];
-  Double_t p[3];
-  x[0] = trkl->GetX();
-  x[1] = trkl->GetY();
-  x[2] = trkl->GetZ();
-  
-  geo->RotateBack(trkl->GetDetector(), x, p);
-  SetPoint(0, p[0], p[1], p[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]);
-}
 
 AliEveTRDTracklet::~AliEveTRDTracklet() 
 {
-  AliTRDtrackletMCM *trkl = dynamic_cast<AliTRDtrackletMCM*> ((AliTRDtrackletBase*) GetUserData());
-  delete trkl;
-}
 
-void AliEveTRDTracklet::ShowMCM(Option_t *opt) const
-{
-  AliTRDtrackletMCM *trkl = dynamic_cast<AliTRDtrackletMCM*> ((AliTRDtrackletBase*) GetUserData());
-  if (!trkl)
-    return;
-  printf("Det: %3i, ROB: %i, MCM: %2i\n", trkl->GetDetector(), trkl->GetROB(), trkl->GetMCM());
-  AliTRDmcmSim *mcm = new AliTRDmcmSim();
-  AliRunLoader *rl = AliEveEventManager::AssertRunLoader();
-  mcm->LoadMCM(rl, trkl->GetDetector(), trkl->GetROB(), trkl->GetMCM());
-  mcm->Tracklet();
-  mcm->Draw(opt);
 }
 
 //______________________________________________________________________________
@@ -650,3 +611,190 @@ void AliEveTRDTrack::SetStatus(UChar_t s)
   // save track status
   fTrackState = s;
 }
+
+
+AliEveTRDTrackletOnline::AliEveTRDTrackletOnline(AliTRDtrackletMCM *tracklet) :
+  TEveLine(),
+  fDetector(-1),
+  fROB(-1),
+  fMCM(-1)
+{
+  AliTRDtrackletMCM *trkl = new AliTRDtrackletMCM(*tracklet);
+  SetUserData(trkl);
+
+  fDetector = trkl->GetDetector();
+  fROB = trkl->GetROB();
+  fMCM = trkl->GetMCM();
+
+  SetName("TRD tracklet");
+  SetTitle(Form("Det: %i, ROB: %i, MCM: %i, Label: %i\n0x%08x", 
+                trkl->GetDetector(), trkl->GetROB(), trkl->GetMCM(), trkl->GetLabel(),
+                trkl->GetTrackletWord()));
+  SetLineColor(kRed);
+
+  AliTRDgeometry *geo = new AliTRDgeometry();
+//  TGeoHMatrix *matrix = geo->GetClusterMatrix(trkl->GetDetector());
+
+  Float_t length = 3.;
+  Double_t x[3];
+  Double_t p[3];
+  x[0] = trkl->GetX();
+  x[1] = trkl->GetY();
+  x[2] = trkl->GetZ();
+
+  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]);
+
+  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;
+}
+
+AliEveTRDTrackletOnline::AliEveTRDTrackletOnline(AliTRDtrackletWord *tracklet) :
+  TEveLine(),
+  fDetector(-1),
+  fROB(-1),
+  fMCM(-1)
+{
+  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) ;
+
+  SetName("TRD tracklet");
+  SetTitle(Form("Det: %i, ROB: %i, MCM: %i, Label: %i\n0x%08x", 
+                trkl->GetDetector(), fROB, fMCM, -1,
+                trkl->GetTrackletWord()));
+  SetLineColor(kRed);
+
+//  AliTRDgeometry *geo = new AliTRDgeometry();
+
+  Float_t length = 3.;
+  Double_t x[3];
+  Double_t p[3];
+  x[0] = trkl->GetX();
+  x[1] = trkl->GetY();
+  x[2] = trkl->GetZ();
+  
+  geo->RotateBack(trkl->GetDetector(), x, p);
+  SetPoint(0, p[0], p[1], p[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;
+}
+
+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;
+}
+
+void AliEveTRDTrackletOnline::ShowMCM(Option_t *opt) const
+{
+  if (fDetector < 0 || fROB < 0 || fMCM < 0)
+    return;
+
+  AliEveTRDmcm *evemcm = new AliEveTRDmcm();
+  evemcm->Init(fDetector, fROB, fMCM);
+  evemcm->LoadDigits();
+  evemcm->Draw(opt);
+
+  TEveElementList *mcmlist = 0x0;
+  if (gEve->GetCurrentEvent()) 
+    mcmlist = (TEveElementList*) gEve->GetCurrentEvent()->FindChild("TRD MCMs");
+  if (!mcmlist) {
+    mcmlist = new TEveElementList("TRD MCMs");
+    gEve->AddElement(mcmlist);
+  }
+  gEve->AddElement(evemcm, mcmlist);
+}
+
+
+AliEveTRDmcm::AliEveTRDmcm() :
+  TEveElement(),
+  TNamed(),
+  fMCM(new AliTRDmcmSim())
+{
+  SetName("MCM");
+  SetTitle("Unknown MCM");
+}
+
+AliEveTRDmcm::~AliEveTRDmcm()
+{
+  delete fMCM;
+}
+
+Bool_t AliEveTRDmcm::Init(Int_t det, Int_t rob, Int_t mcm)
+{
+  SetName(Form("MCM: Det. %i, ROB %i, MCM %i", det, rob, mcm));
+  SetTitle(Form("MCM: Det. %i, ROB %i, MCM %i", det, rob, mcm));
+  fMCM->Init(det, rob, mcm);
+  fMCM->Reset();
+  return kTRUE;
+}
+
+Bool_t AliEveTRDmcm::LoadDigits()
+{
+  AliRunLoader *rl = AliEveEventManager::AssertRunLoader();
+  return fMCM->LoadMCM(rl, fMCM->GetDetector(), 
+                       fMCM->GetRobPos(), fMCM->GetMcmPos());
+}
+
+Bool_t AliEveTRDmcm::Filter()
+{
+  fMCM->Filter();
+  return kTRUE;
+}
+
+Bool_t AliEveTRDmcm::Tracklet()
+{
+  fMCM->Tracklet();
+  return kTRUE;
+}
+
+void AliEveTRDmcm::Draw(Option_t* option)
+{
+  const char *mcmname = Form("mcm_%i_%i_%i", fMCM->GetDetector(),
+                             fMCM->GetRobPos(), fMCM->GetMcmPos());
+
+  TCanvas *c = dynamic_cast<TCanvas*> (gROOT->FindObject(mcmname));
+  if (!c)
+    c = gEve->AddCanvasTab("TRD MCM");
+  c->SetTitle(Form("MCM %i on ROB %i of det. %i", 
+                   fMCM->GetMcmPos(), fMCM->GetRobPos(), fMCM->GetDetector()));
+  c->SetName(mcmname);
+  c->cd();
+  fMCM->Draw(option);
+}
+
+Bool_t AliEveTRDmcm::AssignPointer(const char* ptrname)
+{
+  gROOT->ProcessLine(Form("AliTRDmcmSim* %s = (AliTRDmcmSim *) 0x%x", ptrname, fMCM));
+  return kTRUE;
+}
index 5ebed7c..e87826b 100644 (file)
@@ -95,16 +95,14 @@ private:
 
 
 class AliTRDseedV1;
-class AliTRDtrackletMCM;
 class AliEveTRDTracklet : public TEveLine
 {
 public:
   AliEveTRDTracklet(AliTRDseedV1 *trklt);
-  AliEveTRDTracklet(AliTRDtrackletMCM *tracklet);
   ~AliEveTRDTracklet();
   AliEveTRDClusters* GetClusters() const {return fClusters;}
   void               Print(Option_t *o="") const; // *MENU*
-  void               ShowMCM(Option_t *opt = "RHT") const; // *MENU*
+
 private:
   AliEveTRDClusters *fClusters;  // clusters
 
@@ -152,4 +150,52 @@ private:
 };
 
 
+#include "TEveElement.h"
+
+class AliTRDtrackletMCM;
+class AliTRDtrackletWord;
+class AliEveTRDTrackletOnline : public TEveLine
+{
+public:
+  AliEveTRDTrackletOnline(AliTRDtrackletMCM *tracklet);
+  AliEveTRDTrackletOnline(AliTRDtrackletWord *tracklet);
+  ~AliEveTRDTrackletOnline();
+
+//  void               Print(Option_t *o="") const; // *MENU*
+  void               ShowMCM(Option_t *opt = "RHT") const; // *MENU*
+private:
+  Int_t fDetector;
+  Int_t fROB;
+  Int_t fMCM;
+
+  AliEveTRDTrackletOnline(const AliEveTRDTrackletOnline&);            // Not implemented
+  AliEveTRDTrackletOnline& operator=(const AliEveTRDTrackletOnline&); // Not implemented
+
+  ClassDef(AliEveTRDTrackletOnline, 0); // TRD tracklet visualisation
+};
+
+
+class AliTRDmcmSim;
+class AliEveTRDmcm : public TEveElement, public TNamed
+{
+ public:
+  AliEveTRDmcm();
+  ~AliEveTRDmcm();
+
+  Bool_t Init(Int_t det, Int_t rob, Int_t mcm); // *MENU*
+  Bool_t LoadDigits(); // *MENU*
+  Bool_t Filter(); // *MENU*
+  Bool_t Tracklet(); // *MENU*
+  void Draw(Option_t* option = "FHT"); // *MENU*
+  Bool_t AssignPointer(const char* ptrname = "mcmtest"); // *MENU*
+
+ protected:
+  AliTRDmcmSim *fMCM;
+
+  AliEveTRDmcm(const AliEveTRDmcm&); // not implemented
+  AliEveTRDmcm& operator=(const AliEveTRDmcm&); // not implemented
+
+  ClassDef(AliEveTRDmcm, 0);
+};
+
 #endif
index 1822d35..a028c40 100644 (file)
@@ -163,7 +163,7 @@ Bool_t AliEveTRDLoader::GoToEvent(int ev)
     if(!t) return kFALSE;
     if(!LoadClusters(t)) return kFALSE;
   } else if(fDataType&kTRDTracklets){
-    t = (TTree*)gDirectory->Get("TreeT");
+    t = (TTree*)gDirectory->Get("tracklets");
     if(!t) return kFALSE;
     if(!LoadTracklets(t)) return kFALSE;
   } else AliWarning("Please select first the type of data that you want to monitor and then hit the \"Load\" button.");
@@ -260,22 +260,19 @@ Bool_t AliEveTRDLoader::LoadDigits(TTree *tD)
 
 
 //______________________________________________________________________________
-Bool_t AliEveTRDLoader::LoadTracklets(TTree *tT)
+Bool_t AliEveTRDLoader::LoadTracklets(TTree *trklTree)
 {
   // Load tracklets.
 
   AliInfo("Loading ...");
   if(!fChildren.size()) return kFALSE;
 
-  TObjArray *tracks = new TObjArray();
-  tT->SetBranchAddress("TRDmcmTracklet",&tracks);
 
   AliEveTRDChamber *chmb = 0x0;
-  AliTRDmcmTracklet *trk=0x0;
+
   for(int idet=0; idet<540; idet++){
-    if(!tT->GetEntry(idet)) continue;
-    if(tracks->GetEntriesFast()) trk = (AliTRDmcmTracklet*)tracks->UncheckedAt(0);
-    if((chmb = GetChamber(trk->GetDetector()))) chmb->LoadTracklets(tracks);
+    if((chmb = GetChamber(idet)))
+      chmb->LoadTracklets(trklTree);
   }
 
   return kTRUE;
@@ -320,7 +317,7 @@ Bool_t AliEveTRDLoader::Open(const char *filename, const char *dir)
       fDataType = 0; 
     }
     fDataType|=kTRDClusters;  
-  } else if(((TObjString*)(*so)[1])->GetString().CompareTo("Tracks") == 0){
+  } else if(((TObjString*)(*so)[1])->GetString().CompareTo("Tracklets") == 0){
     if(count && !fDataType&kTRDTracklets){ 
       AliWarning("Data type set to TRACKLETS according to file name. Previous settings will be overwritten.");
       fDataType = 0; 
index d5b6a86..29a57d3 100644 (file)
@@ -70,7 +70,7 @@ protected:
   virtual Bool_t       LoadHits(TTree *tH);
   virtual Bool_t       LoadClusters(TTree *tC);
   virtual Bool_t       LoadDigits(TTree *tD);
-  virtual Bool_t       LoadTracklets(TTree *tT);
+  virtual Bool_t       LoadTracklets(TTree *trklTree);
           void    SetDataLinked(Bool_t linked = kTRUE) {SetBit(1, linked);}
 
   virtual void         Unload();
index 4b0f44f..da05223 100644 (file)
@@ -11,6 +11,7 @@
 #include "AliEveTRDData.h"
 #include "EveBase/AliEveEventManager.h"
 
+#include "TTree.h"
 #include "TGListTree.h"
 #include "TClonesArray.h"
 #include "TGeoManager.h"
@@ -30,7 +31,7 @@
 #include "AliTRDhit.h"
 #include "AliTRDcluster.h"
 #include "AliTRDtrackingChamber.h"
-#include "AliTRDmcmTracklet.h"
+#include "AliTRDtrackletMCM.h"
 
 ClassImp(AliEveTRDChamber)
 ClassImp(AliEveTRDNode)
@@ -360,39 +361,42 @@ void AliEveTRDChamber::LoadHits(TClonesArray *hits, Int_t &idx)
 }
 
 //______________________________________________________________________________
-void AliEveTRDChamber::LoadTracklets(TObjArray *tracks)
+void AliEveTRDChamber::LoadTracklets(TTree *trklTree)
 {
   //
   // Draw tracks
   //
+
   if(!fGeo){
     Error("LoadTracklets()", Form("Geometry not set for chamber %d. Please call first AliEveTRDChamber::SetGeometry().", fDet));
     return;
   }
 
   if(!fTracklets){
-    fTracklets = new std::vector<TEveTrack*>;
-  } else fTracklets->clear();
-
-
-  AliTRDmcmTracklet *trk = 0x0;
-  Double_t cloc[3], cglo[3];
-  for(int itrk=0; itrk<tracks->GetEntries();itrk++){
-    trk = (AliTRDmcmTracklet*)tracks->At(itrk);
-    trk->MakeTrackletGraph(fGeo,.5);
-    fTracklets->push_back(new TEveTrack());
-    fTracklets->back()->SetLineColor(4);
-
-    cloc[0] = trk->GetTime0(); // x0
-    cloc[1] = trk->GetOffset(); // y0
-    cloc[2] = trk->GetRowz(); // z
-    fGeo->RotateBack(fDet,cloc,cglo);
-    fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
-
-    cloc[0] += 3.7; // x1
-    cloc[1] += TMath::Tan(trk->GetSlope()*TMath::Pi()/180.) * 3.7; // y1
-    fGeo->RotateBack(fDet,cloc,cglo);
-    fTracklets->back()->SetNextPoint(cglo[0], cglo[1], cglo[2]);
+    fTracklets = new TClonesArray("AliEveTRDTrackletOnline",100);
+  } else {
+    fTracklets->Delete();
+    TEveElementList *trklChild = (TEveElementList*) FindChild("Tracklets");
+    trklChild->Destroy();
+  }
+
+
+  TBranch *mcmBranch = trklTree->GetBranch("mcmtrklbranch");
+  if (!mcmBranch)
+    return;
+
+  AliTRDtrackletMCM *trkl = 0x0;
+  mcmBranch->SetAddress(&trkl);
+
+  TEveElementList* listOfTracklets = new TEveElementList("Tracklets");
+  gEve->AddElement(listOfTracklets, this);
+
+  for(Int_t iTrkl = 0; iTrkl < mcmBranch->GetEntries(); iTrkl++){
+    mcmBranch->GetEntry(iTrkl);
+    if (trkl->GetDetector() == GetID()) {
+      new ((*fTracklets)[fTracklets->GetEntriesFast()]) AliEveTRDTrackletOnline(trkl);
+      gEve->AddElement(new AliEveTRDTrackletOnline(trkl), listOfTracklets);
+    }
   }
   fLoadTracklets = kTRUE;
 }
@@ -416,7 +420,8 @@ void AliEveTRDChamber::Paint(Option_t* option)
   if(fHits && fRnrHits) fHits->GetObject()->Paint(option);
 
   if(fTracklets && fRnrTracklets){
-    for(std::vector<TEveTrack*>::iterator i=fTracklets->begin(); i != fTracklets->end(); ++i) (*i)->Paint(option);
+//    for (Int_t iTrkl = 0; iTrkl < fTracklets->GetEntriesFast(); iTrkl++) 
+//      ((AliEveTRDTrackletOnline*) (*fTracklets)[iTrkl])->Paint();
   }
 }
 
@@ -439,7 +444,7 @@ void AliEveTRDChamber::Reset()
     fLoadRecPoints = kFALSE;
   }
   if(fTracklets){
-    fTracklets->clear();
+    fTracklets->Delete();
     fLoadTracklets = kFALSE;
   }
 }
index d0cfde2..1d3f2a8 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "AliEveTRDModule.h"
 
+class TTree;
 class TObjArray;
 class TClonesArray;
 
@@ -55,7 +56,7 @@ public:
   void  LoadClusters(TObjArray *cs);
   void  LoadClusters(AliTRDtrackingChamber *tc);
   void  LoadDigits(AliTRDdigitsManager *digits);
-  void  LoadTracklets(TObjArray *ts);
+  void  LoadTracklets(TTree *trklTree);
 
   void  Paint(Option_t* option="");
   void  Reset();
@@ -67,7 +68,7 @@ protected:
   AliEveTRDDigits  *fDigits;    // digits representation
   AliEveTRDHits    *fHits;      // hits representation
   AliEveTRDHits    *fRecPoints; // cluster representation
-  std::vector<TEveTrack*> *fTracklets; // mcm tracklets
+  TClonesArray     *fTracklets; // mcm tracklets
   AliTRDgeometry   *fGeo;      // TRD geometry
   TEveGeoTopNode   *fShape;    // rendarable geometry of the chamber 
   // data representation section
index 1812c83..bc81e79 100644 (file)
 #pragma link C++ class AliEveTRDHitsEditor+;
 #pragma link C++ class AliEveTRDClusters+;
 #pragma link C++ class AliEveTRDTracklet+;
+#pragma link C++ class AliEveTRDTrackletOnline+;
 #pragma link C++ class AliEveTRDTrack+;
 #pragma link C++ class AliEveTRDTrackList+;
 #pragma link C++ class AliEveTRDTrackListEditor+;
 #pragma link C++ class AliEveTRDMacroWizzard+;
+#pragma link C++ class AliEveTRDmcm+;
 
 // TOF
 #pragma link C++ class AliEveTOFDigitsInfo+;