]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/muon/AddTaskCFMuonSingle.C
Minor fix for software triggers.
[u/mrichter/AliRoot.git] / PWG3 / muon / AddTaskCFMuonSingle.C
1 AliCFMuonSingleTask1* AddTaskSingleMuonCF(Bool_t isMC=kTRUE)
2 {
3   //
4   // just a template of the AddTask macros
5   // suppose we apply the cuts for same variables
6   //
7
8   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
9   if (!mgr) {
10     ::Error("AddTaskMuonHFCorrAna", "No analysis manager to connect to.");
11     return;
12   }
13   TString type = mgr->GetInputEventHandler()->GetDataType();
14   if (!type.Contains("ESD") && !type.Contains("AOD")) {
15     ::Error("AddTaskMuonHFCorrAna", "MuonsHF task needs the manager to have an ESD or AOD input handler.");
16     return;
17   }
18   if (type.Contains("ESD") && isMC && !mgr->GetMCtruthEventHandler()) {
19     AliMCEventHandler *mcHandler = new AliMCEventHandler();
20     mcHandler->SetReadTR(kTRUE);
21     mgr->SetMCtruthEventHandler(mcHandler);
22   }
23
24   enum             { kEta,  kY, kPhi, kPt, kP3, kHit, kChi2Fit, kTrM, kChi2TrM,  kContrN,  kVt,  kVz, kTrig, kDCA, kZcoor, kRabs, kCharge, kNVars };
25   Int_t  nBins[] = {   5 , 5  ,  45 , 60 ,150 ,  20 ,      20 ,  4  ,      20 ,     202 , 100 ,  100 ,  10 , 500 ,   1000,  100 ,   3             };
26   Double_t min[] = {  -4.,-4. ,-180.,  0.,  0.,   0.,       0., -0.5,       0.,     -2.5,   0., -100.,   0.,   0., -3000.,    0.,  -1.5           };
27   Double_t max[] = {-2.5.,-2.5, 180., 30.,150.,  20.,      20.,  3.5,      10.,    199.5, 200.,  100.,  10., 500.,  1000.,  100.,   1.5           };
28
29   Double_t *binLimits = 0;
30   Int_t nSteps=1; if (isMC) nSteps=2;
31   AliCFContainer* contCF = new AliCFContainer("container", "", nSteps, kNVars, nBins);
32   for (Int_t var=kNVars; var--;) {
33     binLimits = new Double_t[nBins[var]+1];
34     for (Int_t i=0; i<=nBins[var]; i++) binLimits[i]=min[var]+i*(max[var]-min[var])/nBins[var];
35     contCF->SetBinLimits(var, binLimits);
36     delete [] binLimits; binLimits=0;
37   }
38
39   TList *qaList = new TList();
40   TObjArray *genList = new TObjArray(0);
41   AliCFTrackKineCuts *genKineCuts = new AliCFTrackKineCuts("genKineCuts", "GenKineCuts");
42   genKineCuts->SetPtRange(min[kPt], max[kPt]);
43   genKineCuts->SetRapidityRange(min[kY], max[kY]);
44   genKineCuts->SetQAOn(qaList);
45   genList->AddLast(genKineCuts);
46
47   TObjArray *recList = new TObjArray(0);
48   AliCFTrackKineCuts *recKineCuts = new AliCFTrackKineCuts("recKineCuts", "RecKineCuts");
49   recKineCuts->SetPtRange(min[kPt], max[kPt]);
50   recKineCuts->SetRapidityRange(min[kY], max[kY]);
51   recKineCuts->SetQAOn(qaList);
52   recList->AddLast(recKineCuts);
53
54   AliCFManager* managerCF = new AliCFManager() ;
55   managerCF->SetParticleContainer(contCF);
56   managerCF->SetParticleCutsList(AliCFManager::kPartGenCuts, genList);
57   managerCF->SetParticleCutsList(AliCFManager::kPartAccCuts, recList);
58
59   AliCFMuonSingleTask1 *taskMuonCF = new AliCFMuonSingleTask1("AliMuonSingleTask1");
60   taskMuonCF->SetCFManager(managerCF);
61   taskMuonCF->SetQAList(qaList);
62   taskMuonCF->SetUseMC(isMC);
63   mgr->AddTask(taskMuonCF);
64
65   mgr->ConnectInput(taskMuonCF, 0, mgr->GetCommonInputContainer());
66
67   char *fileName = "muonCF.root";
68   mgr->ConnectOutput(taskMuonCF,1,mgr->CreateContainer("chist",TH1I::Class(),AliAnalysisManager::kOutputContainer,fileName));
69   mgr->ConnectOutput(taskMuonCF,2,mgr->CreateContainer("ccont",AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,fileName));
70
71   return taskMuonCF;
72 }