#include "AliFMDPedestalDA.h"
#include "AliFMDAltroMapping.h"
-#include "iostream"
-#include "fstream"
+#include "AliFMDParameters.h"
+#include "AliFMDCalibPedestal.h"
+#include "AliFMDDigit.h"
#include "AliLog.h"
-#include "TF1.h"
-#include "TObject.h"
-#include "TMath.h"
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <TFile.h>
+#include <TF1.h>
+#include <TObject.h>
+#include <TMath.h>
+#include <TSystem.h>
+#include <TDatime.h>
+#include <TH2.h>
//_____________________________________________________________________
ClassImp(AliFMDPedestalDA)
//_____________________________________________________________________
-AliFMDPedestalDA::AliFMDPedestalDA() : AliFMDBaseDA(),
- fCurrentChannel(1),
- fPedSummary("PedestalSummary","pedestals",51200,0,51200),
- fNoiseSummary("NoiseSummary","noise",51200,0,51200),
- fZSfileFMD1(),
- fZSfileFMD2(),
- fZSfileFMD3(),
- fMinTimebin(3 * 4 * 3 * 16), // 3 ddls, 4 FECs, 3 Altros, 16 channels
- fMaxTimebin(3 * 4 * 3 * 16) // 3 ddls, 4 FECs, 3 Altros, 16 channels
+AliFMDPedestalDA::AliFMDPedestalDA()
+ : AliFMDBaseDA(),
+ fCurrentChannel(1),
+ fPedSummary("PedestalSummary","pedestals",51200,0,51200),
+ fNoiseSummary("NoiseSummary","noise",51200,0,51200),
+ fZSfileFMD1(),
+ fZSfileFMD2(),
+ fZSfileFMD3(),
+ fMinTimebin(3 * 4 * 3 * 16), // 3 ddls, 4 FECs, 3 Altros, 16 channels
+ fMaxTimebin(3 * 4 * 3 * 16), // 3 ddls, 4 FECs, 3 Altros, 16 channels
+ fSummaryFMD1i(0),
+ fSummaryFMD2i(0),
+ fSummaryFMD2o(0),
+ fSummaryFMD3i(0),
+ fSummaryFMD3o(0)
{
// Default constructor
+ Rotate("peds.csv", 3);
fOutputFile.open("peds.csv");
+ Rotate("ddl3072.csv", 10);
fZSfileFMD1.open("ddl3072.csv");
+ Rotate("ddl3073.csv", 10);
fZSfileFMD2.open("ddl3073.csv");
+ Rotate("ddl3074.csv", 10);
fZSfileFMD3.open("ddl3074.csv");
}
fZSfileFMD2(),
fZSfileFMD3(),
fMinTimebin(pedDA.fMinTimebin),
- fMaxTimebin(pedDA.fMaxTimebin)
+ fMaxTimebin(pedDA.fMaxTimebin),
+ fSummaryFMD1i(pedDA.fSummaryFMD1i),
+ fSummaryFMD2i(pedDA.fSummaryFMD2i),
+ fSummaryFMD2o(pedDA.fSummaryFMD2o),
+ fSummaryFMD3i(pedDA.fSummaryFMD3i),
+ fSummaryFMD3o(pedDA.fSummaryFMD3o)
{
// Copy constructor
}
SetRequiredEvents(1000);
fMinTimebin.Reset(1024);
fMaxTimebin.Reset(-1);
+
+
}
//_____________________________________________________________________
TObjArray* sampleArray = new TObjArray(samples);
sampleArray->SetOwner();
for (UInt_t sample = 0; sample < samples; sample++) {
- TH1S* hSample = new TH1S(Form("FMD%d%c[%02d,03%d]_%d",
- det,ring,sec,strip,sample),
- Form("FMD%d%c[%02d,%03%d]_%d",
- det,ring,sec,strip),
- 1024,-.5,1023.5);
+ TString name(Form("FMD%d%c[%02d,%03d]_%d", det,ring,sec,strip,sample));
+ TH1S* hSample = new TH1S(name.Data(),name.Data(), 1024,-.5,1023.5);
hSample->SetXTitle("ADC");
hSample->SetYTitle("Events");
hSample->SetDirectory(0);
}
+//_____________________________________________________________________
+void AliFMDPedestalDA::MakeSummary(UShort_t det, Char_t ring)
+{
+ //Create summary hists for FMD pedestals
+ std::cout << "Making summary for FMD" << det << ring << " ..." << std::endl;
+ switch (det) {
+ case 1:
+ fSummaryFMD1i = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+ break;
+ case 2:
+ switch (ring) {
+ case 'I': case 'i':
+ fSummaryFMD2i = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+ break;
+ case 'O': case 'o':
+ fSummaryFMD2o = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+ break;
+ }
+ break;
+ case 3:
+ switch (ring) {
+ case 'I': case 'i':
+ fSummaryFMD3i = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+ break;
+ case 'O': case 'o':
+ fSummaryFMD3o = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+ break;
+ }
+ break;
+ }
+}
+
//_____________________________________________________________________
void AliFMDPedestalDA::Analyse(UShort_t det,
Char_t ring,
// sec Sector
// strip Strip.
AliFMDParameters* pars = AliFMDParameters::Instance();
+ TH2* summary = 0;
+ switch (det) {
+ case 1: summary = fSummaryFMD1i; break;
+ case 2:
+ switch (ring) {
+ case 'I': summary = fSummaryFMD2i; break;
+ case 'O': summary = fSummaryFMD2o; break;
+ }
+ break;
+ case 3:
+ switch (ring) {
+ case 'I': summary = fSummaryFMD3i; break;
+ case 'O': summary = fSummaryFMD3o; break;
+ }
+ break;
+ }
+ static bool first = true;
+ if (summary && first) {
+ std::cout << "Filling summary " << summary->GetName() << std::endl;
+ first = false;
+ }
+
// Float_t factor = pars->GetPedestalFactor();
UInt_t samples = pars->GetSampleRate(det, ring, sec, strip);
for (UShort_t sample = 0; sample < samples; sample++) {
return;
}
- AliDebug(50, Form("Fitting FMD%d%c_%d_%d with %d entries",
- det,ring,sec,strip, hChannel->GetEntries()));
+ AliDebug(50, Form("Fitting FMD%d%c[%02d,%03d] with %d entries",
+ det,ring,sec,strip, int(hChannel->GetEntries())));
TF1 fitFunc("fitFunc","gausn",0,300);
fitFunc.SetParameters(100,100,1);
hChannel->Fit("fitFunc","Q0+","",10,200);
<< channel << ','
<< timebin << ','
<< mean << ','
- << rms << "\n"; break;
+ << rms << "\n";
Float_t chi2ndf = 0;
<< fitFunc.GetParameter(1) << ','
<< fitFunc.GetParameter(2) << ','
<< chi2ndf <<"\n";
-
+
+ if (summary) {
+ Int_t bin = summary->FindBin(sec, strip);
+ summary->SetBinContent(bin, mean);
+ summary->SetBinError(bin, rms);
+ }
+
if(fSaveHistograms ) {
gDirectory->cd(GetSectorPath(det, ring, sec, kTRUE));
TH1F* sumPed = dynamic_cast<TH1F*>(gDirectory->Get("Pedestals"));
fNoiseSummary.Write();
}
AliFMDAltroMapping* map = AliFMDParameters::Instance()->GetAltroMap();
- if(fZSfileFMD1.is_open()) FillinTimebins(fZSfileFMD1, map->Detector2DDL(1));
- if(fZSfileFMD2.is_open()) FillinTimebins(fZSfileFMD2, map->Detector2DDL(2));
- if(fZSfileFMD3.is_open()) FillinTimebins(fZSfileFMD3, map->Detector2DDL(3));
+ for (Int_t i = 0; i < 3; i++) {
+ std::ofstream& out = (i == 0 ? fZSfileFMD1 :
+ i == 1 ? fZSfileFMD2 :
+ fZSfileFMD3);
+ if (out.is_open() && fSeenDetectors[i]) {
+ FillinTimebins(out, map->Detector2DDL(i+1));
+ }
+ if (!fSeenDetectors[i]) {
+ TString n(Form("ddl%d.csv",3072+map->Detector2DDL(i+1)));
+ gSystem->Unlink(n.Data());
+ }
+ }
}
//_____________________________________________________________________
-void AliFMDPedestalDA::FillinTimebins(std::ofstream& out, UShort_t ddl)
+void AliFMDPedestalDA::FillinTimebins(std::ofstream& out, UShort_t /*ddl*/)
{
+ //
+ // Fill missing timebins
+ //
#if 0
unsigned short boards[] = { 0x0, 0x1, 0x10, 0x11, 0xFFFF };
unsigned short* board = boards;
//_____________________________________________________________________
void AliFMDPedestalDA::WriteHeaderToFile()
{
+ //
// Write headers to output files
+ //
AliFMDParameters* pars = AliFMDParameters::Instance();
fOutputFile.write(Form("# %s \n",pars->GetPedestalShuttleID()),13);
+ TDatime now;
+ fOutputFile << "# This file created from run # " << fRunno
+ << " @ " << now.AsString() << std::endl;
fOutputFile.write("# Detector, "
"Ring, "
"Sector, "
"Chi2/NDF \n", 71);
std::ostream* zss[] = { &fZSfileFMD1, &fZSfileFMD2, &fZSfileFMD3, 0 };
- for (size_t i = 0; i < 3; i++)
- *(zss[i]) << "# FMD 1 pedestals \n"
+ for (size_t i = 0; i < 3; i++) {
+ *(zss[i]) << "# FMD " << (i+1) << " pedestals \n"
<< "# board, "
<< "altro, "
<< "channel, "
<< "timebin, "
<< "pedestal, "
<< "noise\n";
+ *(zss[i]) << "# This file created from run # " << fRunno
+ << " @ " << now.AsString() << std::endl;
+ }
}
//_____________________________________________________________________