1 /**************************************************************************
2 * This file is property of and copyright by the ALICE HLT Project *
3 * All rights reserved. *
5 * Primary Authors: Oystein Djuvsland *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 #include "AliHLTPHOSBaselineAnalyzer.h"
17 #include "AliHLTPHOSBase.h"
18 #include "AliHLTPHOSBaseline.h"
19 #include "AliHLTPHOSValidCellDataStruct.h"
20 #include "AliHLTPHOSSanityInspector.h"
21 #include "AliHLTPHOSConstants.h"
23 #include "AliHLTPHOSRcuCellEnergyDataStruct.h"
25 #include "TClonesArray.h"
30 using namespace PhosHLTConst;
32 ClassImp(AliHLTPHOSBaselineAnalyzer);
34 AliHLTPHOSBaselineAnalyzer::AliHLTPHOSBaselineAnalyzer() :
37 fMaxCrazyDifference(0),
43 fSanityInspector = new AliHLTPHOSSanityInspector();
47 for(UInt_t x = 0; x < N_XCOLUMNS_MOD; x++)
49 for(UInt_t z = 0; z < N_ZROWS_MOD; z++)
51 for(UInt_t gain = 0; gain < N_GAINS; gain++)
53 sprintf(histName, "sample_value_channel_x_col_%d_z_row_%d_gain_%d", x, z, gain);
54 sprintf(histTitle, "Distribution of Sample Values for Channel X: %d - Z: %d - Gain: %d", x, z, gain);
55 fChannelHistogramsPtr[x][z][gain] = new TH1F(histName, histTitle, 1024, 0, 1023);
56 sprintf(histName, "fixed_sample_value_channel_x_col_%d_z_row_%d_gain_%d", x, z, gain);
57 sprintf(histTitle, "Distribution of Corrected Sample Values for Channel X: %d - Z: %d - Gain: %d", x, z, gain);
58 fFixedChannelHistogramsPtr[x][z][gain] = new TH1F(histName, histTitle, 1024, 0, 1023);
63 fRMSHistogramPtr = new TH1F("RMSHist", "RMS Values for All Channels", 1023, 0, 1023);
64 fRMSMapHighGainHistogramPtr = new TH2F("RMSHGMapHist", "Map of RMS Values for High Gain Channels", 64, 0, 63, 56, 0, 55);
65 fRMSMapLowGainHistogramPtr = new TH2F("RMSLGMapHist", "Map of RMS Values for Low Gain Channels", 64, 0, 63, 56, 0, 55);
67 fFixedRMSHistogramPtr = new TH1F("fixedRMSHist", "Corrected RMS Values for All Channels", 1023, 0, 1023);
68 fFixedRMSMapHighGainHistogramPtr = new TH2F("fixedRMSHGMapHist", "Map of Corrected RMS Values for High Gain Channels", 64, 0, 63, 56, 0, 55);
69 fFixedRMSMapLowGainHistogramPtr = new TH2F("fixedRMSLGMapHist", "Map of Corrected RMS Values for Low Gain Channels", 64, 0, 63, 56, 0, 55);
72 ResetAccumulatedBaselines();
75 AliHLTPHOSBaselineAnalyzer::~AliHLTPHOSBaselineAnalyzer()
82 AliHLTPHOSBaselineAnalyzer::CalculateRcuBaselines(AliHLTPHOSRcuCellEnergyDataStruct* rcuData)
85 Int_t xOff = rcuData->fRcuX * N_XCOLUMNS_RCU;
86 Int_t zOff = rcuData->fRcuZ * N_ZROWS_RCU;
89 AliHLTPHOSValidCellDataStruct *data = rcuData->fValidData;
91 for(Int_t i = 0; i < rcuData->fCnt; i++)
93 baseline = CalculateChannelBaseline(&(data[i]), xOff, zOff);
96 CalculateAccumulatedChannelBaseline(data[i].fX + xOff, data[i].fZ + zOff, data[i].fGain, baseline);
104 AliHLTPHOSBaselineAnalyzer::CalculateChannelBaseline(AliHLTPHOSValidCellDataStruct *cellData, Int_t xOff, Int_t zOff)
109 Int_t *data = cellData->fData;
110 for(Int_t i = fSampleStart; i < fNSamples; i++)
113 if(cellData->fGain == 0)
115 fChannelLowGainHistogramsPtr[cellData->fX + xOff][cellData->fZ + zOff]->Fill(data[i]);
119 fChannelHighGainHistogramsPtr[cellData->fX + xOff][cellData->fZ + zOff]->Fill(data[i]);
122 fChannelHistogramsPtr[cellData->fX + xOff][cellData->fZ + zOff][cellData->fGain]->Fill(data[i]);
125 if(cellData->fCrazyness == 0)
127 crazyness = fSanityInspector->CheckAndHealInsanity(data, fNSamples);
132 for(Int_t j = fSampleStart; j < fNSamples; j++)
134 if(data[j] > fMaxSignal)
137 fFixedChannelHistogramsPtr[cellData->fX + xOff][cellData->fZ + zOff][cellData->fGain]->Fill(data[j]);
140 fBaselines[cellData->fX + xOff][cellData->fZ + zOff][cellData->fGain] = (float)total / (fNSamples - fSampleStart);
142 return (float)total/(fNSamples - fSampleStart);
146 AliHLTPHOSBaselineAnalyzer::CalculateAccumulatedChannelBaseline(Int_t x, Int_t z, Int_t gain, Float_t baseline)
149 Float_t oldBaseline = fAccumulatedBaselines[x][z][gain][0];
150 Float_t nEntries = fAccumulatedBaselines[x][z][gain][1];
152 Float_t total = nEntries * oldBaseline + baseline;
154 fAccumulatedBaselines[x][z][gain][0] = total / nEntries;
155 fAccumulatedBaselines[x][z][gain][1] = nEntries;
159 AliHLTPHOSBaselineAnalyzer::CalculateChannelsBaselineRMS()
162 for(UInt_t x = 0; x < N_XCOLUMNS_MOD; x++)
164 for(UInt_t z = 0; z < N_ZROWS_MOD; z++)
166 for(UInt_t gain = 0; gain < N_GAINS; gain++)
168 fRMSHistogramPtr->Fill(fChannelHistogramsPtr[x][z][gain]->GetRMS());
170 fRMSMapHighGainHistogramPtr->SetBinContent(x, z, fChannelHistogramsPtr[x][z][gain]->GetRMS());
172 fRMSMapLowGainHistogramPtr->SetBinContent(x, z, fChannelHistogramsPtr[x][z][gain]->GetRMS());
174 fFixedRMSHistogramPtr->Fill(fFixedChannelHistogramsPtr[x][z][gain]->GetRMS());
176 fFixedRMSMapHighGainHistogramPtr->SetBinContent(x, z, fFixedChannelHistogramsPtr[x][z][gain]->GetRMS());
178 fFixedRMSMapLowGainHistogramPtr->SetBinContent(x, z, fFixedChannelHistogramsPtr[x][z][gain]->GetRMS());
186 AliHLTPHOSBaselineAnalyzer::SetRootObjects(TTree *tree, TClonesArray *baselineArray)
190 fBaselineArrayPtr = baselineArray;
191 tree->Branch("Baselines", &fBaselineArrayPtr);
196 AliHLTPHOSBaselineAnalyzer::FillTree()
199 AliHLTPHOSBaseline *baseline;
202 for(UInt_t x = 0; x < N_XCOLUMNS_MOD; x++)
204 for(UInt_t z = 0; z < N_ZROWS_MOD; z++)
206 for(UInt_t gain = 0; gain < N_GAINS; gain++)
208 baseline = (AliHLTPHOSBaseline*)fBaselineArrayPtr->New(n);
211 baseline->SetGain(gain);
212 baseline->SetBaseline(fAccumulatedBaselines[x][z][gain][0]);
213 baseline->SetEntries((Int_t)fAccumulatedBaselines[x][z][gain][1]);
219 fBaselineArrayPtr->Clear();
223 AliHLTPHOSBaselineAnalyzer::WriteAccumulatedBaselines(const Char_t* filename)
226 TFile *baselineFile = TFile::Open(filename, "recreate");
228 baselineFile->Close();
232 AliHLTPHOSBaselineAnalyzer::WriteChannelHistograms(const Char_t* filename)
235 TFile *file = TFile::Open(filename, "recreate");
237 for(UInt_t x = 0; x < N_XCOLUMNS_MOD; x++)
239 for(UInt_t z = 0; z < N_ZROWS_MOD; z++)
241 for(UInt_t gain = 0; gain < N_GAINS; gain++)
243 fChannelHistogramsPtr[x][z][gain]->Write();
252 AliHLTPHOSBaselineAnalyzer::WriteRMSHistogram(const Char_t* filename)
255 TFile *file = TFile::Open(filename, "recreate");
256 fRMSHistogramPtr->Write();
257 fRMSMapHighGainHistogramPtr->Write();
258 fRMSMapLowGainHistogramPtr->Write();
260 fFixedRMSHistogramPtr->Write();
261 fFixedRMSMapHighGainHistogramPtr->Write();
262 fFixedRMSMapLowGainHistogramPtr->Write();
268 AliHLTPHOSBaselineAnalyzer::ResetBaselines()
271 for(UInt_t x = 0; x < N_XCOLUMNS_MOD; x++)
273 for(UInt_t z = 0; z < N_ZROWS_MOD; z++)
275 for(UInt_t gain = 0; gain < N_GAINS; gain++)
277 fBaselines[x][z][gain] = 0;
284 AliHLTPHOSBaselineAnalyzer::ResetChannelCount()
291 AliHLTPHOSBaselineAnalyzer::ResetAccumulatedBaselines()
293 for(UInt_t x = 0; x < N_XCOLUMNS_MOD; x++)
295 for(UInt_t z = 0; z < N_ZROWS_MOD; z++)
297 for(UInt_t gain = 0; gain < N_GAINS; gain++)
299 fAccumulatedBaselines[x][z][gain][0] = 0;
300 fAccumulatedBaselines[x][z][gain][1] = 0;
307 AliHLTPHOSBaselineAnalyzer::SetMaxCrazyDifference(Int_t diff)
310 fMaxCrazyDifference = diff;
311 fSanityInspector->SetMaxDifference(diff);
318 AliHLTPHOSBaselineAnalyzer::SetChannelsHistograms(TH1F *channelLowGainHistArray[N_XCOLUMNS_MOD][N_ZROWS_MOD], TH1F *channelHighGainHistArray[N_XCOLUMNS_MOD][N_ZROWS_MOD])
320 for(UInt_t x = 0; x < N_XCOLUMNS_MOD; x++)
322 for(UInt_t z = 0; z < N_ZROWS_MOD; z++)
324 for(UInt_t gain = 0; gain < N_GAINS; gain++)
326 fChannelLowGainHistogramsPtr[x][z][gain] = channelLowGainHistArray[x][z][gain];
327 fChannelHighGainHistogramsPtr[x][z][gain] = channelHighGainHistArray[x][z][gain];