2 Last update: 26/03/2012, vzero branch, in PbPb macro execute the vzero code, a bug was fixed
3 New modifications: 08/10/2014 - more modularity
6 AliAnalysisTaskHighPtDeDx* AddTaskHighPtDeDx(Bool_t AnalysisMC, const Char_t* taskname, Int_t typerun, Float_t minc, Float_t maxc )
8 // Creates a pid task and adds it to the analysis manager
9 UInt_t kTriggerInt[2] = { AliVEvent::kMB, AliVEvent::kCentral + AliVEvent::kSemiCentral };
11 // Get the pointer to the existing analysis manager via the static
13 //=========================================================================
14 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
16 Error("AddTaskHighPtDeDx", "No analysis manager to connect to.");
20 // Check the analysis type using the event handlers connected to the
21 // analysis manager The availability of MC handler can also be
23 // =========================================================================
24 if (!mgr->GetInputEventHandler()) {
25 Error("AddTaskHighPtDeDx", "This task requires an input event handler");
32 // Add track filters, with Golden Cuts
35 AliAnalysisFilter* trackFilterGolden = new AliAnalysisFilter("trackFilter");
36 AliESDtrackCuts* esdTrackCutsGolden =
37 AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
38 trackFilterGolden->AddCuts(esdTrackCutsGolden);
41 AliAnalysisFilter* trackFilterGolden = new AliAnalysisFilter("trackFilter");
42 AliESDtrackCuts* esdTrackCutsGolden = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE,1);
43 esdTrackCutsGolden->SetMinNCrossedRowsTPC(120);
44 esdTrackCutsGolden->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
45 esdTrackCutsGolden->SetMaxChi2PerClusterITS(36);
46 esdTrackCutsGolden->SetMaxFractionSharedTPCClusters(0.4);
47 esdTrackCutsGolden->SetMaxChi2TPCConstrainedGlobal(36);
48 esdTrackCutsGolden->SetMaxDCAToVertexXY(3.0);
51 trackFilterGolden->AddCuts(esdTrackCutsGolden);
55 //old cuts without golden cut
56 AliAnalysisFilter* trackFilter0 = new AliAnalysisFilter("trackFilter");
58 Bool_t selPrimaries=kTRUE;
59 AliESDtrackCuts* esdTrackCutsL0 = new AliESDtrackCuts;
61 if(clusterCut == 0) esdTrackCutsL0->SetMinNClustersTPC(70);
62 else if (clusterCut == 1) {
63 esdTrackCutsL0->SetMinNCrossedRowsTPC(70);
64 esdTrackCutsL0->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
67 AliWarningClass(Form("Wrong value of the clusterCut parameter (%d), using cut on Nclusters",clusterCut));
68 esdTrackCutsL0->SetMinNClustersTPC(70);
70 esdTrackCutsL0->SetMaxChi2PerClusterTPC(4);
71 esdTrackCutsL0->SetAcceptKinkDaughters(kFALSE);
72 esdTrackCutsL0->SetRequireTPCRefit(kTRUE);
74 esdTrackCutsL0->SetRequireITSRefit(kTRUE);
75 esdTrackCutsL0->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
76 AliESDtrackCuts::kAny);
78 // 7*(0.0026+0.0050/pt^1.01)
79 esdTrackCutsL0->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
81 esdTrackCutsL0->SetMaxDCAToVertexZ(2);
82 esdTrackCutsL0->SetDCAToVertex2D(kFALSE);
83 esdTrackCutsL0->SetRequireSigmaToVertex(kFALSE);
84 esdTrackCutsL0->SetMaxChi2PerClusterITS(1e10);
85 esdTrackCutsL0->SetMaxChi2TPCConstrainedGlobal(1e10);
88 trackFilter0->AddCuts(esdTrackCutsL0);
92 AliAnalysisFilter* trackFilterTPC = new AliAnalysisFilter("trackFilterTPC");
93 AliESDtrackCuts* esdTrackCutsTPC =
94 AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
95 trackFilterTPC->AddCuts(esdTrackCutsTPC);
97 // Create the task and configure it
98 //========================================================================
99 if(typerun==2){//heavy ion analysis
101 AliAnalysisTaskHighPtDeDx* taskHighPtDeDx;
103 Char_t TaskName[256]={0};
104 sprintf(TaskName,"%s_%1.0f_%1.0f",taskname,minc,maxc);
106 taskHighPtDeDx = new AliAnalysisTaskHighPtDeDx(TaskName);
107 TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
108 taskHighPtDeDx->SetAnalysisType(type);
109 taskHighPtDeDx->SetAnalysisMC(AnalysisMC);
110 taskHighPtDeDx->SetAnalysisPbPb(kTRUE);
111 taskHighPtDeDx->SetProduceVZEROBranch(kTRUE);
112 taskHighPtDeDx->SetProduceTPCBranch(kFALSE);
113 taskHighPtDeDx->SetDebugLevel(0);
114 taskHighPtDeDx->SetEtaCut(0.8);
115 taskHighPtDeDx->SetVtxCut(10.0);
116 taskHighPtDeDx->SetMinPt(0.0); // default 2.0
117 taskHighPtDeDx->SetLowPtFraction(0.01); // keep 1% of tracks below min pt
118 taskHighPtDeDx->SetTreeOption(1);
119 taskHighPtDeDx->SetTrigger1(kTriggerInt[0]);
120 taskHighPtDeDx->SetTrigger2(kTriggerInt[1]);
121 taskHighPtDeDx->SetMinCent(minc);
122 taskHighPtDeDx->SetMaxCent(maxc);
124 taskHighPtDeDx->SetTrackFilterGolden(trackFilterGolden);
125 taskHighPtDeDx->SetTrackFilter(trackFilter0);
126 taskHighPtDeDx->SetTrackFilterTPC(trackFilterTPC);
129 taskHighPtDeDx->SetMassCut(0.1); // def: 0.03
130 taskHighPtDeDx->SetRequireRecV0(kTRUE); // def: kTRUE
131 taskHighPtDeDx->SetStoreMcIn(kTRUE); // def: kFALSE
133 mgr->AddTask(taskHighPtDeDx);
135 // Create ONLY the output containers for the data produced by the
136 // task. Get and connect other common input/output containers via
137 // the manager as below
138 //=======================================================================
139 AliAnalysisDataContainer *cout_hist;
142 TString outputFileName = AliAnalysisManager::GetCommonFileName();
144 //Arrangements for subdirectories (not implemented yet)
145 //outputFileName += ":PWGLF_StrVsMult";
146 //if (mgr->GetMCtruthEventHandler()) outputFileName += "_MC";
148 cout_hist = mgr->CreateContainer(Form("output_%1.0f_%1.0f",minc,maxc), TList::Class(), AliAnalysisManager::kOutputContainer, outputFileName);
149 mgr->ConnectInput (taskHighPtDeDx, 0, mgr->GetCommonInputContainer());
150 mgr->ConnectOutput(taskHighPtDeDx, 1, cout_hist);
152 // Return task pointer at the end
153 return taskHighPtDeDx;