From Chiara
[u/mrichter/AliRoot.git] / PWGJE / FlavourJetTasks / macros / AddTasksFlavourJet.C
1 void AddTasksFlavourJet(const Int_t iCandType = 1 /*0 = D0, 1=Dstar...*/,
2    const TString sCutFile = "cutsHF/D0toKpiCutsppRecVtxNoPileupRejNoEMCAL.root",
3    const Double_t dJetPtCut   = 1.,
4    const Double_t dJetAreaCut = 0.,
5    const char *acctype = "TPC",
6    const TString sRunPeriod = "LHC10b",
7    const Int_t    uBeamType = 0,
8    const UInt_t uTriggerMask = AliVEvent::kMB, /*for jets; the D mesons trigger is defined in the cut object*/
9    const Bool_t bIsMC = kFALSE,
10    const Bool_t bIsReco = kFALSE,
11    const Bool_t bIsMap = kFALSE,
12    TString sText=""/*completes the name of the candidate task lists*/
13    )
14 {
15    const TString sInputTrkMC  = "MCParticlesSelected";
16    const TString sInputTrkRec  = "tracks";
17    const TString sUsedTrks  = "PicoTracks";
18    const TString sUsedClus  = "";
19    TString sInputTrk = bIsReco ? sInputTrkRec : sInputTrkMC;
20    const Int_t iJetAlgo = 1;
21    const Int_t iJetType = 1;
22    /*
23    const Int_t    nRadius = 3;
24    const Double_t aRadius[] = {  0.2,   0.4,   0.6  };
25    const TString  sRadius[] = { "R02", "R04", "R06" };
26    */
27    const Int_t    nRadius = 1;
28    const Double_t aRadius[] = {  0.4  };
29    const TString  sRadius[] = { "R04" };
30    
31    //=============================================================================
32    
33    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
34    
35    if (!mgr) {
36       ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "No analysis manager to connect to.");
37       return;
38    }
39    
40    TString type = mgr->GetInputEventHandler()->GetDataType();
41    if (!type.Contains("ESD") && !type.Contains("AOD")) {
42       ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "Task manager to have an ESD or AOD input handler.");
43       return;
44    }
45    
46    if (!mgr->GetInputEventHandler()) {
47       ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "This task requires an input event handler");
48       return;
49    }
50    //=============================================================================
51    
52    UInt_t uAnaType = (((iJetType==0) ||     (iJetType==2)) ? 1 : 0);
53    Int_t  iLeading =  ((iJetType==0) ? 3 : ((iJetType==1)  ? 0 : 1));
54    Int_t leadHadType=0; /* 0=charged, 1=neutral, 2=both*/
55    //D mesons -- PID
56    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
57    AliAnalysisTaskSE *taskRespPID = AddTaskPIDResponse(bIsMC);
58    
59    // -- D meson selection
60   
61    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/FlavourJetTasks/macros/AddTaskSEDmesonsFilterCJ.C");
62    AliAnalysisTaskSEDmesonsFilterCJ *taskDmesonsFilter = AddTaskSEDmesonsFilterCJ(iCandType,sCutFile,bIsMC,bIsReco,sText);
63    if(bIsMap) {
64       AliAnalysisTaskSEDmesonsFilterCJ *taskMCDmesonsFilter = AddTaskSEDmesonsFilterCJ(iCandType,sCutFile,bIsMC,kFALSE,sText);
65    }
66    // EMCal framework
67    // -- Physics selection task
68    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPhysicsSelection.C");
69    AliPhysicsSelectionTask *physSelTask = AddTaskEmcalPhysicsSelection(kTRUE, kTRUE, uTriggerMask, 5, 5, 10, kTRUE, -1, -1, -1, -1);
70    
71    if (!physSelTask) {
72       cout << "no physSelTask"; 
73       return; 
74    }
75    
76    // -- 
77    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalSetup.C");
78    AliEmcalSetupTask *taskSetupEMCal = AddTaskEmcalSetup();
79    taskSetupEMCal->SetGeoPath("$ALICE_ROOT/OADB/EMCAL");
80    taskSetupEMCal->SelectCollisionCandidates(uTriggerMask);
81    
82    // Jet preparation
83    //gROOT->LoadMacro("/data/Work/jets/testEMCalJetFramework/code/v4/AddTaskJetPreparation.C");
84    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskJetPreparation.C");
85    AddTaskJetPreparation(type,sRunPeriod,"PicoTracks",bIsMC ? "MCParticlesSelected" : "",/*next 7 emcal default settings*/"","",2.,0.,0.03,0.015,0.15,uTriggerMask, kFALSE /*track cluster*/,kFALSE /*do histos*/,kTRUE /*make pico tracks*/,kFALSE /*make emcal trigger*/,kFALSE /*is emcal train*/);
86    
87    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPicoTrackMaker.C");
88    AliEmcalPicoTrackMaker *taskPicoTrack = AddTaskEmcalPicoTrackMaker(sUsedTrks.Data(),sInputTrk.Data(),sRunPeriod.Data());
89    taskPicoTrack->SelectCollisionCandidates(uTriggerMask);
90    
91    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
92    //gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJetSample.C");
93    
94    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/FlavourJetTasks/macros/AddTaskFlavourJetCorrelations.C");
95    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskJetResponseMaker.C");
96    
97    for (Int_t i=0; i<nRadius; i++) {
98       //jet reconstruction for correlation
99       //AliEmcalJetTask *taskFJ = AddTaskEmcalJet(bIsMC&&!bIsReco ? sInputTrkMC.Data() : sUsedTrks.Data(),sUsedClus.Data(),iJetAlgo,aRadius[i],iJetType);
100       //I think like follows it's fine: sUsedTrks contains the picotracks of MC or reco tracks according to IsReco
101       AliEmcalJetTask *taskFJ = AddTaskEmcalJet(sUsedTrks.Data(),sUsedClus.Data(),iJetAlgo,aRadius[i],iJetType);
102       
103       taskFJ->SelectCollisionCandidates(uTriggerMask);
104       
105             
106      // AliAnalysisTaskEmcalJetSample *taskjetsample=AddTaskEmcalJetSample(sUsedTrks.Data(),"",taskFJ->GetName(),
107         // "Rho",aRadius[i],dJetPtCut,dJetAreaCut,AliAnalysisTaskEmcalJet::kTPC,iLeading,
108         // "AliAnalysisTaskEmcalJetSample");
109       //taskjetsample->SelectCollisionCandidates(uTriggerMask);
110       
111       //correlation with D meson
112       
113       AliAnalysisTaskFlavourJetCorrelations *taskDmesonCJ = AddTaskFlavourJetCorrelations(
114          iCandType,
115          sCutFile,
116          bIsMC,
117          bIsReco,
118          taskFJ->GetName(),
119          Form("JetR%s",sRadius[i].Data()),
120          iLeading,
121          leadHadType,
122          aRadius[i],
123          dJetPtCut,
124          acctype
125         /*percjetareacut=1.*/);
126       
127       taskDmesonCJ->SetName(Form("AliAnalysisTaskSEEmcalJetDmesonsCJ_%s",sRadius[i].Data()));
128       taskDmesonCJ->SetForceBeamType(uBeamType);
129       taskDmesonCJ->SetAnaType(uAnaType);
130       taskDmesonCJ->SetLeadingHadronType(iLeading);
131       
132       AliEmcalJetTask *taskMCJ;
133       //jet reconstruction for correction map
134       if(bIsMap){ 
135          taskMCJ = AddTaskEmcalJet(sInputTrkMC.Data(),sUsedClus.Data(),iJetAlgo,aRadius[i],
136             iJetType);
137          
138          AliAnalysisTaskFlavourJetCorrelations *taskMCDmesonCJ = AddTaskFlavourJetCorrelations(
139             iCandType,
140             sCutFile,
141             kTRUE,
142             kFALSE,
143             taskMCJ->GetName(),
144             Form("JetR%s",sRadius[i].Data()),
145             iLeading,
146             leadHadType,
147             aRadius[i],
148             dJetPtCut,
149             acctype
150             /*percjetareacut=1.*/);
151          
152          taskMCDmesonCJ->SetName(Form("AliAnalysisTaskSEEmcalJetMCDmesonsCJ_%s",sRadius[i].Data()));
153          taskMCDmesonCJ->SetForceBeamType(uBeamType);
154          taskMCDmesonCJ->SetAnaType(uAnaType);
155          taskMCDmesonCJ->SetLeadingHadronType(iLeading);
156          //  taskDmesonCJ->SelectCollisionCandidates(uTriggerMask);
157          
158          // definition of correction map
159          Int_t tag=0;
160          if(iCandType == 0) tag=AliEmcalJet::kD0;
161          if(iCandType == 1) tag=AliEmcalJet::kDStar;
162          Printf("************** tag = %d", tag&0x1);
163          AliJetResponseMaker* taskResp=AddTaskJetResponseMaker(
164             sUsedTrks.Data(),sUsedClus.Data(),taskFJ->GetName(),"",aRadius[i],
165             sInputTrkMC.Data(),"",taskMCJ->GetName(),"",aRadius[i],dJetPtCut,dJetAreaCut,5,0,AliJetResponseMaker::kGeometrical, 0.25,0.25,"TPC",-999,-999,-999,"AliJetResponseMaker", kFALSE, 0, -10,10, tag );
166          taskResp->SetMinJetMCPt(0); //added to bypass a return not needed (feature of PrepareJetTask)
167          //taskResp->SetHistoType(1);
168          
169       }
170    }
171    
172    return;
173 }