ROOT logo
AliAnalysisTaskSE* AddTaskJetMultiPreparation(
  const char*    periodstr          = "LHC13b",
  TString        usedTracks         = "PicoTracks",
  const char*    usedMCParticles    = "MCParticlesSelected",
  const char*    usedClusters       = "CaloClusters",
  TString        outClusName        = "CaloClustersCorr",
  const Double_t hadCorr            = 2.0,
  const Double_t Eexcl              = 0.00,
  const Double_t phiMatch           = 0.03,
  const Double_t etaMatch           = 0.015,
  const Double_t minPtEt            = 0.15,
  const UInt_t   pSel               = AliVEvent::kAny,
  const Bool_t   trackclus          = kTRUE,
  const Bool_t   doHistos           = kFALSE,
  const Bool_t   makePicoTracks     = kTRUE,
  const Bool_t   makeTrigger        = kFALSE,
  const Bool_t   isEmcalTrain       = kFALSE,
  const Double_t trackEff           = 1.0,
  const Bool_t   doAODTrackProp     = kFALSE
)
{
    // Add task macros for all jet related helper tasks.
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
    if (!mgr)
    {
        Error("AddTaskJetPreparation","No analysis manager found.");
        return 0;
    }

    AliVEventHandler *evhand = mgr->GetInputEventHandler();
    if (!evhand)
    {
        Error("AddTaskJetPreparation", "This task requires an input event handler");
        return NULL;
    }

    // Convert hadCorr & trackEff to TStrings to be used in naming conventions
    TString sTrackEff = "";
    TString sHadCorr = "";
    Int_t tEff = Int_t(trackEff*100);
    Int_t hC = Int_t(hadCorr*100);
    
    if (trackEff<0.1)
    {
        sTrackEff = Form("00%d",tEff);
    }
    else if (trackEff<1.0)
    {
        sTrackEff = Form("0%d",tEff);
    }
    else
    {
        sTrackEff = Form("%d",tEff);
    }
    
    if (hadCorr<0.1)
    {
        sHadCorr = Form("00%d",hC);
    }
    else if (hadCorr<1.0)
    {
        sHadCorr = Form("0%d",hC);
    }
    else
    {
        sHadCorr = Form("%d",hC);
    }
    
    // Establish names for output collections and tasks
    TString sPicoTracks = usedTracks + "_" + sTrackEff;
    TString sEmcalTriggers = "EmcalTriggers_" + sTrackEff;
    TString sEmcalTracks = "EmcalTracks_" + sTrackEff;
    TString sEmcalClusters = "EmcalClusters_" + sTrackEff;
    TString sCaloClustersCorr = outClusName + "_" + sTrackEff + "_" + sHadCorr;
    
    TString sESDTrackFilterName = "AliEmcalEsdTrackFilterTask";
    TString sAODTrackPropagatorName = "AliEmcalTrackPropagatorTaskAOD";
    TString sEmcalPicoTrackMakerName = "EmcalPicoTrackMaker_" + sTrackEff;
    TString sEmcalParticleMakerName = "EmcalParticleMaker_" + sTrackEff;
    TString sEmcalTriggerMakerName = "EmcalTriggerMaker_" + sTrackEff;
    TString sEmcalTriggerMakerSetupOutName = "EmcalTriggerMakerSetupOut_" + sTrackEff;
    TString sMCTrackSelectorName = "AliEmcalMCTrackSelector";
    
    // Set trackcuts according to period. Every period used should be definied here
    TString period(periodstr);
    TString clusterColName(usedClusters);
    TString particleColName(usedMCParticles);
    TString dType("ESD");
    
    if (!evhand->InheritsFrom("AliESDInputHandler"))
    {
        dType = "AOD";
    }

    if ((dType == "AOD") && (clusterColName == "CaloClusters"))
    {
        clusterColName = "caloClusters";
    }
    if ((dType == "ESD") && (clusterColName == "caloClusters"))
    {
        clusterColName = "CaloClusters";
    }

    if (0)
    {
        gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalTrackPropagator.C");
        AliEmcalTrackPropagatorTask *proptask = AddTaskEmcalTrackPropagator();
        proptask->SelectCollisionCandidates(pSel);
    }

    if (makePicoTracks && (dType == "ESD" || dType == "AOD") )
    {
        TString inputTracks = "AODFilterTracks";
        const Double_t edist = 440;
        if (dType == "ESD")
        {
            inputTracks = "ESDFilterTracks";
            TString trackCuts(Form("Hybrid_%s",period.Data()));
            
            // Hybrid tracks maker for ESD
            AliEmcalEsdTrackFilterTask *esdFilter = mgr->GetTask(sESDTrackFilterName.Data());
            if (!esdFilter)
            {
                gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalEsdTrackFilter.C");
                AliEmcalEsdTrackFilterTask *esdFilter = AddTaskEmcalEsdTrackFilter(inputTracks.Data(),trackCuts.Data());
                esdFilter->SetDoPropagation(kTRUE);
                esdFilter->SetDist(edist);
                esdFilter->SelectCollisionCandidates(pSel);
            }
        }
        else if (dType == "AOD")
        {
            // Track propagator to extend track to the EMCal surface
            AliEmcalAodTrackFilterTask *aodFilter = mgr->GetTask(sAODTrackPropagatorName.Data());
            if (!aodFilter)
            {
                gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalAodTrackFilter.C");
                AliEmcalAodTrackFilterTask *aodFilter = AddTaskEmcalAodTrackFilter(inputTracks.Data(),"tracks",period.Data());
                aodFilter->SetDist(edist);
                aodFilter->SelectCollisionCandidates(pSel);
                if (doAODTrackProp == kTRUE)
                {
                    aodFilter->SetDoPropagation(kTRUE);
                }
            }
        }

        // Produce PicoTracks
        AliEmcalPicoTrackMaker *pTrackTask = mgr->GetTask(sEmcalPicoTrackMakerName.Data());
        if (!pTrackTask)
        {
            gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPicoTrackMaker.C");
            pTrackTask = AddTaskEmcalPicoTrackMaker(sPicoTracks.Data(), inputTracks.Data(),0,1000,-10,10,-10,10,trackEff,sEmcalPicoTrackMakerName.Data());
            pTrackTask->SelectCollisionCandidates(pSel);
        }
    }

    // Trigger maker
    if (makeTrigger)
    {
        AliEmcalTriggerMaker *emcalTriggers = mgr->GetTask(sEmcalTriggerMakerName.Data());
        if (!emcalTriggers)
        {
            gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalTriggerMaker.C");
            emcalTriggers = AddTaskEmcalTriggerMaker(sEmcalTriggers.Data(),sEmcalTriggerMakerSetupOutName.Data(),0,0,sEmcalTriggerMakerName.Data(),0,0,0,0,0,0);
            emcalTriggers->SelectCollisionCandidates(pSel);
        }
    }

    // Produce particles used for hadronic correction, then match!
    AliEmcalParticleMaker *emcalParts = mgr->GetTask(sEmcalParticleMakerName.Data());
    if (!emcalParts)
    {
        gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalParticleMaker.C");
        emcalParts = AddTaskEmcalParticleMaker(sPicoTracks.Data(),clusterColName.Data(),sEmcalTracks.Data(),sEmcalClusters.Data(),sEmcalParticleMakerName.Data());
        emcalParts->SelectCollisionCandidates(pSel);

        // Relate tracks and clusters
        gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalClusTrackMatcher.C");
        AliEmcalClusTrackMatcherTask *emcalClus = AddTaskEmcalClusTrackMatcher(sEmcalTracks.Data(),sEmcalClusters.Data(),0.1,doHistos);
        emcalClus->SetModifyObjs(kFALSE);
        emcalClus->SelectCollisionCandidates(pSel);
        if (isEmcalTrain)
        {
            RequestMemory(emcalClus,100*1024);
        }
    }

    // Make Corrected CaloClusters
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskHadCorr.C");
    AliHadCorrTask *hCorr = AddTaskHadCorr(sEmcalTracks.Data(),sEmcalClusters.Data(),sCaloClustersCorr.Data(),hadCorr,minPtEt,phiMatch,etaMatch,Eexcl,trackclus,doHistos);
    hCorr->SelectCollisionCandidates(pSel);
    if (isEmcalTrain)
    {
        if (doHistos)
        {
            RequestMemory(hCorr,500*1024);
        }
    }

    // Produce MC particles
    if(particleColName != "")
    {
        AliEmcalMCTrackSelector *mcPartTask = mgr->GetTask(sMCTrackSelectorName.Data());
        if (!mcPartTask)
        {
            gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskMCTrackSelector.C");
            AliEmcalMCTrackSelector *mcPartTask = AddTaskMCTrackSelector(particleColName.Data(), kFALSE, kFALSE);
            mcPartTask->SelectCollisionCandidates(pSel);
        }
    }

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