]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PMD/AliPMDCalibPedestal.cxx
added ALTRO data encoder and corresponding unit test
[u/mrichter/AliRoot.git] / PMD / AliPMDCalibPedestal.cxx
index 70aa79910c9d924b685e24319e2567411c27a57a..e7d6239ee16cc86a32674fff5779daec7279ec72 100644 (file)
@@ -26,6 +26,8 @@
 #include "TTreeStream.h"
 
 //AliRoot includes
+#include "AliDAQ.h"
+#include "AliLog.h"
 #include "AliRawReader.h"
 #include "AliPMDRawStream.h"
 #include "AliPMDddldata.h"
@@ -44,16 +46,17 @@ AliPMDCalibPedestal::AliPMDCalibPedestal() :
     // default constructor
     //
 
-    for (int i = 0; i < 2; i++)
+    for (int i = 0; i < kDet; i++)
     {
-       for (int j = 0; j < 24; j++)
+       for (int j = 0; j < kMaxSMN; j++)
        {
-           for (int k = 0; k < 96; k++)
+           for (int k = 0; k < kMaxRow; k++)
            {
-               for (int l = 0; l < 96; l++)
+               for (int l = 0; l < kMaxCol; l++)
                {
-
-                   fPedHisto[i][j][k][l] = new TH1F("","",300,0.,300.);
+                   fPedVal[i][j][k][l]   = 0.;
+                   fPedValSq[i][j][k][l] = 0.;
+                   fPedCount[i][j][k][l] = 0.;
                }
            }
        }
@@ -68,16 +71,17 @@ AliPMDCalibPedestal::AliPMDCalibPedestal(const AliPMDCalibPedestal &ped) :
     //
     // copy constructor
     //
-    for (int i = 0; i < 2; i++)
+    for (int i = 0; i < kDet; i++)
     {
-       for (int j = 0; j < 24; j++)
+       for (int j = 0; j < kMaxSMN; j++)
        {
-           for (int k = 0; k < 96; k++)
+           for (int k = 0; k < kMaxRow; k++)
            {
-               for (int l = 0; l < 96; l++)
+               for (int l = 0; l < kMaxCol; l++)
                {
-                   
-                   fPedHisto[i][j][k][l] = ped.fPedHisto[i][j][k][l];
+                   fPedVal[i][j][k][l]   = ped.fPedVal[i][j][k][l];
+                   fPedValSq[i][j][k][l] = ped.fPedValSq[i][j][k][l];
+                   fPedCount[i][j][k][l] = ped.fPedCount[i][j][k][l];
                }
            }
        }
@@ -101,7 +105,6 @@ AliPMDCalibPedestal::~AliPMDCalibPedestal()
     //
     // destructor
     //
-    delete fPedHisto;
 }
 //_____________________________________________________________________
 Bool_t AliPMDCalibPedestal::ProcessEvent(AliRawReader *rawReader)
@@ -109,14 +112,16 @@ Bool_t AliPMDCalibPedestal::ProcessEvent(AliRawReader *rawReader)
   //
   //  Event processing loop - AliRawReader
   //
+
+    const Int_t kDDL = AliDAQ::NumberOfDdls("PMD");
+
     AliPMDRawStream rawStream(rawReader);
 
     TObjArray pmdddlcont;
     Bool_t streamout = kTRUE;
 
-    for (Int_t iddl = 0; iddl < 6; iddl++)
+    for (Int_t iddl = 0; iddl < kDDL; iddl++)
     {
-       
        rawReader->Select("PMD", iddl, iddl);
        //cout << reader.GetDataSize() << endl;
        streamout = rawStream.DdlData(iddl, &pmdddlcont);
@@ -131,10 +136,11 @@ Bool_t AliPMDCalibPedestal::ProcessEvent(AliRawReader *rawReader)
            //Int_t chno = pmdddl->GetChannel();
            Int_t row = pmdddl->GetRow();
            Int_t col = pmdddl->GetColumn();
-           Int_t sig = pmdddl->GetSignal();
+           Float_t sig = (Float_t) pmdddl->GetSignal();
 
-           fPedHisto[det][smn][row][col]->Fill((Float_t) sig);
-           
+           fPedVal[det][smn][row][col]   += sig;
+           fPedValSq[det][smn][row][col] += sig*sig;
+           fPedCount[det][smn][row][col]++;
        }
        pmdddlcont.Clear();
     }
@@ -142,22 +148,53 @@ Bool_t AliPMDCalibPedestal::ProcessEvent(AliRawReader *rawReader)
 }
 //_____________________________________________________________________
 
-void AliPMDCalibPedestal::Analyse()
+void AliPMDCalibPedestal::Analyse(TTree *pedtree)
 {
     //
     //  Calculate pedestal Mean and RMS
     //
-    for (int i = 0; i < 2; i++)
+    Int_t   det, sm, row, col;
+    Float_t mean, rms;
+    Float_t meansq, diff;
+
+
+    pedtree->Branch("det",&det,"det/I");
+    pedtree->Branch("sm",&sm,"sm/I");
+    pedtree->Branch("row",&row,"row/I");
+    pedtree->Branch("col",&col,"col/I");
+    pedtree->Branch("mean",&mean,"mean/F");
+    pedtree->Branch("rms",&rms,"rms/F");
+
+    for (int idet = 0; idet < kDet; idet++)
     {
-       for (int j = 0; j < 24; j++)
+       for (int ism = 0; ism < kMaxSMN; ism++)
        {
-           for (int k = 0; k < 96; k++)
+           for (int irow = 0; irow < kMaxRow; irow++)
            {
-               for (int l = 0; l < 96; l++)
+               for (int icol = 0; icol < kMaxCol; icol++)
                {
-
-                   Float_t mean = fPedHisto[i][j][k][l]->GetMean();
-                   Float_t rms  = fPedHisto[i][j][k][l]->GetRMS();
+                   det  = idet;
+                   sm   = ism;
+                   row  = irow;
+                   col  = icol;
+                   if (fPedCount[idet][ism][irow][icol] > 0)
+                   {
+                       mean = fPedVal[idet][ism][irow][icol]/fPedCount[idet][ism][irow][icol];
+
+                       meansq = fPedValSq[idet][ism][irow][icol]/fPedCount[idet][ism][irow][icol];
+
+                       diff = meansq - mean*mean;
+                       if (diff > 0.)
+                       {
+                           rms  = sqrt(diff);
+                       }
+                       else
+                       {
+                           rms = 0.;
+                       }
+                   }
+
+                   pedtree->Fill();
                }
            }
        }