#include "AliAnalysisTaskFPexample.h"
#include "TH1D.h"
#include "TH2D.h"
#include "TCanvas.h"
#include "TList.h"
#include "TString.h"
#include "AliAnalysisManager.h"
#include "AliESDtrackCuts.h"
#include "AliESDEvent.h"
#include "AliESDHeader.h"
#include "AliMCEvent.h"
#include "AliMultiplicity.h"
#include "AliTriggerAnalysis.h"
ClassImp(AliAnalysisTaskFPexample)
AliAnalysisTaskFPexample::AliAnalysisTaskFPexample(const char *name) :
AliAnalysisTaskFirstPhysics(name),
fhTrackPt(0),
fh2TrackPhiEta(0),
fhMulITSTPC(0),
fhMulITSSA(0),
fhMulSPD(0),
fh2TrackletsPhiEta(0),
fh2TracksPhiTPCchi2(0)
{
DefineOutput(1, TList::Class());
}
AliAnalysisTaskFPexample::~AliAnalysisTaskFPexample()
{
if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
delete fOutput;
}
for (Int_t i = 0; i < knTrackCuts; i ++) {
delete fTrackCuts[i];
fTrackCuts[i] = 0;
}
}
void AliAnalysisTaskFPexample::UserCreateOutputObjects()
{
PrepareOutputList();
PrepareDefaultTrackCuts();
const Int_t ptbins = 15;
const Double_t ptlow = 0.1, ptup = 3.1;
const Int_t etabins = 40;
const Double_t etalow = -2.0, etaup = 2.0;
const Int_t mulbins = 200;
const Int_t phibins = 120;
fhTrackPt = UserHisto1d("fhTrackPt", "p_{T} distribution for ESD",
"P_{T} (GeV/c)", ptbins, ptlow, ptup);
fh2TrackPhiEta = UserHisto2d("fh2TrackPhiEta", "ESD tracks",
"#Phi", phibins, 0, 2 * TMath::Pi(),
"#eta", etabins, etalow, etaup);
fhMulITSTPC = UserHisto1d("fhMulITSTPC", "N_{CH} distribution for ITS+TPC tracks",
"N_{CH}", mulbins, 0, mulbins);
fhMulITSSA = UserHisto1d("fhMulITSSA", "N_{CH} distribution for ITS SA tracks",
"N_{CH}", mulbins, 0, mulbins);
fhMulSPD = UserHisto1d("fhMulSPD", "N_{CH} distribution for SPD tracklets",
"N_{CH}", mulbins, 0, mulbins);
fh2TrackletsPhiEta = UserHisto2d("fh2TrackletsPhiEta", "Tracklets",
"#Phi", phibins, 0, 2 * TMath::Pi(),
"#eta", etabins, etalow, etaup);
fh2TracksPhiTPCchi2 = UserHisto2d("fh2TracksPhiTPCchi2", "ESD tracks #Phi vs. TPC #chi^{2}",
"#Phi", phibins, 0, 2 * TMath::Pi(),
"#chi^{2}", 500, 0, 500);
PostData(1, fOutput);
}
void AliAnalysisTaskFPexample::UserExec(Option_t *)
{
if (!GetESDEvent()) {
AliError("Unable to read the ESD");
return;
}
if (!CheckVertex()) {
return;
}
const Int_t nESDTracks = fESD->GetNumberOfTracks();
Int_t iHighestID = 0;
for (Int_t iTrack = 0; iTrack < nESDTracks; iTrack++) {
if (fESD->GetTrack(iTrack)->GetLabel() > iHighestID) {
iHighestID = fESD->GetTrack(iTrack)->GetLabel();
}
}
const Int_t nMaxID = iHighestID + 1;
bool aGlobalBits[nMaxID], aPureITSBits[nMaxID];
for (Int_t iFlag = 0; iFlag < nMaxID; iFlag++) {
aGlobalBits[iFlag] = false;
aPureITSBits[iFlag] = false;
}
const int kRejectBit = BIT(15);
const int kSecondaryBit = BIT(16);
Int_t nTracksITSTPC = 0;
Int_t nTracksITSSA = 0;
Int_t nTrackletsSPD = 0;
for(Int_t iTrack = 0; iTrack < nESDTracks; iTrack++){
AliESDtrack* esdTrack = fESD->GetTrack(iTrack);
if (esdTrack->IsOn(AliESDtrack::kMultInV0)) {
esdTrack->SetBit(kSecondaryBit);
continue;
}
AliESDtrack* tpcTrack = AliESDtrackCuts::GetTPCOnlyTrack(fESD, esdTrack->GetID());
if (esdTrack->IsOn(AliESDtrack::kITSin)) {
if (!esdTrack->IsOn(AliESDtrack::kITSpureSA)) {
if (esdTrack->IsOn(AliESDtrack::kTPCin)) {
if (fTrackCuts[kTrackCutQGlo]->AcceptTrack(esdTrack)) {
if (fTrackCuts[kTrackCutDCAwSPD]->AcceptTrack(esdTrack)
|| fTrackCuts[kTrackCutDCAwoSPD]->AcceptTrack(esdTrack)) {
nTracksITSTPC++;
fhTrackPt->Fill(esdTrack->Pt());
fh2TrackPhiEta->Fill(esdTrack->Phi(), esdTrack->Eta());
if (tpcTrack) {
fh2TracksPhiTPCchi2->Fill(esdTrack->Phi(), tpcTrack->GetTPCchi2());
}
} else {
esdTrack->SetBit(kSecondaryBit);
}
} else {
esdTrack->SetBit(kRejectBit);
}
} else if (fTrackCuts[kTrackCutQITS]->AcceptTrack(esdTrack)) {
if (fTrackCuts[kTrackCutDCAwSPD]->AcceptTrack(esdTrack)
|| fTrackCuts[kTrackCutDCAwoSPD]->AcceptTrack(esdTrack)) {
nTracksITSTPC++;
fhTrackPt->Fill(esdTrack->Pt());
fh2TrackPhiEta->Fill(esdTrack->Phi(), esdTrack->Eta());
if (tpcTrack) {
fh2TracksPhiTPCchi2->Fill(esdTrack->Phi(), tpcTrack->GetTPCchi2());
}
} else {
esdTrack->SetBit(kSecondaryBit);
}
} else {
esdTrack->SetBit(kRejectBit);
}
} else {
if (fTrackCuts[kTrackCutQITS]->AcceptTrack(esdTrack)) {
if (fTrackCuts[kTrackCutDCAwSPD]->AcceptTrack(esdTrack)
|| fTrackCuts[kTrackCutDCAwoSPD]->AcceptTrack(esdTrack)) {
nTracksITSSA++;
} else {
esdTrack->SetBit(kRejectBit);
}
} else {
esdTrack->SetBit(kRejectBit);
}
}
}
if (tpcTrack) {
delete tpcTrack;
}
}
const AliMultiplicity* multiplicitySPD = fESD->GetMultiplicity();
Int_t id1, id2, id3, id4;
AliESDtrack *tr1 = 0, *tr3 = 0;
for (Int_t iTracklet = 0; iTracklet < multiplicitySPD->GetNumberOfTracklets(); iTracklet++) {
if (TMath::Abs(multiplicitySPD->GetEta(iTracklet)) > GetCutEta()) {
continue;
}
nTrackletsSPD++;
fh2TrackletsPhiEta->Fill(multiplicitySPD->GetPhi(iTracklet), multiplicitySPD->GetEta(iTracklet));
multiplicitySPD->GetTrackletTrackIDs(iTracklet, 0, id1, id2);
tr1 = id1 >= 0 ? fESD->GetTrack(id1) : 0;
multiplicitySPD->GetTrackletTrackIDs(iTracklet, 1, id3, id4);
tr3 = id3 >= 0 ? fESD->GetTrack(id3) : 0;
if (id1 != id2 || id3 != id4) {
continue;
}
bool bUsedInGlobal = (id1 != -1) ? aGlobalBits[id1] : false;
bool bUsedInPureITS = (id3 != -1) ? aPureITSBits[id3] : false;
if ((tr1 && !tr1->TestBit(kSecondaryBit))
&& (tr1 && tr1->TestBit(kRejectBit))) {
if (!bUsedInGlobal) {
nTracksITSTPC++;
if (id1 > 0) {
aGlobalBits[id1] = true;
}
}
} else if (id1 < 0) {
nTracksITSTPC++;
}
if ((tr3 && tr3->TestBit(kSecondaryBit))
&& (tr3 && !tr3->TestBit(kRejectBit))) {
if (!bUsedInPureITS) {
nTracksITSSA++;
if (id3 > 0) {
aPureITSBits[id3] = true;
}
}
} else if (id3 < 0) {
nTracksITSSA++;
}
}
fhMulITSTPC->Fill(nTracksITSTPC);
fhMulITSSA->Fill(nTracksITSSA);
fhMulSPD->Fill(nTrackletsSPD);
PostData(1, fOutput);
}
void AliAnalysisTaskFPexample::Terminate(Option_t *)
{
fOutput = dynamic_cast<TList*> (GetOutputData(1));
if(!fOutput) {
Printf("ERROR: could not retrieve TList fOutput");
return;
}
if (!(GetHisto1FromOutput("fhTrackPt", fhTrackPt) &&
GetHisto2FromOutput("fh2TrackPhiEta", fh2TrackPhiEta) &&
GetHisto1FromOutput("fhMulITSTPC", fhMulITSTPC) &&
GetHisto1FromOutput("fhMulITSSA", fhMulITSSA) &&
GetHisto1FromOutput("fhMulSPD", fhMulSPD) &&
GetHisto2FromOutput("fh2TrackletsPhiEta", fh2TrackletsPhiEta) &&
GetHisto2FromOutput("fh2TracksPhiTPCchi2", fh2TracksPhiTPCchi2))) {
AliError("Couldn't load every histogram from output.");
return;
}
TCanvas *c = new TCanvas("AliAnalysisTaskFPexample", "Data Quality Quick Overview");
c->Divide(2, 2);
c->cd(1)->SetLogy();
fhTrackPt->DrawCopy("E");
c->cd(2);
fh2TrackPhiEta->DrawCopy("");
c->cd(3)->SetLogy();
fhMulITSTPC->DrawCopy("E");
c->cd(4)->SetLogy();
fhMulITSSA->DrawCopy("");
}
AliAnalysisTaskFPexample.cxx:1 AliAnalysisTaskFPexample.cxx:2 AliAnalysisTaskFPexample.cxx:3 AliAnalysisTaskFPexample.cxx:4 AliAnalysisTaskFPexample.cxx:5 AliAnalysisTaskFPexample.cxx:6 AliAnalysisTaskFPexample.cxx:7 AliAnalysisTaskFPexample.cxx:8 AliAnalysisTaskFPexample.cxx:9 AliAnalysisTaskFPexample.cxx:10 AliAnalysisTaskFPexample.cxx:11 AliAnalysisTaskFPexample.cxx:12 AliAnalysisTaskFPexample.cxx:13 AliAnalysisTaskFPexample.cxx:14 AliAnalysisTaskFPexample.cxx:15 AliAnalysisTaskFPexample.cxx:16 AliAnalysisTaskFPexample.cxx:17 AliAnalysisTaskFPexample.cxx:18 AliAnalysisTaskFPexample.cxx:19 AliAnalysisTaskFPexample.cxx:20 AliAnalysisTaskFPexample.cxx:21 AliAnalysisTaskFPexample.cxx:22 AliAnalysisTaskFPexample.cxx:23 AliAnalysisTaskFPexample.cxx:24 AliAnalysisTaskFPexample.cxx:25 AliAnalysisTaskFPexample.cxx:26 AliAnalysisTaskFPexample.cxx:27 AliAnalysisTaskFPexample.cxx:28 AliAnalysisTaskFPexample.cxx:29 AliAnalysisTaskFPexample.cxx:30 AliAnalysisTaskFPexample.cxx:31 AliAnalysisTaskFPexample.cxx:32 AliAnalysisTaskFPexample.cxx:33 AliAnalysisTaskFPexample.cxx:34 AliAnalysisTaskFPexample.cxx:35 AliAnalysisTaskFPexample.cxx:36 AliAnalysisTaskFPexample.cxx:37 AliAnalysisTaskFPexample.cxx:38 AliAnalysisTaskFPexample.cxx:39 AliAnalysisTaskFPexample.cxx:40 AliAnalysisTaskFPexample.cxx:41 AliAnalysisTaskFPexample.cxx:42 AliAnalysisTaskFPexample.cxx:43 AliAnalysisTaskFPexample.cxx:44 AliAnalysisTaskFPexample.cxx:45 AliAnalysisTaskFPexample.cxx:46 AliAnalysisTaskFPexample.cxx:47 AliAnalysisTaskFPexample.cxx:48 AliAnalysisTaskFPexample.cxx:49 AliAnalysisTaskFPexample.cxx:50 AliAnalysisTaskFPexample.cxx:51 AliAnalysisTaskFPexample.cxx:52 AliAnalysisTaskFPexample.cxx:53 AliAnalysisTaskFPexample.cxx:54 AliAnalysisTaskFPexample.cxx:55 AliAnalysisTaskFPexample.cxx:56 AliAnalysisTaskFPexample.cxx:57 AliAnalysisTaskFPexample.cxx:58 AliAnalysisTaskFPexample.cxx:59 AliAnalysisTaskFPexample.cxx:60 AliAnalysisTaskFPexample.cxx:61 AliAnalysisTaskFPexample.cxx:62 AliAnalysisTaskFPexample.cxx:63 AliAnalysisTaskFPexample.cxx:64 AliAnalysisTaskFPexample.cxx:65 AliAnalysisTaskFPexample.cxx:66 AliAnalysisTaskFPexample.cxx:67 AliAnalysisTaskFPexample.cxx:68 AliAnalysisTaskFPexample.cxx:69 AliAnalysisTaskFPexample.cxx:70 AliAnalysisTaskFPexample.cxx:71 AliAnalysisTaskFPexample.cxx:72 AliAnalysisTaskFPexample.cxx:73 AliAnalysisTaskFPexample.cxx:74 AliAnalysisTaskFPexample.cxx:75 AliAnalysisTaskFPexample.cxx:76 AliAnalysisTaskFPexample.cxx:77 AliAnalysisTaskFPexample.cxx:78 AliAnalysisTaskFPexample.cxx:79 AliAnalysisTaskFPexample.cxx:80 AliAnalysisTaskFPexample.cxx:81 AliAnalysisTaskFPexample.cxx:82 AliAnalysisTaskFPexample.cxx:83 AliAnalysisTaskFPexample.cxx:84 AliAnalysisTaskFPexample.cxx:85 AliAnalysisTaskFPexample.cxx:86 AliAnalysisTaskFPexample.cxx:87 AliAnalysisTaskFPexample.cxx:88 AliAnalysisTaskFPexample.cxx:89 AliAnalysisTaskFPexample.cxx:90 AliAnalysisTaskFPexample.cxx:91 AliAnalysisTaskFPexample.cxx:92 AliAnalysisTaskFPexample.cxx:93 AliAnalysisTaskFPexample.cxx:94 AliAnalysisTaskFPexample.cxx:95 AliAnalysisTaskFPexample.cxx:96 AliAnalysisTaskFPexample.cxx:97 AliAnalysisTaskFPexample.cxx:98 AliAnalysisTaskFPexample.cxx:99 AliAnalysisTaskFPexample.cxx:100 AliAnalysisTaskFPexample.cxx:101 AliAnalysisTaskFPexample.cxx:102 AliAnalysisTaskFPexample.cxx:103 AliAnalysisTaskFPexample.cxx:104 AliAnalysisTaskFPexample.cxx:105 AliAnalysisTaskFPexample.cxx:106 AliAnalysisTaskFPexample.cxx:107 AliAnalysisTaskFPexample.cxx:108 AliAnalysisTaskFPexample.cxx:109 AliAnalysisTaskFPexample.cxx:110 AliAnalysisTaskFPexample.cxx:111 AliAnalysisTaskFPexample.cxx:112 AliAnalysisTaskFPexample.cxx:113 AliAnalysisTaskFPexample.cxx:114 AliAnalysisTaskFPexample.cxx:115 AliAnalysisTaskFPexample.cxx:116 AliAnalysisTaskFPexample.cxx:117 AliAnalysisTaskFPexample.cxx:118 AliAnalysisTaskFPexample.cxx:119 AliAnalysisTaskFPexample.cxx:120 AliAnalysisTaskFPexample.cxx:121 AliAnalysisTaskFPexample.cxx:122 AliAnalysisTaskFPexample.cxx:123 AliAnalysisTaskFPexample.cxx:124 AliAnalysisTaskFPexample.cxx:125 AliAnalysisTaskFPexample.cxx:126 AliAnalysisTaskFPexample.cxx:127 AliAnalysisTaskFPexample.cxx:128 AliAnalysisTaskFPexample.cxx:129 AliAnalysisTaskFPexample.cxx:130 AliAnalysisTaskFPexample.cxx:131 AliAnalysisTaskFPexample.cxx:132 AliAnalysisTaskFPexample.cxx:133 AliAnalysisTaskFPexample.cxx:134 AliAnalysisTaskFPexample.cxx:135 AliAnalysisTaskFPexample.cxx:136 AliAnalysisTaskFPexample.cxx:137 AliAnalysisTaskFPexample.cxx:138 AliAnalysisTaskFPexample.cxx:139 AliAnalysisTaskFPexample.cxx:140 AliAnalysisTaskFPexample.cxx:141 AliAnalysisTaskFPexample.cxx:142 AliAnalysisTaskFPexample.cxx:143 AliAnalysisTaskFPexample.cxx:144 AliAnalysisTaskFPexample.cxx:145 AliAnalysisTaskFPexample.cxx:146 AliAnalysisTaskFPexample.cxx:147 AliAnalysisTaskFPexample.cxx:148 AliAnalysisTaskFPexample.cxx:149 AliAnalysisTaskFPexample.cxx:150 AliAnalysisTaskFPexample.cxx:151 AliAnalysisTaskFPexample.cxx:152 AliAnalysisTaskFPexample.cxx:153 AliAnalysisTaskFPexample.cxx:154 AliAnalysisTaskFPexample.cxx:155 AliAnalysisTaskFPexample.cxx:156 AliAnalysisTaskFPexample.cxx:157 AliAnalysisTaskFPexample.cxx:158 AliAnalysisTaskFPexample.cxx:159 AliAnalysisTaskFPexample.cxx:160 AliAnalysisTaskFPexample.cxx:161 AliAnalysisTaskFPexample.cxx:162 AliAnalysisTaskFPexample.cxx:163 AliAnalysisTaskFPexample.cxx:164 AliAnalysisTaskFPexample.cxx:165 AliAnalysisTaskFPexample.cxx:166 AliAnalysisTaskFPexample.cxx:167 AliAnalysisTaskFPexample.cxx:168 AliAnalysisTaskFPexample.cxx:169 AliAnalysisTaskFPexample.cxx:170 AliAnalysisTaskFPexample.cxx:171 AliAnalysisTaskFPexample.cxx:172 AliAnalysisTaskFPexample.cxx:173 AliAnalysisTaskFPexample.cxx:174 AliAnalysisTaskFPexample.cxx:175 AliAnalysisTaskFPexample.cxx:176 AliAnalysisTaskFPexample.cxx:177 AliAnalysisTaskFPexample.cxx:178 AliAnalysisTaskFPexample.cxx:179 AliAnalysisTaskFPexample.cxx:180 AliAnalysisTaskFPexample.cxx:181 AliAnalysisTaskFPexample.cxx:182 AliAnalysisTaskFPexample.cxx:183 AliAnalysisTaskFPexample.cxx:184 AliAnalysisTaskFPexample.cxx:185 AliAnalysisTaskFPexample.cxx:186 AliAnalysisTaskFPexample.cxx:187 AliAnalysisTaskFPexample.cxx:188 AliAnalysisTaskFPexample.cxx:189 AliAnalysisTaskFPexample.cxx:190 AliAnalysisTaskFPexample.cxx:191 AliAnalysisTaskFPexample.cxx:192 AliAnalysisTaskFPexample.cxx:193 AliAnalysisTaskFPexample.cxx:194 AliAnalysisTaskFPexample.cxx:195 AliAnalysisTaskFPexample.cxx:196 AliAnalysisTaskFPexample.cxx:197 AliAnalysisTaskFPexample.cxx:198 AliAnalysisTaskFPexample.cxx:199 AliAnalysisTaskFPexample.cxx:200 AliAnalysisTaskFPexample.cxx:201 AliAnalysisTaskFPexample.cxx:202 AliAnalysisTaskFPexample.cxx:203 AliAnalysisTaskFPexample.cxx:204 AliAnalysisTaskFPexample.cxx:205 AliAnalysisTaskFPexample.cxx:206 AliAnalysisTaskFPexample.cxx:207 AliAnalysisTaskFPexample.cxx:208 AliAnalysisTaskFPexample.cxx:209 AliAnalysisTaskFPexample.cxx:210 AliAnalysisTaskFPexample.cxx:211 AliAnalysisTaskFPexample.cxx:212 AliAnalysisTaskFPexample.cxx:213 AliAnalysisTaskFPexample.cxx:214 AliAnalysisTaskFPexample.cxx:215 AliAnalysisTaskFPexample.cxx:216 AliAnalysisTaskFPexample.cxx:217 AliAnalysisTaskFPexample.cxx:218 AliAnalysisTaskFPexample.cxx:219 AliAnalysisTaskFPexample.cxx:220 AliAnalysisTaskFPexample.cxx:221 AliAnalysisTaskFPexample.cxx:222 AliAnalysisTaskFPexample.cxx:223 AliAnalysisTaskFPexample.cxx:224 AliAnalysisTaskFPexample.cxx:225 AliAnalysisTaskFPexample.cxx:226 AliAnalysisTaskFPexample.cxx:227 AliAnalysisTaskFPexample.cxx:228 AliAnalysisTaskFPexample.cxx:229 AliAnalysisTaskFPexample.cxx:230 AliAnalysisTaskFPexample.cxx:231 AliAnalysisTaskFPexample.cxx:232 AliAnalysisTaskFPexample.cxx:233 AliAnalysisTaskFPexample.cxx:234 AliAnalysisTaskFPexample.cxx:235 AliAnalysisTaskFPexample.cxx:236 AliAnalysisTaskFPexample.cxx:237 AliAnalysisTaskFPexample.cxx:238 AliAnalysisTaskFPexample.cxx:239 AliAnalysisTaskFPexample.cxx:240 AliAnalysisTaskFPexample.cxx:241 AliAnalysisTaskFPexample.cxx:242 AliAnalysisTaskFPexample.cxx:243 AliAnalysisTaskFPexample.cxx:244 AliAnalysisTaskFPexample.cxx:245 AliAnalysisTaskFPexample.cxx:246 AliAnalysisTaskFPexample.cxx:247 AliAnalysisTaskFPexample.cxx:248 AliAnalysisTaskFPexample.cxx:249 AliAnalysisTaskFPexample.cxx:250 AliAnalysisTaskFPexample.cxx:251 AliAnalysisTaskFPexample.cxx:252 AliAnalysisTaskFPexample.cxx:253 AliAnalysisTaskFPexample.cxx:254 AliAnalysisTaskFPexample.cxx:255 AliAnalysisTaskFPexample.cxx:256 AliAnalysisTaskFPexample.cxx:257 AliAnalysisTaskFPexample.cxx:258 AliAnalysisTaskFPexample.cxx:259 AliAnalysisTaskFPexample.cxx:260 AliAnalysisTaskFPexample.cxx:261 AliAnalysisTaskFPexample.cxx:262 AliAnalysisTaskFPexample.cxx:263 AliAnalysisTaskFPexample.cxx:264 AliAnalysisTaskFPexample.cxx:265 AliAnalysisTaskFPexample.cxx:266 AliAnalysisTaskFPexample.cxx:267 AliAnalysisTaskFPexample.cxx:268 AliAnalysisTaskFPexample.cxx:269 AliAnalysisTaskFPexample.cxx:270 AliAnalysisTaskFPexample.cxx:271 AliAnalysisTaskFPexample.cxx:272 AliAnalysisTaskFPexample.cxx:273 AliAnalysisTaskFPexample.cxx:274 AliAnalysisTaskFPexample.cxx:275 AliAnalysisTaskFPexample.cxx:276 AliAnalysisTaskFPexample.cxx:277 AliAnalysisTaskFPexample.cxx:278 AliAnalysisTaskFPexample.cxx:279 AliAnalysisTaskFPexample.cxx:280