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

JETriggerRejectionAna::AliAnalysisTaskTriggerRejection* AddTaskTriggerRejection(TString     kTracksName         = "PicoTracks", 
							  TString     kClusName           = "caloClustersCorr",
							  Double_t    R                   = 0.4, 
							  Double_t    ptminTrack          = 0.15, 
							  Double_t    etminClus           = 0.3, 
							  Int_t       rhoType             = 1,
							  const char *CentEst             = "V0M",
							  Int_t       pSel                = AliVEvent::kAny,
							  TString     kEmcalTriggers      = "",
							  TString     kPeriod             = "LHC11h",
							  TString     kBeamType           = "PbPb", //or pPb or pp
							  TString     tag                 = ""
							   ) {
  // 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("AddTaskTriggerRejection","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("AddTaskTriggerRejection", "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("AddTaskTriggerRejection","Asked for rho task but configuration unknown. Continuing configuration without rho task.");
      rhoType = 0;
    }
  }

  TString wagonName = Form("TriggerRejectionQA_%s_%s_%s",strJets1.Data(),strJets2.Data(),tag.Data());

  //Configure TriggerQA task
  JETriggerRejectionAna::AliAnalysisTaskTriggerRejection *task = new JETriggerRejectionAna::AliAnalysisTaskTriggerRejection(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->SetZLeadingCut(0.98,0.98,0);
  for(Int_t i=0; i<2; i++)
    task->SetPercAreaCut(0.6, i);

  task->SetCaloTriggerPatchInfoName(kEmcalTriggers.Data());
  task->SetCentralityEstimator(CentEst);
  task->SelectCollisionCandidates(pSel);

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

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