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;
}