1 #if !defined(__CINT__) || defined(__MAKECINT__) 2 #include <AliEMCALGeometry.h> 3 #include <AliOADBContainer.h> 6 #include <TClonesArray.h> 9 #include <TGraphErrors.h> 17 #include <TProfile2D.h> 30 const char *ifile =
"treefile.root",
31 const char *ofile =
"outhist.root",
32 Bool_t applyDurLimit = kFALSE,
36 Int_t referenceRun = 286313,
41 AliEMCALGeometry *g= AliEMCALGeometry::GetInstanceFromRunNumber(referenceRun);
42 const Int_t kSM=g->GetNumberOfSuperModules();
43 const Int_t kNcells=g->GetNCells();
48 cout <<
"INFO: only runs with a length of " << durMin <<
" to " << durMax <<
" minutes will be considered in the analysis" << endl;
51 cout <<
"INFO: will be using bad channel map" << endl;
56 TFile *in = TFile::Open(ifile,
"read");
58 tt->SetBranchAddress(
"event",&info);
59 tt->Branch(
"event", &info, 32000, 99);
60 Int_t Nev=tt->GetEntries();
64 for (
Int_t i=0;i<Nev;++i) {
69 cout << minRunNo <<
"\t" << maxRunNo << endl;
71 TProfile *gLedVsT[kSM];
72 TProfile *gLedMonVsT[kSM];
73 TH2F* hLedVsLength[kSM];
74 TH2F* hLedMonVsLength[kSM];
75 TProfile *gRatVsT[kSM];
76 TProfile* gCellIdVsRat =
new TProfile(
"",
"Led/LedMon run; Cell ID", kNcells+1, -0.5, kNcells+1-0.5);
77 gCellIdVsRat->SetName(
"LedDiffLedMonVsCellID");
78 TH2D* gCellIdVsLed =
new TH2D(
"",
"Led run; Cell ID", kNcells+1, -0.5, kNcells+1-0.5, 1000, 0, 1000);
79 gCellIdVsLed->SetName(
"LedVsCellID");
80 TH2D* gCellIdVsLedMon =
new TH2D(
"",
"LedMon run; Cell ID", kNcells+1, -0.5, kNcells+1-0.5, 1000, 0, 1000);
81 gCellIdVsLedMon->SetName(
"LedMonVsCellID");
83 TH1F* hAverageTSorted[kSM];
84 TH2F* hAverageTPerSM =
new TH2F(
"",
"T per SM; SM; T", kSM, -0.5, kSM-0.5, nBinsT, 15, 40);
85 hAverageTPerSM->SetName(
"MeanSMTemperature");
86 hAverageTPerSM->Sumw2();
87 const char*
opt =
"S";
88 for (
Int_t i=0;i<kSM;++i) {
89 gLedVsT[i] =
new TProfile(
"",
"Led info;T;",nBinsT,17, 27);
90 gLedVsT[i]->SetName(Form(
"ledsm%d",i));
91 gLedMonVsT[i] =
new TProfile(
"",
"Led info;T;",nBinsT,17, 27);
92 gLedMonVsT[i]->SetName(Form(
"ledmonsm%d",i));
93 gRatVsT[i] =
new TProfile(
"",
"Led/LedMon;T",nBinsT,17, 27);
94 gRatVsT[i]->SetName(Form(
"ledovermonsm%d",i));
95 hLedVsLength[i] =
new TH2F (
"",
"Led info; t [h];",500,0,20, 20000, 0, 20000);
96 hLedVsLength[i]->SetName(Form(
"ledVsLength%d",i));
97 hLedMonVsLength[i] =
new TH2F (
"",
"Led Mon info; t [h];",500,0,20, 20000, 0, 40000);
98 hLedMonVsLength[i]->SetName(Form(
"ledMonVsLength%d",i));
99 hAverageT[i] =
new TH1F (
"",Form(
"T SM %d ; run ID; T",i),Nev,0.5,Nev+0.5);
100 hAverageT[i]->SetName(Form(
"TAverageSM%dvsRunId",i));
101 hAverageTSorted[i] =
new TH1F (
"",Form(
"T SM %d ; run number; T",i),maxRunNo-minRunNo+1,minRunNo-0.5,maxRunNo+0.5);
102 hAverageTSorted[i]->SetName(Form(
"TAverageSM%dvsRunNumber",i));
105 TH1F* hSensorsT[160];
106 TH1F* hSensorsTSorted[160];
107 for (
Int_t sens = 0; sens< 160; sens++){
108 hSensorsT[sens] =
new TH1F (
"",Form(
"T sensor %d ; run ID; T",sens),Nev,0.5,Nev+0.5);
109 hSensorsT[sens]->SetName(Form(
"Tsensor%dvsRunId",sens));
110 hSensorsTSorted[sens] =
new TH1F (
"",Form(
"T sensor %d ; run number; T",sens),maxRunNo-minRunNo+1,minRunNo-0.5,maxRunNo+0.5);
111 hSensorsTSorted[sens]->SetName(Form(
"Tsensor%dvsRunNumber",sens));
114 TProfile *gLedCellVsT[kNcells+1];
115 TProfile *gLedCellRMSDiffMeanVsT[kNcells+1];
116 TProfile *gLedMonCellVsT[kNcells+1];
117 TProfile *gLedMonCellRMSDiffMeanVsT[kNcells+1];
118 TProfile *gRatCellVsT[kNcells+1];
119 TProfile *gRatECellVsT[kNcells+1];
121 cout <<
"Initializing cell histos" << endl;
122 for (
Int_t j=0;j<kNcells+1;++j) {
123 if (j%500 == 0) cout <<
"-->next 500: " << j << endl;
125 gLedCellVsT[j] =
new TProfile(
"",Form(
"Led info cell ID%i ;T;",j),nBinsT,15,40,opt);
126 gLedCellVsT[j]->SetName(Form(
"ledCell%d",j));
127 gLedMonCellVsT[j] =
new TProfile(
"",Form(
"LedMon info cell ID%i ;T;",j),nBinsT,15,40,opt);
128 gLedMonCellVsT[j]->SetName(Form(
"ledMonCell%d",j));
129 gLedCellRMSDiffMeanVsT[j] =
new TProfile(
"",Form(
"Led rms/mean info cell ID%i ;T;",j),nBinsT,15,40,opt);
130 gLedCellRMSDiffMeanVsT[j]->SetName(Form(
"ledCellRMSDiffMean%d",j));
131 gLedMonCellRMSDiffMeanVsT[j] =
new TProfile(
"",Form(
"LedMon rms/mean info cell ID%i ;T;",j),nBinsT,15,40,opt);
132 gLedMonCellRMSDiffMeanVsT[j]->SetName(Form(
"ledMonRMSDiffMeanCell%d",j));
134 gRatCellVsT[j] =
new TProfile(
"",Form(
"Led/LedMon cell ID%i ;T;",j),nBinsT,17, 27,opt);
135 gRatCellVsT[j]->SetName(Form(
"ledovermonCell%d",j));
136 gRatECellVsT[j] =
new TProfile(
"",Form(
"Led/LedMon Error cell ID%i ;T;",j),nBinsT,17, 27,opt);
137 gRatECellVsT[j]->SetName(Form(
"ledovermonECell%d",j));
139 cout <<
"-> done initializing histos" << endl;
142 Bool_t hadRefRun = kFALSE;
144 cout <<
"-> there are " << Nev <<
" contained in this tree, starting to analyse them" << endl;
146 for (
Int_t i=0;i<Nev;++i) {
151 cout <<
"starting with run " << i <<
"/" << Nev << endl;
155 if (deltaTime < durMin || deltaTime > durMax){
156 cout <<
"INFO: skipped run due to mismatch in run length" << endl;
161 TClonesArray &sms = info->
fSMs;
162 for (
Int_t sm=0;sm<sms.GetEntries();++sm) {
164 hAverageT[sm]->SetBinContent(i+1,smInfot->
fAvgT);
165 hAverageTSorted[sm]->SetBinContent(hAverageTSorted[sm]->FindBin(info->
fRunNo),smInfot->
fAvgT);
166 hAverageTPerSM->Fill(sm,smInfot->
fAvgT,deltaTime/60);
167 hSensorsT[sm*8]->SetBinContent(i+1,smInfot->
fT1);
168 hSensorsT[sm*8+1]->SetBinContent(i+1,smInfot->
fT2);
169 hSensorsT[sm*8+2]->SetBinContent(i+1,smInfot->
fT3);
170 hSensorsT[sm*8+3]->SetBinContent(i+1,smInfot->
fT4);
171 hSensorsT[sm*8+4]->SetBinContent(i+1,smInfot->
fT5);
172 hSensorsT[sm*8+5]->SetBinContent(i+1,smInfot->
fT6);
173 hSensorsT[sm*8+6]->SetBinContent(i+1,smInfot->
fT7);
174 hSensorsT[sm*8+7]->SetBinContent(i+1,smInfot->
fT8);
175 hSensorsTSorted[sm*8]->SetBinContent(hSensorsTSorted[sm*8]->FindBin(info->
fRunNo),smInfot->
fT1);
176 hSensorsTSorted[sm*8+1]->SetBinContent(hSensorsTSorted[sm*8]->FindBin(info->
fRunNo),smInfot->
fT2);
177 hSensorsTSorted[sm*8+2]->SetBinContent(hSensorsTSorted[sm*8]->FindBin(info->
fRunNo),smInfot->
fT3);
178 hSensorsTSorted[sm*8+3]->SetBinContent(hSensorsTSorted[sm*8]->FindBin(info->
fRunNo),smInfot->
fT4);
179 hSensorsTSorted[sm*8+4]->SetBinContent(hSensorsTSorted[sm*8]->FindBin(info->
fRunNo),smInfot->
fT5);
180 hSensorsTSorted[sm*8+5]->SetBinContent(hSensorsTSorted[sm*8]->FindBin(info->
fRunNo),smInfot->
fT6);
181 hSensorsTSorted[sm*8+6]->SetBinContent(hSensorsTSorted[sm*8]->FindBin(info->
fRunNo),smInfot->
fT7);
182 hSensorsTSorted[sm*8+7]->SetBinContent(hSensorsTSorted[sm*8]->FindBin(info->
fRunNo),smInfot->
fT8);
185 TRandom3 ledRandom(1289790);
186 TRandom3 ledMonRandom(909088);
188 TClonesArray &cells = info->
fCells;
189 for (
Int_t j=0;j<cells.GetEntries();++j) {
201 if (appBC && badcell > 0){
202 if (
debugInfo > 1) cout <<
"found bad cell for " << cellID <<
"\t " << info->
fRunNo << endl;
211 for (
UInt_t s = 0; s < deltaTimeS; s++){
214 if (!((ledM<=0)||(ledR<=0)) ){
215 ledcurrent = ledRandom.Gaus(ledM,ledR);
217 gLedCellVsT[cellID]->Fill(smT,ledcurrent);
218 if (s==0) gLedCellRMSDiffMeanVsT[cellID]->Fill(smT,ledR/ledM,1);
221 gLedVsT[sm]->Fill(T,ledcurrent);
222 gCellIdVsLed->Fill(cellID,ledcurrent);
224 if (!((monM<=0)||(monR<=0)) ){
225 ledMoncurrent = ledMonRandom.Gaus(monM,monR);
227 gLedMonCellVsT[cellID]->Fill(smT,ledMoncurrent);
228 if (s==0) gLedMonCellRMSDiffMeanVsT[cellID]->Fill(smT,monR/monM,1);
230 gLedMonVsT[sm]->Fill(T,ledMoncurrent);
231 gCellIdVsLedMon->Fill(cellID,ledMoncurrent);
233 if ( (ledcurrent<=0) || (ledMoncurrent<=0) )
235 gCellIdVsRat->Fill(cellID,ledcurrent/ledMoncurrent);
236 gRatVsT[sm]->Fill(T,ledcurrent/ledMoncurrent);
237 gRatCellVsT[cellID]->Fill(smT,ledcurrent/ledMoncurrent);
238 gRatECellVsT[cellID]->Fill(smT,1);
239 hLedVsLength[sm]->Fill(deltaTime/60,ledcurrent);
240 hLedMonVsLength[sm]->Fill(deltaTime/60,ledMoncurrent);
248 w3 = 1./(monR*monR);;
250 if (!((ledM<=0)||(ledR<=0)) ){
252 gLedCellVsT[cellID]->Fill(smT,ledM,w);
253 gLedCellRMSDiffMeanVsT[cellID]->Fill(smT,ledR/ledM,1);
255 gLedVsT[sm]->Fill(T,ledM,w);
258 if (!((monM<=0)||(monR<=0)) ){
260 gLedMonCellVsT[cellID]->Fill(smT,monM,w3);
261 gLedMonCellRMSDiffMeanVsT[cellID]->Fill(smT,monR/monM,1);
263 gLedMonVsT[sm]->Fill(T,monM,w3);
265 if ( (ledM<=0)||(ledR<=0) || (monM<=0)||(monR<=0) )
268 Double_t ratErr = ledM/monM * TMath::Sqrt((ledR*ledR)/(ledM*ledM)+(monR*monR)/(monM*monM));
271 gRatVsT[sm]->Fill(T,ledM/monM,w2);
272 gRatCellVsT[cellID]->Fill(smT,ledM/monM,w2);
273 gRatECellVsT[cellID]->Fill(smT,ratErr,w2);
274 hLedVsLength[sm]->Fill(deltaTime/60,ledM,w);
275 hLedMonVsLength[sm]->Fill(deltaTime/60,monM,w);
280 TFile *out = TFile::Open(ofile,
"recreate");
282 out = TFile::Open(
"dummyfile.root",
"update");
283 for (
Int_t i=0;i<kSM;++i) {
285 gLedMonVsT[i]->Write();
287 hLedVsLength[i]->Write();
288 hLedMonVsLength[i]->Write();
289 hAverageT[i]->Write();
290 hAverageTSorted[i]->Write();
292 hAverageTPerSM->Write();
293 gCellIdVsRat->Write();
294 gCellIdVsLed->Write();
295 gCellIdVsLedMon->Write();
296 for (
Int_t sens = 0; sens < 160; sens++){
297 hSensorsT[sens]->Write();
298 hSensorsTSorted[sens]->Write();
302 Int_t cellIDFirstInSM = 0;
303 for (
Int_t j=0;j<kNcells+1;++j) {
304 Int_t iTower = -1, iIphi = -1, iIeta = -1, sm=-1;
305 g->GetCellIndex(j,sm,iTower,iIphi,iIeta);
308 out->mkdir(Form(
"cellsInSM%d",sm));
309 out->cd(Form(
"cellsInSM%d",sm));
310 if (
debugInfo) cout <<
"SM: \t" << sm-1 <<
"\t"<< cellIDFirstInSM <<
"\t" << j <<
"\t" << j -cellIDFirstInSM<< endl;
315 if (gLedCellVsT[j]->GetEntries() > 0)
316 gLedCellVsT[j]->Write();
317 if (gLedMonCellVsT[j]->GetEntries() > 0)
318 gLedMonCellVsT[j]->Write();
319 if (gLedCellRMSDiffMeanVsT[j]->GetEntries() > 0)
320 gLedCellRMSDiffMeanVsT[j]->Write();
321 if (gLedMonCellRMSDiffMeanVsT[j]->GetEntries() > 0)
322 gLedMonCellRMSDiffMeanVsT[j]->Write();
324 if (gRatCellVsT[j]->GetEntries() > 0)
325 gRatCellVsT[j]->Write();
326 if (gRatECellVsT[j]->GetEntries() > 0)
327 gRatECellVsT[j]->Write();
void anaTree(const char *ifile="treefile.root", const char *ofile="outhist.root", Bool_t applyDurLimit=kFALSE, Float_t durMin=0, Float_t durMax=10000, Bool_t appBC=kFALSE, Int_t referenceRun=286313, Int_t nBinsT=1000)
UShort_t T(UShort_t m, UShort_t t)