#include <TFile.h>
#include <TMath.h>
#include <TMinuit.h>
#include <TTree.h>
#include <TBenchmark.h>
#include <TBrowser.h>
#include <TROOT.h>
#include <TList.h>
#include <TClonesArray.h>
#include <cassert>
#include "AliLog.h"
#include "AliEMCALClusterizerv1.h"
#include "AliEMCALRecPoint.h"
#include "AliEMCALDigit.h"
#include "AliEMCALGeometry.h"
#include "AliCaloCalibPedestal.h"
#include "AliEMCALCalibData.h"
#include "AliESDCaloCluster.h"
#include "AliEMCALUnfolding.h"
ClassImp(AliEMCALClusterizerv1)
AliEMCALClusterizerv1::AliEMCALClusterizerv1(): AliEMCALClusterizer()
{
Init();
}
AliEMCALClusterizerv1::AliEMCALClusterizerv1(AliEMCALGeometry* geometry)
: AliEMCALClusterizer(geometry)
{
}
AliEMCALClusterizerv1::AliEMCALClusterizerv1(AliEMCALGeometry* geometry, AliEMCALCalibData * calib, AliCaloCalibPedestal * caloped)
: AliEMCALClusterizer(geometry, calib, caloped)
{
}
AliEMCALClusterizerv1::~AliEMCALClusterizerv1()
{
}
void AliEMCALClusterizerv1::Digits2Clusters(Option_t * option)
{
if(strstr(option,"tim"))
gBenchmark->Start("EMCALClusterizer");
if(strstr(option,"print"))
Print("");
GetCalibrationParameters();
GetCaloCalibPedestal();
fNumberOfECAClusters = 0;
MakeClusters();
if(fToUnfold){
fClusterUnfolding->SetInput(fNumberOfECAClusters,fRecPoints,fDigitsArr);
fClusterUnfolding->MakeUnfolding();
}
Int_t index;
for(index = 0; index < fRecPoints->GetEntries(); index++) {
AliEMCALRecPoint * rp = dynamic_cast<AliEMCALRecPoint *>(fRecPoints->At(index));
if(rp){
rp->EvalAll(fECAW0,fDigitsArr,fJustClusters);
if (fCaloPed)
rp->EvalDistanceToBadChannels(fCaloPed);
}
else AliFatal("Null rec point in list!");
}
fRecPoints->Sort();
for(index = 0; index < fRecPoints->GetEntries(); index++) {
AliEMCALRecPoint * rp = dynamic_cast<AliEMCALRecPoint *>(fRecPoints->At(index));
if(rp){
rp->SetIndexInList(index);
rp->Print();
}
else AliFatal("Null rec point in list!");
}
if (fTreeR)
fTreeR->Fill();
if(strstr(option,"deb") || strstr(option,"all"))
PrintRecPoints(option);
AliDebug(1,Form("EMCAL Clusterizer found %d Rec Points",fRecPoints->GetEntriesFast()));
if(strstr(option,"tim")){
gBenchmark->Stop("EMCALClusterizer");
printf("Exec took %f seconds for Clusterizing",
gBenchmark->GetCpuTime("EMCALClusterizer"));
}
}
Int_t AliEMCALClusterizerv1::AreNeighbours(AliEMCALDigit * d1, AliEMCALDigit * d2, Bool_t & shared) const
{
Int_t nSupMod1=0, nModule1=0, nIphi1=0, nIeta1=0, iphi1=0, ieta1=0;
Int_t nSupMod2=0, nModule2=0, nIphi2=0, nIeta2=0, iphi2=0, ieta2=0;
shared = kFALSE;
fGeom->GetCellIndex(d1->GetId(), nSupMod1,nModule1,nIphi1,nIeta1);
fGeom->GetCellIndex(d2->GetId(), nSupMod2,nModule2,nIphi2,nIeta2);
fGeom->GetCellPhiEtaIndexInSModule(nSupMod1,nModule1,nIphi1,nIeta1, iphi1,ieta1);
fGeom->GetCellPhiEtaIndexInSModule(nSupMod2,nModule2,nIphi2,nIeta2, iphi2,ieta2);
if (nSupMod1 != nSupMod2 ) {
Float_t smPhi1 = fGeom->GetEMCGeometry()->GetPhiCenterOfSM(nSupMod1);
Float_t smPhi2 = fGeom->GetEMCGeometry()->GetPhiCenterOfSM(nSupMod2);
if(!TMath::AreEqualAbs(smPhi1, smPhi2, 1e-3)) return 2;
if(nSupMod1%2) ieta1+=AliEMCALGeoParams::fgkEMCALCols;
else ieta2+=AliEMCALGeoParams::fgkEMCALCols;
shared = kTRUE;
}
Int_t rowdiff = TMath::Abs(iphi1 - iphi2);
Int_t coldiff = TMath::Abs(ieta1 - ieta2);
if ((coldiff==0 && TMath::Abs(rowdiff)==1) || (rowdiff==0 && TMath::Abs(coldiff)==1)) {
if (gDebug == 2)
printf("AliEMCALClusterizerv1::AreNeighbours(): id1=%d, (row %d, col %d) ; id2=%d, (row %d, col %d), shared %d \n",
d1->GetId(), iphi1,ieta1, d2->GetId(), iphi2,ieta2, shared);
return 1;
}
else {
shared = kFALSE;
return 2;
}
}
void AliEMCALClusterizerv1::MakeClusters()
{
if (fGeom==0) AliFatal("Did not get geometry from EMCALLoader");
fRecPoints->Delete();
TObjArray *digitsC = new TObjArray();
AliEMCALDigit *digit;
Float_t dEnergyCalibrated = 0.0, ehs = 0.0, time = 0.0;
TIter nextdigit(fDigitsArr);
while ( (digit = dynamic_cast<AliEMCALDigit *>(nextdigit())) ) {
dEnergyCalibrated = digit->GetAmplitude();
time = digit->GetTime();
Calibrate(dEnergyCalibrated,time,digit->GetId());
digit->SetCalibAmp(dEnergyCalibrated);
digit->SetTime(time);
if ( dEnergyCalibrated < fMinECut || time > fTimeMax || time < fTimeMin ){
continue;
}
else if (!fGeom->CheckAbsCellId(digit->GetId()))
continue;
else{
ehs += dEnergyCalibrated;
digitsC->AddLast(digit);
}
}
AliDebug(1,Form("MakeClusters: Number of digits %d -> (e %f), ehs %f\n",
fDigitsArr->GetEntries(),fMinECut,ehs));
TIter nextdigitC(digitsC);
while ( (digit = dynamic_cast<AliEMCALDigit *>(nextdigitC())) ) {
TArrayI clusterECAdigitslist(fDigitsArr->GetEntries());
dEnergyCalibrated = digit->GetCalibAmp();
time = digit->GetTime();
if(fGeom->CheckAbsCellId(digit->GetId()) && ( dEnergyCalibrated > fECAClusteringThreshold ) ){
if(fNumberOfECAClusters >= fRecPoints->GetSize()) fRecPoints->Expand(2*fNumberOfECAClusters+1);
AliEMCALRecPoint *recPoint = new AliEMCALRecPoint("");
fRecPoints->AddAt(recPoint, fNumberOfECAClusters);
recPoint = dynamic_cast<AliEMCALRecPoint *>(fRecPoints->At(fNumberOfECAClusters));
if (recPoint) {
fNumberOfECAClusters++;
recPoint->SetClusterType(AliVCluster::kEMCALClusterv1);
recPoint->AddDigit(*digit, digit->GetCalibAmp(), kFALSE);
TObjArray clusterDigits;
clusterDigits.AddLast(digit);
digitsC->Remove(digit);
AliDebug(1,Form("MakeClusters: OK id = %d, ene = %f , cell.th. = %f \n", digit->GetId(), dEnergyCalibrated, fECAClusteringThreshold));
TIter nextClusterDigit(&clusterDigits);
while ( (digit = dynamic_cast<AliEMCALDigit*>(nextClusterDigit())) ) {
TIter nextdigitN(digitsC);
AliEMCALDigit *digitN = 0;
while ( (digitN = (AliEMCALDigit *)nextdigitN()) ) {
Bool_t shared = kFALSE;
if(TMath::Abs(time - digitN->GetTime()) > fTimeCut ) continue;
if (AreNeighbours(digit, digitN, shared)==1) {
recPoint->AddDigit(*digitN, digitN->GetCalibAmp(), shared);
clusterDigits.AddLast(digitN);
digitsC->Remove(digitN);
}
}
}
AliDebug(2,Form("MakeClusters: %d digitd, energy %f \n", clusterDigits.GetEntries(), recPoint->GetEnergy()));
}
else AliFatal("Null recpoint in array!");
}
}
delete digitsC;
AliDebug(1,Form("total no of clusters %d from %d digits",fNumberOfECAClusters,fDigitsArr->GetEntriesFast()));
}
AliEMCALClusterizerv1.cxx:1 AliEMCALClusterizerv1.cxx:2 AliEMCALClusterizerv1.cxx:3 AliEMCALClusterizerv1.cxx:4 AliEMCALClusterizerv1.cxx:5 AliEMCALClusterizerv1.cxx:6 AliEMCALClusterizerv1.cxx:7 AliEMCALClusterizerv1.cxx:8 AliEMCALClusterizerv1.cxx:9 AliEMCALClusterizerv1.cxx:10 AliEMCALClusterizerv1.cxx:11 AliEMCALClusterizerv1.cxx:12 AliEMCALClusterizerv1.cxx:13 AliEMCALClusterizerv1.cxx:14 AliEMCALClusterizerv1.cxx:15 AliEMCALClusterizerv1.cxx:16 AliEMCALClusterizerv1.cxx:17 AliEMCALClusterizerv1.cxx:18 AliEMCALClusterizerv1.cxx:19 AliEMCALClusterizerv1.cxx:20 AliEMCALClusterizerv1.cxx:21 AliEMCALClusterizerv1.cxx:22 AliEMCALClusterizerv1.cxx:23 AliEMCALClusterizerv1.cxx:24 AliEMCALClusterizerv1.cxx:25 AliEMCALClusterizerv1.cxx:26 AliEMCALClusterizerv1.cxx:27 AliEMCALClusterizerv1.cxx:28 AliEMCALClusterizerv1.cxx:29 AliEMCALClusterizerv1.cxx:30 AliEMCALClusterizerv1.cxx:31 AliEMCALClusterizerv1.cxx:32 AliEMCALClusterizerv1.cxx:33 AliEMCALClusterizerv1.cxx:34 AliEMCALClusterizerv1.cxx:35 AliEMCALClusterizerv1.cxx:36 AliEMCALClusterizerv1.cxx:37 AliEMCALClusterizerv1.cxx:38 AliEMCALClusterizerv1.cxx:39 AliEMCALClusterizerv1.cxx:40 AliEMCALClusterizerv1.cxx:41 AliEMCALClusterizerv1.cxx:42 AliEMCALClusterizerv1.cxx:43 AliEMCALClusterizerv1.cxx:44 AliEMCALClusterizerv1.cxx:45 AliEMCALClusterizerv1.cxx:46 AliEMCALClusterizerv1.cxx:47 AliEMCALClusterizerv1.cxx:48 AliEMCALClusterizerv1.cxx:49 AliEMCALClusterizerv1.cxx:50 AliEMCALClusterizerv1.cxx:51 AliEMCALClusterizerv1.cxx:52 AliEMCALClusterizerv1.cxx:53 AliEMCALClusterizerv1.cxx:54 AliEMCALClusterizerv1.cxx:55 AliEMCALClusterizerv1.cxx:56 AliEMCALClusterizerv1.cxx:57 AliEMCALClusterizerv1.cxx:58 AliEMCALClusterizerv1.cxx:59 AliEMCALClusterizerv1.cxx:60 AliEMCALClusterizerv1.cxx:61 AliEMCALClusterizerv1.cxx:62 AliEMCALClusterizerv1.cxx:63 AliEMCALClusterizerv1.cxx:64 AliEMCALClusterizerv1.cxx:65 AliEMCALClusterizerv1.cxx:66 AliEMCALClusterizerv1.cxx:67 AliEMCALClusterizerv1.cxx:68 AliEMCALClusterizerv1.cxx:69 AliEMCALClusterizerv1.cxx:70 AliEMCALClusterizerv1.cxx:71 AliEMCALClusterizerv1.cxx:72 AliEMCALClusterizerv1.cxx:73 AliEMCALClusterizerv1.cxx:74 AliEMCALClusterizerv1.cxx:75 AliEMCALClusterizerv1.cxx:76 AliEMCALClusterizerv1.cxx:77 AliEMCALClusterizerv1.cxx:78 AliEMCALClusterizerv1.cxx:79 AliEMCALClusterizerv1.cxx:80 AliEMCALClusterizerv1.cxx:81 AliEMCALClusterizerv1.cxx:82 AliEMCALClusterizerv1.cxx:83 AliEMCALClusterizerv1.cxx:84 AliEMCALClusterizerv1.cxx:85 AliEMCALClusterizerv1.cxx:86 AliEMCALClusterizerv1.cxx:87 AliEMCALClusterizerv1.cxx:88 AliEMCALClusterizerv1.cxx:89 AliEMCALClusterizerv1.cxx:90 AliEMCALClusterizerv1.cxx:91 AliEMCALClusterizerv1.cxx:92 AliEMCALClusterizerv1.cxx:93 AliEMCALClusterizerv1.cxx:94 AliEMCALClusterizerv1.cxx:95 AliEMCALClusterizerv1.cxx:96 AliEMCALClusterizerv1.cxx:97 AliEMCALClusterizerv1.cxx:98 AliEMCALClusterizerv1.cxx:99 AliEMCALClusterizerv1.cxx:100 AliEMCALClusterizerv1.cxx:101 AliEMCALClusterizerv1.cxx:102 AliEMCALClusterizerv1.cxx:103 AliEMCALClusterizerv1.cxx:104 AliEMCALClusterizerv1.cxx:105 AliEMCALClusterizerv1.cxx:106 AliEMCALClusterizerv1.cxx:107 AliEMCALClusterizerv1.cxx:108 AliEMCALClusterizerv1.cxx:109 AliEMCALClusterizerv1.cxx:110 AliEMCALClusterizerv1.cxx:111 AliEMCALClusterizerv1.cxx:112 AliEMCALClusterizerv1.cxx:113 AliEMCALClusterizerv1.cxx:114 AliEMCALClusterizerv1.cxx:115 AliEMCALClusterizerv1.cxx:116 AliEMCALClusterizerv1.cxx:117 AliEMCALClusterizerv1.cxx:118 AliEMCALClusterizerv1.cxx:119 AliEMCALClusterizerv1.cxx:120 AliEMCALClusterizerv1.cxx:121 AliEMCALClusterizerv1.cxx:122 AliEMCALClusterizerv1.cxx:123 AliEMCALClusterizerv1.cxx:124 AliEMCALClusterizerv1.cxx:125 AliEMCALClusterizerv1.cxx:126 AliEMCALClusterizerv1.cxx:127 AliEMCALClusterizerv1.cxx:128 AliEMCALClusterizerv1.cxx:129 AliEMCALClusterizerv1.cxx:130 AliEMCALClusterizerv1.cxx:131 AliEMCALClusterizerv1.cxx:132 AliEMCALClusterizerv1.cxx:133 AliEMCALClusterizerv1.cxx:134 AliEMCALClusterizerv1.cxx:135 AliEMCALClusterizerv1.cxx:136 AliEMCALClusterizerv1.cxx:137 AliEMCALClusterizerv1.cxx:138 AliEMCALClusterizerv1.cxx:139 AliEMCALClusterizerv1.cxx:140 AliEMCALClusterizerv1.cxx:141 AliEMCALClusterizerv1.cxx:142 AliEMCALClusterizerv1.cxx:143 AliEMCALClusterizerv1.cxx:144 AliEMCALClusterizerv1.cxx:145 AliEMCALClusterizerv1.cxx:146 AliEMCALClusterizerv1.cxx:147 AliEMCALClusterizerv1.cxx:148 AliEMCALClusterizerv1.cxx:149 AliEMCALClusterizerv1.cxx:150 AliEMCALClusterizerv1.cxx:151 AliEMCALClusterizerv1.cxx:152 AliEMCALClusterizerv1.cxx:153 AliEMCALClusterizerv1.cxx:154 AliEMCALClusterizerv1.cxx:155 AliEMCALClusterizerv1.cxx:156 AliEMCALClusterizerv1.cxx:157 AliEMCALClusterizerv1.cxx:158 AliEMCALClusterizerv1.cxx:159 AliEMCALClusterizerv1.cxx:160 AliEMCALClusterizerv1.cxx:161 AliEMCALClusterizerv1.cxx:162 AliEMCALClusterizerv1.cxx:163 AliEMCALClusterizerv1.cxx:164 AliEMCALClusterizerv1.cxx:165 AliEMCALClusterizerv1.cxx:166 AliEMCALClusterizerv1.cxx:167 AliEMCALClusterizerv1.cxx:168 AliEMCALClusterizerv1.cxx:169 AliEMCALClusterizerv1.cxx:170 AliEMCALClusterizerv1.cxx:171 AliEMCALClusterizerv1.cxx:172 AliEMCALClusterizerv1.cxx:173 AliEMCALClusterizerv1.cxx:174 AliEMCALClusterizerv1.cxx:175 AliEMCALClusterizerv1.cxx:176 AliEMCALClusterizerv1.cxx:177 AliEMCALClusterizerv1.cxx:178 AliEMCALClusterizerv1.cxx:179 AliEMCALClusterizerv1.cxx:180 AliEMCALClusterizerv1.cxx:181 AliEMCALClusterizerv1.cxx:182 AliEMCALClusterizerv1.cxx:183 AliEMCALClusterizerv1.cxx:184 AliEMCALClusterizerv1.cxx:185 AliEMCALClusterizerv1.cxx:186 AliEMCALClusterizerv1.cxx:187 AliEMCALClusterizerv1.cxx:188 AliEMCALClusterizerv1.cxx:189 AliEMCALClusterizerv1.cxx:190 AliEMCALClusterizerv1.cxx:191 AliEMCALClusterizerv1.cxx:192 AliEMCALClusterizerv1.cxx:193 AliEMCALClusterizerv1.cxx:194 AliEMCALClusterizerv1.cxx:195 AliEMCALClusterizerv1.cxx:196 AliEMCALClusterizerv1.cxx:197 AliEMCALClusterizerv1.cxx:198 AliEMCALClusterizerv1.cxx:199 AliEMCALClusterizerv1.cxx:200 AliEMCALClusterizerv1.cxx:201 AliEMCALClusterizerv1.cxx:202 AliEMCALClusterizerv1.cxx:203 AliEMCALClusterizerv1.cxx:204 AliEMCALClusterizerv1.cxx:205 AliEMCALClusterizerv1.cxx:206 AliEMCALClusterizerv1.cxx:207 AliEMCALClusterizerv1.cxx:208 AliEMCALClusterizerv1.cxx:209 AliEMCALClusterizerv1.cxx:210 AliEMCALClusterizerv1.cxx:211 AliEMCALClusterizerv1.cxx:212 AliEMCALClusterizerv1.cxx:213 AliEMCALClusterizerv1.cxx:214 AliEMCALClusterizerv1.cxx:215 AliEMCALClusterizerv1.cxx:216 AliEMCALClusterizerv1.cxx:217 AliEMCALClusterizerv1.cxx:218 AliEMCALClusterizerv1.cxx:219 AliEMCALClusterizerv1.cxx:220 AliEMCALClusterizerv1.cxx:221 AliEMCALClusterizerv1.cxx:222 AliEMCALClusterizerv1.cxx:223 AliEMCALClusterizerv1.cxx:224 AliEMCALClusterizerv1.cxx:225 AliEMCALClusterizerv1.cxx:226 AliEMCALClusterizerv1.cxx:227 AliEMCALClusterizerv1.cxx:228 AliEMCALClusterizerv1.cxx:229 AliEMCALClusterizerv1.cxx:230 AliEMCALClusterizerv1.cxx:231 AliEMCALClusterizerv1.cxx:232 AliEMCALClusterizerv1.cxx:233 AliEMCALClusterizerv1.cxx:234 AliEMCALClusterizerv1.cxx:235 AliEMCALClusterizerv1.cxx:236 AliEMCALClusterizerv1.cxx:237 AliEMCALClusterizerv1.cxx:238 AliEMCALClusterizerv1.cxx:239 AliEMCALClusterizerv1.cxx:240 AliEMCALClusterizerv1.cxx:241 AliEMCALClusterizerv1.cxx:242 AliEMCALClusterizerv1.cxx:243 AliEMCALClusterizerv1.cxx:244 AliEMCALClusterizerv1.cxx:245 AliEMCALClusterizerv1.cxx:246 AliEMCALClusterizerv1.cxx:247 AliEMCALClusterizerv1.cxx:248 AliEMCALClusterizerv1.cxx:249 AliEMCALClusterizerv1.cxx:250 AliEMCALClusterizerv1.cxx:251 AliEMCALClusterizerv1.cxx:252 AliEMCALClusterizerv1.cxx:253 AliEMCALClusterizerv1.cxx:254 AliEMCALClusterizerv1.cxx:255 AliEMCALClusterizerv1.cxx:256 AliEMCALClusterizerv1.cxx:257 AliEMCALClusterizerv1.cxx:258 AliEMCALClusterizerv1.cxx:259 AliEMCALClusterizerv1.cxx:260 AliEMCALClusterizerv1.cxx:261 AliEMCALClusterizerv1.cxx:262 AliEMCALClusterizerv1.cxx:263 AliEMCALClusterizerv1.cxx:264 AliEMCALClusterizerv1.cxx:265 AliEMCALClusterizerv1.cxx:266 AliEMCALClusterizerv1.cxx:267 AliEMCALClusterizerv1.cxx:268 AliEMCALClusterizerv1.cxx:269 AliEMCALClusterizerv1.cxx:270 AliEMCALClusterizerv1.cxx:271 AliEMCALClusterizerv1.cxx:272 AliEMCALClusterizerv1.cxx:273 AliEMCALClusterizerv1.cxx:274 AliEMCALClusterizerv1.cxx:275 AliEMCALClusterizerv1.cxx:276 AliEMCALClusterizerv1.cxx:277 AliEMCALClusterizerv1.cxx:278 AliEMCALClusterizerv1.cxx:279 AliEMCALClusterizerv1.cxx:280 AliEMCALClusterizerv1.cxx:281 AliEMCALClusterizerv1.cxx:282 AliEMCALClusterizerv1.cxx:283 AliEMCALClusterizerv1.cxx:284 AliEMCALClusterizerv1.cxx:285 AliEMCALClusterizerv1.cxx:286 AliEMCALClusterizerv1.cxx:287 AliEMCALClusterizerv1.cxx:288 AliEMCALClusterizerv1.cxx:289 AliEMCALClusterizerv1.cxx:290 AliEMCALClusterizerv1.cxx:291 AliEMCALClusterizerv1.cxx:292 AliEMCALClusterizerv1.cxx:293 AliEMCALClusterizerv1.cxx:294 AliEMCALClusterizerv1.cxx:295