]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDmatrix.cxx
Using sync TTimer instead of the a-sync one (C.Cheshkov)
[u/mrichter/AliRoot.git] / TRD / AliTRDmatrix.cxx
index b429bade5695c155801c0ee5d2be6a305776d632..0099ade25add518b431efc334db9d23a8028540e 100644 (file)
@@ -1,10 +1,35 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
 //  Contains the pixel information for one TRD chamber                       //
 //                                                                           //
+//                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
+#include <TObjArray.h>
+#include <TH2.h>
+#include <TH3.h>
+#include <TStyle.h>
+#include <TCanvas.h>
+
 #include "AliTRDmatrix.h"
+#include "AliTRDpixel.h"
 
 ClassImp(AliTRDmatrix)
 
@@ -50,9 +75,23 @@ AliTRDmatrix::AliTRDmatrix(Int_t nRow, Int_t nCol, Int_t nTime
 
 }
 
+//_____________________________________________________________________________
+AliTRDmatrix::AliTRDmatrix(const AliTRDmatrix &m):TObject(m)
+{
+  //
+  // AliTRDmatrix copy constructor
+  //
+
+  ((AliTRDmatrix &) m).Copy(*this);
+
+}
+
 //_____________________________________________________________________________
 AliTRDmatrix::~AliTRDmatrix()
 {
+  //
+  // AliTRDmatrix destructor
+  //
 
   if (fPixelArray) {
     fPixelArray->Delete();
@@ -61,6 +100,18 @@ AliTRDmatrix::~AliTRDmatrix()
 
 }
 
+//_____________________________________________________________________________
+AliTRDmatrix &AliTRDmatrix::operator=(const AliTRDmatrix &m)
+{
+  //
+  // Assignment operator
+  //
+
+  if (this != &m) ((AliTRDmatrix &) m).Copy(*this);
+  return *this;
+
+}
+
 //_____________________________________________________________________________
 void AliTRDmatrix::AddSignal(Int_t iRow, Int_t iCol, Int_t iTime, Float_t signal)
 {
@@ -77,7 +128,26 @@ void AliTRDmatrix::AddSignal(Int_t iRow, Int_t iCol, Int_t iTime, Float_t signal
 }
 
 //_____________________________________________________________________________
-void AliTRDmatrix::Draw()
+void AliTRDmatrix::Copy(TObject &m)
+{
+  //
+  // Copy function
+  //
+
+  ((AliTRDmatrix &) m).fRow        = fRow;
+  ((AliTRDmatrix &) m).fCol        = fCol;
+  ((AliTRDmatrix &) m).fTime       = fTime;
+  ((AliTRDmatrix &) m).fPixel      = fPixel;
+  ((AliTRDmatrix &) m).fSector     = fSector;
+  ((AliTRDmatrix &) m).fChamber    = fChamber;
+  ((AliTRDmatrix &) m).fPlane      = fPlane;
+
+  ((AliTRDmatrix &) m).fPixelArray = new TObjArray(*fPixelArray);
+
+}
+
+//_____________________________________________________________________________
+void AliTRDmatrix::Draw(Option_t *)
 {
   //
   // Draws a 3D view of the detector matrix
@@ -86,15 +156,15 @@ void AliTRDmatrix::Draw()
   Char_t ctitle[50];
   sprintf(ctitle,"Matrix (Sector:%d Chamber:%d Plane:%d)"
                 ,fSector,fChamber,fPlane);
-  TH3F *hMatrix = new TH3F("hMatrix",ctitle,fRow ,-0.5,fRow +0.5
-                                           ,fCol ,-0.5,fCol +0.5
-                                           ,fTime,-0.5,fTime+0.5);
+  TH3F *hMatrix = new TH3F("hMatrix",ctitle,fRow ,-0.5,fRow -0.5
+                                           ,fCol ,-0.5,fCol -0.5
+                                           ,fTime,-0.5,fTime-0.5);
 
   for (Int_t iRow  = 0; iRow  < fRow;  iRow++ ) {
     for (Int_t iCol  = 0; iCol  < fCol;  iCol++ ) {
       for (Int_t iTime = 0; iTime < fTime; iTime++) {
         AliTRDpixel *pixel = GetPixel(iRow,iCol,iTime);
-        if (pixel) hMatrix->Fill3(iRow,iCol,iTime,pixel->GetSignal());
+        if (pixel) hMatrix->Fill(iRow,iCol,iTime,pixel->GetSignal());
       }
     }
   }
@@ -118,6 +188,7 @@ void AliTRDmatrix::DrawRow(Int_t iRow)
   //
 
   if ((iRow < 0) || (iRow >= fRow)) {
+    printf("AliTRDmatrix::DrawRow -- ");
     printf("Index out of bounds (%d/%d)\n",iRow,fRow);
     return;
   }
@@ -125,8 +196,8 @@ void AliTRDmatrix::DrawRow(Int_t iRow)
   Char_t ctitle[50];
   sprintf(ctitle,"Pad-row %d (Sector:%d Chamber:%d Plane:%d)"
                 ,iRow,fSector,fChamber,fPlane);
-  TH2F *hSliceRow = new TH2F("hSliceRow",ctitle,fCol ,-0.5,fCol +0.5
-                                               ,fTime,-0.5,fTime+0.5);
+  TH2F *hSliceRow = new TH2F("hSliceRow",ctitle,fCol ,-0.5,fCol -0.5
+                                               ,fTime,-0.5,fTime-0.5);
 
   for (Int_t iCol  = 0; iCol  < fCol;  iCol++ ) {
     for (Int_t iTime = 0; iTime < fTime; iTime++) {
@@ -153,6 +224,7 @@ void AliTRDmatrix::DrawCol(Int_t iCol)
   //
 
   if ((iCol < 0) || (iCol >= fCol)) {
+    printf("AliTRDmatrix::DrawCol -- ");
     printf("Index out of bounds (%d/%d)\n",iCol,fCol);
     return;
   }
@@ -160,8 +232,8 @@ void AliTRDmatrix::DrawCol(Int_t iCol)
   Char_t ctitle[50];
   sprintf(ctitle,"Pad-column %d (Sector:%d Chamber:%d Plane:%d)"
                 ,iCol,fSector,fChamber,fPlane);
-  TH2F *hSliceCol = new TH2F("hSliceCol",ctitle,fRow ,-0.5,fRow +0.5
-                                               ,fTime,-0.5,fTime+0.5);
+  TH2F *hSliceCol = new TH2F("hSliceCol",ctitle,fRow ,-0.5,fRow -0.5
+                                               ,fTime,-0.5,fTime-0.5);
 
   for (Int_t iRow  = 0; iRow  < fRow;  iRow++ ) {
     for (Int_t iTime = 0; iTime < fTime; iTime++) {
@@ -188,6 +260,7 @@ void AliTRDmatrix::DrawTime(Int_t iTime)
   //
 
   if ((iTime < 0) || (iTime >= fTime)) {
+    printf("AliTRDmatrix::DrawTime -- ");
     printf("Index out of bounds (%d/%d)\n",iTime,fTime);
     return;
   }
@@ -195,8 +268,8 @@ void AliTRDmatrix::DrawTime(Int_t iTime)
   Char_t ctitle[50];
   sprintf(ctitle,"Time-slice %d (Sector:%d Chamber:%d Plane:%d)"
                 ,iTime,fSector,fChamber,fPlane);
-  TH2F *hSliceTime = new TH2F("hSliceTime",ctitle,fRow,-0.5,fRow+0.5
-                                                 ,fCol,-0.5,fCol+0.5);
+  TH2F *hSliceTime = new TH2F("hSliceTime",ctitle,fRow,-0.5,fRow-0.5
+                                                 ,fCol,-0.5,fCol-0.5);
 
   for (Int_t iRow = 0; iRow < fRow; iRow++) {
     for (Int_t iCol = 0; iCol < fCol; iCol++) {
@@ -215,6 +288,102 @@ void AliTRDmatrix::DrawTime(Int_t iTime)
 
 }
 
+//_____________________________________________________________________________
+void AliTRDmatrix::ProjRow()
+{
+  //
+  // Projects the detector matrix along the row-axis
+  //
+
+  Char_t ctitle[60];
+  sprintf(ctitle,"Row-projection (Sector:%d Chamber:%d Plane:%d)"
+                ,fSector,fChamber,fPlane);
+  TH2F *hProjRow = new TH2F("hProjRow",ctitle,fCol ,-0.5,fCol -0.5
+                                             ,fTime,-0.5,fTime-0.5);
+
+  for (Int_t iRow  = 0; iRow  < fRow;  iRow++ ) {
+    for (Int_t iCol  = 0; iCol  < fCol;  iCol++ ) {
+      for (Int_t iTime = 0; iTime < fTime; iTime++) {
+        AliTRDpixel *pixel = GetPixel(iRow,iCol,iTime);
+        if (pixel) hProjRow->Fill(iCol,iTime,pixel->GetSignal());
+      }
+    }
+  }
+
+  gStyle->SetOptStat(0);
+  TCanvas *cProjRow = new TCanvas("cProjRow","Detector matrix 2D-projection"
+                                            ,50,50,600,400);
+  cProjRow->ToggleEventStatus();
+  hProjRow->SetXTitle("Pad-column (rphi)");
+  hProjRow->SetYTitle("Timebucket");
+  hProjRow->Draw("COLZ");
+
+}
+
+//_____________________________________________________________________________
+void AliTRDmatrix::ProjCol()
+{
+  //
+  // Projects the detector matrix along the column-axis
+  //
+
+  Char_t ctitle[60];
+  sprintf(ctitle,"Column-projection (Sector:%d Chamber:%d Plane:%d)"
+                ,fSector,fChamber,fPlane);
+  TH2F *hProjCol = new TH2F("hProjCol",ctitle,fRow ,-0.5,fRow -0.5
+                                             ,fTime,-0.5,fTime-0.5);
+
+  for (Int_t iRow  = 0; iRow  < fRow;  iRow++ ) {
+    for (Int_t iCol  = 0; iCol  < fCol;  iCol++ ) {
+      for (Int_t iTime = 0; iTime < fTime; iTime++) {
+        AliTRDpixel *pixel = GetPixel(iRow,iCol,iTime);
+        if (pixel) hProjCol->Fill(iRow,iTime,pixel->GetSignal());
+      }
+    }
+  }
+
+  gStyle->SetOptStat(0);
+  TCanvas *cProjCol = new TCanvas("cProjCol","Detector matrix 2D-projection"
+                                            ,50,50,600,400);
+  cProjCol->ToggleEventStatus();
+  hProjCol->SetXTitle("Pad-row (z)");
+  hProjCol->SetYTitle("Timebucket");
+  hProjCol->Draw("COLZ");
+
+}
+
+//_____________________________________________________________________________
+void AliTRDmatrix::ProjTime()
+{
+  //
+  // Projects the detector matrix along the time-axis
+  //
+
+  Char_t ctitle[60];
+  sprintf(ctitle,"Time-projection (Sector:%d Chamber:%d Plane:%d)"
+                ,fSector,fChamber,fPlane);
+  TH2F *hProjTime = new TH2F("hProjTime",ctitle,fRow,-0.5,fRow-0.5
+                                               ,fCol,-0.5,fCol-0.5);
+
+  for (Int_t iRow = 0; iRow < fRow; iRow++) {
+    for (Int_t iCol = 0; iCol < fCol; iCol++) {
+      for (Int_t iTime = 0; iTime < fTime; iTime++) {
+        AliTRDpixel *pixel = GetPixel(iRow,iCol,iTime);
+        if (pixel) hProjTime->Fill(iRow,iCol,pixel->GetSignal());
+      }
+    }
+  }
+
+  gStyle->SetOptStat(0);
+  TCanvas *cProjTime = new TCanvas("cProjTime","Detector matrix 2D-projection"
+                                              ,50,50,600,400);
+  cProjTime->ToggleEventStatus();
+  hProjTime->SetXTitle("Pad-row (z)");
+  hProjTime->SetYTitle("Pad-column (rphi)");
+  hProjTime->Draw("COLZ");
+
+}
+
 //_____________________________________________________________________________
 void AliTRDmatrix::SetSignal(Int_t iRow, Int_t iCol, Int_t iTime, Float_t signal)
 {
@@ -241,12 +410,12 @@ Bool_t AliTRDmatrix::AddTrack(Int_t iRow, Int_t iCol, Int_t iTime, Int_t track)
   if (!(pixel)) return kTRUE;
 
   Bool_t trackSet = kFALSE;
-  for (Int_t i = 0; i < kTrackPixel; i++) {
+  for (Int_t i = 0; i < AliTRDpixel::NTrackPixel(); i++) {
     if (pixel->GetTrack(i) == track) {
       trackSet = kTRUE;
       break;
     }
-    if (pixel->GetTrack(i) ==     0) {
+    if (pixel->GetTrack(i) ==    -1) {
       pixel->SetTrack(i,track);
       trackSet = kTRUE;
       break;
@@ -273,7 +442,7 @@ void AliTRDmatrix::SetTrack(Int_t iRow, Int_t iCol, Int_t iTime
 }
 
 //_____________________________________________________________________________
-Float_t AliTRDmatrix::GetSignal(Int_t iRow, Int_t iCol, Int_t iTime)
+Float_t AliTRDmatrix::GetSignal(Int_t iRow, Int_t iCol, Int_t iTime) const
 {
   //
   // Returns the amplitude of the signal for one specific pixel
@@ -290,15 +459,17 @@ Float_t AliTRDmatrix::GetSignal(Int_t iRow, Int_t iCol, Int_t iTime)
 }
 
 //_____________________________________________________________________________
-Int_t AliTRDmatrix::GetTrack(Int_t iRow, Int_t iCol, Int_t iTime, Int_t iTrack)
+Int_t AliTRDmatrix::GetTrack(Int_t iRow, Int_t iCol, Int_t iTime
+                           , Int_t iTrack) const 
 {
   //
   // Returns the numbers of the tracks passing through one specific pixel
   //
 
-  if ((iTrack < 0) || (iTrack >= kTrackPixel)) {
-    printf("GetTrack: Index out of bounds (%d)\n",iTrack);
-    return 0;
+  if ((iTrack < 0) || (iTrack >= AliTRDpixel::NTrackPixel())) {
+    printf("AliTRDmatrix::GetTrack -- ");
+    printf("Index out of bounds (%d)\n",iTrack);
+    return -1;
   }
 
   AliTRDpixel *pixel = GetPixel(iRow,iCol,iTime);
@@ -306,14 +477,17 @@ Int_t AliTRDmatrix::GetTrack(Int_t iRow, Int_t iCol, Int_t iTime, Int_t iTrack)
     return (pixel->GetTrack(iTrack));
   }
   else {
-    return 0;
+    return -1;
   }
 
 }
 
 //_____________________________________________________________________________
-Int_t AliTRDmatrix::GetIndex(Int_t iRow, Int_t iCol, Int_t iTime)
+Int_t AliTRDmatrix::GetIndex(Int_t iRow, Int_t iCol, Int_t iTime) const
 {
+  //
+  // Get the index of a given pixel
+  //
 
   if ((iRow  >= 0) && (iRow  < fRow ) &&
       (iCol  >= 0) && (iCol  < fCol ) &&
@@ -327,8 +501,11 @@ Int_t AliTRDmatrix::GetIndex(Int_t iRow, Int_t iCol, Int_t iTime)
 }
 
 //_____________________________________________________________________________
-AliTRDpixel *AliTRDmatrix::GetPixel(Int_t iRow, Int_t iCol, Int_t iTime)
+AliTRDpixel *AliTRDmatrix::GetPixel(Int_t iRow, Int_t iCol, Int_t iTime) const
 {
+  //
+  // Get one pixel
+  //
 
   Int_t iPixel = GetIndex(iRow,iCol,iTime);
   if (iPixel < 0) {