#include <TF1.h>
#include <TMath.h>
#include "AliEMCALPIDResponse.h"
#include "AliLog.h"
ClassImp(AliEMCALPIDResponse)
AliEMCALPIDResponse::AliEMCALPIDResponse():
TObject(),
fNorm(NULL),
fCurrCentrality(-1.),
fkPIDParams(NULL)
{
fNorm = new TF1("fNorm","gaus",-20,20);
}
AliEMCALPIDResponse::AliEMCALPIDResponse(const AliEMCALPIDResponse &other):
TObject(other),
fNorm(other.fNorm),
fCurrCentrality(other.fCurrCentrality),
fkPIDParams(other.fkPIDParams)
{
}
AliEMCALPIDResponse & AliEMCALPIDResponse::operator=( const AliEMCALPIDResponse& other)
{
if(this == &other) return *this;
TObject::operator=(other);
fNorm = other.fNorm;
fCurrCentrality = other.fCurrCentrality;
fkPIDParams = other.fkPIDParams;
return *this;
}
AliEMCALPIDResponse::~AliEMCALPIDResponse() {
delete fNorm;
}
Double_t AliEMCALPIDResponse::GetExpectedNorm( Float_t pt, AliPID::EParticleType n, Int_t charge) const {
Double_t norm = 1.;
if( charge != -1 && charge != 1){
return norm;
}
const TVectorD *params = GetParams(n, pt, charge);
if(!params) return norm;
Double_t mean = (*params)[2];
Double_t sigma = (*params)[3];
Double_t eopMin = (*params)[4];
Double_t eopMax = (*params)[5];
Double_t probLow = (*params)[6];
Double_t probHigh = (*params)[7];
fNorm->SetParameters(1./TMath::Sqrt(2*TMath::Pi()*sigma*sigma),mean,sigma);
norm = 1./fNorm->Integral(eopMin,eopMax)*(1-probLow-probHigh);
return norm;
}
Double_t AliEMCALPIDResponse::GetNumberOfSigmas( Float_t pt, Float_t eop, AliPID::EParticleType n, Int_t charge) const {
Double_t nsigma = -999.;
if( charge != -1 && charge != 1){
return nsigma;
}
const TVectorD *params = GetParams(n, pt, charge);
if(!params) return nsigma;
Double_t mean = (*params)[2];
Double_t sigma = (*params)[3];
Double_t eopMin = (*params)[4];
Double_t eopMax = (*params)[5];
if(n == AliPID::kElectron){
if(sigma != 0) nsigma = (eop - mean) / sigma;
}
else{
if ( eop < eopMin )
nsigma = -99;
else if ( eop > eopMax )
nsigma = 99.;
else{
if(sigma != 0) nsigma = (eop - mean) / sigma;
}
}
return nsigma;
}
Bool_t AliEMCALPIDResponse::ComputeEMCALProbability(Int_t nSpecies, Float_t pt, Float_t eop, Int_t charge, Double_t *pEMCAL) const {
Double_t fRange = 5.0;
Double_t nsigma = 0.0;
if( charge != -1 && charge != 1){
return kFALSE;
}
for (Int_t species = 0; species < nSpecies; species++) {
pEMCAL[species] = 1./nSpecies;
}
if(eop < 0.05) eop = 0.05;
if(eop > 2.00) eop = 2.00;
for (Int_t species = 0; species < nSpecies; species++) {
AliPID::EParticleType type = AliPID::EParticleType(species);
const TVectorD *params = GetParams(species, pt, charge);
if(!params) return kFALSE;
Double_t sigma = (*params)[3];
Double_t probLow = (*params)[6];
Double_t probHigh = (*params)[7];
nsigma = GetNumberOfSigmas(pt,eop,type,charge);
if(type == AliPID::kElectron){
if (TMath::Abs(nsigma) > fRange) {
pEMCAL[species]=TMath::Exp(-0.5*fRange*fRange)/TMath::Sqrt(2*TMath::Pi()*sigma*sigma);
}
else{
pEMCAL[species]=TMath::Exp(-0.5*(nsigma)*(nsigma))/TMath::Sqrt(2*TMath::Pi()*sigma*sigma);
}
}
else{
if ( nsigma == -99){
pEMCAL[species] = probLow;
}
else if ( nsigma == 99){
pEMCAL[species] = probHigh;
}
else{
pEMCAL[species]=TMath::Exp(-0.5*(nsigma)*(nsigma))/TMath::Sqrt(2*TMath::Pi()*sigma*sigma);
pEMCAL[species]*=GetExpectedNorm(pt,type,charge);
}
}
}
return kTRUE;
}
const TVectorD* AliEMCALPIDResponse::GetParams(Int_t nParticle, Float_t fPt, Int_t charge) const {
const Int_t nCent = 7;
Int_t centBins[nCent+1] = {0,10,20,30,40,50,70,90};
if(nParticle > AliPID::kSPECIES || nParticle <0) return NULL;
if(nParticle == AliPID::kProton && charge == -1) nParticle = AliPID::kSPECIES;
TObjArray * particlePar = dynamic_cast<TObjArray *>(fkPIDParams->At(nParticle));
if(!particlePar) return NULL;
const TVectorD *parameters = NULL;
Double_t momMin = 0.;
Double_t momMax = 0.;
TString arrayName = particlePar->GetName();
if(arrayName.Contains("Centrality")){
for(Int_t iCent = 0; iCent < nCent; iCent++){
if( fCurrCentrality > centBins[iCent] && fCurrCentrality < centBins[iCent+1] ){
TObjArray * centPar = dynamic_cast<TObjArray *>(particlePar->At(iCent));
if(!centPar) return NULL;
TIter centIter(centPar);
parameters = NULL;
momMin = 0.;
momMax = 0.;
while((parameters = static_cast<const TVectorD *>(centIter()))){
momMin = (*parameters)[0];
momMax = (*parameters)[1];
if( fPt > momMin && fPt < momMax ) return parameters;
}
}
}
}
else{
TIter parIter(particlePar);
while((parameters = static_cast<const TVectorD *>(parIter()))){
momMin = (*parameters)[0];
momMax = (*parameters)[1];
if( fPt > momMin && fPt < momMax ) return parameters;
}
}
AliDebug(2, Form("NO params for particle %d and momentum %f \n", nParticle, fPt));
return parameters;
}
AliEMCALPIDResponse.cxx:1 AliEMCALPIDResponse.cxx:2 AliEMCALPIDResponse.cxx:3 AliEMCALPIDResponse.cxx:4 AliEMCALPIDResponse.cxx:5 AliEMCALPIDResponse.cxx:6 AliEMCALPIDResponse.cxx:7 AliEMCALPIDResponse.cxx:8 AliEMCALPIDResponse.cxx:9 AliEMCALPIDResponse.cxx:10 AliEMCALPIDResponse.cxx:11 AliEMCALPIDResponse.cxx:12 AliEMCALPIDResponse.cxx:13 AliEMCALPIDResponse.cxx:14 AliEMCALPIDResponse.cxx:15 AliEMCALPIDResponse.cxx:16 AliEMCALPIDResponse.cxx:17 AliEMCALPIDResponse.cxx:18 AliEMCALPIDResponse.cxx:19 AliEMCALPIDResponse.cxx:20 AliEMCALPIDResponse.cxx:21 AliEMCALPIDResponse.cxx:22 AliEMCALPIDResponse.cxx:23 AliEMCALPIDResponse.cxx:24 AliEMCALPIDResponse.cxx:25 AliEMCALPIDResponse.cxx:26 AliEMCALPIDResponse.cxx:27 AliEMCALPIDResponse.cxx:28 AliEMCALPIDResponse.cxx:29 AliEMCALPIDResponse.cxx:30 AliEMCALPIDResponse.cxx:31 AliEMCALPIDResponse.cxx:32 AliEMCALPIDResponse.cxx:33 AliEMCALPIDResponse.cxx:34 AliEMCALPIDResponse.cxx:35 AliEMCALPIDResponse.cxx:36 AliEMCALPIDResponse.cxx:37 AliEMCALPIDResponse.cxx:38 AliEMCALPIDResponse.cxx:39 AliEMCALPIDResponse.cxx:40 AliEMCALPIDResponse.cxx:41 AliEMCALPIDResponse.cxx:42 AliEMCALPIDResponse.cxx:43 AliEMCALPIDResponse.cxx:44 AliEMCALPIDResponse.cxx:45 AliEMCALPIDResponse.cxx:46 AliEMCALPIDResponse.cxx:47 AliEMCALPIDResponse.cxx:48 AliEMCALPIDResponse.cxx:49 AliEMCALPIDResponse.cxx:50 AliEMCALPIDResponse.cxx:51 AliEMCALPIDResponse.cxx:52 AliEMCALPIDResponse.cxx:53 AliEMCALPIDResponse.cxx:54 AliEMCALPIDResponse.cxx:55 AliEMCALPIDResponse.cxx:56 AliEMCALPIDResponse.cxx:57 AliEMCALPIDResponse.cxx:58 AliEMCALPIDResponse.cxx:59 AliEMCALPIDResponse.cxx:60 AliEMCALPIDResponse.cxx:61 AliEMCALPIDResponse.cxx:62 AliEMCALPIDResponse.cxx:63 AliEMCALPIDResponse.cxx:64 AliEMCALPIDResponse.cxx:65 AliEMCALPIDResponse.cxx:66 AliEMCALPIDResponse.cxx:67 AliEMCALPIDResponse.cxx:68 AliEMCALPIDResponse.cxx:69 AliEMCALPIDResponse.cxx:70 AliEMCALPIDResponse.cxx:71 AliEMCALPIDResponse.cxx:72 AliEMCALPIDResponse.cxx:73 AliEMCALPIDResponse.cxx:74 AliEMCALPIDResponse.cxx:75 AliEMCALPIDResponse.cxx:76 AliEMCALPIDResponse.cxx:77 AliEMCALPIDResponse.cxx:78 AliEMCALPIDResponse.cxx:79 AliEMCALPIDResponse.cxx:80 AliEMCALPIDResponse.cxx:81 AliEMCALPIDResponse.cxx:82 AliEMCALPIDResponse.cxx:83 AliEMCALPIDResponse.cxx:84 AliEMCALPIDResponse.cxx:85 AliEMCALPIDResponse.cxx:86 AliEMCALPIDResponse.cxx:87 AliEMCALPIDResponse.cxx:88 AliEMCALPIDResponse.cxx:89 AliEMCALPIDResponse.cxx:90 AliEMCALPIDResponse.cxx:91 AliEMCALPIDResponse.cxx:92 AliEMCALPIDResponse.cxx:93 AliEMCALPIDResponse.cxx:94 AliEMCALPIDResponse.cxx:95 AliEMCALPIDResponse.cxx:96 AliEMCALPIDResponse.cxx:97 AliEMCALPIDResponse.cxx:98 AliEMCALPIDResponse.cxx:99 AliEMCALPIDResponse.cxx:100 AliEMCALPIDResponse.cxx:101 AliEMCALPIDResponse.cxx:102 AliEMCALPIDResponse.cxx:103 AliEMCALPIDResponse.cxx:104 AliEMCALPIDResponse.cxx:105 AliEMCALPIDResponse.cxx:106 AliEMCALPIDResponse.cxx:107 AliEMCALPIDResponse.cxx:108 AliEMCALPIDResponse.cxx:109 AliEMCALPIDResponse.cxx:110 AliEMCALPIDResponse.cxx:111 AliEMCALPIDResponse.cxx:112 AliEMCALPIDResponse.cxx:113 AliEMCALPIDResponse.cxx:114 AliEMCALPIDResponse.cxx:115 AliEMCALPIDResponse.cxx:116 AliEMCALPIDResponse.cxx:117 AliEMCALPIDResponse.cxx:118 AliEMCALPIDResponse.cxx:119 AliEMCALPIDResponse.cxx:120 AliEMCALPIDResponse.cxx:121 AliEMCALPIDResponse.cxx:122 AliEMCALPIDResponse.cxx:123 AliEMCALPIDResponse.cxx:124 AliEMCALPIDResponse.cxx:125 AliEMCALPIDResponse.cxx:126 AliEMCALPIDResponse.cxx:127 AliEMCALPIDResponse.cxx:128 AliEMCALPIDResponse.cxx:129 AliEMCALPIDResponse.cxx:130 AliEMCALPIDResponse.cxx:131 AliEMCALPIDResponse.cxx:132 AliEMCALPIDResponse.cxx:133 AliEMCALPIDResponse.cxx:134 AliEMCALPIDResponse.cxx:135 AliEMCALPIDResponse.cxx:136 AliEMCALPIDResponse.cxx:137 AliEMCALPIDResponse.cxx:138 AliEMCALPIDResponse.cxx:139 AliEMCALPIDResponse.cxx:140 AliEMCALPIDResponse.cxx:141 AliEMCALPIDResponse.cxx:142 AliEMCALPIDResponse.cxx:143 AliEMCALPIDResponse.cxx:144 AliEMCALPIDResponse.cxx:145 AliEMCALPIDResponse.cxx:146 AliEMCALPIDResponse.cxx:147 AliEMCALPIDResponse.cxx:148 AliEMCALPIDResponse.cxx:149 AliEMCALPIDResponse.cxx:150 AliEMCALPIDResponse.cxx:151 AliEMCALPIDResponse.cxx:152 AliEMCALPIDResponse.cxx:153 AliEMCALPIDResponse.cxx:154 AliEMCALPIDResponse.cxx:155 AliEMCALPIDResponse.cxx:156 AliEMCALPIDResponse.cxx:157 AliEMCALPIDResponse.cxx:158 AliEMCALPIDResponse.cxx:159 AliEMCALPIDResponse.cxx:160 AliEMCALPIDResponse.cxx:161 AliEMCALPIDResponse.cxx:162 AliEMCALPIDResponse.cxx:163 AliEMCALPIDResponse.cxx:164 AliEMCALPIDResponse.cxx:165 AliEMCALPIDResponse.cxx:166 AliEMCALPIDResponse.cxx:167 AliEMCALPIDResponse.cxx:168 AliEMCALPIDResponse.cxx:169 AliEMCALPIDResponse.cxx:170 AliEMCALPIDResponse.cxx:171 AliEMCALPIDResponse.cxx:172 AliEMCALPIDResponse.cxx:173 AliEMCALPIDResponse.cxx:174 AliEMCALPIDResponse.cxx:175 AliEMCALPIDResponse.cxx:176 AliEMCALPIDResponse.cxx:177 AliEMCALPIDResponse.cxx:178 AliEMCALPIDResponse.cxx:179 AliEMCALPIDResponse.cxx:180 AliEMCALPIDResponse.cxx:181 AliEMCALPIDResponse.cxx:182 AliEMCALPIDResponse.cxx:183 AliEMCALPIDResponse.cxx:184 AliEMCALPIDResponse.cxx:185 AliEMCALPIDResponse.cxx:186 AliEMCALPIDResponse.cxx:187 AliEMCALPIDResponse.cxx:188 AliEMCALPIDResponse.cxx:189 AliEMCALPIDResponse.cxx:190 AliEMCALPIDResponse.cxx:191 AliEMCALPIDResponse.cxx:192 AliEMCALPIDResponse.cxx:193 AliEMCALPIDResponse.cxx:194 AliEMCALPIDResponse.cxx:195 AliEMCALPIDResponse.cxx:196 AliEMCALPIDResponse.cxx:197 AliEMCALPIDResponse.cxx:198 AliEMCALPIDResponse.cxx:199 AliEMCALPIDResponse.cxx:200 AliEMCALPIDResponse.cxx:201 AliEMCALPIDResponse.cxx:202 AliEMCALPIDResponse.cxx:203 AliEMCALPIDResponse.cxx:204 AliEMCALPIDResponse.cxx:205 AliEMCALPIDResponse.cxx:206 AliEMCALPIDResponse.cxx:207 AliEMCALPIDResponse.cxx:208 AliEMCALPIDResponse.cxx:209 AliEMCALPIDResponse.cxx:210 AliEMCALPIDResponse.cxx:211 AliEMCALPIDResponse.cxx:212 AliEMCALPIDResponse.cxx:213 AliEMCALPIDResponse.cxx:214 AliEMCALPIDResponse.cxx:215 AliEMCALPIDResponse.cxx:216 AliEMCALPIDResponse.cxx:217 AliEMCALPIDResponse.cxx:218 AliEMCALPIDResponse.cxx:219 AliEMCALPIDResponse.cxx:220 AliEMCALPIDResponse.cxx:221 AliEMCALPIDResponse.cxx:222 AliEMCALPIDResponse.cxx:223 AliEMCALPIDResponse.cxx:224 AliEMCALPIDResponse.cxx:225 AliEMCALPIDResponse.cxx:226 AliEMCALPIDResponse.cxx:227 AliEMCALPIDResponse.cxx:228 AliEMCALPIDResponse.cxx:229 AliEMCALPIDResponse.cxx:230 AliEMCALPIDResponse.cxx:231 AliEMCALPIDResponse.cxx:232 AliEMCALPIDResponse.cxx:233 AliEMCALPIDResponse.cxx:234 AliEMCALPIDResponse.cxx:235 AliEMCALPIDResponse.cxx:236 AliEMCALPIDResponse.cxx:237 AliEMCALPIDResponse.cxx:238 AliEMCALPIDResponse.cxx:239 AliEMCALPIDResponse.cxx:240 AliEMCALPIDResponse.cxx:241 AliEMCALPIDResponse.cxx:242 AliEMCALPIDResponse.cxx:243 AliEMCALPIDResponse.cxx:244 AliEMCALPIDResponse.cxx:245 AliEMCALPIDResponse.cxx:246 AliEMCALPIDResponse.cxx:247 AliEMCALPIDResponse.cxx:248 AliEMCALPIDResponse.cxx:249 AliEMCALPIDResponse.cxx:250 AliEMCALPIDResponse.cxx:251 AliEMCALPIDResponse.cxx:252 AliEMCALPIDResponse.cxx:253 AliEMCALPIDResponse.cxx:254 AliEMCALPIDResponse.cxx:255 AliEMCALPIDResponse.cxx:256 AliEMCALPIDResponse.cxx:257 AliEMCALPIDResponse.cxx:258 AliEMCALPIDResponse.cxx:259 AliEMCALPIDResponse.cxx:260 AliEMCALPIDResponse.cxx:261 AliEMCALPIDResponse.cxx:262 AliEMCALPIDResponse.cxx:263 AliEMCALPIDResponse.cxx:264 AliEMCALPIDResponse.cxx:265 AliEMCALPIDResponse.cxx:266 AliEMCALPIDResponse.cxx:267 AliEMCALPIDResponse.cxx:268 AliEMCALPIDResponse.cxx:269 AliEMCALPIDResponse.cxx:270 AliEMCALPIDResponse.cxx:271 AliEMCALPIDResponse.cxx:272 AliEMCALPIDResponse.cxx:273 AliEMCALPIDResponse.cxx:274 AliEMCALPIDResponse.cxx:275 AliEMCALPIDResponse.cxx:276 AliEMCALPIDResponse.cxx:277 AliEMCALPIDResponse.cxx:278 AliEMCALPIDResponse.cxx:279 AliEMCALPIDResponse.cxx:280 AliEMCALPIDResponse.cxx:281 AliEMCALPIDResponse.cxx:282 AliEMCALPIDResponse.cxx:283 AliEMCALPIDResponse.cxx:284 AliEMCALPIDResponse.cxx:285 AliEMCALPIDResponse.cxx:286 AliEMCALPIDResponse.cxx:287 AliEMCALPIDResponse.cxx:288 AliEMCALPIDResponse.cxx:289 AliEMCALPIDResponse.cxx:290 AliEMCALPIDResponse.cxx:291 AliEMCALPIDResponse.cxx:292 AliEMCALPIDResponse.cxx:293 AliEMCALPIDResponse.cxx:294 AliEMCALPIDResponse.cxx:295 AliEMCALPIDResponse.cxx:296 AliEMCALPIDResponse.cxx:297 AliEMCALPIDResponse.cxx:298 AliEMCALPIDResponse.cxx:299 AliEMCALPIDResponse.cxx:300 AliEMCALPIDResponse.cxx:301 AliEMCALPIDResponse.cxx:302 AliEMCALPIDResponse.cxx:303 AliEMCALPIDResponse.cxx:304 AliEMCALPIDResponse.cxx:305 AliEMCALPIDResponse.cxx:306 AliEMCALPIDResponse.cxx:307 AliEMCALPIDResponse.cxx:308 AliEMCALPIDResponse.cxx:309 AliEMCALPIDResponse.cxx:310 AliEMCALPIDResponse.cxx:311 AliEMCALPIDResponse.cxx:312 AliEMCALPIDResponse.cxx:313 AliEMCALPIDResponse.cxx:314 AliEMCALPIDResponse.cxx:315 AliEMCALPIDResponse.cxx:316 AliEMCALPIDResponse.cxx:317 AliEMCALPIDResponse.cxx:318 AliEMCALPIDResponse.cxx:319 AliEMCALPIDResponse.cxx:320 AliEMCALPIDResponse.cxx:321 AliEMCALPIDResponse.cxx:322 AliEMCALPIDResponse.cxx:323 AliEMCALPIDResponse.cxx:324 AliEMCALPIDResponse.cxx:325 AliEMCALPIDResponse.cxx:326 AliEMCALPIDResponse.cxx:327 AliEMCALPIDResponse.cxx:328 AliEMCALPIDResponse.cxx:329 AliEMCALPIDResponse.cxx:330 AliEMCALPIDResponse.cxx:331 AliEMCALPIDResponse.cxx:332 AliEMCALPIDResponse.cxx:333