#include "TTreeStream.h"
//AliRoot includes
+#include "AliDAQ.h"
+#include "AliLog.h"
#include "AliRawReader.h"
#include "AliPMDRawStream.h"
#include "AliPMDddldata.h"
// 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.;
}
}
}
//
// 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];
}
}
}
//
// destructor
//
- delete fPedHisto;
}
//_____________________________________________________________________
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);
//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();
}
}
//_____________________________________________________________________
-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();
}
}
}