Interface to pad status map in clusterizer
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 25 Mar 2008 13:06:19 +0000 (13:06 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 25 Mar 2008 13:06:19 +0000 (13:06 +0000)
TRD/AliTRDcalibDB.cxx
TRD/AliTRDcalibDB.h
TRD/AliTRDcluster.h
TRD/AliTRDclusterizer.cxx
TRD/AliTRDrawStreamTB.cxx
TRD/AliTRDrecoParam.cxx
TRD/AliTRDrecoParam.h
TRD/Cal/AliTRDCalPad.h
TRD/Cal/AliTRDCalSingleChamberStatus.h

index 6d047c89d624f68ffb7186f03e775849c1d9f9e5..ec78921b0ac3ef19e245d115461b8120aaca9f0e 100644 (file)
@@ -557,7 +557,6 @@ AliTRDCalROC *AliTRDcalibDB::GetGainFactorROC(Int_t det)
 {
   //
   // Returns the gain factor calibration object for a given ROC
-  // containing one number per pad 
   //
   
   const AliTRDCalPad *calPad     = dynamic_cast<const AliTRDCalPad *> 
@@ -697,6 +696,29 @@ Char_t AliTRDcalibDB::GetPadStatus(Int_t det, Int_t col, Int_t row)
 
 }
 
+//_____________________________________________________________________________
+AliTRDCalSingleChamberStatus* AliTRDcalibDB::GetPadStatusROC(Int_t det)
+{
+  //
+  // Returns the pad status calibration object for a given ROC
+  //
+
+  const AliTRDCalPadStatus *cal  = dynamic_cast<const AliTRDCalPadStatus *> 
+                                   (GetCachedCDBObject(kIDPadStatus));
+  if (!cal) {
+    return 0;
+  }
+
+  AliTRDCalSingleChamberStatus *roc = cal->GetCalROC(det);
+  if (!roc) {
+    return 0;
+  }
+  else {
+    return roc;
+  }
+
+}
+
 //_____________________________________________________________________________
 Char_t AliTRDcalibDB::GetChamberStatus(Int_t det)
 {
index 2aa94ccd5257e4014e5e54d326434908b66a7438..84ec825f98c66cd072d303772cec10a833282205 100644 (file)
@@ -19,6 +19,7 @@ class AliTRDCalPID;
 class AliTRDCalMonitoring;
 class AliTRDCalROC;
 class AliTRDCalDet;
+class AliTRDCalSingleChamberStatus;
 
 class AliTRDcalibDB : public TObject {
 
@@ -29,49 +30,51 @@ class AliTRDcalibDB : public TObject {
        , kNsect =  18
        , kNdet  = 540 };
   
-  static AliTRDcalibDB      *Instance();
-  static void                Terminate();
+  static AliTRDcalibDB               *Instance();
+  static void                         Terminate();
 
-  void                       SetRun(Long64_t run);
-  Long64_t                   GetRun() const { return fRun; }
+  void                                SetRun(Long64_t run);
+  Long64_t                            GetRun() const { return fRun; }
 
-  Float_t                    GetVdrift(Int_t det, Int_t col, Int_t row);
-  Float_t                    GetVdriftAverage(Int_t det);
-        AliTRDCalROC        *GetVdriftROC(Int_t det);
-  const AliTRDCalDet        *GetVdriftDet();
+  Float_t                             GetVdrift(Int_t det, Int_t col, Int_t row);
+  Float_t                             GetVdriftAverage(Int_t det);
+        AliTRDCalROC                 *GetVdriftROC(Int_t det);
+  const AliTRDCalDet                 *GetVdriftDet();
 
-  Float_t                    GetT0(Int_t det, Int_t col, Int_t row);
-  Float_t                    GetT0Average(Int_t det);
-        AliTRDCalROC        *GetT0ROC(Int_t det);
-  const AliTRDCalDet        *GetT0Det();
+  Float_t                             GetT0(Int_t det, Int_t col, Int_t row);
+  Float_t                             GetT0Average(Int_t det);
+        AliTRDCalROC                 *GetT0ROC(Int_t det);
+  const AliTRDCalDet                 *GetT0Det();
 
-  Float_t                    GetGainFactor(Int_t det, Int_t col, Int_t row);
-  Float_t                    GetGainFactorAverage(Int_t det);
-        AliTRDCalROC        *GetGainFactorROC(Int_t det);
-  const AliTRDCalDet        *GetGainFactorDet();
+  Float_t                             GetGainFactor(Int_t det, Int_t col, Int_t row);
+  Float_t                             GetGainFactorAverage(Int_t det);
+        AliTRDCalROC                 *GetGainFactorROC(Int_t det);
+  const AliTRDCalDet                 *GetGainFactorDet();
 
-        AliTRDCalROC        *GetPRFROC(Int_t det);
-  Float_t                    GetPRFWidth(Int_t det, Int_t col, Int_t row);
+        AliTRDCalROC                 *GetPRFROC(Int_t det);
+  Float_t                             GetPRFWidth(Int_t det, Int_t col, Int_t row);
 
-  Int_t                      GetNumberOfTimeBins();
+  Int_t                               GetNumberOfTimeBins();
 
-  Char_t                     GetPadStatus(Int_t det, Int_t col, Int_t row);
-  Char_t                     GetChamberStatus(Int_t det);
+  Char_t                              GetPadStatus(Int_t det, Int_t col, Int_t row);
+        AliTRDCalSingleChamberStatus *GetPadStatusROC(Int_t det);
 
-  Bool_t                     IsPadMasked(Int_t det, Int_t col, Int_t row);
-  Bool_t                     IsPadBridgedLeft(Int_t det, Int_t col, Int_t row);
-  Bool_t                     IsPadBridgedRight(Int_t det, Int_t col, Int_t row);
+  Char_t                              GetChamberStatus(Int_t det);
+
+  Bool_t                              IsPadMasked(Int_t det, Int_t col, Int_t row);
+  Bool_t                              IsPadBridgedLeft(Int_t det, Int_t col, Int_t row);
+  Bool_t                              IsPadBridgedRight(Int_t det, Int_t col, Int_t row);
   
-  Bool_t                     IsChamberInstalled(Int_t det);
-  Bool_t                     IsChamberMasked(Int_t det);
+  Bool_t                              IsChamberInstalled(Int_t det);
+  Bool_t                              IsChamberMasked(Int_t det);
 
-  const AliTRDCalMonitoring *GetMonitoringObject();
-  const AliTRDCalPID        *GetPIDObject(const Int_t method);
+  const AliTRDCalMonitoring          *GetMonitoringObject();
+  const AliTRDCalPID                 *GetPIDObject(const Int_t method);
 
   // Related functions, these depend on calibration data
-  static Float_t             GetOmegaTau(Float_t vdrift, Float_t bz);
-         Int_t               PadResponse(Double_t signal, Double_t dist
-                                       , Int_t plane, Double_t *pad) const;
+  static Float_t                      GetOmegaTau(Float_t vdrift, Float_t bz);
+         Int_t                        PadResponse(Double_t signal, Double_t dist
+                                                , Int_t plane, Double_t *pad) const;
   
  protected:
 
index 985ca6b9a4e1544eceeba155a20a6d768902cb23..262fb87e82889939b38ac015d220e759b508db9a 100644 (file)
@@ -17,6 +17,10 @@ class AliTRDcluster : public AliCluster {
 
  public:
 
+  enum { kInChamber = 1
+       , kShared    = 2
+       , kMasked    = 4 };
+
   AliTRDcluster();
   AliTRDcluster(Int_t det, Float_t q, Float_t *pos, Float_t *sig
               , Int_t *tracks, Char_t npads, Short_t *signals
@@ -27,25 +31,28 @@ class AliTRDcluster : public AliCluster {
 
   virtual void     AddTrackIndex(Int_t *i); 
 
-          Bool_t   IsInChamber() const          { return TestBit(1);       }
-          Bool_t   IsShared() const             { return TestBit(2);       }
-          Bool_t   IsUsed() const               { return (fQ < 0) ? kTRUE : kFALSE; }
+          Bool_t   IsInChamber() const             { return TestBit(kInChamber);       }
+          Bool_t   IsShared() const                { return TestBit(kShared);          }
+          Bool_t   IsUsed() const                  { return (fQ < 0) ? kTRUE : kFALSE; }
+          Bool_t   HasMaskedPad() const            { return TestBit(kMasked);          }
           
-          void     Use(Int_t = 0)               { fQ = -fQ;                }
+          void     Use(Int_t = 0)                  { fQ = -fQ;              }
     
-          Int_t    GetDetector() const          { return fDetector;        }
-          Int_t    GetLocalTimeBin() const      { return fLocalTimeBin;    }
-          Float_t  GetQ() const                 { return fQ;               }
-          Int_t    GetNPads() const             { return fNPads;           }
-          Float_t  GetCenter() const            { return fCenter;          }
-         Int_t    GetPadCol() const            { return fPadCol;          }
-         Int_t    GetPadRow() const            { return fPadRow;          }
-          Int_t    GetPadTime() const           { return fPadTime;         }
-          Short_t *GetSignals()                 { return fSignals;         }
+          Int_t    GetDetector() const             { return fDetector;      }
+          Int_t    GetLocalTimeBin() const         { return fLocalTimeBin;  }
+          Float_t  GetQ() const                    { return fQ;             }
+          Int_t    GetNPads() const                { return fNPads;         }
+          Float_t  GetCenter() const               { return fCenter;        }
+         Int_t    GetPadCol() const               { return fPadCol;        }
+         Int_t    GetPadRow() const               { return fPadRow;        }
+          Int_t    GetPadTime() const              { return fPadTime;       }
+          Short_t *GetSignals()                    { return fSignals;       }
           Float_t  GetSumS() const;
 
-          void     SetLocalTimeBin(Char_t t)    { fLocalTimeBin = t;       }
-          void     SetInChamber(Bool_t in = kTRUE)      {SetBit(1, in);}
+          void     SetLocalTimeBin(Char_t t)       { fLocalTimeBin = t;     }
+          void     SetInChamber(Bool_t in = kTRUE) { SetBit(kInChamber,in); }
+          void     SetShared(Bool_t sh  = kTRUE)   { SetBit(kShared,sh);    }
+          void     SetMaskedPad(Bool_t mp = kTRUE) { SetBit(kMasked,mp);    }
 
  protected:
   
@@ -58,7 +65,7 @@ class AliTRDcluster : public AliCluster {
          UChar_t fPadRow;         //  Central pad number in row direction
          UChar_t fPadTime;        //  Uncalibrated time bin number
           Short_t fSignals[7];     //  Signals in the cluster
-  
+
   ClassDef(AliTRDcluster,5)        //  Cluster for the TRD
  
 };
index 205cf96049eecd9720314bcd8f56beab43c75c1a..c332b6500024a35e4e9f08979253dadaad3e2cb9 100644 (file)
@@ -53,6 +53,7 @@
 
 #include "Cal/AliTRDCalROC.h"
 #include "Cal/AliTRDCalDet.h"
+#include "Cal/AliTRDCalSingleChamberStatus.h"
 
 ClassImp(AliTRDclusterizer)
 
@@ -661,11 +662,14 @@ Bool_t AliTRDclusterizer::MakeClusters(Int_t det)
   Int_t nTimeTotal = digitsIn->GetNtime();
 
   // Detector wise calibration object for the gain factors
-  const AliTRDCalDet *calGainFactorDet      = calibration->GetGainFactorDet();
+  const AliTRDCalDet           *calGainFactorDet      = calibration->GetGainFactorDet();
   // Calibration object with pad wise values for the gain factors
-  AliTRDCalROC       *calGainFactorROC      = calibration->GetGainFactorROC(idet);
+  AliTRDCalROC                 *calGainFactorROC      = calibration->GetGainFactorROC(idet);
   // Calibration value for chamber wise gain factor
-  Float_t             calGainFactorDetValue = calGainFactorDet->GetValue(idet);
+  Float_t                       calGainFactorDetValue = calGainFactorDet->GetValue(idet);
+
+  // Calibration object with the pad status information
+  AliTRDCalSingleChamberStatus *calPadStatusROC       = calibration->GetPadStatusROC(idet);
 
   Int_t nClusters = 0;
 
@@ -848,7 +852,9 @@ Bool_t AliTRDclusterizer::MakeClusters(Int_t det)
            }
 
          // Store the amplitudes of the pads in the cluster for later analysis
+         // and check whether one of these pads is masked in the database
          Short_t signals[7] = { 0, 0, 0, 0, 0, 0, 0 };
+          Bool_t  hasMasked  = kFALSE;
          for (Int_t jPad = col-3; jPad <= col+3; jPad++) 
             {
              if ((jPad <          0) || 
@@ -857,6 +863,9 @@ Bool_t AliTRDclusterizer::MakeClusters(Int_t det)
                  continue;
                }
              signals[jPad-col+3] = TMath::Nint(TMath::Abs(digitsOut->GetDataUnchecked(row,jPad,time)));
+              if (calPadStatusROC->IsMasked(jPad,row)) {
+                hasMasked = kTRUE;
+             }
            }
 
           // Transform the local cluster coordinates into calibrated 
@@ -874,7 +883,7 @@ Bool_t AliTRDclusterizer::MakeClusters(Int_t det)
           clusterRCT[1] = col;
           clusterRCT[2] = 0;
                
-               Bool_t out = kTRUE;
+         Bool_t out = kTRUE;
          if (fTransform->Transform(clusterXYZ, clusterRCT, ((UInt_t) time), out, 0)) {
 
            // Add the cluster to the output array
@@ -901,8 +910,9 @@ Bool_t AliTRDclusterizer::MakeClusters(Int_t det)
                                                      ,clusterTimeBin
                                                      ,clusterPosCol
                                                      ,volid);
-                       cluster->SetInChamber(!out);
-                       
+           cluster->SetInChamber(!out);
+           cluster->SetMaskedPad(hasMasked);
+       
            // Temporarily store the row, column and time bin of the center pad
            // Used to later on assign the track indices
            cluster->SetLabel( row,0);
index ce1ebef898954033f13e26ab4d6335831f14c20d..37d5cd0cb521ca34e335aedfbd5e7b8d9bf23574 100644 (file)
@@ -39,6 +39,8 @@
 #include "AliTRDdataArrayS.h"
 #include "AliTRDdataArrayI.h"
 #include "AliTRDSignalIndex.h"
+#include "AliTRDReconstructor.h"
+#include "AliTRDrecoParam.h"
 
 #include "AliLog.h"
 #include "AliRawReader.h"
@@ -657,6 +659,18 @@ AliTRDrawStreamTB::NextChamber(AliTRDdigitsManager *digitsManager)
   AliTRDdataArrayI *track2 = 0; 
   AliTRDSignalIndex *indexes = 0;
 
+  // Get the ADC baseline
+  Int_t adcBaseline = 0;
+  if (!AliTRDReconstructor::RecoParam())
+    {
+      AliError("RecoParam does not exist\n");
+      return 0;
+    }
+  else 
+    {
+      adcBaseline = ((Int_t) AliTRDReconstructor::RecoParam()->GetADCbaseline());
+    }
+
   // Loop through the digits
   Int_t lastdet = -1;
   Int_t det     = -1;
@@ -742,9 +756,9 @@ AliTRDrawStreamTB::NextChamber(AliTRDdigitsManager *digitsManager)
       // ntimebins data are ready to read
       for (it = 0; it < GetNumberOfTimeBins(); it++)
        {
-         if (GetSignals()[it] > 0)
+         if ((GetSignals()[it] - adcBaseline) > 0)
            {
-             digits->SetDataUnchecked(GetRow(), GetCol(), it, GetSignals()[it]);
+             digits->SetDataUnchecked(GetRow(), GetCol(), it, GetSignals()[it] - adcBaseline);
              
              indexes->AddIndexTBin(GetRow(), GetCol(), it);
               if (digitsManager->UsesDictionaries()) 
index 49a0cb4c75ffd71d5e2255182e91275c75edab52..92802dc54b75a3f32d5a2821e6a676455b79bd2a 100644 (file)
@@ -53,7 +53,7 @@ AliTRDrecoParam::AliTRDrecoParam()
   ,fLUTOn(kTRUE)
   ,fTCOn(kTRUE)
   ,fTCnexp(1)
-  ,fADCbaseline(0.0)
+  ,fADCbaseline(0)
 {
   //
   // Default constructor
@@ -92,7 +92,7 @@ AliTRDrecoParam *AliTRDrecoParam::GetCosmicTestParam()
 
   AliTRDrawStreamBase::SetRawStreamVersion("TB");
   AliTRDrecoParam *par = new AliTRDrecoParam();
-  par->SetADCbaseline(10.0);
+  par->SetADCbaseline(10);
   return par;
 
 }
index a01ae40092f3c885fb449568fb3befecca01bb3d..fbc5c062e8af5c965a35d243626c556e6889568f 100644 (file)
@@ -53,7 +53,7 @@ class AliTRDrecoParam : public AliDetectorRecoParam
         Bool_t   LUTOn() const                    { return fLUTOn;           };
         Bool_t   TCOn() const                     { return fTCOn;            };
 
-        Double_t GetADCbaseline() const           { return fADCbaseline;     };
+        Int_t    GetADCbaseline() const           { return fADCbaseline;     };
 
        static   AliTRDrecoParam *GetLowFluxParam();
         static   AliTRDrecoParam *GetHighFluxParam();
@@ -66,7 +66,7 @@ class AliTRDrecoParam : public AliDetectorRecoParam
         void     SetClusSigThresh(Float_t thresh)        { fClusSigThresh   = thresh; };
         void     SetTailCancelation(Int_t tcOn = 1)      { fTCOn            = tcOn;   };
         void     SetNexponential(Int_t nexp)             { fTCnexp          = nexp;   };
-        void     SetADCbaseline(Double_t base)           { fADCbaseline     = base;   };
+        void     SetADCbaseline(Int_t base)              { fADCbaseline     = base;   };
 
  private:
 
@@ -99,7 +99,7 @@ class AliTRDrecoParam : public AliDetectorRecoParam
         Int_t     fTCnexp;                 // Number of exponentials, digital filter
   
        // ADC parameter
-        Double_t  fADCbaseline;            // ADC baseline to be subtracted
+        Int_t     fADCbaseline;            // ADC baseline to be subtracted
 
        ClassDef(AliTRDrecoParam, 3)       // Reconstruction parameters for TRD detector
 
index c365bb42bf8a781a82bca6fc36767bd473078109..54f7745603971fff39bf3e5411e3f8ea20bdac2d 100644 (file)
@@ -33,7 +33,7 @@ class AliTRDCalPad : public TNamed
 
   virtual void        Copy(TObject &c) const;
 
-  static inline Int_t GetDet(Int_t p, Int_t c, Int_t s) { return p+c*kNplan+s*kNplan*kNcham; };
+  static  Int_t       GetDet(Int_t p, Int_t c, Int_t s) { return p+c*kNplan+s*kNplan*kNcham; };
 
   AliTRDCalROC       *GetCalROC(Int_t d) const          { return fROC[d]; };
   AliTRDCalROC       *GetCalROC(Int_t p, Int_t c, Int_t s) const
@@ -46,7 +46,8 @@ class AliTRDCalPad : public TNamed
   Double_t GetMean(const AliTRDCalDet *calDet = 0, Int_t type = 0, AliTRDCalPad* outlierPad = 0);
   Double_t GetRMS(const AliTRDCalDet *calDet = 0, Int_t type = 0, AliTRDCalPad* outlierPad = 0) ;
   Double_t GetMedian(const AliTRDCalDet *calDet = 0, Int_t type = 0, AliTRDCalPad* outlierPad = 0) ;
-  Double_t GetLTM(Double_t *sigma=0, Double_t fraction=0.9, const AliTRDCalDet *calDet = 0, Int_t type = 0, AliTRDCalPad* outlierPad = 0);
+  Double_t GetLTM(Double_t *sigma=0, Double_t fraction=0.9
+                , const AliTRDCalDet *calDet = 0, Int_t type = 0, AliTRDCalPad* outlierPad = 0);
 
   // Plot functions
   TH1F    *MakeHisto1D(const AliTRDCalDet *calDet = 0, Int_t typedet=0, Float_t min=4, Float_t max=-4,Int_t type=0);
index ed2ac33d1018fbadd209d24f07a0666d11c97548..79e985cbe961d5f5df8fca3c116c0b658f623094 100644 (file)
@@ -18,6 +18,11 @@ class AliTRDCalSingleChamberStatus : public TObject {
 
  public:
 
+  enum { kMasked          = 2
+       , kPadBridgedLeft  = 4
+       , kPadBridgedRight = 8
+       , kReadSecond      = 16 };
+
   AliTRDCalSingleChamberStatus();
   AliTRDCalSingleChamberStatus(Int_t p, Int_t c, Int_t cols);
   AliTRDCalSingleChamberStatus(const AliTRDCalSingleChamberStatus &c);
@@ -26,17 +31,20 @@ class AliTRDCalSingleChamberStatus : public TObject {
 
   virtual void    Copy(TObject &c) const;
 
-          Int_t   GetNrows() const                      { return fNrows; };
-          Int_t   GetNcols() const                      { return fNcols; };
+          Bool_t  IsMasked(Int_t col, Int_t row) const       { return ((GetStatus(col,row) & kMasked) 
+                                                                       ? kTRUE 
+                                                                       : kFALSE);                 };
+
+          Int_t   GetNrows() const                           { return fNrows;                     };
+          Int_t   GetNcols() const                           { return fNcols;                     };
 
-          Int_t   GetChannel(Int_t c, Int_t r) const    { return r+c*fNrows;                 };
-          Int_t   GetNchannels() const                  { return fNchannels;                 };
-          Char_t  GetStatus(Int_t ich) const            { return fData[ich];                 };
-          Char_t  GetStatus(Int_t col, Int_t row) const { return fData[GetChannel(col,row)]; };
+          Int_t   GetChannel(Int_t col, Int_t row) const     { return row+col*fNrows;             };
+          Int_t   GetNchannels() const                       { return fNchannels;                 };
+          Char_t  GetStatus(Int_t ich) const                 { return fData[ich];                 };
+          Char_t  GetStatus(Int_t col, Int_t row) const      { return fData[GetChannel(col,row)]; };
 
-          void    SetStatus(Int_t ich, Char_t vd)       { fData[ich] = vd;                   };
-          void    SetStatus(Int_t col, Int_t row, Char_t vd)
-                                                        { fData[GetChannel(col,row)] = vd;   };
+          void    SetStatus(Int_t ich, Char_t vd)            { fData[ich] = vd;                   };
+          void    SetStatus(Int_t col, Int_t row, Char_t vd) { fData[GetChannel(col,row)] = vd;   };
 
  protected: