12 #include <AliAnalysisTaskSE.h> 13 #include <AliESDtrackCuts.h> 178 #include <AliAnalysisManager.h> 179 #include <AliESDEvent.h> 180 #include <AliAODHandler.h> 181 #include <AliAODEvent.h> 182 #include <AliESDInputHandler.h> 183 #include <AliESDtrack.h> 184 #include <AliMultiplicity.h> 218 fHist =
new TH2D(
"Central",
"d^{2}N_{ch}/d#etad#phi in central region",
219 nBins, -maxEta, maxEta, 20, 0, 2*TMath::Pi());
220 fHist->SetDirectory(0);
221 fHist->SetXTitle(
"#eta");
222 fHist->SetYTitle(
"#phi [radians]");
223 fHist->SetZTitle(
"d^{2}N_{ch}/d#etad#phi");
227 fAll =
new TH1D(
"all",
"Central region", nBins, -maxEta, maxEta);
228 fAll->SetDirectory(0);
229 fAll->SetXTitle(
"#eta");
230 fAll->SetYTitle(
"dN_{ch}/d#eta");
232 fAll->SetFillColor(kGray);
233 fAll->SetFillStyle(3001);
234 fAll->SetMarkerStyle(28);
235 fAll->SetMarkerColor(kGray);
239 fGlobal->SetTitle(
"Global tracks");
245 fGlobal->SetMarkerColor(kRed+1);
249 fITS->SetTitle(
"ITS tracks");
250 fITS->SetDirectory(0);
252 fITS->SetFillColor(kGreen+1);
253 fITS->SetFillStyle(3001);
254 fITS->SetMarkerStyle(28);
255 fITS->SetMarkerColor(kGreen+1);
269 "Events per vertex bin", 10, -maxVtx, maxVtx);
275 "Events per vertex bin", 10, -maxVtx, maxVtx);
282 fQGlo.SetMinNClustersTPC(70);
283 fQGlo.SetMaxChi2PerClusterTPC(4);
284 fQGlo.SetAcceptKinkDaughters(kFALSE);
285 fQGlo.SetRequireTPCRefit(kTRUE);
287 fQGlo.SetRequireITSRefit(kTRUE);
288 fQGlo.SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);
289 fQGlo.SetEtaRange(-maxEta, maxEta);
292 fQITS.SetRequireITSRefit(kTRUE);
293 fQITS.SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);
294 fQITS.SetEtaRange(-maxEta, maxEta);
297 fDCAwSPD.SetClusterRequirementITS(AliESDtrackCuts::kSPD,
298 AliESDtrackCuts::kAny);
299 fDCAwSPD.SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
301 fDCAwSPD.SetEtaRange(-maxEta, maxEta);
304 fDCAwoSPD.SetClusterRequirementITS(AliESDtrackCuts::kSPD,
305 AliESDtrackCuts::kNone);
306 fDCAwoSPD.SetMaxDCAToVertexXYPtDep(
"1.5*(0.0182+0.0350/pt^1.01)");
318 fIsPrimary.SetClusterRequirementITS(AliESDtrackCuts::kSPD,
319 AliESDtrackCuts::kAny);
321 fIsPrimary.SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
327 DefineOutput(1, TList::Class());
360 dynamic_cast<AliAODHandler*
>(am->GetOutputEventHandler());
361 if (!ah) AliFatal(
"No AOD output handler set in analysis manager");
363 ah->AddBranch(
"TH2D", &
fHist);
379 AliWarning(
"No analysis manager defined!");
384 AliInputEventHandler* ih =
385 static_cast<AliInputEventHandler*
>(am->GetInputEventHandler());
387 AliWarning(
"No input handler");
392 UInt_t mask = ih->IsEventSelected();
393 Bool_t isMinBias = (mask == AliVEvent::kMB) ? 1 : 0;
398 if (!(esd.GetPrimaryVertex()->GetStatus())) {
400 AliWarning(
"Primary vertex has bad status");
403 if (!(esd.GetPrimaryVertexSPD()->GetStatus())) {
405 AliWarning(
"Primary SPD vertex has bad status");
410 if (esd.GetPrimaryVertex()->IsFromVertexerZ()) {
411 if (esd.GetPrimaryVertex()->GetDispersion() > 0.02 ||
412 esd.GetPrimaryVertex()->GetZRes() > 0.25) {
414 AliWarning(Form(
"Primary vertex dispersion=%f (0.02) zres=%f (0.05)",
415 esd.GetPrimaryVertex()->GetDispersion(),
416 esd.GetPrimaryVertex()->GetZRes()));
421 vz = esd.GetPrimaryVertex()->GetZ();
424 if (vz < vl || vz > vh) {
426 AliWarning(Form(
"Primary vertex vz=%f out of range [%f,%f]", vz, vl, vh));
441 AliError(
"Cannot get the ESD event");
463 const int kRejBit = BIT(15);
465 const int kSecBit = BIT(16);
468 Int_t nESDTracks = esd->GetNumberOfTracks();
470 for(
Int_t i = 0; i < nESDTracks; i++){
472 AliESDtrack* track = esd->GetTrack(i);
475 if (track->IsOn(AliESDtrack::kMultInV0)) {
476 track->SetBit(kSecBit);
483 if (track->IsOn(AliESDtrack::kITSin)) {
486 if (track->IsOn(AliESDtrack::kITSpureSA)) {
487 track->SetBit(kRejBit);
494 track->SetBit(kSecBit);
499 if (!track->IsOn(AliESDtrack::kTPCin)) {
500 if (
fQITS.AcceptTrack(track)) {
505 track->SetBit(kRejBit);
508 if (
fQGlo.AcceptTrack(track)) {
513 track->SetBit(kRejBit);
515 if (track->IsOn(kSecBit) || track->IsOn(kRejBit))
continue;
518 fHist->Fill(eta, phi);
523 const AliMultiplicity* spdmult = esd->GetMultiplicity();
524 for (
Int_t i=0; i<spdmult->GetNumberOfTracklets(); ++i){
528 spdmult->GetTrackletTrackIDs(i,0,id1,id2);
529 AliESDtrack* tr1 = id1>=0 ? esd->GetTrack(id1) : 0;
530 AliESDtrack* tr2 = id2>=0 ? esd->GetTrack(id2) : 0;
532 if ((tr1 && tr1->TestBit(kSecBit)) ||
533 (tr2 && tr2->TestBit(kSecBit)) ||
534 (tr1 && !tr1->TestBit(kRejBit)) ||
535 (tr2 && !tr2->TestBit(kRejBit)))
543 fHist->Fill(eta, phi);
549 if (
fDebug) AliInfo(Form(
"A total of %d tracks", total));
566 AliError(
"Could not retrieve TList fOutput");
573 TH1D* tracklets =
static_cast<TH1D*
>(
fOutput->FindObject(
"tracklets"));
575 TH1D* eventsVtx =
static_cast<TH1D*
>(
fOutput->FindObject(
"nEventsVtx"));
577 Int_t nTriggers = eventsTr->GetEntries();
578 Int_t nVertex = eventsVtx->GetEntries();
579 if (nTriggers <= 0 || nVertex <= 0) {
580 AliWarning(
"No data in the events histogram!");
584 all ->Scale(1. / nTriggers,
"width");
585 global ->Scale(1. / nTriggers,
"width");
586 its ->Scale(1. / nTriggers,
"width");
587 tracklets->Scale(1. / nTriggers,
"width");
589 THStack*
stack =
new THStack(
"components",
"Components");
619 AliAnalysisDataContainer *output =
620 mgr->CreateContainer(
"Central", TList::Class(),
621 AliAnalysisManager::kOutputContainer,
622 AliAnalysisManager::GetCommonFileName());
625 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
626 mgr->ConnectOutput(task, 1, output);
virtual void Terminate(Option_t *option)
virtual ~CentralMultTask()
virtual void UserExec(Option_t *option)
AliESDtrackCuts fDCAwoSPD
AliESDtrackCuts fIsPrimary
UShort_t CheckEvent(const AliESDEvent &esd, Double_t &vz)
void SetUseTracklets(Bool_t use)
virtual void UserCreateOutputObjects()
AliAnalysisTask * AddTaskCentralTracks()