]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/SPECTRA/IdentifiedHighPt/train/macros/AddTaskHighPtDeDx.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / IdentifiedHighPt / train / macros / AddTaskHighPtDeDx.C
1 /*
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 
4 */
5
6 AliAnalysisTaskHighPtDeDx* AddTaskHighPtDeDx(Bool_t AnalysisMC, const Char_t* taskname, Int_t typerun, Float_t minc, Float_t maxc )
7 {
8   // Creates a pid task and adds it to the analysis manager
9   UInt_t kTriggerInt[2] = { AliVEvent::kMB, AliVEvent::kCentral + AliVEvent::kSemiCentral };
10     
11   // Get the pointer to the existing analysis manager via the static
12   //access method
13   //=========================================================================
14   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
15   if (!mgr) {
16     Error("AddTaskHighPtDeDx", "No analysis manager to connect to.");
17     return NULL;
18   }  
19   
20   // Check the analysis type using the event handlers connected to the
21   // analysis manager The availability of MC handler can also be
22   // checked here.
23   // =========================================================================
24   if (!mgr->GetInputEventHandler()) {
25     Error("AddTaskHighPtDeDx", "This task requires an input event handler");
26     return NULL;
27   }  
28   
29
30
31   //
32   // Add track filters, with Golden Cuts
33   //
34   /*
35   AliAnalysisFilter* trackFilterGolden = new AliAnalysisFilter("trackFilter");
36   AliESDtrackCuts* esdTrackCutsGolden = 
37     AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
38   trackFilterGolden->AddCuts(esdTrackCutsGolden);
39   */
40
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);
49
50
51   trackFilterGolden->AddCuts(esdTrackCutsGolden);
52
53
54   
55   //old cuts without golden cut
56   AliAnalysisFilter* trackFilter0 = new AliAnalysisFilter("trackFilter");
57   Bool_t clusterCut=0;
58   Bool_t selPrimaries=kTRUE;
59   AliESDtrackCuts* esdTrackCutsL0 = new AliESDtrackCuts;
60  // TPC  
61   if(clusterCut == 0)  esdTrackCutsL0->SetMinNClustersTPC(70);
62   else if (clusterCut == 1) {
63     esdTrackCutsL0->SetMinNCrossedRowsTPC(70);
64     esdTrackCutsL0->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
65   }
66   else {
67     AliWarningClass(Form("Wrong value of the clusterCut parameter (%d), using cut on Nclusters",clusterCut));
68     esdTrackCutsL0->SetMinNClustersTPC(70);
69   }
70   esdTrackCutsL0->SetMaxChi2PerClusterTPC(4);
71   esdTrackCutsL0->SetAcceptKinkDaughters(kFALSE);
72   esdTrackCutsL0->SetRequireTPCRefit(kTRUE);
73   // ITS
74   esdTrackCutsL0->SetRequireITSRefit(kTRUE);
75   esdTrackCutsL0->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
76                                          AliESDtrackCuts::kAny);
77   if(selPrimaries) {
78     // 7*(0.0026+0.0050/pt^1.01)
79     esdTrackCutsL0->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
80   }
81   esdTrackCutsL0->SetMaxDCAToVertexZ(2);
82   esdTrackCutsL0->SetDCAToVertex2D(kFALSE);
83   esdTrackCutsL0->SetRequireSigmaToVertex(kFALSE);
84   esdTrackCutsL0->SetMaxChi2PerClusterITS(1e10);
85   esdTrackCutsL0->SetMaxChi2TPCConstrainedGlobal(1e10);
86
87
88   trackFilter0->AddCuts(esdTrackCutsL0);
89
90   
91   
92   AliAnalysisFilter* trackFilterTPC = new AliAnalysisFilter("trackFilterTPC");
93   AliESDtrackCuts* esdTrackCutsTPC = 
94   AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
95   trackFilterTPC->AddCuts(esdTrackCutsTPC);
96
97   // Create the task and configure it 
98   //========================================================================
99   if(typerun==2){//heavy ion analysis
100         
101     AliAnalysisTaskHighPtDeDx* taskHighPtDeDx;
102     taskHighPtDeDx=0;
103     Char_t TaskName[256]={0};
104     sprintf(TaskName,"%s_%1.0f_%1.0f",taskname,minc,maxc);
105      
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);
123     //Set Filtesr
124     taskHighPtDeDx->SetTrackFilterGolden(trackFilterGolden);
125     taskHighPtDeDx->SetTrackFilter(trackFilter0);
126     taskHighPtDeDx->SetTrackFilterTPC(trackFilterTPC);
127      
128     //V0's cuts
129     taskHighPtDeDx->SetMassCut(0.1);         // def: 0.03
130     taskHighPtDeDx->SetRequireRecV0(kTRUE); // def: kTRUE
131     taskHighPtDeDx->SetStoreMcIn(kTRUE);     // def: kFALSE
132
133     mgr->AddTask(taskHighPtDeDx);
134     
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;
140     cout_hist=0;
141     
142     TString outputFileName = AliAnalysisManager::GetCommonFileName();
143     
144     //Arrangements for subdirectories (not implemented yet) 
145     //outputFileName += ":PWGLF_StrVsMult";
146     //if (mgr->GetMCtruthEventHandler()) outputFileName += "_MC";
147      
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);
151     
152     // Return task pointer at the end
153     return taskHighPtDeDx;
154   }
155 }