enum AlgoType {kKT, kANTIKT};
enum JetType {kFULLJETS, kCHARGEDJETS, kNEUTRALJETS};
AliAnalysisTaskEmcalJetTagger* AddTaskEmcalJetTagger(const char * njetsBase,
const char * njetsTag,
const Double_t R,
const char * nrhoBase,
const char * nrhoTag,
const char * ntracks,
const char * nclusters,
const char *type,
const char *CentEst,
Int_t pSel,
TString trigClass = "",
TString kEmcalTriggers = "");
AliAnalysisTaskEmcalJetTagger* AddTaskEmcalJetTagger(TString kTracksName = "PicoTracks",
TString kClusName = "caloClustersCorr",
Double_t R = 0.4,
Double_t ptminTrack = 0.15,
Double_t etminClus = 0.3,
Double_t ptminTag = 4.,
Int_t rhoType = 1,
const char *type = "EMCAL",
const char *CentEst = "V0M",
Int_t pSel = AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB,
TString trigClass = "",
TString kEmcalTriggers = "",
TString kPeriod = "LHC11h",
Int_t recombScheme = 0,
TString tag1 = "Jet",
TString tag2 = ""
) {
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (!mgr)
{
Error("AddTaskEmcalJetTagger","No analysis manager found.");
return 0;
}
// Check the analysis type using the event handlers connected to the analysis manager.
//==============================================================================
if (!mgr->GetInputEventHandler())
{
::Error("AddTaskEmcalJetTagger", "This task requires an input event handler");
return NULL;
}
// #### Add necessary jet finder tasks
gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
if(tag2.IsNull()) tag2=tag1;
AliEmcalJetTask* jetFinderTaskBase = 0x0;
if (strcmp(type,"TPC")==0)
jetFinderTaskBase = AddTaskEmcalJet(kTracksName, "", kANTIKT, R, kCHARGEDJETS, ptminTrack, etminClus,0.005,recombScheme,tag1.Data(),1.);
else if (strcmp(type,"EMCAL")==0)
jetFinderTaskBase = AddTaskEmcalJet(kTracksName, kClusName, kANTIKT, R, kFULLJETS, ptminTrack, etminClus,0.005,recombScheme,tag1.Data(),1.);
jetFinderTaskBase->SelectCollisionCandidates(AliVEvent::kAny);
AliEmcalJetTask* jetFinderTaskTag = AddTaskEmcalJet(kTracksName, "", kANTIKT, R, kCHARGEDJETS, ptminTag, etminClus,0.005,recombScheme,tag2.Data(),1.);
jetFinderTaskTag->SelectCollisionCandidates(AliVEvent::kAny);
if(tag1.EqualTo("JetPythia"))
jetFinderTaskBase->SelectConstituents(TObject::kBitMask, 0);
if(tag2.EqualTo("JetPythia"))
jetFinderTaskTag->SelectConstituents(TObject::kBitMask, 0);
TString strJetsBase = jetFinderTaskBase->GetName();
TString strJetsTag = jetFinderTaskTag->GetName();
AliAnalysisTaskRhoBase *rhoTaskBase;
AliAnalysisTaskRhoBase *rhoTaskTag;
TString rhoNameBase = "";
TString rhoNameTag = "";
if(rhoType==1) {
rhoTaskBase = AttachRhoTaskTagger(kPeriod,kTracksName,kClusName,R,ptminTrack,etminClus,recombScheme,tag1);
if(rhoTaskBase) {
rhoTaskBase->SetCentralityEstimator(CentEst);
rhoTaskBase->SelectCollisionCandidates(AliVEvent::kAny);
if (strcmp(type,"TPC")==0)
rhoNameBase = rhoTaskBase->GetOutRhoName();
if (strcmp(type,"EMCAL")==0)
rhoNameBase = rhoTaskBase->GetOutRhoScaledName();
}
if(rhoTaskTag) {
rhoTaskTag = AttachRhoTaskTagger(kPeriod,kTracksName,kClusName,R,ptminTag,0.,recombScheme,tag2);
rhoTaskTag->SetCentralityEstimator(CentEst);
rhoTaskTag->SelectCollisionCandidates(AliVEvent::kAny);
rhoNameTag = rhoTaskTag->GetOutRhoName();
}
}
//Configure jet tagger task
AliAnalysisTaskEmcalJetTagger *task = AddTaskEmcalJetTagger(jetFinderTaskBase->GetName(),
jetFinderTaskTag->GetName(),
R,
rhoNameBase,
rhoNameTag,
kTracksName.Data(),
kClusName.Data(),
type,
CentEst,
pSel,
trigClass,
kEmcalTriggers
);
return task;
}
AliAnalysisTaskEmcalJetTagger* AddTaskEmcalJetTagger(const char * njetsBase,
const char * njetsTag,
const Double_t R,
const char * nrhoBase,
const char * nrhoTag,
const char * ntracks,
const char * nclusters,
const char * type,
const char * CentEst,
Int_t pSel,
TString trigClass,
TString kEmcalTriggers
) {
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (!mgr)
{
Error("AddTaskEmcalJetTagger","No analysis manager found.");
return 0;
}
// Check the analysis type using the event handlers connected to the analysis manager.
//==============================================================================
if (!mgr->GetInputEventHandler())
{
::Error("AddTaskEmcalJetTagger", "This task requires an input event handler");
return NULL;
}
TString wagonName = Form("JetTagger_%s_%s_TC%s",njetsBase,njetsTag,trigClass.Data());
//Configure jet tagger task
AliAnalysisTaskEmcalJetTagger *task = new AliAnalysisTaskEmcalJetTagger(wagonName.Data());
task->SetNCentBins(4);
//task->SetVzRange(-10.,10.);
AliParticleContainer *trackCont = task->AddParticleContainer(ntracks);
AliClusterContainer *clusterCont = task->AddClusterContainer(nclusters);
task->SetJetContainerBase(0);
task->SetJetContainerTag(1);
TString strType(type);
AliJetContainer *jetContBase = task->AddJetContainer(njetsBase,strType,R);
if(jetContBase) {
jetContBase->SetRhoName(nrhoBase);
jetContBase->ConnectParticleContainer(trackCont);
jetContBase->ConnectClusterContainer(clusterCont);
jetContBase->SetMaxTrackPt(10000.);
}
AliJetContainer *jetContTag = task->AddJetContainer(njetsTag,"TPC",R);
if(jetContTag) {
jetContTag->SetRhoName(nrhoTag);
jetContTag->ConnectParticleContainer(trackCont);
jetContTag->ConnectClusterContainer(clusterCont);
jetContTag->SetMaxTrackPt(10000.);
}
for(Int_t i=0; i<2; i++) {
task->SetPercAreaCut(0.6, i); //keep?
}
task->SetCaloTriggerPatchInfoName(kEmcalTriggers.Data());
task->SetCentralityEstimator(CentEst);
task->SelectCollisionCandidates(pSel);
task->SetUseAliAnaUtils(kFALSE);
mgr->AddTask(task);
//Connnect input
mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer() );
//Connect output
TString contName(wagonName);
TString outputfile = Form("%s",AliAnalysisManager::GetCommonFileName());
AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
mgr->ConnectOutput(task,1,coutput1);
return task;
}
//Attach rho task
AliAnalysisTaskRhoBase *AttachRhoTaskTagger(TString kPeriod = "LHC13b",
TString kTracksName = "PicoTracks",
TString kClusName = "caloClustersCorr",
Double_t R = 0.4,
Double_t ptminTrack = 0.15,
Double_t etminClus = 0.3,
Int_t recombScheme = 0,
TString tag = "Jet"
) {
AliAnalysisTaskRhoBase *rhoTaskBase;
kPeriod.ToLower();
// Add kt jet finder and rho task in case we want background subtraction
gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
AliEmcalJetTask *jetFinderKt;
AliEmcalJetTask *jetFinderAKt;
jetFinderAKt = AddTaskEmcalJet(kTracksName, "", kANTIKT, R, kCHARGEDJETS, ptminTrack, etminClus,0.005,recombScheme,tag.Data(),1.);
jetFinderAKt->SelectCollisionCandidates(AliVEvent::kAny);
if(kPeriod.EqualTo("lhc13b") || kPeriod.EqualTo("lhc13c") || kPeriod.EqualTo("lhc13d") || kPeriod.EqualTo("lhc13e") || kPeriod.EqualTo("lhc13f")) {
jetFinderKt = AddTaskEmcalJet(kTracksName, "", kKT, R, kCHARGEDJETS, ptminTrack, etminClus,0.005,recombScheme,tag.Data(),0.);
gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskRhoSparse.C");
TF1 *fScale = new TF1("fScale","1.42",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(kPeriod.EqualTo("lhc10h") || kPeriod.EqualTo("lhc11h") ) {
jetFinderKt = AddTaskEmcalJet(kTracksName, "", kKT, R, kCHARGEDJETS, ptminTrack, etminClus,0.005,recombScheme,tag.Data(),0.1);
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);
TString rhoname = Form("%sRhoR%03dptmin%3.0f%s",tag.Data(),(int)(100*R),ptminTrack*1000.0,kTracksName.Data());
Printf("rhoname: %s",rhoname.Data());
AliAnalysisTaskRho *rhoTask = AddTaskRho(
jetFinderKt->GetName(),
kTracksName,
kClusName,
rhoname,
R,
"TPC",
0.01,
0,
sfunc,
2,
kTRUE);
rhoTask->SetHistoBins(100,0,250);
rhoTaskBase = dynamic_cast<AliAnalysisTaskRhoBase*>rhoTask;
}
jetFinderKt->SelectCollisionCandidates(AliVEvent::kAny);
if(tag.EqualTo("JetPythia")) {
jetFinderKt->SelectConstituents(TObject::kBitMask, 0);
jetFinderAKt->SelectConstituents(TObject::kBitMask, 0);
}
return rhoTaskBase;
}