1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Permission to use, copy, modify and distribute this software and its *
5 * documentation strictly for non-commercial purposes is hereby granted *
6 * without fee, provided that the above copyright notice appears in all *
7 * copies and that both the copyright notice and this permission notice *
8 * appear in the supporting documentation. The authors make no claims *
9 * about the suitability of this software for any purpose. It is *
10 * provided "as is" without express or implied warranty. *
11 **************************************************************************/
15 //---------------------------------------------------------------------------//
17 // Fill histograms (one per cell) with two-cluster invariant mass //
18 // using calibration coefficients of the previous iteration. //
19 // Histogram for a given cell is filled if the most energy of one cluster //
20 // is deposited in this cell and the other cluster could be anywherein EMCAL.//
23 // Author: Boris Polishchuk //
24 // Adapted to AOD reading by Gustavo Conesa //
27 //---------------------------------------------------------------------------//
30 #include "TLorentzVector.h"
31 #include "TRefArray.h"
34 #include <TGeoManager.h>
37 #include "AliAnalysisTaskEMCALPi0CalibSelection.h"
38 #include "AliAODEvent.h"
39 #include "AliESDEvent.h"
40 #include "AliEMCALGeometry.h"
41 #include "AliVCluster.h"
42 #include "AliVCaloCells.h"
43 #include "AliEMCALRecoUtils.h"
44 #include "AliOADBContainer.h"
46 ClassImp(AliAnalysisTaskEMCALPi0CalibSelection)
49 //______________________________________________________________________________________________
50 AliAnalysisTaskEMCALPi0CalibSelection::AliAnalysisTaskEMCALPi0CalibSelection(const char* name) :
51 AliAnalysisTaskSE(name),
52 fEMCALGeo(0x0), fLoadMatrices(0),
53 fEMCALGeoName("EMCAL_COMPLETE12SMV1"),
55 fRecoUtils(new AliEMCALRecoUtils),
56 fOADBFilePath(""), fCorrectClusters(kFALSE),
57 fCaloClustersArr(0x0), fEMCALCells(0x0),
58 fCuts(0x0), fOutputContainer(0x0),
59 fVertex(), fFilteredInput(kFALSE),
60 fEmin(0.5), fEmax(15.),
61 fL0min(0.01), fL0max(0.5),
62 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
63 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
64 fLogWeight(4.5), fSameSM(kFALSE),
65 fNMaskCellColumns(11), fMaskCellColumns(0x0),
66 fInvMassCutMin(110.), fInvMassCutMax(160.),
69 fMinBin(0.), fMaxBin(300.),
70 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
71 fHmgg(0x0), fHmggDifferentSM(0x0),
72 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
73 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
74 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
76 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
78 //Named constructor which should be used.
80 for(Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++) {
81 for(Int_t iX=0; iX<24; iX++) {
82 for(Int_t iZ=0; iZ<48; iZ++) {
83 fHmpi0[iMod][iZ][iX] = 0 ;
88 fVertex[0]=fVertex[1]=fVertex[2]=-1000;
95 fMaskCellColumns = new Int_t[fNMaskCellColumns];
96 fMaskCellColumns[0] = 6 ; fMaskCellColumns[1] = 7 ; fMaskCellColumns[2] = 8 ;
97 fMaskCellColumns[3] = 35; fMaskCellColumns[4] = 36; fMaskCellColumns[5] = 37;
98 fMaskCellColumns[6] = 12+AliEMCALGeoParams::fgkEMCALCols; fMaskCellColumns[7] = 13+AliEMCALGeoParams::fgkEMCALCols;
99 fMaskCellColumns[8] = 40+AliEMCALGeoParams::fgkEMCALCols; fMaskCellColumns[9] = 41+AliEMCALGeoParams::fgkEMCALCols;
100 fMaskCellColumns[10]= 42+AliEMCALGeoParams::fgkEMCALCols;
102 for(Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
104 fHmggPairSameSectorSM[iSMPair] = 0;
105 fHmggPairSameSectorSMMaskFrame[iSMPair] = 0;
106 fhClusterPairDiffTimeSameSector[iSMPair]= 0;
109 for(Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
111 fHmggPairSameSideSM[iSMPair] = 0;
112 fHmggPairSameSideSMMaskFrame[iSMPair] = 0;
113 fhClusterPairDiffTimeSameSide[iSMPair] = 0;
116 for(Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
119 fHmggSMMaskFrame[iSM] = 0;
120 fHOpeningAngleSM[iSM] = 0;
121 fHOpeningAnglePairSM[iSM] = 0;
122 fHAsymmetrySM[iSM] = 0;
123 fHAsymmetryPairSM[iSM] = 0;
124 fhTowerDecayPhotonHit[iSM] = 0;
125 fhTowerDecayPhotonEnergy[iSM] = 0;
126 fhTowerDecayPhotonAsymmetry[iSM] = 0;
127 fhTowerDecayPhotonHitMaskFrame[iSM]= 0;
129 fhClusterTimeSM[iSM] = 0;
130 fhClusterPairDiffTimeSameSM[iSM] = 0;
133 DefineOutput(1, TList::Class());
134 DefineOutput(2, TList::Class()); // will contain cuts or local params
138 //_____________________________________________________________________________
139 AliAnalysisTaskEMCALPi0CalibSelection::~AliAnalysisTaskEMCALPi0CalibSelection()
145 fOutputContainer->Delete() ;
146 delete fOutputContainer ;
149 if(fEMCALGeo) delete fEMCALGeo ;
150 if(fRecoUtils) delete fRecoUtils ;
151 if(fNMaskCellColumns) delete [] fMaskCellColumns;
155 //____________________________________________________________
156 void AliAnalysisTaskEMCALPi0CalibSelection::CorrectClusters()
158 // loop over EMCAL clusters
159 //----------------------------------------------------------
160 // First recalibrate and recalculate energy and position
166 if(fRecoUtils->GetParticleType()!=AliEMCALRecoUtils::kPhoton)
168 printf("Wrong particle type for cluster position recalculation! = %d\n", fRecoUtils->GetParticleType());
172 if(DebugLevel() > 1) printf("AliAnalysisTaskEMCALPi0CalibSelection Will use fLogWeight %.3f .\n",fLogWeight);
174 Float_t pos[]={0,0,0};
176 for(Int_t iClu=0; iClu < fCaloClustersArr->GetEntriesFast(); iClu++)
178 AliVCluster *c1 = (AliVCluster *) fCaloClustersArr->At(iClu);
180 Float_t e1i = c1->E(); // cluster energy before correction
181 if (e1i < fEmin) continue;
182 else if (e1i > fEmax) continue;
184 else if (c1->GetNCells() < fMinNCells) continue;
186 else if (c1->GetM02() < fL0min || c1->GetM02() > fL0max) continue;
188 if(fRecoUtils->ClusterContainsBadChannel(fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells())) continue;
192 printf("Std : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20());
193 c1->GetPosition(pos);
194 printf("Std : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]);
197 //Correct cluster energy and position if requested, and not corrected previously, by default Off
198 if(fRecoUtils->IsRecalibrationOn())
200 fRecoUtils->RecalibrateClusterEnergy(fEMCALGeo, c1, fEMCALCells);
201 fRecoUtils->RecalculateClusterShowerShapeParameters(fEMCALGeo, fEMCALCells,c1);
202 fRecoUtils->RecalculateClusterPID(c1);
206 printf("Energy: after recalibration %f; \n",c1->E());
208 // Recalculate cluster position
209 fRecoUtils->RecalculateClusterPosition(fEMCALGeo, fEMCALCells,c1);
211 // Correct Non-Linearity
212 c1->SetE(fRecoUtils->CorrectClusterEnergyLinearity(c1));
215 printf("\t after linearity correction %f\n",c1->E());
217 //In case of MC analysis, to match resolution/calibration in real data
218 c1->SetE(fRecoUtils->SmearClusterEnergy(c1));
221 printf("\t after smearing %f\n",c1->E());
225 printf("Cor : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20());
226 c1->GetPosition(pos);
227 printf("Cor : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]);
233 //__________________________________________________________
234 void AliAnalysisTaskEMCALPi0CalibSelection::FillHistograms()
236 // Now fill the invariant mass analysis with the corrected clusters, and other general histograms
246 Bool_t shared = kFALSE;
252 Float_t pos[]={0,0,0};
254 Int_t bc = InputEvent()->GetBunchCrossNumber();
255 Int_t nSM = (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
257 for(Int_t iClu=0; iClu<fCaloClustersArr->GetEntriesFast()-1; iClu++)
259 AliVCluster *c1 = (AliVCluster *) fCaloClustersArr->At(iClu);
261 if(fRecoUtils->ClusterContainsBadChannel(fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells())) continue;
263 Float_t e1i = c1->E(); // cluster energy before correction
265 if (e1i < fEmin) continue;
266 else if (e1i > fEmax) continue;
268 else if (!fRecoUtils->IsGoodCluster(c1,fEMCALGeo,fEMCALCells,bc)) continue;
270 else if (c1->GetNCells() < fMinNCells) continue;
272 else if (c1->GetM02() < fL0min || c1->GetM02() > fL0max) continue;
276 printf("IMA : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),e1i,c1->GetDispersion(),c1->GetM02(),c1->GetM20());
277 c1->GetPosition(pos);
278 printf("IMA : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]);
281 fRecoUtils->GetMaxEnergyCell(fEMCALGeo, fEMCALCells,c1,absId1,iSupMod1,ieta1,iphi1,shared);
282 c1->GetMomentum(p1,fVertex);
284 //Check if cluster is in fidutial region, not too close to borders
285 Bool_t in1 = fRecoUtils->CheckCellFiducialRegion(fEMCALGeo, c1, fEMCALCells);
287 // Clusters not facing frame structures
288 Bool_t mask1 = MaskFrameCluster(iSupMod1, ieta1);
289 //if(mask1) printf("Reject eta %d SM %d\n",ieta1, iSupMod1);
291 Double_t time1 = c1->GetTOF()*1.e9;
293 if(time1 > fTimeMax || time1 < fTimeMin) continue;
295 fhClusterTime ->Fill(c1->E(),time1);
296 fhClusterTimeSM[iSupMod1]->Fill(c1->E(),time1);
298 // Combine cluster with other clusters and get the invariant mass
299 for (Int_t jClu=iClu+1; jClu < fCaloClustersArr->GetEntriesFast(); jClu++)
301 AliAODCaloCluster *c2 = (AliAODCaloCluster *) fCaloClustersArr->At(jClu);
303 Float_t e2i = c2->E();
304 if (e2i < fEmin) continue;
305 else if (e2i > fEmax) continue;
307 else if (!fRecoUtils->IsGoodCluster(c2,fEMCALGeo,fEMCALCells,bc))continue;
309 else if (c2->GetNCells() < fMinNCells) continue;
311 else if (c2->GetM02() < fL0min || c2->GetM02() > fL0max) continue;
314 fRecoUtils->GetMaxEnergyCell(fEMCALGeo, fEMCALCells,c2,absId2,iSupMod2,ieta2,iphi2,shared);
315 c2->GetMomentum(p2,fVertex);
318 Float_t invmass = p12.M()*1000;
321 Float_t asym = TMath::Abs(p1.E()-p2.E())/(p1.E()+p2.E());
323 if(asym > fAsyCut) continue;
326 Double_t time2 = c2->GetTOF()*1.e9;
328 if(time2 > fTimeMax || time2 < fTimeMin) continue;
330 fhClusterPairDiffTime->Fill(p12.E(),time1-time2);
331 if(TMath::Abs(time1-time2) > fDTimeCut) continue;
333 if(invmass < fMaxBin && invmass > fMinBin )
335 //Check if cluster is in fidutial region, not too close to borders
336 Bool_t in2 = fRecoUtils->CheckCellFiducialRegion(fEMCALGeo, c2, fEMCALCells);
338 // Clusters not facing frame structures
339 Bool_t mask2 = MaskFrameCluster(iSupMod2, ieta2);
340 //if(mask2) printf("Reject eta %d SM %d\n",ieta2, iSupMod2);
344 fHmgg->Fill(invmass,p12.Pt());
346 if(iSupMod1==iSupMod2)
348 fHmggSM[iSupMod1]->Fill(invmass,p12.Pt());
349 fhClusterPairDiffTimeSameSM[iSupMod1]->Fill(p12.E(),time1-time2);
352 fHmggDifferentSM ->Fill(invmass,p12.Pt());
356 for(Int_t i = 0; i < nSM/2; i++)
359 if((iSupMod1==j && iSupMod2==j+1) || (iSupMod1==j+1 && iSupMod2==j))
361 fHmggPairSameSectorSM[i]->Fill(invmass,p12.Pt());
362 fhClusterPairDiffTimeSameSector[i]->Fill(p12.E(),time1-time2);
367 for(Int_t i = 0; i < nSM-2; i++)
369 if((iSupMod1==i && iSupMod2==i+2) || (iSupMod1==i+2 && iSupMod2==i))
371 fHmggPairSameSideSM[i]->Fill(invmass,p12.Pt());
372 fhClusterPairDiffTimeSameSide[i]->Fill(p12.E(),time1-time2);
379 fHmggMaskFrame->Fill(invmass,p12.Pt());
381 if(iSupMod1==iSupMod2) fHmggSMMaskFrame[iSupMod1]->Fill(invmass,p12.Pt());
382 else fHmggDifferentSMMaskFrame ->Fill(invmass,p12.Pt());
386 for(Int_t i = 0; i < nSM/2; i++)
389 if((iSupMod1==j && iSupMod2==j+1) || (iSupMod1==j+1 && iSupMod2==j)) fHmggPairSameSectorSMMaskFrame[i]->Fill(invmass,p12.Pt());
393 for(Int_t i = 0; i < nSM-2; i++)
395 if((iSupMod1==i && iSupMod2==i+2) || (iSupMod1==i+2 && iSupMod2==i)) fHmggPairSameSideSMMaskFrame[i]->Fill(invmass,p12.Pt());
398 }// Pair not facing frame
401 if(invmass > fInvMassCutMin && invmass < fInvMassCutMax) //restrict to clusters really close to pi0 peak
404 // Check time of cells in both clusters, and fill time histogram
405 for(Int_t icell = 0; icell < c1->GetNCells(); icell++)
407 Int_t absID = c1->GetCellAbsId(icell);
408 fHTpi0[bc%4]->Fill(absID, fEMCALCells->GetCellTime(absID)*1.e9);
411 for(Int_t icell = 0; icell < c2->GetNCells(); icell++)
413 Int_t absID = c2->GetCellAbsId(icell);
414 fHTpi0[bc%4]->Fill(absID, fEMCALCells->GetCellTime(absID)*1.e9);
417 //Opening angle of 2 photons
418 Float_t opangle = p1.Angle(p2.Vect())*TMath::RadToDeg();
419 //printf("*******>>>>>>>> In PEAK pt %f, angle %f \n",p12.Pt(),opangle);
422 fHOpeningAngle ->Fill(opangle,p12.Pt());
423 fHAsymmetry ->Fill(asym,p12.Pt());
425 if(iSupMod1==iSupMod2)
427 fHOpeningAngleSM[iSupMod1] ->Fill(opangle,p12.Pt());
428 fHAsymmetrySM[iSupMod1] ->Fill(asym,p12.Pt());
432 fHOpeningAngleDifferentSM ->Fill(opangle,p12.Pt());
433 fHAsymmetryDifferentSM ->Fill(asym,p12.Pt());
436 if((iSupMod1==0 && iSupMod2==2) || (iSupMod1==2 && iSupMod2==0))
438 fHOpeningAnglePairSM[0] ->Fill(opangle,p12.Pt());
439 fHAsymmetryPairSM[0] ->Fill(asym,p12.Pt());
442 if((iSupMod1==1 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==1))
444 fHOpeningAnglePairSM[1] ->Fill(opangle,p12.Pt());
445 fHAsymmetryPairSM[1] ->Fill(asym,p12.Pt());
448 if((iSupMod1==0 && iSupMod2==1) || (iSupMod1==1 && iSupMod2==0))
450 fHOpeningAnglePairSM[2] ->Fill(opangle,p12.Pt());
451 fHAsymmetryPairSM[2] ->Fill(asym,p12.Pt());
453 if((iSupMod1==2 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==2))
455 fHOpeningAnglePairSM[3] ->Fill(opangle,p12.Pt());
456 fHAsymmetryPairSM[3] ->Fill(asym,p12.Pt());
459 }// pair in 100 < mass < 160
461 }//in acceptance cuts
463 //In case of filling only channels with second cluster in same SM
464 if(fSameSM && iSupMod1!=iSupMod2) continue;
466 if (fGroupNCells == 0)
468 fHmpi0[iSupMod1][ieta1][iphi1]->Fill(invmass);
469 fHmpi0[iSupMod2][ieta2][iphi2]->Fill(invmass);
471 if(invmass > fInvMassCutMin && invmass < fInvMassCutMax)//restrict to clusters really close to pi0 peak
473 fhTowerDecayPhotonHit [iSupMod1]->Fill(ieta1,iphi1);
474 fhTowerDecayPhotonEnergy [iSupMod1]->Fill(ieta1,iphi1,p1.E());
475 fhTowerDecayPhotonAsymmetry[iSupMod1]->Fill(ieta1,iphi1,asym);
477 fhTowerDecayPhotonHit [iSupMod2]->Fill(ieta2,iphi2);
478 fhTowerDecayPhotonEnergy [iSupMod2]->Fill(ieta2,iphi2,p2.E());
479 fhTowerDecayPhotonAsymmetry[iSupMod2]->Fill(ieta2,iphi2,asym);
481 if(!mask1)fhTowerDecayPhotonHitMaskFrame[iSupMod1]->Fill(ieta1,iphi1);
482 if(!mask2)fhTowerDecayPhotonHitMaskFrame[iSupMod2]->Fill(ieta2,iphi2);
484 }// pair in mass of pi0
487 //printf("Regroup N %d, eta1 %d, phi1 %d, eta2 %d, phi2 %d \n",fGroupNCells, ieta1, iphi1, ieta2, iphi2);
488 for (Int_t i = -fGroupNCells; i < fGroupNCells+1; i++)
490 for (Int_t j = -fGroupNCells; j < fGroupNCells+1; j++)
492 Int_t absId11 = fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod1, iphi1+j, ieta1+i);
493 Int_t absId22 = fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod2, iphi2+j, ieta2+i);
496 for(Int_t icell = 0; icell < c1->GetNCells(); icell++){
497 if(c1->GetCellsAbsId()[icell] == absId11) ok1=kTRUE;
499 for(Int_t icell = 0; icell < c2->GetNCells(); icell++){
500 if(c2->GetCellsAbsId()[icell] == absId22) ok2=kTRUE;
503 if(ok1 && (ieta1+i >= 0) && (iphi1+j >= 0) && (ieta1+i < 48) && (iphi1+j < 24))
505 fHmpi0[iSupMod1][ieta1+i][iphi1+j]->Fill(invmass);
507 if(ok2 && (ieta2+i >= 0) && (iphi2+j >= 0) && (ieta2+i < 48) && (iphi2+j < 24))
509 fHmpi0[iSupMod2][ieta2+i][iphi2+j]->Fill(invmass);
515 if(DebugLevel() > 1) printf("AliAnalysisTaskEMCALPi0CalibSelection Mass in (SM%d,%d,%d) and (SM%d,%d,%d): %.3f GeV E1_i=%f E1_ii=%f E2_i=%f E2_ii=%f\n",
516 iSupMod1,iphi1,ieta1,iSupMod2,iphi2,ieta2,p12.M(),e1i,c1->E(),e2i,c2->E());
521 } // end of loop over EMCAL clusters
524 //________________________________________________________________
525 void AliAnalysisTaskEMCALPi0CalibSelection::InitGeometryMatrices()
527 // Init geometry and set the geometry matrix, for the first event, skip the rest
528 // Also set once the run dependent calibrations
531 Int_t runnumber = InputEvent()->GetRunNumber() ;
535 printf("AliAnalysisTaskEMCALPi0CalibSelection::InitGeometryMatrices() - Load user defined EMCAL geometry matrices\n");
538 AliOADBContainer emcGeoMat("AliEMCALgeo");
540 if(fOADBFilePath=="") fOADBFilePath = "$ALICE_ROOT/OADB/EMCAL" ;
542 emcGeoMat.InitFromFile(Form("%s/EMCALlocal2master.root",fOADBFilePath.Data()),"AliEMCALgeo");
544 TObjArray *matEMCAL=(TObjArray*)emcGeoMat.GetObject(runnumber,"EmcalMatrices");
546 for(Int_t mod=0; mod < (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
549 if (!fMatrix[mod]) // Get it from OADB
552 printf("AliAnalysisTaskEMCALPi0CalibSelection::InitGeometryMatrices() - EMCAL matrices SM %d, %p\n",
553 mod,((TGeoHMatrix*) matEMCAL->At(mod)));
554 //((TGeoHMatrix*) matEMCAL->At(mod))->Print();
556 fMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod) ;
562 fMatrix[mod]->Print();
564 fEMCALGeo->SetMisalMatrix(fMatrix[mod],mod) ;
569 else if(!gGeoManager)
571 printf("AliAnalysisTaskEMCALPi0CalibSelection::InitGeometryMatrices() - Get geo matrices from data");
572 //Still not implemented in AOD, just a workaround to be able to work at least with ESDs
573 if(!strcmp(InputEvent()->GetName(),"AliAODEvent"))
576 Warning("UserExec","Use ideal geometry, values geometry matrix not kept in AODs.");
581 printf("AliAnalysisTaskEMCALPi0CalibSelection::InitGeometryMatrices() - AliAnalysisTaskEMCALClusterize Load Misaligned matrices.");
583 for(Int_t mod=0; mod < (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
586 InputEvent()->GetEMCALMatrix(mod)->Print();
588 if(InputEvent()->GetEMCALMatrix(mod)) fEMCALGeo->SetMisalMatrix(InputEvent()->GetEMCALMatrix(mod),mod) ;
593 }//Load matrices from Data
597 //______________________________________________________________________
598 void AliAnalysisTaskEMCALPi0CalibSelection::InitTemperatureCorrections()
600 // Apply run dependent calibration correction
602 if(!fRecoUtils->IsRunDepRecalibrationOn()) return;
604 AliOADBContainer *contRFTD=new AliOADBContainer("");
606 contRFTD->InitFromFile(Form("%s/EMCALTemperatureCorrCalib.root",fOADBFilePath.Data()),"AliEMCALRunDepTempCalibCorrections");
608 Int_t runnumber = InputEvent()->GetRunNumber() ;
610 TH1S *htd=(TH1S*)contRFTD->GetObject(runnumber);
612 //If it did not exist for this run, get closes one
615 AliWarning(Form("No TemperatureCorrCalib Objects for run: %d",runnumber));
616 // let's get the closest runnumber instead then..
619 Int_t maxEntry = contRFTD->GetNumberOfEntries();
621 while ( (ic < maxEntry) && (contRFTD->UpperLimit(ic) < runnumber) ) {
626 Int_t closest = lower;
627 if ( (ic<maxEntry) &&
628 (contRFTD->LowerLimit(ic)-runnumber) < (runnumber - contRFTD->UpperLimit(lower)) ) {
632 AliWarning(Form("TemperatureCorrCalib Objects found closest id %d from run: %d", closest, contRFTD->LowerLimit(closest)));
633 htd = (TH1S*) contRFTD->GetObjectByIndex(closest);
639 printf("AliAnalysisTaskEMCALPi0CalibSelection::SetOADBParameters() - Recalibrate (Temperature) EMCAL \n");
641 Int_t nSM = fEMCALGeo->GetNumberOfSuperModules();
643 for (Int_t ism = 0; ism < nSM; ++ism)
645 for (Int_t icol = 0; icol < 48; ++icol)
647 for (Int_t irow = 0; irow < 24; ++irow)
649 Float_t factor = fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow);
651 Int_t absID = fEMCALGeo->GetAbsCellIdFromCellIndexes(ism, irow, icol); // original calibration factor
654 printf(" ism %d, icol %d, irow %d,absID %d - Calib factor %1.5f - ",ism, icol, irow, absID, factor);
656 factor *= htd->GetBinContent(absID) / 10000. ; // correction dependent on T
658 fRecoUtils->SetEMCALChannelRecalibrationFactor(ism,icol,irow,factor);
661 printf(" T factor %1.5f - final factor %1.5f \n",htd->GetBinContent(absID) / 10000.,
662 fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow));
667 }else printf("AliAnalysisTaskEMCALPi0CalibSelection::SetOADBParameters() - Do NOT recalibrate EMCAL with T variations, no params TH1 \n");
671 //___________________________________________________________________
672 void AliAnalysisTaskEMCALPi0CalibSelection::UserCreateOutputObjects()
674 //Create output container, init geometry
676 fEMCALGeo = AliEMCALGeometry::GetInstance(fEMCALGeoName) ;
677 Int_t nSM = (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
679 fOutputContainer = new TList();
680 const Int_t buffersize = 255;
681 char hname[buffersize], htitl[buffersize];
683 fhNEvents = new TH1I("hNEvents", "Number of analyzed events" , 1 , 0 , 1 ) ;
684 fOutputContainer->Add(fhNEvents);
686 fHmgg = new TH2F("hmgg","2-cluster invariant mass",fNbins,fMinBin,fMaxBin,100,0,10);
687 fHmgg->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
688 fHmgg->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
689 fOutputContainer->Add(fHmgg);
691 fHmggDifferentSM = new TH2F("hmggDifferentSM","2-cluster invariant mass, different SM",fNbins,fMinBin,fMaxBin,100,0,10);
692 fHmggDifferentSM->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
693 fHmggDifferentSM->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
694 fOutputContainer->Add(fHmggDifferentSM);
696 fHOpeningAngle = new TH2F("hopang","2-cluster opening angle",100,0.,50.,100,0,10);
697 fHOpeningAngle->SetXTitle("#alpha_{#gamma #gamma}");
698 fHOpeningAngle->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
699 fOutputContainer->Add(fHOpeningAngle);
701 fHOpeningAngleDifferentSM = new TH2F("hopangDifferentSM","2-cluster opening angle, different SM",100,0,50.,100,0,10);
702 fHOpeningAngleDifferentSM->SetXTitle("#alpha_{#gamma #gamma}");
703 fHOpeningAngleDifferentSM->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
704 fOutputContainer->Add(fHOpeningAngleDifferentSM);
706 fHAsymmetry = new TH2F("hasym","2-cluster opening angle",100,0.,1.,100,0,10);
707 fHAsymmetry->SetXTitle("a");
708 fHAsymmetry->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
709 fOutputContainer->Add(fHAsymmetry);
711 fHAsymmetryDifferentSM = new TH2F("hasymDifferentSM","2-cluster opening angle, different SM",100,0,1.,100,0,10);
712 fHAsymmetryDifferentSM->SetXTitle("a");
713 fHAsymmetryDifferentSM->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
714 fOutputContainer->Add(fHAsymmetryDifferentSM);
717 //TString pairname[] = {"A side (0-2)", "C side (1-3)","Row 0 (0-1)", "Row 1 (2-3)"};
719 fHmggMaskFrame = new TH2F("hmggMaskFrame","2-cluster invariant mass, frame masked",fNbins,fMinBin,fMaxBin,100,0,10);
720 fHmggMaskFrame->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
721 fHmggMaskFrame->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
722 fOutputContainer->Add(fHmggMaskFrame);
724 fHmggDifferentSMMaskFrame = new TH2F("hmggDifferentSMMaskFrame","2-cluster invariant mass, different SM, frame masked",
725 fNbins,fMinBin,fMaxBin,100,0,10);
726 fHmggDifferentSMMaskFrame->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
727 fHmggDifferentSMMaskFrame->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
728 fOutputContainer->Add(fHmggDifferentSMMaskFrame);
731 for(Int_t iSM = 0; iSM < nSM; iSM++)
733 snprintf(hname, buffersize, "hmgg_SM%d",iSM);
734 snprintf(htitl, buffersize, "Two-gamma inv. mass for super mod %d",iSM);
735 fHmggSM[iSM] = new TH2F(hname,htitl,fNbins,fMinBin,fMaxBin,100,0,10);
736 fHmggSM[iSM]->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
737 fHmggSM[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
738 fOutputContainer->Add(fHmggSM[iSM]);
740 snprintf(hname, buffersize, "hmgg_SM%d_MaskFrame",iSM);
741 snprintf(htitl, buffersize, "Two-gamma inv. mass for super mod %d",iSM);
742 fHmggSMMaskFrame[iSM] = new TH2F(hname,htitl,fNbins,fMinBin,fMaxBin,100,0,10);
743 fHmggSMMaskFrame[iSM]->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
744 fHmggSMMaskFrame[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
745 fOutputContainer->Add(fHmggSMMaskFrame[iSM]);
750 snprintf(hname,buffersize, "hmgg_PairSameSectorSM%d",iSM);
751 snprintf(htitl,buffersize, "Two-gamma inv. mass for SM pair Sector: %d",iSM);
752 fHmggPairSameSectorSM[iSM] = new TH2F(hname,htitl,fNbins,fMinBin,fMaxBin,100,0,10);
753 fHmggPairSameSectorSM[iSM]->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
754 fHmggPairSameSectorSM[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
755 fOutputContainer->Add(fHmggPairSameSectorSM[iSM]);
757 snprintf(hname,buffersize, "hmgg_PairSameSectorSM%d_MaskFrame",iSM);
758 snprintf(htitl,buffersize, "Two-gamma inv. mass for SM pair Sector: %d",iSM);
759 fHmggPairSameSectorSMMaskFrame[iSM] = new TH2F(hname,htitl,fNbins,fMinBin,fMaxBin,100,0,10);
760 fHmggPairSameSectorSMMaskFrame[iSM]->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
761 fHmggPairSameSectorSMMaskFrame[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
762 fOutputContainer->Add(fHmggPairSameSectorSMMaskFrame[iSM]);
764 fhClusterPairDiffTimeSameSector[iSM] = new TH2F(Form("hClusterPairDiffTimeSameSector%d",iSM),
765 Form("cluster pair time difference vs E, Sector %d",iSM),
766 100,0,10, 200,-100,100);
767 fhClusterPairDiffTimeSameSector[iSM]->SetXTitle("E_{pair} (GeV)");
768 fhClusterPairDiffTimeSameSector[iSM]->SetYTitle("#Delta t (ns)");
769 fOutputContainer->Add(fhClusterPairDiffTimeSameSector[iSM]);
776 snprintf(hname,buffersize, "hmgg_PairSameSideSM%d",iSM);
777 snprintf(htitl,buffersize, "Two-gamma inv. mass for SM pair Sector: %d",iSM);
778 fHmggPairSameSideSM[iSM] = new TH2F(hname,htitl,fNbins,fMinBin,fMaxBin,100,0,10);
779 fHmggPairSameSideSM[iSM]->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
780 fHmggPairSameSideSM[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
781 fOutputContainer->Add(fHmggPairSameSideSM[iSM]);
783 snprintf(hname,buffersize, "hmgg_PairSameSideSM%d_MaskFrame",iSM);
784 snprintf(htitl,buffersize, "Two-gamma inv. mass for SM pair Sector: %d",iSM);
785 fHmggPairSameSideSMMaskFrame[iSM] = new TH2F(hname,htitl,fNbins,fMinBin,fMaxBin,100,0,10);
786 fHmggPairSameSideSMMaskFrame[iSM]->SetXTitle("m_{#gamma #gamma} (MeV/c^{2})");
787 fHmggPairSameSideSMMaskFrame[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
788 fOutputContainer->Add(fHmggPairSameSideSMMaskFrame[iSM]);
790 fhClusterPairDiffTimeSameSide[iSM] = new TH2F(Form("hClusterPairDiffTimeSameSide%d",iSM),
791 Form("cluster pair time difference vs E, Side %d",iSM),
792 100,0,10, 200,-100,100);
793 fhClusterPairDiffTimeSameSide[iSM]->SetXTitle("E_{pair} (GeV)");
794 fhClusterPairDiffTimeSameSide[iSM]->SetYTitle("#Delta t (ns)");
795 fOutputContainer->Add(fhClusterPairDiffTimeSameSide[iSM]);
799 snprintf(hname, buffersize, "hopang_SM%d",iSM);
800 snprintf(htitl, buffersize, "Opening angle for super mod %d",iSM);
801 fHOpeningAngleSM[iSM] = new TH2F(hname,htitl,100,0.,50.,100,0,10);
802 fHOpeningAngleSM[iSM]->SetXTitle("#alpha_{#gamma #gamma} (deg)");
803 fHOpeningAngleSM[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
804 fOutputContainer->Add(fHOpeningAngleSM[iSM]);
806 snprintf(hname,buffersize, "hopang_PairSM%d",iSM);
807 snprintf(htitl,buffersize, "Opening angle for SM pair: %d",iSM);
808 fHOpeningAnglePairSM[iSM] = new TH2F(hname,htitl,100,0.,50.,100,0,10);
809 fHOpeningAnglePairSM[iSM]->SetXTitle("#alpha_{#gamma #gamma} (deg)");
810 fHOpeningAnglePairSM[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
811 fOutputContainer->Add(fHOpeningAnglePairSM[iSM]);
813 snprintf(hname, buffersize, "hasym_SM%d",iSM);
814 snprintf(htitl, buffersize, "Asymmetry for super mod %d",iSM);
815 fHAsymmetrySM[iSM] = new TH2F(hname,htitl,100,0.,1.,100,0,10);
816 fHAsymmetrySM[iSM]->SetXTitle("a");
817 fHAsymmetrySM[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
818 fOutputContainer->Add(fHAsymmetrySM[iSM]);
820 snprintf(hname,buffersize, "hasym_PairSM%d",iSM);
821 snprintf(htitl,buffersize, "Asymmetry for SM pair: %d",iSM);
822 fHAsymmetryPairSM[iSM] = new TH2F(hname,htitl,100,0.,1.,100,0,10);
823 fHAsymmetryPairSM[iSM]->SetXTitle("a");
824 fHAsymmetryPairSM[iSM]->SetYTitle("p_{T #gamma #gamma} (GeV/c)");
825 fOutputContainer->Add(fHAsymmetryPairSM[iSM]);
830 fhTowerDecayPhotonHit[iSM] = new TH2F (Form("hTowerDecPhotonHit_Mod%d",iSM),
831 Form("Entries in grid of cells in Module %d",iSM),
832 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
833 fhTowerDecayPhotonHit[iSM]->SetYTitle("row (phi direction)");
834 fhTowerDecayPhotonHit[iSM]->SetXTitle("column (eta direction)");
835 fOutputContainer->Add(fhTowerDecayPhotonHit[iSM]);
837 fhTowerDecayPhotonEnergy[iSM] = new TH2F (Form("hTowerDecPhotonEnergy_Mod%d",iSM),
838 Form("Accumulated energy in grid of cells in Module %d",iSM),
839 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
840 fhTowerDecayPhotonEnergy[iSM]->SetYTitle("row (phi direction)");
841 fhTowerDecayPhotonEnergy[iSM]->SetXTitle("column (eta direction)");
842 fOutputContainer->Add(fhTowerDecayPhotonEnergy[iSM]);
844 fhTowerDecayPhotonAsymmetry[iSM] = new TH2F (Form("hTowerDecPhotonAsymmetry_Mod%d",iSM),
845 Form("Accumulated asymmetry in grid of cells in Module %d",iSM),
846 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
847 fhTowerDecayPhotonAsymmetry[iSM]->SetYTitle("row (phi direction)");
848 fhTowerDecayPhotonAsymmetry[iSM]->SetXTitle("column (eta direction)");
849 fOutputContainer->Add(fhTowerDecayPhotonAsymmetry[iSM]);
851 fhTowerDecayPhotonHitMaskFrame[iSM] = new TH2F (Form("hTowerDecPhotonHit_Mod%d_MaskFrame",iSM),Form("Entries in grid of cells in Module %d",iSM),
852 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
853 fhTowerDecayPhotonHitMaskFrame[iSM]->SetYTitle("row (phi direction)");
854 fhTowerDecayPhotonHitMaskFrame[iSM]->SetXTitle("column (eta direction)");
855 fOutputContainer->Add(fhTowerDecayPhotonHitMaskFrame[iSM]);
857 fhClusterTimeSM[iSM] = new TH2F(Form("hClusterTime_SM%d",iSM),"cluster time vs E",100,0,10, 100,0,1000);
858 fhClusterTimeSM[iSM]->SetXTitle("E (GeV)");
859 fhClusterTimeSM[iSM]->SetYTitle("t (ns)");
860 fOutputContainer->Add(fhClusterTimeSM[iSM]);
862 fhClusterPairDiffTimeSameSM[iSM] = new TH2F(Form("hClusterPairDiffTimeSameSM%d",iSM),
863 Form("cluster pair time difference vs E, SM %d",iSM),
864 100,0,10, 200,-100,100);
865 fhClusterPairDiffTimeSameSM[iSM]->SetXTitle("E (GeV)");
866 fhClusterPairDiffTimeSameSM[iSM]->SetYTitle("#Delta t (ns)");
867 fOutputContainer->Add(fhClusterPairDiffTimeSameSM[iSM]);
871 Int_t nchannels = nSM*AliEMCALGeoParams::fgkEMCALRows*AliEMCALGeoParams::fgkEMCALCols;
872 for(Int_t ibc = 0; ibc < 4; ibc++)
874 fHTpi0[ibc] = new TH2F(Form("hTime_BC%d",ibc),Form("Time of cell clusters under pi0 peak, bunch crossing %d",ibc),
875 nchannels,0,nchannels, fNTimeBins,fMinTimeBin,fMaxTimeBin);
876 fOutputContainer->Add(fHTpi0[ibc]);
877 fHTpi0[ibc]->SetYTitle("time (ns)");
878 fHTpi0[ibc]->SetXTitle("abs. Id. ");
882 fhClusterTime = new TH2F("hClusterTime","cluster time vs E",100,0,10, 100,0,1000);
883 fhClusterTime->SetXTitle("E (GeV)");
884 fhClusterTime->SetYTitle("t (ns)");
885 fOutputContainer->Add(fhClusterTime);
887 fhClusterPairDiffTime = new TH2F("hClusterPairDiffTime","cluster pair time difference vs E",100,0,10, 800,-400,400);
888 fhClusterPairDiffTime->SetXTitle("E_{pair} (GeV)");
889 fhClusterPairDiffTime->SetYTitle("#Delta t (ns)");
890 fOutputContainer->Add(fhClusterPairDiffTime);
892 for(Int_t iMod=0; iMod < nSM; iMod++)
894 for(Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++)
896 for(Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++)
898 snprintf(hname,buffersize, "%d_%d_%d",iMod,iCol,iRow);
899 snprintf(htitl,buffersize, "Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
900 fHmpi0[iMod][iCol][iRow] = new TH1F(hname,htitl,fNbins,fMinBin,fMaxBin);
901 fHmpi0[iMod][iCol][iRow]->SetXTitle("mass (MeV/c^{2})");
902 fOutputContainer->Add(fHmpi0[iMod][iCol][iRow]);
907 fOutputContainer->SetOwner(kTRUE);
909 PostData(1,fOutputContainer);
911 // cuts container, set in terminate but init and post here
915 fCuts ->SetOwner(kTRUE);
921 //______________________________________________________________________________________________________
922 Bool_t AliAnalysisTaskEMCALPi0CalibSelection::MaskFrameCluster(const Int_t iSM, const Int_t ieta) const
924 //Check if cell is in one of the regions where we have significant amount of material in front of EMCAL
927 if(iSM%2) icol+=48; // Impair SM, shift index [0-47] to [48-96]
929 if (fNMaskCellColumns && fMaskCellColumns)
931 for (Int_t imask = 0; imask < fNMaskCellColumns; imask++)
933 if(icol==fMaskCellColumns[imask]) return kTRUE;
941 //__________________________________________________________________________
942 void AliAnalysisTaskEMCALPi0CalibSelection::UserExec(Option_t* /* option */)
944 // Do analysis, first select the events, then correct the clusters if needed
945 // and finally fill the histograms per channel after recalibration
950 AliESDEvent* esdevent = dynamic_cast<AliESDEvent*> (InputEvent());
951 AliAODEvent* aodevent = dynamic_cast<AliAODEvent*> (InputEvent());
953 TString triggerClass = "";
954 if (esdevent) triggerClass = esdevent->GetFiredTriggerClasses();
955 else if(aodevent) triggerClass = aodevent->GetFiredTriggerClasses();
958 printf("AliAnalysisTaskEMCALPi0CalibSelection::UserExec() - Event %d, FiredClass %s",
959 (Int_t)Entry(),(((AliESDEvent*)InputEvent())->GetFiredTriggerClasses()).Data());
961 if(!triggerClass.Contains(fTriggerName))
963 if(DebugLevel() > 1) printf("Reject event! \n");
967 if(DebugLevel() > 1) printf("Accept Event! \n");
970 //Get the input event
971 AliVEvent* event = 0;
972 if(fFilteredInput) event = AODEvent();
973 else event = InputEvent();
977 printf("Input event not available!\n");
982 printf("AliAnalysisTaskEMCALPi0CalibSelection <<< %s: Event %d >>>\n",event->GetName(), (Int_t)Entry());
984 //Get the primary vertex
985 event->GetPrimaryVertex()->GetXYZ(fVertex) ;
987 if(DebugLevel() > 1) printf("AliAnalysisTaskEMCALPi0CalibSelection Vertex: (%.3f,%.3f,%.3f)\n",fVertex[0],fVertex[1],fVertex[2]);
989 //Int_t runNum = aod->GetRunNumber();
990 //if(DebugLevel() > 1) printf("Run number: %d\n",runNum);
992 fhNEvents->Fill(0); //Count the events to be analyzed
994 // Acccess once the geometry matrix and temperature corrections
995 if(fhNEvents->GetEntries()==1)
997 InitGeometryMatrices();
999 InitTemperatureCorrections();
1002 //Get the list of clusters and cells
1003 fEMCALCells = event->GetEMCALCells();
1005 fCaloClustersArr = new TRefArray();
1006 event->GetEMCALClusters(fCaloClustersArr);
1008 if(DebugLevel() > 1) printf("AliAnalysisTaskEMCALPi0CalibSelection - N CaloClusters: %d - N CaloCells %d \n",
1009 fCaloClustersArr->GetEntriesFast(), fEMCALCells->GetNumberOfCells());
1011 CorrectClusters(); // Non linearity, new calibration, T calibration
1015 delete fCaloClustersArr;
1017 PostData(1,fOutputContainer);
1021 //_____________________________________________________
1022 void AliAnalysisTaskEMCALPi0CalibSelection::PrintInfo()
1026 printf("Cluster cuts: %2.2f < E < %2.2f GeV; number of cells > %d; Assymetry < %1.2f, pair time diff < %2.2f, %2.2f < t < %2.2f ns\n",
1027 fEmin,fEmax, fMinNCells, fAsyCut, fDTimeCut,fTimeMin,fTimeMax) ;
1029 printf("Group %d cells\n", fGroupNCells) ;
1031 printf("Cluster maximal cell away from border at least %d cells\n", fRecoUtils->GetNumberOfCellsFromEMCALBorder()) ;
1033 printf("Histograms: bins %d; energy range: %2.2f < E < %2.2f GeV\n",fNbins,fMinBin,fMaxBin) ;
1035 printf("Switchs:\n \t Remove Bad Channels? %d; Use filtered input? %d; Correct Clusters? %d, \n \t Mass per channel same SM clusters? %d\n",
1036 fRecoUtils->IsBadChannelsRemovalSwitchedOn(),fFilteredInput,fCorrectClusters, fSameSM) ;
1038 printf("EMCAL Geometry name: < %s >, Load Matrices %d\n",fEMCALGeoName.Data(), fLoadMatrices) ;
1039 if(fLoadMatrices) {for(Int_t ism = 0; ism < AliEMCALGeoParams::fgkEMCALModules; ism++) if(fMatrix[ism]) fMatrix[ism]->Print() ; }
1043 //____________________________________________________________________
1044 void AliAnalysisTaskEMCALPi0CalibSelection::Terminate(Option_t*)
1046 // Create cuts/param objects and publish to slot
1047 const Int_t buffersize = 255;
1048 char onePar[buffersize] ;
1050 snprintf(onePar,buffersize, "Custer cuts: %2.2f < E < %2.2f GeV; %2.2f < Lambda0_2 < %2.2f GeV; min number of cells %d; Assymetry cut %1.2f, time1-time2 < %2.2f; %2.2f < T < %2.2f ns; %3.1f < Mass < %3.1f",
1051 fEmin,fEmax, fL0min, fL0max, fMinNCells, fAsyCut, fDTimeCut, fTimeMin, fTimeMax, fInvMassCutMin, fInvMassCutMax) ;
1052 fCuts->Add(new TObjString(onePar));
1053 snprintf(onePar,buffersize, "Group %d cells;", fGroupNCells) ;
1054 fCuts->Add(new TObjString(onePar));
1055 snprintf(onePar,buffersize, "Cluster maximal cell away from border at least %d cells;", fRecoUtils->GetNumberOfCellsFromEMCALBorder()) ;
1056 fCuts->Add(new TObjString(onePar));
1057 snprintf(onePar,buffersize, "Histograms, Mass bins %d; energy range: %2.2f < E < %2.2f GeV;",fNbins,fMinBin,fMaxBin) ;
1058 fCuts->Add(new TObjString(onePar));
1059 snprintf(onePar,buffersize, "Histograms, Time bins %d; energy range: %2.2f < E < %2.2f GeV;",fNTimeBins,fMinTimeBin,fMaxTimeBin) ;
1060 fCuts->Add(new TObjString(onePar));
1061 snprintf(onePar,buffersize, "Switchs: Remove Bad Channels? %d; Use filtered input? %d; Correct Clusters? %d, Mass per channel same SM clusters? %d ",
1062 fRecoUtils->IsBadChannelsRemovalSwitchedOn(),fFilteredInput,fCorrectClusters, fSameSM) ;
1063 fCuts->Add(new TObjString(onePar));
1064 snprintf(onePar,buffersize, "EMCAL Geometry name: < %s >, Load Matrices? %d",fEMCALGeoName.Data(),fLoadMatrices) ;
1065 fCuts->Add(new TObjString(onePar));