MC-dependent part of AliRun extracted in AliMC (F.Carminati)
[u/mrichter/AliRoot.git] / RICH / AliRICHDisplay.cxx
index cb879b2..4d67d34 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-  $Log$
-  Revision 1.3  2000/06/09 14:52:08  jbarbosa
-  New tentative ellipse drawing routine
-
-  Revision 1.1  2000/04/19 13:07:45  morsch
-  Digits, clusters and reconstruction results added.
-
-*/
-
+/* $Id$ */
 
 //////////////////////////////////////////////////////////////////////////
 //                                                                      //
@@ -40,6 +31,8 @@
 #include <TView.h>
 #include <TText.h>
 #include <TPolyMarker3D.h>
+#include <TAtt3D.h>
+#include <TAttLine.h>
 #include <TPolyMarker.h>
 #include <TPaveLabel.h>
 #include <TPaveText.h>
@@ -49,6 +42,7 @@
 #include <TArc.h>
 #include <TTUBE.h>
 #include <TSlider.h>
+#include <TGeometry.h>
 #include <TSliderBox.h>
 #include <TGaxis.h>
 #include <TVirtualX.h>
 #include "AliRICHConst.h"
 #include "AliRICHDisplay.h"
 #include "AliRICHPoints.h"
+#include "AliHeader.h"
 
-#include "AliRICHHit.h"
-#include "AliRICHCerenkov.h"
-#include "AliRICHPadHit.h"
+#include "AliRICHSDigit.h"
 #include "AliRICHDigit.h"
 #include "AliRICHRawCluster.h"
-#include "AliRICHRecHit.h"
-#include "AliRICHEllipse.h"
+#include "AliRICHRecHit1D.h"
+#include "AliMC.h"
 
 ClassImp(AliRICHDisplay)
     
@@ -81,7 +74,7 @@ AliRICHDisplay::AliRICHDisplay()
 { 
 
 // default constructor
-
+    fColPad = 0;
     fPoints = 0;
     fPhits = 0;
     fPCerenkovs = 0;
@@ -152,8 +145,10 @@ AliRICHDisplay::AliRICHDisplay(Int_t size)
     SetRange();
     
     // Set front view by default
-    fTheta = 90;
-    fPhi   = 90;
+    fTheta = 90;              //inclined HMPID
+    fPhi   = 30;              //inclined HMPID
+    //fTheta = 90;               //normal HMPID
+    //fPhi   = 90;                //normal HMPID
     fPsi   = 0;
     fChamber = 1;
     fCathode = 1;
@@ -206,7 +201,6 @@ AliRICHDisplay::AliRICHDisplay(Int_t size)
     Float_t dxtr     = 0.15;
     Float_t dytr     = 0.45;
     fTrigPad = new TPad("trigger", "range and mode pad",0,0,dxtr,dytr);
-    fTrigPad->SetEditable(kFALSE);
     fTrigPad->Draw();
     fTrigPad->cd();
     fTrigPad->SetFillColor(22);
@@ -231,6 +225,8 @@ AliRICHDisplay::AliRICHDisplay(Int_t size)
     button->Draw();
     AppendPad(); // append display object as last object to force selection
     
+    fTrigPad->SetEditable(kFALSE);
+    fButtons->SetEditable(kFALSE);
     fCanvas->cd();
     fCanvas->Update();
 }
@@ -274,7 +270,6 @@ void AliRICHDisplay::DisplayButtons()
     
     
     fButtons = new TPad("buttons", "newpad",0,0.45,0.15,1);
-    fButtons->SetEditable(kFALSE);
     fButtons->Draw();
     fButtons->SetFillColor(38);
     fButtons->SetBorderSize(2);
@@ -408,7 +403,7 @@ void AliRICHDisplay::DisplayColorScale()
     gPad->Range(x1,y1,x2,y2);
     TText *text = new TText(0,0,"");
     text->SetTextFont(61);
-    text->SetTextSize(0.03);
+    text->SetTextSize(0.2);
     text->SetTextAlign(22);
     
     TBox *box;
@@ -421,7 +416,7 @@ void AliRICHDisplay::DisplayColorScale()
        ylow = y1 + hs*(Float_t(i));
        yup  = y1 + hs*(Float_t(i+1));
        color = 701+i;
-       Double_t logscale=Double_t(i+1)*(TMath::Log(adc_satm)/22);
+       Double_t logscale=Double_t(i+1)*(TMath::Log(kadc_satm)/22);
        Int_t scale=(Int_t)TMath::Exp(logscale);
        sprintf(label,"%d",scale);
        box = new TBox(xlow, ylow, xup, yup);
@@ -505,7 +500,7 @@ void AliRICHDisplay::DrawRecHits()
     points = fRecpoints;
     if (!points) return;
     nrec = points->GetEntriesFast();
-    printf("Nrec %d\n",nrec);
+    //printf("Nrec %d\n",nrec);
     for (irec=0; irec < nrec; irec++) {
        pm = (AliRICHPoints*)points->UncheckedAt(irec);
        if (!pm) continue;
@@ -617,7 +612,7 @@ void AliRICHDisplay::DrawTitle(Option_t *option)
        sprintf(ptitle,"Alice event: %d, Run:%d",
                gAlice->GetHeader()->GetEvent(), gAlice->GetHeader()->GetRun());
        title->AddText(ptitle);
-       Int_t nparticles = gAlice->Particles()->GetEntriesFast();
+       Int_t nparticles = gAlice->GetMCApp()->Particles()->GetEntriesFast();
        sprintf(ptitle,"Nparticles = %d Nhits = %d Npads fired = %d",
                nparticles, fHitsCuts,fClustersCuts);
        title->AddText(ptitle);
@@ -655,11 +650,14 @@ void AliRICHDisplay::DrawView(Float_t theta, Float_t phi, Float_t psi)
    //add clusters to the pad
    DrawClusters();
    DrawHits();
-//   DrawCerenkovs();
-   printf("Calling DrawCoG\n");
-   DrawCoG();
-   printf("Calling DrawRecHits\n");
-   DrawRecHits();
+   //DrawCerenkovs();
+   if (gAlice->TreeR())
+     {
+       //printf("Calling DrawCoG\n");
+        DrawCoG();
+       //printf("Calling DrawRecHits\n");
+        DrawRecHits();
+     }
    /*for (Int_t i=0;i<7;i++)
      LoadRecHits(i,1);*/
    
@@ -683,7 +681,8 @@ void AliRICHDisplay::ExecuteEvent(Int_t event, Int_t px, Int_t py)
    
    if (px == 0 && py == 0) { //when called by sliders
        if (event == kButton1Up) {
-          Draw();
+        printf("Drawing event %d\n",event);
+        Draw();
        }
        return;
    }
@@ -745,14 +744,14 @@ void AliRICHDisplay::LoadCoG(Int_t chamber, Int_t cathode)
 
    if (chamber > 6) return;
 
-   printf("Entering LoadCoG\n");
+   //printf("Entering LoadCoG\n");
 
 
    AliRICH *pRICH  = (AliRICH*)gAlice->GetModule("RICH");
    AliRICHChamber*  iChamber;
 
    TClonesArray *pRICHrawclust  = pRICH->RawClustAddress(chamber);
-   printf ("Chamber:%d has adress:%p\n", chamber, pRICHrawclust );
+   //printf ("Chamber:%d has adress:%p\n", chamber, pRICHrawclust );
    if (pRICHrawclust == 0) return;
 
    pRICH->ResetRawClusters();
@@ -761,7 +760,7 @@ void AliRICHDisplay::LoadCoG(Int_t chamber, Int_t cathode)
    Int_t nent=(Int_t)gAlice->TreeR()->GetEntries();
    gAlice->TreeR()->GetEvent(nent-1+cathode-1);
    Int_t nrawcl = pRICHrawclust->GetEntriesFast();
-   printf ("nrawcl:%d\n",nrawcl);
+   //printf ("nrawcl:%d\n",nrawcl);
    if (nrawcl == 0) return;
    if (fRpoints == 0) fRpoints = new TObjArray(nrawcl);
    
@@ -781,7 +780,7 @@ void AliRICHDisplay::LoadCoG(Int_t chamber, Int_t cathode)
        points->SetHitIndex(-1);
        points->SetTrackIndex(-1);
        points->SetDigitIndex(-1);
-       Float_t  vectorLoc[3]={mRaw->fX,6.276,mRaw->fY};
+       Float_t  vectorLoc[3]={mRaw->fX,5,mRaw->fY};
        Float_t  vectorGlob[3];
        iChamber->LocaltoGlobal(vectorLoc,vectorGlob);
        points->SetPoint(iraw,vectorGlob[0],vectorGlob[1],vectorGlob[2]);
@@ -795,60 +794,52 @@ void AliRICHDisplay::LoadRecHits(Int_t chamber, Int_t cathode)
 
    if (chamber > 6) return;
 
-   printf("Entering LoadRecHits\n");
+   ///printf("Entering LoadRecHits\n");
 
 
    AliRICH *pRICH  = (AliRICH*)gAlice->GetModule("RICH");
    AliRICHChamber*  iChamber;
 
-   TClonesArray *pRICHrechits  = pRICH->RecHitsAddress(chamber);
-   printf ("Chamber:%d has adress:%p\n", chamber, pRICHrechits );
-   if (pRICHrechits == 0) return;
+   TClonesArray *pRICHrechits1D  = pRICH->RecHitsAddress1D(chamber);
+   //printf ("Chamber:%d\n", chamber);
+   if (pRICHrechits1D != 0)
+     {
 
-   //RICH->ResetRecHits();
+       //RICH->ResetRecHits();
 
 
-   Int_t nent=(Int_t)gAlice->TreeR()->GetEntries();
-   gAlice->TreeR()->GetEvent(nent-1+cathode-1);
-   Int_t nrechits = pRICHrechits->GetEntriesFast();
-   printf ("nrechits:%d\n",nrechits);
-   if (nrechits == 0) return;
-   if (fRecpoints == 0) fRecpoints = new TObjArray(50);
-   
-   iChamber = &(pRICH->Chamber(chamber));
-   AliRICHRecHit  *mRec;
-   AliRICHPoints *points = 0;
-   //AliRICHEllipse *ellipse = 0;
-   //
-   //loop over all rechits and store their position  
-
-   points = new AliRICHPoints(nrechits);
-   for (Int_t irec=0;irec<nrechits;irec++) {
-       mRec   = (AliRICHRecHit*)pRICHrechits->UncheckedAt(irec);
-       fRecpoints->AddAt(points,irec);
-       points->SetMarkerColor(38);
-       points->SetMarkerStyle(8);
-       points->SetMarkerSize(1.);
-       points->SetParticle(-1);
-       points->SetHitIndex(-1);
-       points->SetTrackIndex(-1);
-       points->SetDigitIndex(-1);
-       Float_t  vectorLoc[3]={mRec->fX,6.276,mRec->fY};
-       Float_t  vectorGlob[3];
-       iChamber->LocaltoGlobal(vectorLoc,vectorGlob);
-       points->SetPoint(irec,vectorGlob[0],vectorGlob[1],vectorGlob[2]);
-       //Float_t theta = iChamber->GetRotMatrix()->GetTheta();
-       //Float_t phi   = iChamber->GetRotMatrix()->GetPhi();      
-       //ellipse=new TEllipse(vectorGlob[0],vectorGlob[2],10,10,0,360,phi);
-       printf("Generating ellipse %d\n",irec);
-       AliRICHEllipse *ellipse=new AliRICHEllipse(mRec->fX,mRec->fY,mRec->fOmega,mRec->fTheta,mRec->fPhi);
-       ellipse->CreatePoints(chamber);
-       //ellipse->SetFillStyle(1001);
-       ellipse->SetMarkerColor(38);
-       ellipse->Draw();
-       //marker->SetRefObject((TObject*)points);
-       //points->Set3DMarker(0, marker); 
-   }
+       Int_t nent1D=(Int_t)gAlice->TreeR()->GetEntries();
+       gAlice->TreeR()->GetEvent(nent1D-1+cathode-1);
+       Int_t nrechits1D = pRICHrechits1D->GetEntriesFast();
+       //printf ("nrechits1D:%d\n",nrechits1D);
+       if (nrechits1D != 0)
+        {
+          if (fRecpoints == 0) fRecpoints = new TObjArray(50);
+          
+          iChamber = &(pRICH->Chamber(chamber));
+          AliRICHRecHit1D  *mRec1D;
+          AliRICHPoints *points1D = 0;
+          //loop over all rechits and store their position  
+          
+          points1D = new AliRICHPoints(nrechits1D);
+          for (Int_t irec=0;irec<nrechits1D;irec++) {
+            mRec1D   = (AliRICHRecHit1D*)pRICHrechits1D->UncheckedAt(irec);
+            fRecpoints->AddAt(points1D,irec);
+            points1D->SetMarkerColor(38);
+            points1D->SetMarkerStyle(8);
+            points1D->SetMarkerSize(.5);
+            points1D->SetParticle(-1);
+            points1D->SetHitIndex(-1);
+            points1D->SetTrackIndex(-1);
+            points1D->SetDigitIndex(-1);
+            Float_t  vectorLoc[3]={mRec1D->fX,5,mRec1D->fY};
+            Float_t  vectorGlob[3];
+            iChamber->LocaltoGlobal(vectorLoc,vectorGlob);
+            points1D->SetPoint(irec,vectorGlob[0],vectorGlob[1],vectorGlob[2]);
+          }
+        }
+     }
+
 }
 //___________________________________________
 void AliRICHDisplay::LoadDigits()
@@ -859,56 +850,64 @@ void AliRICHDisplay::LoadDigits()
    ResetPoints();
    AliRICH *pRICH  = (AliRICH*)gAlice->GetDetector("RICH");
    AliRICHChamber*       iChamber;
-   AliRICHSegmentation*  segmentation;
+   AliSegmentation*      segmentation;
    Int_t nAllDigits=0;
    Int_t ich;
+
+   //printf("Entering LoadDigits\n");
+
+   if (gAlice->TreeD())
+     {
    
-   for (ich=0; ich<kNCH; ich++) {
-       TClonesArray *pRICHdigits  = pRICH->DigitsAddress(ich);
-       if (pRICHdigits == 0) continue;
-       gAlice->ResetDigits();
-       gAlice->TreeD()->GetEvent(1);
-       Int_t ndigits = pRICHdigits->GetEntriesFast();
-        nAllDigits+=ndigits;
-   }
-   if (fPoints == 0) fPoints = new TObjArray(nAllDigits);   
-   Int_t counter=0;
-   for (ich=0; ich<kNCH; ich++) {
-       TClonesArray *pRICHdigits  = pRICH->DigitsAddress(ich);
-       if (pRICHdigits == 0) continue;
-       gAlice->ResetDigits();
-       gAlice->TreeD()->GetEvent(1);
-       Int_t ndigits = pRICHdigits->GetEntriesFast();
-       if (ndigits == 0) continue;
-       iChamber = &(pRICH->Chamber(ich));
-       segmentation=iChamber->GetSegmentationModel();
-       Float_t dpx  = segmentation->Dpx();
-       Float_t dpy  = segmentation->Dpy();
-
-       //printf("Dpx:%d, Dpy:%d\n",dpx,dpy);
-       
-       AliRICHDigit  *mdig;
-       AliRICHPoints *points = 0;
-       TMarker3DBox  *marker = 0;
-       //
-       //loop over all digits and store their position
-       Int_t npoints=1;
+       for (ich=0; ich<kNCH; ich++) {
+        TClonesArray *pRICHdigits  = pRICH->DigitsAddress(ich);
+        //printf ("Chamber:%d has adress:%p\n", ich, pRICHdigits );
+        if (pRICHdigits == 0) continue;
+        gAlice->ResetDigits();
+        gAlice->TreeD()->GetEvent(0);
+        Int_t ndigits = pRICHdigits->GetEntriesFast();
+        //printf("ndigits:%d\n",ndigits);
+        nAllDigits+=ndigits;
+       }
        
-       for (Int_t digit=0;digit<ndigits;digit++) {
+       if (fPoints == 0) fPoints = new TObjArray(nAllDigits);   
+       Int_t counter=0;
+       for (ich=0; ich<kNCH; ich++) {
+        TClonesArray *pRICHdigits  = pRICH->DigitsAddress(ich);
+        if (pRICHdigits == 0) continue;
+        gAlice->ResetDigits();
+        gAlice->TreeD()->GetEvent(0);
+        Int_t ndigits = pRICHdigits->GetEntriesFast();
+        if (ndigits == 0) continue;
+        iChamber = &(pRICH->Chamber(ich));
+        segmentation=iChamber->GetSegmentationModel();
+        Float_t dpx  = segmentation->Dpx();
+        Float_t dpy  = segmentation->Dpy();
+        
+        //printf("Dpx:%d, Dpy:%d\n",dpx,dpy);
+        
+        AliRICHDigit  *mdig;
+        AliRICHPoints *points = 0;
+        TMarker3DBox  *marker = 0;
+        //
+        //loop over all digits and store their position
+        Int_t npoints=1;
+        
+        for (Int_t digit=0;digit<ndigits;digit++) {
           mdig    = (AliRICHDigit*)pRICHdigits->UncheckedAt(digit);
           points = new AliRICHPoints(npoints);
           fPoints->AddAt(points,counter);
           counter++;
-          Int_t charge=mdig->fSignal;
-          Int_t index=Int_t(TMath::Log(charge)/(TMath::Log(adc_satm)/22));
+          Int_t charge=mdig->Signal();
+          Int_t index=Int_t(TMath::Log(charge)/(TMath::Log(kadc_satm)/22));
           Int_t color=701+index;
           if (color>722) color=722;
           points->SetMarkerColor(color);
           points->SetMarkerStyle(21);
           points->SetMarkerSize(0.5);
-          Float_t xpad, ypad;
-          segmentation->GetPadCxy(mdig->fPadX, mdig->fPadY,xpad, ypad);
-          Float_t vectorLoc[3]={xpad,6.276,ypad};
+          Float_t xpad, ypad, zpad;
+          segmentation->GetPadC(mdig->PadX(), mdig->PadY(),xpad, ypad, zpad);
+          Float_t vectorLoc[3]={xpad,5,ypad};
           Float_t  vectorGlob[3];
           iChamber->LocaltoGlobal(vectorLoc,vectorGlob);
           points->SetParticle(-1);
@@ -916,8 +915,9 @@ void AliRICHDisplay::LoadDigits()
           points->SetTrackIndex(-1);
           points->SetDigitIndex(digit);
           points->SetPoint(0,vectorGlob[0],vectorGlob[1],vectorGlob[2]);
+          //printf("Y position (digit): %f\n", vectorGlob[1]);
           
-          segmentation->GetPadCxy(mdig->fPadX, mdig->fPadY, xpad, ypad);
+          segmentation->GetPadC(mdig->PadX(), mdig->PadY(), xpad, ypad, zpad);
           Float_t theta = iChamber->GetRotMatrix()->GetTheta();
           Float_t phi   = iChamber->GetRotMatrix()->GetPhi();     
           marker=new TMarker3DBox(vectorGlob[0],vectorGlob[1],vectorGlob[2],
@@ -927,8 +927,9 @@ void AliRICHDisplay::LoadDigits()
           marker->SetFillColor(color);
           marker->SetRefObject((TObject*)points);
           points->Set3DMarker(0, marker);
-       } // loop over digits
-   } // loop over chambers 
+        } // loop over digits
+       } // loop over chambers 
+     } //if TreeD
 }
 
 
@@ -946,7 +947,7 @@ void AliRICHDisplay::LoadHits(Int_t chamber)
     AliRICHChamber*  iChamber;
     
     iChamber = &(pRICH->Chamber(chamber-1));
-    Int_t ntracks = (Int_t)gAlice->TreeH()->GetEntries();
+    Int_t ntracks = (Int_t)pRICH->TreeH()->GetEntries();
     Int_t track;
     
     if (fPhits == 0) fPhits = new TObjArray(ntracks);
@@ -958,7 +959,7 @@ void AliRICHDisplay::LoadHits(Int_t chamber)
     Int_t nAllHits=0;
     for (track=0; track<ntracks;track++) {
        gAlice->ResetHits();
-       gAlice->TreeH()->GetEvent(track);
+       pRICH->TreeH()->GetEvent(track);
        TClonesArray *pRICHhits  = pRICH->Hits();
        if (pRICHhits == 0) return;
        Int_t nhits = pRICHhits->GetEntriesFast();
@@ -970,19 +971,18 @@ void AliRICHDisplay::LoadHits(Int_t chamber)
     Int_t npoints=0;
     for (track=0; track<ntracks;track++) {
        gAlice->ResetHits();
-       gAlice->TreeH()->GetEvent(track);
+       pRICH->TreeH()->GetEvent(track);
        TClonesArray *pRICHhits  = pRICH->Hits();
        if (pRICHhits == 0) return;
        Int_t nhits = pRICHhits->GetEntriesFast();
        if (nhits == 0) continue;
-       AliRICHHit *mHit;
+       AliRICHhit *mHit;
        AliRICHPoints *points = 0;
        for (Int_t hit=0;hit<nhits;hit++) {
            points = new AliRICHPoints(1);
            fPhits->AddAt(points,npoints);
-            mHit = (AliRICHHit*)pRICHhits->UncheckedAt(hit);
-           TParticle *current = 
-               (TParticle*)(*gAlice->Particles())[mHit->fTrack];
+            mHit = (AliRICHhit*)pRICHhits->UncheckedAt(hit);
+           TParticle *current = (TParticle*)gAlice->GetMCApp()->Particle(mHit->Track());
            if (current->GetPdgCode() == 50000050) {
                points->SetMarkerColor(kBlue);
            } else if (current->GetPdgCode() == 50000051) {
@@ -992,11 +992,11 @@ void AliRICHDisplay::LoadHits(Int_t chamber)
            }
             points->SetMarkerStyle(5);
             points->SetMarkerSize(1.);
-            points->SetParticle(mHit->fTrack);
+            points->SetParticle(mHit->Track());
            points->SetHitIndex(hit);
             points->SetTrackIndex(track);
             points->SetDigitIndex(-1);
-            points->SetPoint(hit,mHit->fX, mHit->fY, mHit->fZ);
+            points->SetPoint(0,mHit->X(), mHit->Y(), mHit->Z());
            npoints++;
        }
     }
@@ -1018,7 +1018,7 @@ void AliRICHDisplay::LoadCerenkovs(Int_t chamber)
     iChamber = &(pRICH->Chamber(chamber-1));
     
     pRICH->SetTreeAddress();
-    Int_t ntracks = (Int_t)gAlice->TreeH()->GetEntries();
+    Int_t ntracks = (Int_t)pRICH->TreeH()->GetEntries();
     
     if (fPCerenkovs == 0) fPCerenkovs = new TObjArray(ntracks);
     TVector *xp = new TVector(1000);
@@ -1028,7 +1028,7 @@ void AliRICHDisplay::LoadCerenkovs(Int_t chamber)
     TVector *phit = new TVector(1000);
     for (Int_t track=0; track<ntracks;track++) {
        gAlice->ResetHits();
-       gAlice->TreeH()->GetEvent(track);
+       pRICH->TreeH()->GetEvent(track);
        TClonesArray *pRICHCerenkovs  = pRICH->Cerenkovs();
        if (pRICHCerenkovs == 0) return;
        Int_t nhits = pRICHCerenkovs->GetEntriesFast();
@@ -1042,9 +1042,9 @@ void AliRICHDisplay::LoadCerenkovs(Int_t chamber)
        
        for (Int_t hit=0;hit<nhits;hit++) {
             mCerenkov = (AliRICHCerenkov*)pRICHCerenkovs->UncheckedAt(hit);
-           (*xp)(npoints)=mCerenkov->fX;
-            (*yp)(npoints)=mCerenkov->fY;
-            (*zp)(npoints)=mCerenkov->fZ;
+           (*xp)(npoints)=mCerenkov->X();
+            (*yp)(npoints)=mCerenkov->Y();
+            (*zp)(npoints)=mCerenkov->Z();
             (*ptrk)(npoints)=Float_t(mCerenkov->GetTrack());
             (*phit)(npoints)=Float_t(hit);
             npoints++;
@@ -1107,7 +1107,7 @@ void AliRICHDisplay::SetChamberAndCathode(Int_t chamber, Int_t cathode)
     fChamber = chamber;
     fCathode = cathode;
     
-    printf("SetChamberAndCathode - fChamber fCathode %d %d\n",fChamber,fCathode);
+    //printf("SetChamberAndCathode - fChamber fCathode %d %d\n",fChamber,fCathode);
     if (!fPad) return;
     fPad->Clear();
     LoadDigits();