]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveDet/AliEveTRDData.cxx
From Jochen Klein.
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDData.cxx
index fe7c46405459bda3a3bdb5a7713791a873c98473..7b16e14b04d69775cb87d3041fc5778f55d65a18 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 "AliTRDhit.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"
@@ -44,6 +50,8 @@ ClassImp(AliEveTRDDigits)
 ClassImp(AliEveTRDClusters)
 ClassImp(AliEveTRDTracklet)
 ClassImp(AliEveTRDTrack)
+ClassImp(AliEveTRDTrackletOnline)
+ClassImp(AliEveTRDmcm)
 
 ///////////////////////////////////////////////////////////
 /////////////   AliEveTRDDigits       /////////////////////
@@ -100,9 +108,9 @@ void AliEveTRDDigits::ComputeRepresentation()
         if (q < threshold) continue;
 
         Double_t x[6] = {0., 0., Double_t(q), 0., 0., 0.}; 
-        Int_t  roc[3] = {ir, ic, 0}; 
-        Bool_t    out = kTRUE;
-        transform.Transform(&x[0], &roc[0], UInt_t(it), out, 0);
+        //Int_t  roc[3] = {ir, ic, 0}; 
+        //Bool_t    out = kTRUE;
+        //transform.Transform(&x[0], &roc[0], UInt_t(it), out, 0);
 
         scale = q < 512 ? q/512. : 1.;
         color  = 50+int(scale*50.);
@@ -174,7 +182,7 @@ void AliEveTRDDigits::Reset()
 
   TEveQuadSet::Reset(TEveQuadSet::kQT_RectangleYZ, kTRUE, 64);
   // MT fBoxes.fBoxes.clear();
-  //fData.Reset();
+  fData.Reset();
 }
 
 ///////////////////////////////////////////////////////////
@@ -352,7 +360,7 @@ AliEveTRDTracklet::AliEveTRDTracklet(AliTRDseedV1 *trklt):TEveLine()
   Float_t tilt = trklt->GetTilt();
   Float_t g[3];
   AliTRDcluster *c = 0x0;
-  for(Int_t ic=0; ic<AliTRDseed::knTimebins; ic++){
+  for(Int_t ic=0; ic<AliTRDseedV1::kNclusters; ic++){
     if(!(c = trklt->GetClusters(ic))) continue;
     if(!fClusters) AddElement(fClusters = new AliEveTRDClusters());
     dx = x0 - c->GetX();
@@ -399,6 +407,12 @@ AliEveTRDTracklet::AliEveTRDTracklet(AliTRDseedV1 *trklt):TEveLine()
   //SetPoint(1, x0, y0, z0);
 }
 
+
+AliEveTRDTracklet::~AliEveTRDTracklet() 
+{
+
+}
+
 //______________________________________________________________________________
 void AliEveTRDTracklet::Print(Option_t *o) const
 {
@@ -426,7 +440,6 @@ AliEveTRDTrack::AliEveTRDTrack(AliTRDtrackV1 *trk)
 
   AliTRDtrackerV1::SetNTimeBins(24);
 
-
   fRim = new AliRieman(trk->GetNumberOfClusters());
   AliTRDseedV1 *tracklet = 0x0;
   for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
@@ -435,17 +448,19 @@ AliEveTRDTrack::AliEveTRDTrack(AliTRDtrackV1 *trk)
     AddElement(new AliEveTRDTracklet(tracklet));
 
     AliTRDcluster *c = 0x0;
-    tracklet->ResetClusterIter(kFALSE);
-    while((c = tracklet->PrevCluster())){
+//     tracklet->ResetClusterIter(kFALSE);
+//     while((c = tracklet->PrevCluster())){
+    for(Int_t ic=AliTRDseedV1::kNtb; ic--;){
+      if(!(c=tracklet->GetClusters(ic))) continue;
       Float_t xc = c->GetX();
       Float_t yc = c->GetY();
       Float_t zc = c->GetZ();
       Float_t zt = tracklet->GetZref(0) - (tracklet->GetX0()-xc)*tracklet->GetZref(1); 
       yc -= tracklet->GetTilt()*(zc-zt);
-      fRim->AddPoint(xc, yc, zc, 1, 10);
+      fRim->AddPoint(xc, yc, zc, .05, 2.3);
     }
   }
-  fRim->Update();
+  if(trk->GetNumberOfTracklets()>1) fRim->Update();
   SetStatus(fTrackState);
 }
 
@@ -510,16 +525,17 @@ void AliEveTRDTrack::SetStatus(UChar_t s)
       } else { 
         //printf("Rieman track\n");
         // if(trk->GetNumberOfTracklets() >=4) AliTRDtrackerV1::FitRiemanTilt(trk, 0x0, kTRUE, nc, fPoints);
-        Float_t x = 0.;
+
+/*        Float_t x = 0.;
         for(Int_t ip = nc; ip--;){
           x = fPoints[ip].GetX();
           fPoints[ip].SetXYZ(x, fRim->GetYat(x), fRim->GetZat(x));
-        }
+        }*/
       }
     }
   
     Float_t global[3];
-    for(Int_t ip=0; ip<nc; ip++){
+    for(Int_t ip=0; ip<0/*nc*/; ip++){
       fPoints[ip].Rotate(-fAlpha).GetXYZ(global);
       SetPoint(ip, global[0], global[1], global[2]);
     }
@@ -595,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(kGreen);
+
+  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;
+}