#include "TChain.h"
#include "TList.h"
#include "TFile.h"
#include "TTree.h"
#include "TH1D.h"
#include "TH2F.h"
#include "TH3F.h"
#include "TCanvas.h"
#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
#include "AliVEvent.h"
#include "AliESD.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliAODMCParticle.h"
#include "AliAODMCHeader.h"
#include "AliPIDResponse.h"
#include "AliAODHeader.h"
#include "AliAODpidUtil.h"
#include "AliPIDCombined.h"
#include "AliHelperPID.h"
using std::endl;
using std::cout;
#include "AliEbyEPidTTaskMC.h"
ClassImp(AliEbyEPidTTaskMC)
AliEbyEPidTTaskMC::AliEbyEPidTTaskMC( const char *name ) : AliAnalysisTaskSE( name ),
fThnList(NULL),
isMC(kFALSE),
fCentralityEstimator("V0M"),
fAODtrackCutBit(128),
fHelperPID(0x0),
fEventCounter(NULL),
fEventTree(NULL),
fRunNumber(0),
fNumberOfTracks(8000),
fNumberOfTracksM(8000),
fFilterBit(99),
fCentPercentile(-1),
fVertexX(-99),
fVertexY(-99),
fVertexZ(-99) {
DefineInput(0,TChain::Class());
DefineOutput(1, TList::Class());
DefineOutput(2, TTree::Class());
}
AliEbyEPidTTaskMC::~AliEbyEPidTTaskMC() {
if (fThnList) delete fThnList;
if (fHelperPID) delete fHelperPID;
if (fEventTree) delete fEventTree;
}
void AliEbyEPidTTaskMC::UserCreateOutputObjects() {
fThnList = new TList();
fThnList->SetOwner(kTRUE);
fEventCounter = new TH1D("fEventCounter","EventCounter", 70, 0.5,70.5);
fThnList->Add(fEventCounter);
TList *ll = (TList*)fHelperPID->GetOutputList();
for (Int_t ikey = 0; ikey < ll->GetEntries(); ikey++) {
fThnList->Add(ll->At(ikey));
}
TDirectory *owd = gDirectory;
OpenFile(1);
fEventTree = new TTree("fEventTree","fEventTree");
owd->cd();
fEventTree->Branch("fRunNumber", &fRunNumber, "fRunNumber/I");
fEventTree->Branch("fFilterBit", &fFilterBit, "fFilterBit/I");
fEventTree->Branch("fNumberOfTracks", &fNumberOfTracks,"fNumberOfTracks/I");
fEventTree->Branch("fCentPercentile", &fCentPercentile,"fCentPercentile/F");
fEventTree->Branch("fVertexX", &fVertexX, "fVertexX/F");
fEventTree->Branch("fVertexY", &fVertexY, "fVertexY/F");
fEventTree->Branch("fVertexZ", &fVertexZ, "fVertexZ/F");
fEventTree->Branch("fTrackPt", fTrackPt, "fTrackPt[fNumberOfTracks]/F");
fEventTree->Branch("fTrackPhi", fTrackPhi, "fTrackPhi[fNumberOfTracks]/F");
fEventTree->Branch("fTrackEta", fTrackEta, "fTrackEta[fNumberOfTracks]/F");
fEventTree->Branch("fTrackCharge", fTrackCharge, "fTrackCharge[fNumberOfTracks]/I");
fEventTree->Branch("fTrackPid", fTrackPid, "fTrackPid[fNumberOfTracks]/I");
fEventTree->Branch("fNumberOfTracksM", &fNumberOfTracksM, "fNumberOfTracksM/I");
fEventTree->Branch("fTrackPtM", fTrackPtM, "fTrackPtM[fNumberOfTracksM]/F");
fEventTree->Branch("fTrackPhiM", fTrackPhiM, "fTrackPhiM[fNumberOfTracksM]/F");
fEventTree->Branch("fTrackEtaM", fTrackEtaM, "fTrackEtaM[fNumberOfTracksM]/F");
fEventTree->Branch("fTrackChargeM", fTrackChargeM, "fTrackChargeM[fNumberOfTracksM]/I");
fEventTree->Branch("fTrackPidM", fTrackPidM, "fTrackPidM[fNumberOfTracksM]/I");
PostData(1, fThnList);
PostData(2, fEventTree);
}
void AliEbyEPidTTaskMC::UserExec( Option_t * ){
fEventCounter->Fill(1);
AliAODEvent* event = dynamic_cast<AliAODEvent*>(InputEvent());
if (!event) {
Printf("ERROR 01: AOD not found ");
return;
}
fEventCounter->Fill(2);
Int_t gCent = -1;
AliAODHeader *aodHeader = dynamic_cast<AliAODHeader*>(event->GetHeader());
if(!aodHeader) AliFatal("Not a standard AOD");
gCent = (Int_t)aodHeader->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data());
if (gCent < 0 || gCent > 100) return;
fEventCounter->Fill(3);
const AliAODVertex *vertex = event->GetPrimaryVertex();
if(!vertex) return;
fEventCounter->Fill(4);
Bool_t vtest = kFALSE;
Double32_t fCov[6];
vertex->GetCovarianceMatrix(fCov);
if(vertex->GetNContributors() > 0) {
if(fCov[5] != 0) {
vtest = kTRUE;
}
}
if(!vtest)return;
fEventCounter->Fill(5);
AliCentrality *centrality = event->GetCentrality();
if (centrality->GetQuality() != 0) return;
fEventCounter->Fill(21);
TClonesArray *arrayMC= 0;
arrayMC = dynamic_cast<TClonesArray*> (event->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
if (!arrayMC) {
Printf("Error: MC particles branch not found!\n");
return;
}
fEventCounter->Fill(22);
AliAODMCHeader *mcHdr=0;
mcHdr=(AliAODMCHeader*)event->GetList()->FindObject(AliAODMCHeader::StdBranchName());
if(!mcHdr) {
Printf("MC header branch not found!\n");
return;
}
fEventCounter->Fill(6);
fRunNumber = event->GetRunNumber();
fFilterBit = fAODtrackCutBit;
fCentPercentile = gCent;
fVertexX = vertex->GetX();
fVertexY = vertex->GetY();
fVertexZ = vertex->GetZ();
if(fHelperPID->GetPIDType()==kBayes)fHelperPID->GetPIDCombined()->SetDefaultTPCPriors();
Int_t iTracks = 0;
for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
AliAODTrack* track = dynamic_cast<AliAODTrack *>(event->GetTrack(itrk));
fEventCounter->Fill(10);
if (!track) continue;
fEventCounter->Fill(11);
if (!AcceptTrack(track)) continue;
fEventCounter->Fill(12);
Int_t a = fHelperPID->GetParticleSpecies((AliVTrack*) track,kTRUE);
fEventCounter->Fill(13);
Int_t b = -999;
if (a == 0 ) b = 1;
else if (a == 1 ) b = 2;
else if (a == 2 ) b = 3;
else b = 4;
if (track->Charge() < 0 ) b = -1*b;
Int_t isph=-999;
if (arrayMC) {
AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel()));
if (!partMC) {
AliError("Cannot get MC particle");
continue;
}
isph=partMC->IsPhysicalPrimary();
}
fTrackPt[iTracks] = (Float_t)track->Pt();
fTrackPhi[iTracks] = (Float_t)track->Phi();
fTrackEta[iTracks] = (Float_t)track->Eta();
fTrackCharge[iTracks] = isph;
fTrackPid[iTracks] = b;
iTracks++;
}
fNumberOfTracks = iTracks;
fEventCounter->Fill(23);
Int_t mTracks = 0;
Int_t nMC = arrayMC->GetEntries();
for (Int_t iMC = 0; iMC < nMC; iMC++) {
AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);
if(!AcceptMCTrack(partMC)) continue;
Int_t b = partMC->GetPdgCode();
Int_t k = -99;
k = partMC->IsPhysicalPrimary();
Int_t a = -999;
if (b == 211 ) a = 1;
else if (b == -211 ) a = -1;
else if (b == 2212 ) a = 3;
else if (b == -2212 ) a = -3;
else if (b == 321 ) a = 2;
else if (b == -321 ) a = -2;
else if (b > 0 ) a = 4;
else if (b < 0 ) a = -4;
fTrackPtM[mTracks] = (Float_t)partMC->Pt();
fTrackPhiM[mTracks] = (Float_t)partMC->Phi();
fTrackEtaM[mTracks] = (Float_t)partMC->Eta();
fTrackChargeM[mTracks] = k;
fTrackPidM[mTracks] = a;
mTracks++;
}
fEventCounter->Fill(26);
fNumberOfTracksM = mTracks;
fEventCounter->Fill(30);
fEventTree->Fill();
if(isMC) fEventCounter->Fill(46);
else fEventCounter->Fill(48);
PostData(1, fThnList);
PostData(2, fEventTree);
}
void AliEbyEPidTTaskMC::Terminate( Option_t * ){
Info("AliEbyEPidTTaskMC"," Task Successfully finished");
}
Bool_t AliEbyEPidTTaskMC::AcceptTrack(AliAODTrack *track) const {
if(!track) return kFALSE;
if (track->Charge() == 0 ) return kFALSE;
if (!track->TestFilterBit(fAODtrackCutBit)) return kFALSE;
if (TMath::Abs(track->Eta()) > 0.8) return kFALSE;
return kTRUE;
}
Bool_t AliEbyEPidTTaskMC::AcceptMCTrack(AliAODMCParticle *track) const {
if(!track) return kFALSE;
if (track->Charge() == 0 ) return kFALSE;
if (TMath::Abs(track->Eta()) > 0.8) return kFALSE;
return kTRUE;
}
AliEbyEPidTTaskMC.cxx:100 AliEbyEPidTTaskMC.cxx:101 AliEbyEPidTTaskMC.cxx:102 AliEbyEPidTTaskMC.cxx:103 AliEbyEPidTTaskMC.cxx:104 AliEbyEPidTTaskMC.cxx:105 AliEbyEPidTTaskMC.cxx:106 AliEbyEPidTTaskMC.cxx:107 AliEbyEPidTTaskMC.cxx:108 AliEbyEPidTTaskMC.cxx:109 AliEbyEPidTTaskMC.cxx:110 AliEbyEPidTTaskMC.cxx:111 AliEbyEPidTTaskMC.cxx:112 AliEbyEPidTTaskMC.cxx:113 AliEbyEPidTTaskMC.cxx:114 AliEbyEPidTTaskMC.cxx:115 AliEbyEPidTTaskMC.cxx:116 AliEbyEPidTTaskMC.cxx:117 AliEbyEPidTTaskMC.cxx:118 AliEbyEPidTTaskMC.cxx:119 AliEbyEPidTTaskMC.cxx:120 AliEbyEPidTTaskMC.cxx:121 AliEbyEPidTTaskMC.cxx:122 AliEbyEPidTTaskMC.cxx:123 AliEbyEPidTTaskMC.cxx:124 AliEbyEPidTTaskMC.cxx:125 AliEbyEPidTTaskMC.cxx:126 AliEbyEPidTTaskMC.cxx:127 AliEbyEPidTTaskMC.cxx:128 AliEbyEPidTTaskMC.cxx:129 AliEbyEPidTTaskMC.cxx:130 AliEbyEPidTTaskMC.cxx:131 AliEbyEPidTTaskMC.cxx:132 AliEbyEPidTTaskMC.cxx:133 AliEbyEPidTTaskMC.cxx:134 AliEbyEPidTTaskMC.cxx:135 AliEbyEPidTTaskMC.cxx:136 AliEbyEPidTTaskMC.cxx:137 AliEbyEPidTTaskMC.cxx:138 AliEbyEPidTTaskMC.cxx:139 AliEbyEPidTTaskMC.cxx:140 AliEbyEPidTTaskMC.cxx:141 AliEbyEPidTTaskMC.cxx:142 AliEbyEPidTTaskMC.cxx:143 AliEbyEPidTTaskMC.cxx:144 AliEbyEPidTTaskMC.cxx:145 AliEbyEPidTTaskMC.cxx:146 AliEbyEPidTTaskMC.cxx:147 AliEbyEPidTTaskMC.cxx:148 AliEbyEPidTTaskMC.cxx:149 AliEbyEPidTTaskMC.cxx:150 AliEbyEPidTTaskMC.cxx:151 AliEbyEPidTTaskMC.cxx:152 AliEbyEPidTTaskMC.cxx:153 AliEbyEPidTTaskMC.cxx:154 AliEbyEPidTTaskMC.cxx:155 AliEbyEPidTTaskMC.cxx:156 AliEbyEPidTTaskMC.cxx:157 AliEbyEPidTTaskMC.cxx:158 AliEbyEPidTTaskMC.cxx:159 AliEbyEPidTTaskMC.cxx:160 AliEbyEPidTTaskMC.cxx:161 AliEbyEPidTTaskMC.cxx:162 AliEbyEPidTTaskMC.cxx:163 AliEbyEPidTTaskMC.cxx:164 AliEbyEPidTTaskMC.cxx:165 AliEbyEPidTTaskMC.cxx:166 AliEbyEPidTTaskMC.cxx:167 AliEbyEPidTTaskMC.cxx:168 AliEbyEPidTTaskMC.cxx:169 AliEbyEPidTTaskMC.cxx:170 AliEbyEPidTTaskMC.cxx:171 AliEbyEPidTTaskMC.cxx:172 AliEbyEPidTTaskMC.cxx:173 AliEbyEPidTTaskMC.cxx:174 AliEbyEPidTTaskMC.cxx:175 AliEbyEPidTTaskMC.cxx:176 AliEbyEPidTTaskMC.cxx:177 AliEbyEPidTTaskMC.cxx:178 AliEbyEPidTTaskMC.cxx:179 AliEbyEPidTTaskMC.cxx:180 AliEbyEPidTTaskMC.cxx:181 AliEbyEPidTTaskMC.cxx:182 AliEbyEPidTTaskMC.cxx:183 AliEbyEPidTTaskMC.cxx:184 AliEbyEPidTTaskMC.cxx:185 AliEbyEPidTTaskMC.cxx:186 AliEbyEPidTTaskMC.cxx:187 AliEbyEPidTTaskMC.cxx:188 AliEbyEPidTTaskMC.cxx:189 AliEbyEPidTTaskMC.cxx:190 AliEbyEPidTTaskMC.cxx:191 AliEbyEPidTTaskMC.cxx:192 AliEbyEPidTTaskMC.cxx:193 AliEbyEPidTTaskMC.cxx:194 AliEbyEPidTTaskMC.cxx:195 AliEbyEPidTTaskMC.cxx:196 AliEbyEPidTTaskMC.cxx:197 AliEbyEPidTTaskMC.cxx:198 AliEbyEPidTTaskMC.cxx:199 AliEbyEPidTTaskMC.cxx:200 AliEbyEPidTTaskMC.cxx:201 AliEbyEPidTTaskMC.cxx:202 AliEbyEPidTTaskMC.cxx:203 AliEbyEPidTTaskMC.cxx:204 AliEbyEPidTTaskMC.cxx:205 AliEbyEPidTTaskMC.cxx:206 AliEbyEPidTTaskMC.cxx:207 AliEbyEPidTTaskMC.cxx:208 AliEbyEPidTTaskMC.cxx:209 AliEbyEPidTTaskMC.cxx:210 AliEbyEPidTTaskMC.cxx:211 AliEbyEPidTTaskMC.cxx:212 AliEbyEPidTTaskMC.cxx:213 AliEbyEPidTTaskMC.cxx:214 AliEbyEPidTTaskMC.cxx:215 AliEbyEPidTTaskMC.cxx:216 AliEbyEPidTTaskMC.cxx:217 AliEbyEPidTTaskMC.cxx:218 AliEbyEPidTTaskMC.cxx:219 AliEbyEPidTTaskMC.cxx:220 AliEbyEPidTTaskMC.cxx:221 AliEbyEPidTTaskMC.cxx:222 AliEbyEPidTTaskMC.cxx:223 AliEbyEPidTTaskMC.cxx:224 AliEbyEPidTTaskMC.cxx:225 AliEbyEPidTTaskMC.cxx:226 AliEbyEPidTTaskMC.cxx:227 AliEbyEPidTTaskMC.cxx:228 AliEbyEPidTTaskMC.cxx:229 AliEbyEPidTTaskMC.cxx:230 AliEbyEPidTTaskMC.cxx:231 AliEbyEPidTTaskMC.cxx:232 AliEbyEPidTTaskMC.cxx:233 AliEbyEPidTTaskMC.cxx:234 AliEbyEPidTTaskMC.cxx:235 AliEbyEPidTTaskMC.cxx:236 AliEbyEPidTTaskMC.cxx:237 AliEbyEPidTTaskMC.cxx:238 AliEbyEPidTTaskMC.cxx:239 AliEbyEPidTTaskMC.cxx:240 AliEbyEPidTTaskMC.cxx:241 AliEbyEPidTTaskMC.cxx:242 AliEbyEPidTTaskMC.cxx:243 AliEbyEPidTTaskMC.cxx:244 AliEbyEPidTTaskMC.cxx:245 AliEbyEPidTTaskMC.cxx:246 AliEbyEPidTTaskMC.cxx:247 AliEbyEPidTTaskMC.cxx:248 AliEbyEPidTTaskMC.cxx:249 AliEbyEPidTTaskMC.cxx:250 AliEbyEPidTTaskMC.cxx:251 AliEbyEPidTTaskMC.cxx:252 AliEbyEPidTTaskMC.cxx:253 AliEbyEPidTTaskMC.cxx:254 AliEbyEPidTTaskMC.cxx:255 AliEbyEPidTTaskMC.cxx:256 AliEbyEPidTTaskMC.cxx:257 AliEbyEPidTTaskMC.cxx:258 AliEbyEPidTTaskMC.cxx:259 AliEbyEPidTTaskMC.cxx:260 AliEbyEPidTTaskMC.cxx:261 AliEbyEPidTTaskMC.cxx:262 AliEbyEPidTTaskMC.cxx:263 AliEbyEPidTTaskMC.cxx:264 AliEbyEPidTTaskMC.cxx:265 AliEbyEPidTTaskMC.cxx:266 AliEbyEPidTTaskMC.cxx:267 AliEbyEPidTTaskMC.cxx:268 AliEbyEPidTTaskMC.cxx:269 AliEbyEPidTTaskMC.cxx:270 AliEbyEPidTTaskMC.cxx:271 AliEbyEPidTTaskMC.cxx:272 AliEbyEPidTTaskMC.cxx:273 AliEbyEPidTTaskMC.cxx:274 AliEbyEPidTTaskMC.cxx:275 AliEbyEPidTTaskMC.cxx:276 AliEbyEPidTTaskMC.cxx:277 AliEbyEPidTTaskMC.cxx:278 AliEbyEPidTTaskMC.cxx:279 AliEbyEPidTTaskMC.cxx:280 AliEbyEPidTTaskMC.cxx:281 AliEbyEPidTTaskMC.cxx:282 AliEbyEPidTTaskMC.cxx:283 AliEbyEPidTTaskMC.cxx:284 AliEbyEPidTTaskMC.cxx:285 AliEbyEPidTTaskMC.cxx:286 AliEbyEPidTTaskMC.cxx:287 AliEbyEPidTTaskMC.cxx:288 AliEbyEPidTTaskMC.cxx:289 AliEbyEPidTTaskMC.cxx:290 AliEbyEPidTTaskMC.cxx:291 AliEbyEPidTTaskMC.cxx:292 AliEbyEPidTTaskMC.cxx:293 AliEbyEPidTTaskMC.cxx:294 AliEbyEPidTTaskMC.cxx:295 AliEbyEPidTTaskMC.cxx:296 AliEbyEPidTTaskMC.cxx:297 AliEbyEPidTTaskMC.cxx:298 AliEbyEPidTTaskMC.cxx:299 AliEbyEPidTTaskMC.cxx:300 AliEbyEPidTTaskMC.cxx:301 AliEbyEPidTTaskMC.cxx:302 AliEbyEPidTTaskMC.cxx:303 AliEbyEPidTTaskMC.cxx:304 AliEbyEPidTTaskMC.cxx:305 AliEbyEPidTTaskMC.cxx:306 AliEbyEPidTTaskMC.cxx:307 AliEbyEPidTTaskMC.cxx:308 AliEbyEPidTTaskMC.cxx:309 AliEbyEPidTTaskMC.cxx:310 AliEbyEPidTTaskMC.cxx:311 AliEbyEPidTTaskMC.cxx:312 AliEbyEPidTTaskMC.cxx:313 AliEbyEPidTTaskMC.cxx:314 AliEbyEPidTTaskMC.cxx:315 AliEbyEPidTTaskMC.cxx:316 AliEbyEPidTTaskMC.cxx:317 AliEbyEPidTTaskMC.cxx:318 AliEbyEPidTTaskMC.cxx:319 AliEbyEPidTTaskMC.cxx:320 AliEbyEPidTTaskMC.cxx:321 AliEbyEPidTTaskMC.cxx:322 AliEbyEPidTTaskMC.cxx:323