55 fPedSummary("PedestalSummary","pedestals",51200,0,51200),
56 fNoiseSummary("NoiseSummary","noise",51200,0,51200),
60 fMinTimebin(3 * 4 * 3 * 16),
61 fMaxTimebin(3 * 4 * 3 * 16),
69 fDiagnosticsFilename =
"diagnosticsPedestal.root";
76 fPedSummary(
"PedestalSummary",
"pedestals",51200,0,51200),
77 fNoiseSummary(
"NoiseSummary",
"noise",51200,0,51200),
81 fMinTimebin(pedDA.fMinTimebin),
82 fMaxTimebin(pedDA.fMaxTimebin),
83 fSummaryFMD1i(pedDA.fSummaryFMD1i),
84 fSummaryFMD2i(pedDA.fSummaryFMD2i),
85 fSummaryFMD2o(pedDA.fSummaryFMD2o),
86 fSummaryFMD3i(pedDA.fSummaryFMD3i),
87 fSummaryFMD3o(pedDA.fSummaryFMD3o)
103 if (!appendRun ||
fRunno == 0) {
111 Error(
"OpenFiles",
"Failed to open pedestal file");
120 Int_t ddl = 3072+(d-1);
122 TString base; base.Form(
"ddl%d.csv", ddl);
123 TString tmp; tmp.Form(
"%s.tmp", base.Data());
125 out.write(
"# EOF\n", 6);
129 gSystem->Unlink(tmp.Data());
134 if (!gSystem->AccessPathName(tmp.Data()))
135 gSystem->Rename(tmp.Data(), base.Data());
171 for (UInt_t sample = 0; sample < samples; sample++) {
172 TString name(Form(
"FMD%d%c[%02d,%03d]_%d", det,ring,sec,strip,sample));
173 TH1S* hSample =
new TH1S(name.Data(),name.Data(), 1024,-.5,1023.5);
174 hSample->SetXTitle(
"ADC");
175 hSample->SetYTitle(
"Events");
176 hSample->SetDirectory(0);
177 hSample->ResetBit(TObject::kMustCleanup);
178 sampleArray->AddAtAndExpand(hSample, sample);
189 TH1F* sumPed =
new TH1F(
"Pedestals",
190 Form(
"Summary of pedestals in FMD%d%c[%02d]",
193 sumPed->SetXTitle(
"Strip");
194 sumPed->SetYTitle(
"Pedestal [ADC]");
195 sumPed->SetDirectory(0);
196 sumPed->ResetBit(TObject::kMustCleanup);
198 TH1F* sumNoise =
static_cast<TH1F*
>(sumPed->Clone(
"Noise"));
199 sumNoise->SetYTitle(
"Noise [ADC]");
200 sumNoise->SetDirectory(0);
201 sumNoise->ResetBit(TObject::kMustCleanup);
203 Int_t n = sectorArray->GetEntriesFast();
205 sectorArray->AddAtAndExpand(sumNoise, n +
kNoiseOffset - 1);
216 Char_t ring = digit->
Ring();
217 UShort_t sec = digit->
Sector();
218 UShort_t strip = digit->
Strip();
222 for (UInt_t sample = 0; sample < samples; sample++) {
223 TH1S* hSample =
GetChannel(det, ring, sec, strip, sample);
224 if (!hSample)
continue;
226 hSample->Fill(digit->
Count(sample));
297 for (UShort_t sample = 0; sample < samples; sample++) {
298 TH1S* hChannel =
GetChannel(det, ring, sec, strip,sample);
299 if(!hChannel || hChannel->GetEntries() == 0) {
305 AliDebugF(50,
"Fitting FMD%d%c[%02d,%03d] with %d entries",
306 det,ring,sec,strip,
int(hChannel->GetEntries()));
307 TF1* fitFunc =
new TF1(
"fitFunc",
"gausn",0,300);
308 fitFunc->ResetBit(TObject::kMustCleanup);
309 fitFunc->SetParameters(100,100,1);
310 hChannel->Fit(fitFunc,
"Q0",
"",10,200);
311 hChannel->GetListOfFunctions()->Remove(fitFunc);
312 gROOT->GetListOfFunctions()->Remove(fitFunc);
314 Float_t mean = hChannel->GetMean();
315 Float_t rms = hChannel->GetRMS();
317 hChannel->GetXaxis()->SetRangeUser(mean-5*rms,mean+5*rms);
318 mean = hChannel->GetMean();
319 rms = hChannel->GetRMS();
322 UShort_t ddl, board, altro, channel;
326 ddl,board,altro,channel,timebin);
327 Int_t idx =
HWIndex(ddl, board, altro, channel);
333 std::ostream* zsFile = 0;
338 default:
AliWarning(
"Unknown sample!");
break;
341 *zsFile << board <<
',' 351 if(fitFunc->GetNDF())
352 chi2ndf = fitFunc->GetChisquare() / fitFunc->GetNDF();
355 Int_t sampleToWrite = 2;
356 if (samples == 2) sampleToWrite = 1;
357 else if (samples < 2) sampleToWrite = 0;
359 hChannel->GetXaxis()->SetRange(1,1024);
361 if(sample != sampleToWrite)
continue;
370 << fitFunc->GetParameter(1) <<
',' 371 << fitFunc->GetParameter(2) <<
',' 377 Int_t bin = summary->FindBin(sec, strip);
378 summary->SetBinContent(bin, mean);
379 summary->SetBinError(bin, rms);
385 sumPed->SetBinContent(strip+1, mean);
386 sumPed->SetBinError(strip+1, rms);
387 sumNoise->SetBinContent(strip+1, rms);
419 <<
" @ " << now.AsString() << std::endl;
435 for (
size_t i = 0; i < 3; i++) {
436 *(zss[i]) <<
"# FMD " << (i+1) <<
" pedestals \n" 443 *(zss[i]) <<
"# This file created from run # " <<
fRunno 444 <<
" @ " << now.AsString() << std::endl;
467 if (!sampleArray)
return 0;
468 TH1S* hSample =
static_cast<TH1S*
>(sampleArray->At(sample));
470 AliErrorF(
"No channel histogram for FMD%d%c[%02d,%03d]_%d",
471 det, ring, sec, strip, sample);
473 AliErrorF(
"Path is %s <- %s <- %s <- %s",
474 sampleArray->GetName(),
490 Int_t n = secArray->GetEntriesFast();
492 return static_cast<TH1F*
>(secArray->At(i));
self initialized array, used for adding constraints
void MakeSummary(UShort_t det, Char_t ring)
void SetRequiredEvents(Int_t nEvents)
std::ofstream fZSfileFMD2
Array * GetDetectorArray(UShort_t det)
Int_t HWIndex(UShort_t ddl, UShort_t board, UShort_t altro, UShort_t chan) const
void Rotate(const char *base, int max) const
void AddChannelContainer(Array *sectorArray, UShort_t det, Char_t ring, UShort_t sec, UShort_t strip)
std::ofstream fOutputFile
This class is a singleton that handles various parameters of the FMD detectors. This class reads from...
Manager of FMD parameters.
virtual ~AliFMDPedestalDA()
Array * GetRingArray(UShort_t det, Char_t ring)
Bool_t OpenFiles(Bool_t appendRun=false)
Per strip pedestal calibration.
#define AliWarning(message)
std::ofstream fZSfileFMD1
Map HW address to detector coordinates and back again.
void FillChannels(AliFMDDigit *digit)
TH2 * MakeSummaryHistogram(const char *prefix, const char *title, UShort_t det, Char_t ring)
TH1S * GetChannel(UShort_t det, Char_t ring, UShort_t sec, UShort_t strip, UInt_t sample)
std::ofstream fZSfileFMD3
static AliFMDParameters * Instance()
virtual void AddSectorSummary(Array *secArray, UShort_t det, Char_t ring, UShort_t sector, UShort_t nStrip)
void InstallFile(Int_t d)
void Analyse(UShort_t det, Char_t ring, UShort_t sec, UShort_t strip)
virtual void CloseFiles()
Bool_t Detector2Hardware(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UShort_t sam, UShort_t &ddl, UShort_t &board, UShort_t &altro, UShort_t &channel, UShort_t &timebin) const
UShort_t Detector() const
virtual Bool_t OpenFiles(Bool_t appendRun=false)
static const char * GetPedestalShuttleID()
Array * GetSectorArray(UShort_t det, Char_t ring, UShort_t sector)
Int_t Count(UShort_t i=0) const
#define AliErrorF(message,...)
#define AliDebugF(logLevel, format,...)
UShort_t GetSampleRate(UShort_t detector, Char_t ring, UShort_t sector, UShort_t strip) const
Array * GetStripArray(UShort_t det, Char_t ring, UShort_t sector, UShort_t strip)
TH1F * GetSectorSummary(UShort_t det, Char_t ring, UShort_t sec, Bool_t pedNotNoise)