{
for(Int_t ismn = 0; ismn < kMaxSMN; ismn++)
{
- fHsmIso[idet][ismn] = new TH1F(Form("HmsIso_%d_%d",idet,ismn),"",100,0.,1000.);
+ fSMIso[idet][ismn] = 0.;
+ fSMCount[idet][ismn] = 0.;
for(Int_t jrow = 0; jrow < kMaxRow; jrow++)
{
for(Int_t kcol = 0; kcol < kMaxCol; kcol++)
{
- fHadcIso[idet][ismn][jrow][kcol] = new TH1F(Form("HadcIso_%d_%d_%d_%d",idet,ismn,jrow,kcol),"",100,0.,1000.);
+ fCellIso[idet][ismn][jrow][kcol] = 0.;
+ fCellCount[idet][ismn][jrow][kcol] = 0.;
}
}
}
}
+
}
// ------------------------------------------------------------------------ //
AliPMDCalibGain::AliPMDCalibGain(const AliPMDCalibGain &pmdcalibgain):
{
for(Int_t ismn = 0; ismn < kMaxSMN; ismn++)
{
- fHsmIso[idet][ismn] = pmdcalibgain.fHsmIso[idet][ismn] ;
+ fSMIso[idet][ismn] = pmdcalibgain.fSMIso[idet][ismn] ;
+ fSMCount[idet][ismn] = pmdcalibgain.fSMCount[idet][ismn] ;
for(Int_t jrow = 0; jrow < kMaxRow; jrow++)
{
for(Int_t kcol = 0; kcol < kMaxCol; kcol++)
{
- fHadcIso[idet][ismn][jrow][kcol] = pmdcalibgain.fHadcIso[idet][ismn][jrow][kcol];
+ fCellIso[idet][ismn][jrow][kcol] = pmdcalibgain.fCellIso[idet][ismn][jrow][kcol];
+ fCellCount[idet][ismn][jrow][kcol] = pmdcalibgain.fCellCount[idet][ismn][jrow][kcol];
}
}
}
{
for(Int_t ismn = 0; ismn < kMaxSMN; ismn++)
{
- fHsmIso[idet][ismn] = pmdcalibgain.fHsmIso[idet][ismn] ;
+ fSMIso[idet][ismn] = pmdcalibgain.fSMIso[idet][ismn];
+ fSMCount[idet][ismn] = pmdcalibgain.fSMCount[idet][ismn];
for(Int_t jrow = 0; jrow < kMaxRow;jrow++)
{
for(Int_t kcol = 0; kcol < kMaxCol; kcol++)
{
- fHadcIso[idet][ismn][jrow][kcol] =
- pmdcalibgain.fHadcIso[idet][ismn][jrow][kcol];
+ fCellIso[idet][ismn][jrow][kcol] =
+ pmdcalibgain.fCellIso[idet][ismn][jrow][kcol];
+ fCellCount[idet][ismn][jrow][kcol] =
+ pmdcalibgain.fCellCount[idet][ismn][jrow][kcol];
}
}
}
AliPMDCalibGain::~AliPMDCalibGain()
{
// dtor
- for(Int_t idet = 0; idet < kDet; idet++)
- {
- for(Int_t ismn = 0; ismn < kMaxSMN; ismn++)
- {
- delete fHsmIso[idet][ismn];
- for(Int_t jrow = 0; jrow < kMaxRow; jrow++)
- {
- for(Int_t kcol = 0; kcol < kMaxCol; kcol++)
- {
- delete fHadcIso[idet][ismn][jrow][kcol];
- }
- }
- }
- }
+
}
// ------------------------------------------------------------------------ //
Bool_t AliPMDCalibGain::ProcessEvent(AliRawReader *rawReader)
Int_t id1,jd1; //neighbour row/col
Int_t isocount; //number of neighbours with 0 signal
- Int_t d1[kDet][kMaxSMN][kMaxRow][kMaxCol];
- Bool_t streamout = kFALSE;
+ Float_t d1[kDet][kMaxSMN][kMaxRow][kMaxCol];
+ Bool_t streamout = kFALSE;
for(Int_t idet = 0; idet < kDet; idet++)
{
{
for(Int_t icol = 0; icol < kMaxCol; icol++)
{
- d1[idet][ismn][irow][icol] = 0;
+ d1[idet][ismn][irow][icol] = 0.;
}
}
}
if (isig>0)
{
- d1[idet][ismn][irow][icol] = isig;
+ d1[idet][ismn][irow][icol] = (Float_t) isig;
}
}
pmdddlcont.Clear();
isocount++;
if(isocount == kCellNeighbour)
{
- fHsmIso[idet][ismn]->Fill(d1[idet][ismn][irow][icol]);
- fHadcIso[idet][ismn][irow][icol]->Fill(d1[idet][ismn][irow][icol]);
+
+ fSMIso[idet][ismn] += d1[idet][ismn][irow][icol];
+ fCellIso[idet][ismn][irow][icol] += d1[idet][ismn][irow][icol];
+
+ fSMCount[idet][ismn]++;
+ fCellCount[idet][ismn][irow][icol]++;
+
}
}
} // neigh cell cond.
void AliPMDCalibGain::Analyse(TTree *gaintree)
{
// Calculates the mean
- Int_t DET, SM, ROW, COL;
- Float_t GAIN;
- Float_t modmean, cellmean;
+ Int_t det, sm, row, col;
+ Float_t gain;
+ Float_t modmean = 0.;
+ Float_t cellmean = 0.;
- gaintree->Branch("DET",&DET,"DET/I");
- gaintree->Branch("SM",&SM,"SM/I");
- gaintree->Branch("ROW",&ROW,"ROW/I");
- gaintree->Branch("COL",&COL,"COL/I");
- gaintree->Branch("GAIN",&GAIN,"GAIN/F");
+ gaintree->Branch("det",&det,"det/I");
+ gaintree->Branch("sm",&sm,"sm/I");
+ gaintree->Branch("row",&row,"row/I");
+ gaintree->Branch("col",&col,"col/I");
+ gaintree->Branch("gain",&gain,"gain/F");
for(Int_t idet = 0; idet < kDet; idet++)
{
for(Int_t ism = 0; ism < kMaxSMN; ism++)
{
- modmean = fHsmIso[idet][ism]->GetMean();
+
+ if (fSMCount[idet][ism] > 0)
+ modmean = fSMIso[idet][ism]/fSMCount[idet][ism];
+
for(Int_t irow = 0; irow < kMaxRow; irow++)
{
for(Int_t icol = 0; icol < kMaxCol; icol++)
{
- cellmean = fHadcIso[idet][ism][irow][icol]->GetMean();
- DET = idet;
- SM = ism;
- ROW = irow;
- COL = icol;
- GAIN = 0.;
+ if (fCellCount[idet][ism][irow][icol] > 0)
+ cellmean = fCellIso[idet][ism][irow][icol]/fCellCount[idet][ism][irow][icol];
+
+
+ det = idet;
+ sm = ism;
+ row = irow;
+ col = icol;
+ gain = 1.;
if(modmean > 0.0)
{
- GAIN = cellmean/modmean;
+ gain = cellmean/modmean;
}
gaintree->Fill();
}
enum
{
- kDet = 2, // Number of Planes
+ kDet = 2, // Number of Planes
kMaxSMN = 24, // Number of Modules
kMaxRow = 48, // Number of Rows
kMaxCol = 96 // Number of Columns
};
- TH1F *fHsmIso[kDet][kMaxSMN]; //histos of isolated cells modulewise
- TH1F *fHadcIso[kDet][kMaxSMN][kMaxRow][kMaxCol]; // histos of iso cells cellwise
+ Float_t fSMIso[kDet][kMaxSMN];
+ Float_t fSMCount[kDet][kMaxSMN]; // counter
+ Float_t fCellIso[kDet][kMaxSMN][kMaxRow][kMaxCol]; // adc of iso cells
+ Float_t fCellCount[kDet][kMaxSMN][kMaxRow][kMaxCol]; // counter
-
-ClassDef(AliPMDCalibGain,1) // description
+ClassDef(AliPMDCalibGain,2) // description
};
#endif // ALIPMDCALIBGAIN_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(Form("PedHisto_%d_%d_%d_%d",i,j,k,l),"",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 < 48; 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
//
- for (int i = 0; i < 2; i++)
- {
- for (int j = 0; j < 24; j++)
- {
- for (int k = 0; k < 96; k++)
- {
- for (int l = 0; l < 96; l++)
- {
-
- delete fPedHisto[i][j][k][l];
- }
- }
- }
- }
}
//_____________________________________________________________________
Bool_t AliPMDCalibPedestal::ProcessEvent(AliRawReader *rawReader)
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();
}
//
// Calculate pedestal Mean and RMS
//
- Int_t DET, SM, ROW, COL;
- Float_t MEAN, RMS;
- 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 < 2; idet++)
+ 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 ism = 0; ism < 24; ism++)
+ for (int ism = 0; ism < kMaxSMN; ism++)
{
- for (int irow = 0; irow < 48; irow++)
+ for (int irow = 0; irow < kMaxRow; irow++)
{
- for (int icol = 0; icol < 96; icol++)
+ for (int icol = 0; icol < kMaxCol; icol++)
{
- DET = idet;
- SM = ism;
- ROW = irow;
- COL = icol;
- MEAN = fPedHisto[idet][ism][irow][icol]->GetMean();
- RMS = fPedHisto[idet][ism][irow][icol]->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();
}
}
private:
- TH1F *fPedHisto[2][24][48][96];
-
-
- ClassDef(AliPMDCalibPedestal,2)
+ enum
+ {
+ kDet = 2, // Number of Planes
+ kMaxSMN = 24, // Number of Modules
+ kMaxRow = 48, // Number of Rows
+ kMaxCol = 96 // Number of Columns
+ };
+
+ Float_t fPedVal[kDet][kMaxSMN][kMaxRow][kMaxCol];
+ Float_t fPedValSq[kDet][kMaxSMN][kMaxRow][kMaxCol];
+ Float_t fPedCount[kDet][kMaxSMN][kMaxRow][kMaxCol];
+
+
+ ClassDef(AliPMDCalibPedestal,3)
};
#include "TH1F.h"
#include "TBenchmark.h"
#include "TTree.h"
+#include "TROOT.h"
+#include "TPluginManager.h"
+
+
/* Main routine
Arguments:
*/
int main(int argc, char **argv) {
- AliPMDCalibPedestal calibped;
- AliPMDCalibGain calibgain;
+ /* magic line from Rene */
+ gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
+ "*",
+ "TStreamerInfo",
+ "RIO",
+ "TStreamerInfo()");
+
+
+ AliPMDCalibPedestal calibped;
+ AliPMDCalibGain calibgain;
TTree *ped = new TTree("ped","PMD Pedestal tree");
TTree *gain = new TTree("gain","PMD Gain tree");