#include <TString.h>
#include <TFile.h>
#include <TParticlePDG.h>
#include <TDatabasePDG.h>
#include "AliStack.h"
#include "AliLog.h"
#include "AliESDEvent.h"
#include "AliStack.h"
#include "AliITSdEdxAnalyzer.h"
#include "AliExternalTrackParam.h"
#include "AliITSPIDResponse.h"
#include "AliPID.h"
ClassImp(AliITSdEdxAnalyzer)
const Int_t AliITSdEdxAnalyzer::fgkPdgCode[kNParticles]={211,321,2212};
const Int_t AliITSdEdxAnalyzer::fgkLayerCode[kNValuesdEdx]={3,4,5,6,0};
AliITSdEdxAnalyzer::AliITSdEdxAnalyzer() :
TObject(),
fNPBins(10),
fPMin(0.1),
fPMax(1.1),
fHistodEdx(0),
fHistoDeltadEdx(0),
fHistodEdxVsP(0),
fThickness(0.03),
fDensity(2.33),
fBBmodel(0),
fMIP(82.),
fTPCpidCut(0.5)
{
BookHistos();
}
AliITSdEdxAnalyzer::AliITSdEdxAnalyzer(const Int_t npbins, const Float_t pmin, const Float_t pmax) :
TObject(),
fNPBins(npbins),
fPMin(pmin),
fPMax(pmax),
fHistodEdx(0),
fHistoDeltadEdx(0),
fHistodEdxVsP(0),
fThickness(0.03),
fDensity(2.33),
fBBmodel(0),
fMIP(82.),
fTPCpidCut(0.5)
{
BookHistos();
}
AliITSdEdxAnalyzer::~AliITSdEdxAnalyzer(){
DeleteHistos();
}
void AliITSdEdxAnalyzer::SetMomentumBins(const Int_t npbins, const Float_t pmin, const Float_t pmax){
DeleteHistos();
fNPBins=npbins;
fPMin=pmin;
fPMax=pmax;
BookHistos();
}
void AliITSdEdxAnalyzer::DeleteHistos(){
if(fHistodEdx){
for(Int_t i=0; i<GetNHistos();i++) delete fHistodEdx[i];
delete [] fHistodEdx;
fHistodEdx=0;
}
if(fHistoDeltadEdx){
for(Int_t i=0; i<GetNHistos();i++) delete fHistoDeltadEdx[i];
delete [] fHistoDeltadEdx;
fHistoDeltadEdx=0;
}
if(fHistodEdxVsP){
for(Int_t i=0; i<GetNHistos2();i++) delete fHistodEdxVsP[i];
delete [] fHistodEdxVsP;
fHistodEdxVsP=0;
}
}
void AliITSdEdxAnalyzer::BookHistos(){
fHistodEdx=new TH1F*[GetNHistos()];
fHistoDeltadEdx=new TH1F*[GetNHistos()];
for(Int_t iSpecie=0; iSpecie<kNParticles; iSpecie++){
for(Int_t iPBin=0; iPBin<fNPBins; iPBin++){
for(Int_t iVal=0; iVal<kNValuesdEdx; iVal++){
TString hisnam1=Form("hdEdx%dpbin%dpart%d",fgkLayerCode[iVal],iPBin,fgkPdgCode[iSpecie]);
TString histit1=Form("dEdx layer %d (keV) pbin%d part%d",fgkLayerCode[iVal],iPBin,fgkPdgCode[iSpecie]);
if(iVal==kNValuesdEdx-1) histit1=Form("dEdx trunc. mean (keV) pbin%d part%d",iPBin,fgkPdgCode[iSpecie]);
fHistodEdx[GetIndex(iSpecie,iPBin,iVal)]=new TH1F(hisnam1.Data(),histit1.Data(),100,0.,500.);
fHistodEdx[GetIndex(iSpecie,iPBin,iVal)]->GetXaxis()->SetTitle(histit1.Data());
TString hisnam2=Form("hdeltadEdx%dpbin%dpart%d",fgkLayerCode[iVal],iPBin,fgkPdgCode[iSpecie]);
TString histit2=Form("(dEdx_l%d-BetheBloch)/BetheBloch pbin%d part%d",fgkLayerCode[iVal],iPBin,fgkPdgCode[iSpecie]);
if(iVal==kNValuesdEdx-1) histit1=Form("(dEdx_truncmean-BetheBloch)/BetheBloch pbin%d part%d",iPBin,fgkPdgCode[iSpecie]);
fHistoDeltadEdx[GetIndex(iSpecie,iPBin,iVal)]=new TH1F(hisnam2.Data(),histit2.Data(),100,-0.5,0.5);
fHistoDeltadEdx[GetIndex(iSpecie,iPBin,iVal)]->GetXaxis()->SetTitle(histit2.Data());
}
}
}
fHistodEdxVsP=new TH2F*[GetNHistos2()];
for(Int_t iSpecie=0; iSpecie<kNParticles; iSpecie++){
for(Int_t iVal=0; iVal<kNValuesdEdx; iVal++){
TString hisnam=Form("hdEdx%dVsPpart%d",fgkLayerCode[iVal],fgkPdgCode[iSpecie]);
TString histit=Form("dEdx layer %d (keV) vs P part%d",fgkLayerCode[iVal],fgkPdgCode[iSpecie]);
if(iVal==kNValuesdEdx-1) histit=Form("dEdx trunc. mean (keV) vs P part%d",fgkPdgCode[iSpecie]);
fHistodEdxVsP[GetIndex2(iSpecie,iVal)]=new TH2F(hisnam.Data(),histit.Data(),50,fPMin,fPMax,50,0.,500.);
histit.ReplaceAll(" vs P "," ");
fHistodEdxVsP[GetIndex2(iSpecie,iVal)]->GetYaxis()->SetTitle(histit.Data());
fHistodEdxVsP[GetIndex2(iSpecie,iVal)]->GetXaxis()->SetTitle("Momentum (GeV/c)");
}
}
}
void AliITSdEdxAnalyzer:: WriteHistos(TString filename) const {
TFile *outfile=new TFile(filename.Data(),"recreate");
outfile->cd();
for(Int_t i=0; i<GetNHistos();i++){
fHistodEdx[i]->Write();
fHistoDeltadEdx[i]->Write();
}
for(Int_t i=0; i<GetNHistos2();i++) fHistodEdxVsP[i]->Write();
outfile->Close();
delete outfile;
}
void AliITSdEdxAnalyzer::ReadEvent(const AliESDEvent* esd, AliStack* stack){
if(!esd) AliFatal("Bad ESD event");
for (Int_t iTrack = 0; iTrack < esd->GetNumberOfTracks(); iTrack++) {
AliESDtrack* track = esd->GetTrack(iTrack);
Double_t trmean=track->GetITSsignal();
Double_t sig[4];
track->GetITSdEdxSamples(sig);
Double_t preco=track->P();
Int_t iPBin=GetMomentumBin(preco);
if(iPBin==-1) continue;
Int_t iSpecie=-1;
Double_t dedxbb=0;
if(stack){
Int_t lab=track->GetLabel();
if(lab<0) continue;
TParticle* part=(TParticle*)stack->Particle(lab);
Int_t absPdgCode=TMath::Abs(part->GetPdgCode());
iSpecie=GetSpecieBin(absPdgCode);
if(iSpecie==-1) continue;
dedxbb=BetheBloch(part);
}else{
iSpecie=GetPaticleIdFromTPC(track);
if(iSpecie==-1) continue;
TParticlePDG* p=TDatabasePDG::Instance()->GetParticle(fgkPdgCode[iSpecie]);
dedxbb=BetheBloch(preco,p->Mass());
}
for(Int_t ilay=0;ilay<4;ilay++){
if(sig[ilay]>0.){
fHistodEdx[GetIndex(iSpecie,iPBin,ilay)]->Fill(sig[ilay]);
fHistoDeltadEdx[GetIndex(iSpecie,iPBin,ilay)]->Fill((sig[ilay]-dedxbb)/dedxbb);
fHistodEdxVsP[GetIndex2(iSpecie,ilay)]->Fill(preco,sig[ilay]);
}
}
if(trmean>0.){
fHistodEdx[GetIndex(iSpecie,iPBin,4)]->Fill(trmean);
fHistoDeltadEdx[GetIndex(iSpecie,iPBin,4)]->Fill((trmean-dedxbb)/dedxbb);
fHistodEdxVsP[GetIndex2(iSpecie,4)]->Fill(preco,trmean);
}
}
}
Int_t AliITSdEdxAnalyzer::GetPaticleIdFromTPC(const AliESDtrack* track) const {
Double_t tpcpid[AliPID::kSPECIES];
track->GetTPCpid(tpcpid);
Int_t maxPos=-1;
Float_t maxProb=0.;
for(Int_t is=0; is<AliPID::kSPECIES; is++){
if(tpcpid[is]>maxProb){
maxProb=tpcpid[is];
maxPos=is;
}
}
Int_t iSpecie=-1;
if(maxProb>fTPCpidCut){
if(maxPos==AliPID::kPion) iSpecie=0;
else if(maxPos==AliPID::kKaon) iSpecie=1;
else if(maxPos==AliPID::kProton) iSpecie=2;
}
return iSpecie;
}
Double_t AliITSdEdxAnalyzer::BetheBloch(const Float_t p, const Float_t m) const {
static AliITSPIDResponse pidResponse;
Double_t dedxbb=0.;
if(fBBmodel==0){
Double_t betagamma=p/m;
Double_t conv=fDensity*1E6*fThickness/116.24*fMIP;
dedxbb=conv*AliExternalTrackParam::BetheBlochSolid(betagamma);
}else if(fBBmodel==1){
dedxbb=pidResponse.Bethe(p,m);
}
return dedxbb;
}
TGraph* AliITSdEdxAnalyzer::GetBetheBlochGraph(const Int_t pdgcode) const {
TGraph* g=new TGraph(0);
TParticlePDG* part=TDatabasePDG::Instance()->GetParticle(pdgcode);
Float_t mass=part->Mass();
for(Int_t ip=0; ip<100;ip++){
Float_t p=fPMin+(ip+0.5)*(fPMax-fPMin)/100.;
g->SetPoint(ip,p,BetheBloch(p,mass));
}
g->GetXaxis()->SetTitle("Momentum (GeV/c)");
g->GetYaxis()->SetTitle("dE/dx (keV/300 #mum)");
return g;
}
AliITSdEdxAnalyzer.cxx:10 AliITSdEdxAnalyzer.cxx:11 AliITSdEdxAnalyzer.cxx:12 AliITSdEdxAnalyzer.cxx:13 AliITSdEdxAnalyzer.cxx:14 AliITSdEdxAnalyzer.cxx:15 AliITSdEdxAnalyzer.cxx:16 AliITSdEdxAnalyzer.cxx:17 AliITSdEdxAnalyzer.cxx:18 AliITSdEdxAnalyzer.cxx:19 AliITSdEdxAnalyzer.cxx:20 AliITSdEdxAnalyzer.cxx:21 AliITSdEdxAnalyzer.cxx:22 AliITSdEdxAnalyzer.cxx:23 AliITSdEdxAnalyzer.cxx:24 AliITSdEdxAnalyzer.cxx:25 AliITSdEdxAnalyzer.cxx:26 AliITSdEdxAnalyzer.cxx:27 AliITSdEdxAnalyzer.cxx:28 AliITSdEdxAnalyzer.cxx:29 AliITSdEdxAnalyzer.cxx:30 AliITSdEdxAnalyzer.cxx:31 AliITSdEdxAnalyzer.cxx:32 AliITSdEdxAnalyzer.cxx:33 AliITSdEdxAnalyzer.cxx:34 AliITSdEdxAnalyzer.cxx:35 AliITSdEdxAnalyzer.cxx:36 AliITSdEdxAnalyzer.cxx:37 AliITSdEdxAnalyzer.cxx:38 AliITSdEdxAnalyzer.cxx:39 AliITSdEdxAnalyzer.cxx:40 AliITSdEdxAnalyzer.cxx:41 AliITSdEdxAnalyzer.cxx:42 AliITSdEdxAnalyzer.cxx:43 AliITSdEdxAnalyzer.cxx:44 AliITSdEdxAnalyzer.cxx:45 AliITSdEdxAnalyzer.cxx:46 AliITSdEdxAnalyzer.cxx:47 AliITSdEdxAnalyzer.cxx:48 AliITSdEdxAnalyzer.cxx:49 AliITSdEdxAnalyzer.cxx:50 AliITSdEdxAnalyzer.cxx:51 AliITSdEdxAnalyzer.cxx:52 AliITSdEdxAnalyzer.cxx:53 AliITSdEdxAnalyzer.cxx:54 AliITSdEdxAnalyzer.cxx:55 AliITSdEdxAnalyzer.cxx:56 AliITSdEdxAnalyzer.cxx:57 AliITSdEdxAnalyzer.cxx:58 AliITSdEdxAnalyzer.cxx:59 AliITSdEdxAnalyzer.cxx:60 AliITSdEdxAnalyzer.cxx:61 AliITSdEdxAnalyzer.cxx:62 AliITSdEdxAnalyzer.cxx:63 AliITSdEdxAnalyzer.cxx:64 AliITSdEdxAnalyzer.cxx:65 AliITSdEdxAnalyzer.cxx:66 AliITSdEdxAnalyzer.cxx:67 AliITSdEdxAnalyzer.cxx:68 AliITSdEdxAnalyzer.cxx:69 AliITSdEdxAnalyzer.cxx:70 AliITSdEdxAnalyzer.cxx:71 AliITSdEdxAnalyzer.cxx:72 AliITSdEdxAnalyzer.cxx:73 AliITSdEdxAnalyzer.cxx:74 AliITSdEdxAnalyzer.cxx:75 AliITSdEdxAnalyzer.cxx:76 AliITSdEdxAnalyzer.cxx:77 AliITSdEdxAnalyzer.cxx:78 AliITSdEdxAnalyzer.cxx:79 AliITSdEdxAnalyzer.cxx:80 AliITSdEdxAnalyzer.cxx:81 AliITSdEdxAnalyzer.cxx:82 AliITSdEdxAnalyzer.cxx:83 AliITSdEdxAnalyzer.cxx:84 AliITSdEdxAnalyzer.cxx:85 AliITSdEdxAnalyzer.cxx:86 AliITSdEdxAnalyzer.cxx:87 AliITSdEdxAnalyzer.cxx:88 AliITSdEdxAnalyzer.cxx:89 AliITSdEdxAnalyzer.cxx:90 AliITSdEdxAnalyzer.cxx:91 AliITSdEdxAnalyzer.cxx:92 AliITSdEdxAnalyzer.cxx:93 AliITSdEdxAnalyzer.cxx:94 AliITSdEdxAnalyzer.cxx:95 AliITSdEdxAnalyzer.cxx:96 AliITSdEdxAnalyzer.cxx:97 AliITSdEdxAnalyzer.cxx:98 AliITSdEdxAnalyzer.cxx:99 AliITSdEdxAnalyzer.cxx:100 AliITSdEdxAnalyzer.cxx:101 AliITSdEdxAnalyzer.cxx:102 AliITSdEdxAnalyzer.cxx:103 AliITSdEdxAnalyzer.cxx:104 AliITSdEdxAnalyzer.cxx:105 AliITSdEdxAnalyzer.cxx:106 AliITSdEdxAnalyzer.cxx:107 AliITSdEdxAnalyzer.cxx:108 AliITSdEdxAnalyzer.cxx:109 AliITSdEdxAnalyzer.cxx:110 AliITSdEdxAnalyzer.cxx:111 AliITSdEdxAnalyzer.cxx:112 AliITSdEdxAnalyzer.cxx:113 AliITSdEdxAnalyzer.cxx:114 AliITSdEdxAnalyzer.cxx:115 AliITSdEdxAnalyzer.cxx:116 AliITSdEdxAnalyzer.cxx:117 AliITSdEdxAnalyzer.cxx:118 AliITSdEdxAnalyzer.cxx:119 AliITSdEdxAnalyzer.cxx:120 AliITSdEdxAnalyzer.cxx:121 AliITSdEdxAnalyzer.cxx:122 AliITSdEdxAnalyzer.cxx:123 AliITSdEdxAnalyzer.cxx:124 AliITSdEdxAnalyzer.cxx:125 AliITSdEdxAnalyzer.cxx:126 AliITSdEdxAnalyzer.cxx:127 AliITSdEdxAnalyzer.cxx:128 AliITSdEdxAnalyzer.cxx:129 AliITSdEdxAnalyzer.cxx:130 AliITSdEdxAnalyzer.cxx:131 AliITSdEdxAnalyzer.cxx:132 AliITSdEdxAnalyzer.cxx:133 AliITSdEdxAnalyzer.cxx:134 AliITSdEdxAnalyzer.cxx:135 AliITSdEdxAnalyzer.cxx:136 AliITSdEdxAnalyzer.cxx:137 AliITSdEdxAnalyzer.cxx:138 AliITSdEdxAnalyzer.cxx:139 AliITSdEdxAnalyzer.cxx:140 AliITSdEdxAnalyzer.cxx:141 AliITSdEdxAnalyzer.cxx:142 AliITSdEdxAnalyzer.cxx:143 AliITSdEdxAnalyzer.cxx:144 AliITSdEdxAnalyzer.cxx:145 AliITSdEdxAnalyzer.cxx:146 AliITSdEdxAnalyzer.cxx:147 AliITSdEdxAnalyzer.cxx:148 AliITSdEdxAnalyzer.cxx:149 AliITSdEdxAnalyzer.cxx:150 AliITSdEdxAnalyzer.cxx:151 AliITSdEdxAnalyzer.cxx:152 AliITSdEdxAnalyzer.cxx:153 AliITSdEdxAnalyzer.cxx:154 AliITSdEdxAnalyzer.cxx:155 AliITSdEdxAnalyzer.cxx:156 AliITSdEdxAnalyzer.cxx:157 AliITSdEdxAnalyzer.cxx:158 AliITSdEdxAnalyzer.cxx:159 AliITSdEdxAnalyzer.cxx:160 AliITSdEdxAnalyzer.cxx:161 AliITSdEdxAnalyzer.cxx:162 AliITSdEdxAnalyzer.cxx:163 AliITSdEdxAnalyzer.cxx:164 AliITSdEdxAnalyzer.cxx:165 AliITSdEdxAnalyzer.cxx:166 AliITSdEdxAnalyzer.cxx:167 AliITSdEdxAnalyzer.cxx:168 AliITSdEdxAnalyzer.cxx:169 AliITSdEdxAnalyzer.cxx:170 AliITSdEdxAnalyzer.cxx:171 AliITSdEdxAnalyzer.cxx:172 AliITSdEdxAnalyzer.cxx:173 AliITSdEdxAnalyzer.cxx:174 AliITSdEdxAnalyzer.cxx:175 AliITSdEdxAnalyzer.cxx:176 AliITSdEdxAnalyzer.cxx:177 AliITSdEdxAnalyzer.cxx:178 AliITSdEdxAnalyzer.cxx:179 AliITSdEdxAnalyzer.cxx:180 AliITSdEdxAnalyzer.cxx:181 AliITSdEdxAnalyzer.cxx:182 AliITSdEdxAnalyzer.cxx:183 AliITSdEdxAnalyzer.cxx:184 AliITSdEdxAnalyzer.cxx:185 AliITSdEdxAnalyzer.cxx:186 AliITSdEdxAnalyzer.cxx:187 AliITSdEdxAnalyzer.cxx:188 AliITSdEdxAnalyzer.cxx:189 AliITSdEdxAnalyzer.cxx:190 AliITSdEdxAnalyzer.cxx:191 AliITSdEdxAnalyzer.cxx:192 AliITSdEdxAnalyzer.cxx:193 AliITSdEdxAnalyzer.cxx:194 AliITSdEdxAnalyzer.cxx:195 AliITSdEdxAnalyzer.cxx:196 AliITSdEdxAnalyzer.cxx:197 AliITSdEdxAnalyzer.cxx:198 AliITSdEdxAnalyzer.cxx:199 AliITSdEdxAnalyzer.cxx:200 AliITSdEdxAnalyzer.cxx:201 AliITSdEdxAnalyzer.cxx:202 AliITSdEdxAnalyzer.cxx:203 AliITSdEdxAnalyzer.cxx:204 AliITSdEdxAnalyzer.cxx:205 AliITSdEdxAnalyzer.cxx:206 AliITSdEdxAnalyzer.cxx:207 AliITSdEdxAnalyzer.cxx:208 AliITSdEdxAnalyzer.cxx:209 AliITSdEdxAnalyzer.cxx:210 AliITSdEdxAnalyzer.cxx:211 AliITSdEdxAnalyzer.cxx:212 AliITSdEdxAnalyzer.cxx:213 AliITSdEdxAnalyzer.cxx:214 AliITSdEdxAnalyzer.cxx:215 AliITSdEdxAnalyzer.cxx:216 AliITSdEdxAnalyzer.cxx:217 AliITSdEdxAnalyzer.cxx:218 AliITSdEdxAnalyzer.cxx:219 AliITSdEdxAnalyzer.cxx:220 AliITSdEdxAnalyzer.cxx:221 AliITSdEdxAnalyzer.cxx:222 AliITSdEdxAnalyzer.cxx:223 AliITSdEdxAnalyzer.cxx:224 AliITSdEdxAnalyzer.cxx:225 AliITSdEdxAnalyzer.cxx:226 AliITSdEdxAnalyzer.cxx:227 AliITSdEdxAnalyzer.cxx:228 AliITSdEdxAnalyzer.cxx:229 AliITSdEdxAnalyzer.cxx:230 AliITSdEdxAnalyzer.cxx:231 AliITSdEdxAnalyzer.cxx:232 AliITSdEdxAnalyzer.cxx:233 AliITSdEdxAnalyzer.cxx:234 AliITSdEdxAnalyzer.cxx:235 AliITSdEdxAnalyzer.cxx:236 AliITSdEdxAnalyzer.cxx:237 AliITSdEdxAnalyzer.cxx:238 AliITSdEdxAnalyzer.cxx:239 AliITSdEdxAnalyzer.cxx:240 AliITSdEdxAnalyzer.cxx:241 AliITSdEdxAnalyzer.cxx:242 AliITSdEdxAnalyzer.cxx:243 AliITSdEdxAnalyzer.cxx:244 AliITSdEdxAnalyzer.cxx:245 AliITSdEdxAnalyzer.cxx:246 AliITSdEdxAnalyzer.cxx:247 AliITSdEdxAnalyzer.cxx:248 AliITSdEdxAnalyzer.cxx:249 AliITSdEdxAnalyzer.cxx:250 AliITSdEdxAnalyzer.cxx:251 AliITSdEdxAnalyzer.cxx:252 AliITSdEdxAnalyzer.cxx:253 AliITSdEdxAnalyzer.cxx:254