ROOT logo
enum AlgoType {kKT, kANTIKT};
enum JetType  {kFULLJETS, kCHARGEDJETS, kNEUTRALJETS};

AliAnalysisTaskEmcalJetTriggerQA* AddTaskEmcalJetTriggerQA(TString     kTracksName         = "PicoTracks", 
							   TString     kClusName           = "caloClustersCorr",
							   Double_t    R                   = 0.4, 
							   Double_t    ptminTrack          = 0.15, 
							   Double_t    etminClus           = 0.3, 
							   Int_t       rhoType             = 0,
							   TString     trigClass           = "",
							   TString     kEmcalCellsName     = "",
							   const char *CentEst             = "V0A",
							   Int_t       pSel                = AliVEvent::kINT7,
							   Float_t     nefCut              = 10.,
							   TString     kEmcalTriggers      = "",
							   TString     kPeriod             = "LHC13b",
                                                           TString     kBeamType           = "pp" //or pPb or PbPb
							   ) {
  // The following three lines are added for backwards compatibility
  kPeriod.ToLower();
  if(kPeriod.EqualTo("lhc10h") || kPeriod.EqualTo("lhc11h")) kBeamType = "PbPb";
  if(kPeriod.EqualTo("lhc13b") || kPeriod.EqualTo("lhc13c") || kPeriod.EqualTo("lhc13d") || kPeriod.EqualTo("lhc13e") || kPeriod.EqualTo("lhc13f")) kBeamType = "pPb";

  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr)
    {
      Error("AddTaskEmcalJetTriggerQA","No analysis manager found.");
      return 0;
    }
  Bool_t ismc=kFALSE;
  ismc = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;

  // Check the analysis type using the event handlers connected to the analysis manager.
  //==============================================================================
  if (!mgr->GetInputEventHandler())
    {
      ::Error("AddTaskEmcalJetTriggerQA", "This task requires an input event handler");
      return NULL;
    }

  // #### Add necessary jet finder tasks
  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");

  AliEmcalJetTask* jetFinderTask1;
  AliEmcalJetTask* jetFinderTask2;
  if(kClusName.IsNull()) {  //particle level jets
    jetFinderTask1 = AddTaskEmcalJet(kTracksName, "", kANTIKT, R, kFULLJETS, ptminTrack, etminClus,0.005,1,"Jet",1.);
    jetFinderTask2 = AddTaskEmcalJet(kTracksName, "", kANTIKT, R, kCHARGEDJETS, ptminTrack, etminClus,0.005,1,"Jet",1.);
  }
  else if(kTracksName.IsNull()) { //neutral/calo jets
    jetFinderTask1 = AddTaskEmcalJet(kTracksName, kClusName, kANTIKT, R, kNEUTRALJETS, ptminTrack, etminClus,0.005,1,"Jet",1.);
    jetFinderTask2 = AddTaskEmcalJet(kTracksName, kClusName, kANTIKT, R, kFULLJETS, ptminTrack, etminClus,0.005,1,"Jet",1.);
  }
  else { //full jets
    jetFinderTask1 = AddTaskEmcalJet(kTracksName, kClusName, kANTIKT, R, kFULLJETS, ptminTrack, etminClus,0.005,1,"Jet",1.);
    jetFinderTask2 = AddTaskEmcalJet(kTracksName, kClusName, kANTIKT, R, kCHARGEDJETS, ptminTrack, etminClus,0.005,1,"Jet",1.);
  }
  jetFinderTask1->SelectCollisionCandidates(AliVEvent::kAny);
  jetFinderTask2->SelectCollisionCandidates(AliVEvent::kAny);

  TString strJets1 = jetFinderTask1->GetName();
  TString strJets2 = jetFinderTask2->GetName();

  AliAnalysisTaskRhoBase *rhoTask;
  if(rhoType==1) {
    rhoTask = AttachRhoTask(kBeamType,kTracksName,kClusName,R,ptminTrack,etminClus);
    if(rhoTask) {
      rhoTask->SetCentralityEstimator(CentEst);  
      rhoTask->SelectCollisionCandidates(AliVEvent::kAny);
    }
    else {
      Warning("AddTaskEmcalJetTriggerQA","Asked for rho task but configuration unknown. Continuing configuration without rho task.");
      rhoType = 0;
    }
  }

  TString wagonName = Form("TriggerQA_%s_%s_TC%s",strJets1.Data(),strJets2.Data(),trigClass.Data());

  //Configure TriggerQA task
  AliAnalysisTaskEmcalJetTriggerQA *task = new AliAnalysisTaskEmcalJetTriggerQA(wagonName);
  AliParticleContainer *trackCont  = task->AddParticleContainer(kTracksName.Data());
  AliClusterContainer *clusterCont = task->AddClusterContainer(kClusName.Data());

  task->SetContainerFull(0);
  task->SetContainerCharged(1);
  AliJetContainer *jetCont0 = task->AddJetContainer(strJets1.Data(),"EMCAL",R);
  if(rhoType==1) task->SetRhoName(rhoTask->GetOutRhoScaledName(),0);
  AliJetContainer *jetCont1 = NULL;
  if(strJets2.Contains("Charged")) {
    jetCont1 = task->AddJetContainer(strJets2.Data(),"TPC",R);
    if(rhoType==1) task->SetRhoName(rhoTask->GetOutRhoName(),1);
  }
  else { 
    jetCont1 = task->AddJetContainer(strJets2.Data(),"EMCAL",R);
    task->SetZLeadingCut(0.98,0.98,1);
    task->SetNEFCut(0.,nefCut,1);
  }

  task->SetZLeadingCut(0.98,0.98,0);
  task->SetNEFCut(0.,nefCut,0);

  for(Int_t i=0; i<2; i++) {
    task->SetPercAreaCut(0.6, i);
  }

  task->SetTriggerClass(trigClass.Data());
  task->SetCaloCellsName(kEmcalCellsName.Data());
  task->SetCaloTriggerPatchInfoName(kEmcalTriggers.Data());

  task->SetCentralityEstimator(CentEst);
  task->SelectCollisionCandidates(pSel);

  task->SetUseAliAnaUtils(kTRUE);
  task->SetVzRange(-10.,10.);

  if(kPeriod.Contains("LHC13b4")) 
    task->SetIsPythia(kTRUE);

  mgr->AddTask(task);

  //Connnect input
  mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer() );

  //Connect output
  AliAnalysisDataContainer *coutput1 = 0x0;
  TString containerName1 = Form("%s",wagonName.Data());
  TString outputfile = Form("%s:%s",AliAnalysisManager::GetCommonFileName(),wagonName.Data());
  coutput1 = mgr->CreateContainer(containerName1, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
  mgr->ConnectOutput(task,1,coutput1);

  return task;  
}

AliAnalysisTaskRhoBase *AttachRhoTask(TString     kBeamType           = "pp",
				      TString     kTracksName         = "PicoTracks", 
				      TString     kClusName           = "caloClustersCorr",
				      Double_t    R                   = 0.4, 
				      Double_t    ptminTrack          = 0.15, 
				      Double_t    etminClus           = 0.3 
				      ) {
  
  AliAnalysisTaskRhoBase *rhoTaskBase;

  // Add kt jet finder and rho task in case we want background subtraction
  Double_t minJetPt = 0.1;
  if(kBeamType == "pPb") minJetPt = 0.;
  AliEmcalJetTask *jetFinderKt;
  AliEmcalJetTask *jetFinderAKt;
  jetFinderKt   = AddTaskEmcalJet(kTracksName, kClusName, kKT, R, kCHARGEDJETS, ptminTrack, etminClus,0.005,1,"Jet",minJetPt);
  jetFinderAKt  = AddTaskEmcalJet(kTracksName, kClusName, kANTIKT, R, kCHARGEDJETS, ptminTrack, etminClus,0.005,1,"Jet",1.);
  jetFinderKt->SelectCollisionCandidates(AliVEvent::kAny);
  jetFinderAKt->SelectCollisionCandidates(AliVEvent::kAny);

  if(kBeamType == "pPb") {
    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskRhoSparse.C");  
    TF1 *fScale = new TF1("fScale","1.28",0.,100.); //scale factor for pPb
    AliAnalysisTaskRhoSparse *rhoTaskSparse = AddTaskRhoSparse(
			       jetFinderKt->GetName(),
			       jetFinderAKt->GetName(),
			       kTracksName,
			       kClusName,
			       Form("RhoSparseR%03d",(int)(100*R)),
			       R,
			       "TPC",
			       0.01,
			       0.15,
			       0,
			       fScale,
			       0,
			       kTRUE,
			       Form("RhoSparseR%03d",(int)(100*R)),
			       kTRUE
			       );
    rhoTaskSparse->SetUseAliAnaUtils(kTRUE);
    rhoTaskBase = dynamic_cast<AliAnalysisTaskRhoBase*>rhoTaskSparse;
  }
  else if(kBeamType=="PbPb") {
    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskRho.C");

    TF1* sfunc = new TF1("sfunc","[0]*x*x+[1]*x+[2]",-1,100);
    sfunc->SetParameter(2,1.76458);
    sfunc->SetParameter(1,-0.0111656);
    sfunc->SetParameter(0,0.000107296);
    AliAnalysisTaskRho *rhoTask = AddTaskRho(
					     jetFinderKt->GetName(), 
					     kTracksName, 
					     kClusName, 
					     Form("RhoR%03d",(int)(100*R)), 
					     R, 
					     "TPC", 
					     0.01, 
					     0, 
					     sfunc, 
					     2, 
					     kTRUE);
    rhoTask->SetHistoBins(100,0,250);

    rhoTaskBase = dynamic_cast<AliAnalysisTaskRhoBase*>rhoTask;
  }

  return rhoTaskBase;
}
 AddTaskEmcalJetTriggerQA.C:1
 AddTaskEmcalJetTriggerQA.C:2
 AddTaskEmcalJetTriggerQA.C:3
 AddTaskEmcalJetTriggerQA.C:4
 AddTaskEmcalJetTriggerQA.C:5
 AddTaskEmcalJetTriggerQA.C:6
 AddTaskEmcalJetTriggerQA.C:7
 AddTaskEmcalJetTriggerQA.C:8
 AddTaskEmcalJetTriggerQA.C:9
 AddTaskEmcalJetTriggerQA.C:10
 AddTaskEmcalJetTriggerQA.C:11
 AddTaskEmcalJetTriggerQA.C:12
 AddTaskEmcalJetTriggerQA.C:13
 AddTaskEmcalJetTriggerQA.C:14
 AddTaskEmcalJetTriggerQA.C:15
 AddTaskEmcalJetTriggerQA.C:16
 AddTaskEmcalJetTriggerQA.C:17
 AddTaskEmcalJetTriggerQA.C:18
 AddTaskEmcalJetTriggerQA.C:19
 AddTaskEmcalJetTriggerQA.C:20
 AddTaskEmcalJetTriggerQA.C:21
 AddTaskEmcalJetTriggerQA.C:22
 AddTaskEmcalJetTriggerQA.C:23
 AddTaskEmcalJetTriggerQA.C:24
 AddTaskEmcalJetTriggerQA.C:25
 AddTaskEmcalJetTriggerQA.C:26
 AddTaskEmcalJetTriggerQA.C:27
 AddTaskEmcalJetTriggerQA.C:28
 AddTaskEmcalJetTriggerQA.C:29
 AddTaskEmcalJetTriggerQA.C:30
 AddTaskEmcalJetTriggerQA.C:31
 AddTaskEmcalJetTriggerQA.C:32
 AddTaskEmcalJetTriggerQA.C:33
 AddTaskEmcalJetTriggerQA.C:34
 AddTaskEmcalJetTriggerQA.C:35
 AddTaskEmcalJetTriggerQA.C:36
 AddTaskEmcalJetTriggerQA.C:37
 AddTaskEmcalJetTriggerQA.C:38
 AddTaskEmcalJetTriggerQA.C:39
 AddTaskEmcalJetTriggerQA.C:40
 AddTaskEmcalJetTriggerQA.C:41
 AddTaskEmcalJetTriggerQA.C:42
 AddTaskEmcalJetTriggerQA.C:43
 AddTaskEmcalJetTriggerQA.C:44
 AddTaskEmcalJetTriggerQA.C:45
 AddTaskEmcalJetTriggerQA.C:46
 AddTaskEmcalJetTriggerQA.C:47
 AddTaskEmcalJetTriggerQA.C:48
 AddTaskEmcalJetTriggerQA.C:49
 AddTaskEmcalJetTriggerQA.C:50
 AddTaskEmcalJetTriggerQA.C:51
 AddTaskEmcalJetTriggerQA.C:52
 AddTaskEmcalJetTriggerQA.C:53
 AddTaskEmcalJetTriggerQA.C:54
 AddTaskEmcalJetTriggerQA.C:55
 AddTaskEmcalJetTriggerQA.C:56
 AddTaskEmcalJetTriggerQA.C:57
 AddTaskEmcalJetTriggerQA.C:58
 AddTaskEmcalJetTriggerQA.C:59
 AddTaskEmcalJetTriggerQA.C:60
 AddTaskEmcalJetTriggerQA.C:61
 AddTaskEmcalJetTriggerQA.C:62
 AddTaskEmcalJetTriggerQA.C:63
 AddTaskEmcalJetTriggerQA.C:64
 AddTaskEmcalJetTriggerQA.C:65
 AddTaskEmcalJetTriggerQA.C:66
 AddTaskEmcalJetTriggerQA.C:67
 AddTaskEmcalJetTriggerQA.C:68
 AddTaskEmcalJetTriggerQA.C:69
 AddTaskEmcalJetTriggerQA.C:70
 AddTaskEmcalJetTriggerQA.C:71
 AddTaskEmcalJetTriggerQA.C:72
 AddTaskEmcalJetTriggerQA.C:73
 AddTaskEmcalJetTriggerQA.C:74
 AddTaskEmcalJetTriggerQA.C:75
 AddTaskEmcalJetTriggerQA.C:76
 AddTaskEmcalJetTriggerQA.C:77
 AddTaskEmcalJetTriggerQA.C:78
 AddTaskEmcalJetTriggerQA.C:79
 AddTaskEmcalJetTriggerQA.C:80
 AddTaskEmcalJetTriggerQA.C:81
 AddTaskEmcalJetTriggerQA.C:82
 AddTaskEmcalJetTriggerQA.C:83
 AddTaskEmcalJetTriggerQA.C:84
 AddTaskEmcalJetTriggerQA.C:85
 AddTaskEmcalJetTriggerQA.C:86
 AddTaskEmcalJetTriggerQA.C:87
 AddTaskEmcalJetTriggerQA.C:88
 AddTaskEmcalJetTriggerQA.C:89
 AddTaskEmcalJetTriggerQA.C:90
 AddTaskEmcalJetTriggerQA.C:91
 AddTaskEmcalJetTriggerQA.C:92
 AddTaskEmcalJetTriggerQA.C:93
 AddTaskEmcalJetTriggerQA.C:94
 AddTaskEmcalJetTriggerQA.C:95
 AddTaskEmcalJetTriggerQA.C:96
 AddTaskEmcalJetTriggerQA.C:97
 AddTaskEmcalJetTriggerQA.C:98
 AddTaskEmcalJetTriggerQA.C:99
 AddTaskEmcalJetTriggerQA.C:100
 AddTaskEmcalJetTriggerQA.C:101
 AddTaskEmcalJetTriggerQA.C:102
 AddTaskEmcalJetTriggerQA.C:103
 AddTaskEmcalJetTriggerQA.C:104
 AddTaskEmcalJetTriggerQA.C:105
 AddTaskEmcalJetTriggerQA.C:106
 AddTaskEmcalJetTriggerQA.C:107
 AddTaskEmcalJetTriggerQA.C:108
 AddTaskEmcalJetTriggerQA.C:109
 AddTaskEmcalJetTriggerQA.C:110
 AddTaskEmcalJetTriggerQA.C:111
 AddTaskEmcalJetTriggerQA.C:112
 AddTaskEmcalJetTriggerQA.C:113
 AddTaskEmcalJetTriggerQA.C:114
 AddTaskEmcalJetTriggerQA.C:115
 AddTaskEmcalJetTriggerQA.C:116
 AddTaskEmcalJetTriggerQA.C:117
 AddTaskEmcalJetTriggerQA.C:118
 AddTaskEmcalJetTriggerQA.C:119
 AddTaskEmcalJetTriggerQA.C:120
 AddTaskEmcalJetTriggerQA.C:121
 AddTaskEmcalJetTriggerQA.C:122
 AddTaskEmcalJetTriggerQA.C:123
 AddTaskEmcalJetTriggerQA.C:124
 AddTaskEmcalJetTriggerQA.C:125
 AddTaskEmcalJetTriggerQA.C:126
 AddTaskEmcalJetTriggerQA.C:127
 AddTaskEmcalJetTriggerQA.C:128
 AddTaskEmcalJetTriggerQA.C:129
 AddTaskEmcalJetTriggerQA.C:130
 AddTaskEmcalJetTriggerQA.C:131
 AddTaskEmcalJetTriggerQA.C:132
 AddTaskEmcalJetTriggerQA.C:133
 AddTaskEmcalJetTriggerQA.C:134
 AddTaskEmcalJetTriggerQA.C:135
 AddTaskEmcalJetTriggerQA.C:136
 AddTaskEmcalJetTriggerQA.C:137
 AddTaskEmcalJetTriggerQA.C:138
 AddTaskEmcalJetTriggerQA.C:139
 AddTaskEmcalJetTriggerQA.C:140
 AddTaskEmcalJetTriggerQA.C:141
 AddTaskEmcalJetTriggerQA.C:142
 AddTaskEmcalJetTriggerQA.C:143
 AddTaskEmcalJetTriggerQA.C:144
 AddTaskEmcalJetTriggerQA.C:145
 AddTaskEmcalJetTriggerQA.C:146
 AddTaskEmcalJetTriggerQA.C:147
 AddTaskEmcalJetTriggerQA.C:148
 AddTaskEmcalJetTriggerQA.C:149
 AddTaskEmcalJetTriggerQA.C:150
 AddTaskEmcalJetTriggerQA.C:151
 AddTaskEmcalJetTriggerQA.C:152
 AddTaskEmcalJetTriggerQA.C:153
 AddTaskEmcalJetTriggerQA.C:154
 AddTaskEmcalJetTriggerQA.C:155
 AddTaskEmcalJetTriggerQA.C:156
 AddTaskEmcalJetTriggerQA.C:157
 AddTaskEmcalJetTriggerQA.C:158
 AddTaskEmcalJetTriggerQA.C:159
 AddTaskEmcalJetTriggerQA.C:160
 AddTaskEmcalJetTriggerQA.C:161
 AddTaskEmcalJetTriggerQA.C:162
 AddTaskEmcalJetTriggerQA.C:163
 AddTaskEmcalJetTriggerQA.C:164
 AddTaskEmcalJetTriggerQA.C:165
 AddTaskEmcalJetTriggerQA.C:166
 AddTaskEmcalJetTriggerQA.C:167
 AddTaskEmcalJetTriggerQA.C:168
 AddTaskEmcalJetTriggerQA.C:169
 AddTaskEmcalJetTriggerQA.C:170
 AddTaskEmcalJetTriggerQA.C:171
 AddTaskEmcalJetTriggerQA.C:172
 AddTaskEmcalJetTriggerQA.C:173
 AddTaskEmcalJetTriggerQA.C:174
 AddTaskEmcalJetTriggerQA.C:175
 AddTaskEmcalJetTriggerQA.C:176
 AddTaskEmcalJetTriggerQA.C:177
 AddTaskEmcalJetTriggerQA.C:178
 AddTaskEmcalJetTriggerQA.C:179
 AddTaskEmcalJetTriggerQA.C:180
 AddTaskEmcalJetTriggerQA.C:181
 AddTaskEmcalJetTriggerQA.C:182
 AddTaskEmcalJetTriggerQA.C:183
 AddTaskEmcalJetTriggerQA.C:184
 AddTaskEmcalJetTriggerQA.C:185
 AddTaskEmcalJetTriggerQA.C:186
 AddTaskEmcalJetTriggerQA.C:187
 AddTaskEmcalJetTriggerQA.C:188
 AddTaskEmcalJetTriggerQA.C:189
 AddTaskEmcalJetTriggerQA.C:190
 AddTaskEmcalJetTriggerQA.C:191
 AddTaskEmcalJetTriggerQA.C:192
 AddTaskEmcalJetTriggerQA.C:193
 AddTaskEmcalJetTriggerQA.C:194
 AddTaskEmcalJetTriggerQA.C:195
 AddTaskEmcalJetTriggerQA.C:196
 AddTaskEmcalJetTriggerQA.C:197
 AddTaskEmcalJetTriggerQA.C:198
 AddTaskEmcalJetTriggerQA.C:199
 AddTaskEmcalJetTriggerQA.C:200
 AddTaskEmcalJetTriggerQA.C:201
 AddTaskEmcalJetTriggerQA.C:202
 AddTaskEmcalJetTriggerQA.C:203