#include "TVector3.h"
#include "TMath.h"
#include "AliLog.h"
#include "AliPHOSGeometry.h"
#include "AliPHOSPIDv1.h"
#include "AliPHOSReconstructor.h"
#include "AliPHOSAodCluster.h"
#include "AliPHOSCalibData.h"
#include "AliAODCaloCells.h"
ClassImp(AliPHOSAodCluster)
AliPHOSAodCluster::AliPHOSAodCluster() :
AliAODCaloCluster(),fRecalibrated(0)
{
}
AliPHOSAodCluster::AliPHOSAodCluster(const AliAODCaloCluster & clu) :
AliAODCaloCluster(clu),fRecalibrated(0)
{
}
AliPHOSAodCluster::~AliPHOSAodCluster()
{
}
void AliPHOSAodCluster::Recalibrate(AliPHOSCalibData * calibData,AliAODCaloCells *phsCells){
if(fRecalibrated)
return ;
if(!calibData)
return ;
AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ;
if(!phosgeom)
AliFatal("AliPHOSGeometry was not contructed\n") ;
Double32_t * cellsAmpFraction = GetCellsAmplitudeFraction();
for(Int_t i=0; i < GetNCells(); i++){
Int_t relId[4];
phosgeom->AbsToRelNumbering(GetCellAbsId(i),relId) ;
Int_t module = relId[0];
Int_t column = relId[3];
Int_t row = relId[2];
Double_t energy = phsCells->GetCellAmplitude(GetCellAbsId(i)) ;
cellsAmpFraction[i]*=energy*calibData->GetADCchannelEmc(module,column,row);
}
SetCellsAmplitudeFraction(cellsAmpFraction);
fRecalibrated=kTRUE;
}
void AliPHOSAodCluster::EvalAll(Float_t logWeight, TVector3 &vtx){
if(!fRecalibrated)
return ;
EvalEnergy() ;
EvalCoord(logWeight, vtx) ;
}
void AliPHOSAodCluster::EvalEnergy(){
if(!fRecalibrated)
return ;
Float_t energy=0. ;
for(Int_t iDigit=0; iDigit < GetNCells(); iDigit++) {
energy+=GetCellAmplitudeFraction(iDigit) ;
}
SetE(energy);
}
void AliPHOSAodCluster::EnergyCorrection(){
SetE(AliPHOSReconstructor::CorrectNonlinearity(E())) ;
}
void AliPHOSAodCluster::EvalPID(AliPHOSPIDv1 * ){
}
void AliPHOSAodCluster::EvalCoord(Float_t logWeight, TVector3 &vtx)
{
if(!fRecalibrated)
return ;
Float_t wtot = 0. ;
Int_t relid[4] ;
Int_t phosMod=0 ;
Float_t xMean = 0. ;
Float_t zMean = 0. ;
AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ;
if(!phosgeom)
AliFatal("AliPHOSGeometry was not contructed\n") ;
for(Int_t iDigit=0; iDigit < GetNCells(); iDigit++) {
Float_t xi ;
Float_t zi ;
phosgeom->AbsToRelNumbering(GetCellAbsId(iDigit), relid) ;
phosgeom->RelPosInModule(relid, xi, zi);
phosMod=relid[0] ;
Double_t ei=GetCellAmplitudeFraction(iDigit) ;
if (E() > 0 && ei > 0) {
Float_t w = TMath::Max( 0., logWeight + TMath::Log(ei/E()) ) ;
xMean+= xi * w ;
zMean+= zi * w ;
wtot += w ;
}
else
AliError(Form("Wrong energy %f and/or amplitude %f\n", ei, E()));
}
if (wtot>0) {
xMean /= wtot ;
zMean /= wtot ;
}
else
AliError(Form("Wrong weight %f\n", wtot));
Double_t d=0. ;
Double_t dxx = 0.;
Double_t dzz = 0.;
Double_t dxz = 0.;
for(Int_t iDigit=0; iDigit < GetNCells(); iDigit++) {
Float_t xi ;
Float_t zi ;
phosgeom->AbsToRelNumbering(GetCellAbsId(iDigit), relid) ;
phosgeom->RelPosInModule(relid, xi, zi);
Double_t ei=GetCellAmplitudeFraction(iDigit) ;
if (E() > 0 && ei > 0) {
Float_t w = TMath::Max( 0., logWeight + TMath::Log(ei/E()) ) ;
d += w*((xi-xMean)*(xi-xMean) + (zi-zMean)*(zi-zMean) ) ;
dxx += w * xi * xi ;
dzz += w * zi * zi ;
dxz += w * xi * zi ;
}
else
AliError(Form("Wrong energy %f and/or amplitude %f\n", ei, E()));
}
if (wtot>0) {
d /= wtot ;
dxx /= wtot ;
dzz /= wtot ;
dxz /= wtot ;
dxx -= xMean * xMean ;
dzz -= zMean * zMean ;
dxz -= xMean * zMean ;
SetM02(0.5 * (dxx + dzz) + TMath::Sqrt( 0.25 * (dxx - dzz) * (dxx - dzz) + dxz * dxz )) ;
SetM20(0.5 * (dxx + dzz) - TMath::Sqrt( 0.25 * (dxx - dzz) * (dxx - dzz) + dxz * dxz ));
}
else{
AliError(Form("Wrong weight %f\n", wtot));
d=0. ;
SetM20(0.) ;
SetM02(0.) ;
}
if (d>=0)
SetDispersion(TMath::Sqrt(d)) ;
else
SetDispersion(0) ;
Float_t para = 0.925 ;
Float_t parb = 6.52 ;
TVector3 vInc ;
phosgeom->GetIncidentVector(vtx,phosMod,xMean,zMean,vInc) ;
Float_t depthx = 0.;
Float_t depthz = 0.;
if (E()>0&&vInc.Y()!=0.) {
depthx = ( para * TMath::Log(E()) + parb ) * vInc.X()/TMath::Abs(vInc.Y()) ;
depthz = ( para * TMath::Log(E()) + parb ) * vInc.Z()/TMath::Abs(vInc.Y()) ;
}
else
AliError(Form("Wrong amplitude %f\n", E()));
xMean-= depthx ;
zMean-= depthz ;
TVector3 gps ;
phosgeom->Local2Global(phosMod, xMean, zMean, gps) ;
SetPositionAt(gps[0],0) ;
SetPositionAt(gps[1],1) ;
SetPositionAt(gps[2],2) ;
}
AliPHOSAodCluster.cxx:100 AliPHOSAodCluster.cxx:101 AliPHOSAodCluster.cxx:102 AliPHOSAodCluster.cxx:103 AliPHOSAodCluster.cxx:104 AliPHOSAodCluster.cxx:105 AliPHOSAodCluster.cxx:106 AliPHOSAodCluster.cxx:107 AliPHOSAodCluster.cxx:108 AliPHOSAodCluster.cxx:109 AliPHOSAodCluster.cxx:110 AliPHOSAodCluster.cxx:111 AliPHOSAodCluster.cxx:112 AliPHOSAodCluster.cxx:113 AliPHOSAodCluster.cxx:114 AliPHOSAodCluster.cxx:115 AliPHOSAodCluster.cxx:116 AliPHOSAodCluster.cxx:117 AliPHOSAodCluster.cxx:118 AliPHOSAodCluster.cxx:119 AliPHOSAodCluster.cxx:120 AliPHOSAodCluster.cxx:121 AliPHOSAodCluster.cxx:122 AliPHOSAodCluster.cxx:123 AliPHOSAodCluster.cxx:124 AliPHOSAodCluster.cxx:125 AliPHOSAodCluster.cxx:126 AliPHOSAodCluster.cxx:127 AliPHOSAodCluster.cxx:128 AliPHOSAodCluster.cxx:129 AliPHOSAodCluster.cxx:130 AliPHOSAodCluster.cxx:131 AliPHOSAodCluster.cxx:132 AliPHOSAodCluster.cxx:133 AliPHOSAodCluster.cxx:134 AliPHOSAodCluster.cxx:135 AliPHOSAodCluster.cxx:136 AliPHOSAodCluster.cxx:137 AliPHOSAodCluster.cxx:138 AliPHOSAodCluster.cxx:139 AliPHOSAodCluster.cxx:140 AliPHOSAodCluster.cxx:141 AliPHOSAodCluster.cxx:142 AliPHOSAodCluster.cxx:143 AliPHOSAodCluster.cxx:144 AliPHOSAodCluster.cxx:145 AliPHOSAodCluster.cxx:146 AliPHOSAodCluster.cxx:147 AliPHOSAodCluster.cxx:148 AliPHOSAodCluster.cxx:149 AliPHOSAodCluster.cxx:150 AliPHOSAodCluster.cxx:151 AliPHOSAodCluster.cxx:152 AliPHOSAodCluster.cxx:153 AliPHOSAodCluster.cxx:154 AliPHOSAodCluster.cxx:155 AliPHOSAodCluster.cxx:156 AliPHOSAodCluster.cxx:157 AliPHOSAodCluster.cxx:158 AliPHOSAodCluster.cxx:159 AliPHOSAodCluster.cxx:160 AliPHOSAodCluster.cxx:161 AliPHOSAodCluster.cxx:162 AliPHOSAodCluster.cxx:163 AliPHOSAodCluster.cxx:164 AliPHOSAodCluster.cxx:165 AliPHOSAodCluster.cxx:166 AliPHOSAodCluster.cxx:167 AliPHOSAodCluster.cxx:168 AliPHOSAodCluster.cxx:169 AliPHOSAodCluster.cxx:170 AliPHOSAodCluster.cxx:171 AliPHOSAodCluster.cxx:172 AliPHOSAodCluster.cxx:173 AliPHOSAodCluster.cxx:174 AliPHOSAodCluster.cxx:175 AliPHOSAodCluster.cxx:176 AliPHOSAodCluster.cxx:177 AliPHOSAodCluster.cxx:178 AliPHOSAodCluster.cxx:179 AliPHOSAodCluster.cxx:180 AliPHOSAodCluster.cxx:181 AliPHOSAodCluster.cxx:182 AliPHOSAodCluster.cxx:183 AliPHOSAodCluster.cxx:184 AliPHOSAodCluster.cxx:185 AliPHOSAodCluster.cxx:186 AliPHOSAodCluster.cxx:187 AliPHOSAodCluster.cxx:188 AliPHOSAodCluster.cxx:189 AliPHOSAodCluster.cxx:190 AliPHOSAodCluster.cxx:191 AliPHOSAodCluster.cxx:192 AliPHOSAodCluster.cxx:193 AliPHOSAodCluster.cxx:194 AliPHOSAodCluster.cxx:195 AliPHOSAodCluster.cxx:196 AliPHOSAodCluster.cxx:197 AliPHOSAodCluster.cxx:198 AliPHOSAodCluster.cxx:199 AliPHOSAodCluster.cxx:200 AliPHOSAodCluster.cxx:201 AliPHOSAodCluster.cxx:202 AliPHOSAodCluster.cxx:203 AliPHOSAodCluster.cxx:204 AliPHOSAodCluster.cxx:205 AliPHOSAodCluster.cxx:206 AliPHOSAodCluster.cxx:207 AliPHOSAodCluster.cxx:208 AliPHOSAodCluster.cxx:209 AliPHOSAodCluster.cxx:210 AliPHOSAodCluster.cxx:211 AliPHOSAodCluster.cxx:212 AliPHOSAodCluster.cxx:213 AliPHOSAodCluster.cxx:214 AliPHOSAodCluster.cxx:215 AliPHOSAodCluster.cxx:216 AliPHOSAodCluster.cxx:217 AliPHOSAodCluster.cxx:218 AliPHOSAodCluster.cxx:219 AliPHOSAodCluster.cxx:220 AliPHOSAodCluster.cxx:221 AliPHOSAodCluster.cxx:222 AliPHOSAodCluster.cxx:223 AliPHOSAodCluster.cxx:224 AliPHOSAodCluster.cxx:225 AliPHOSAodCluster.cxx:226 AliPHOSAodCluster.cxx:227 AliPHOSAodCluster.cxx:228 AliPHOSAodCluster.cxx:229 AliPHOSAodCluster.cxx:230 AliPHOSAodCluster.cxx:231 AliPHOSAodCluster.cxx:232 AliPHOSAodCluster.cxx:233 AliPHOSAodCluster.cxx:234 AliPHOSAodCluster.cxx:235 AliPHOSAodCluster.cxx:236 AliPHOSAodCluster.cxx:237