ROOT logo
AliAnalysisTaskRho* AddTaskRho (
   const char    *nJets       = "Jets",
   const char    *nTracks     = "PicoTracks",
   const char    *nClusters   = "CaloClusters",  
   const char    *nRho        = "Rho",
   Double_t       jetradius   = 0.2,
   const char    *cutType     = "TPC",
   Double_t       jetareacut  = 0.01,
   Double_t       emcareacut  = 0,
   TF1           *sfunc       = 0,
   const UInt_t   exclJets    = 2,
   const Bool_t   histo       = kFALSE,
   const char    *taskname    = "Rho"
)
{  
  // Get the pointer to the existing analysis manager via the static access method.
  //==============================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr)
  {
    ::Error("AddTaskRho", "No analysis manager to connect to.");
    return NULL;
  }  
  
  // Check the analysis type using the event handlers connected to the analysis manager.
  //==============================================================================
  if (!mgr->GetInputEventHandler())
  {
    ::Error("AddTaskRho", "This task requires an input event handler");
    return NULL;
  }


  //-------------------------------------------------------
  // Init the task and do settings
  //-------------------------------------------------------

  TString name(Form("%s_%s_%s", taskname, nJets,cutType));
  AliAnalysisTaskRho* mgrTask = mgr->GetTask(name.Data());
  if (mgrTask) return mgrTask;

  AliAnalysisTaskRho *rhotask = new AliAnalysisTaskRho(name, histo);
  rhotask->SetExcludeLeadJets(exclJets);
  rhotask->SetScaleFunction(sfunc);
  rhotask->SetOutRhoName(nRho);

  AliParticleContainer *trackCont = rhotask->AddParticleContainer(nTracks);
  AliClusterContainer *clusterCont = rhotask->AddClusterContainer(nClusters);

  AliJetContainer *jetCont = rhotask->AddJetContainer(nJets,cutType,jetradius);
  if (jetCont) {
    jetCont->SetJetAreaCut(jetareacut);
    jetCont->SetAreaEmcCut(emcareacut);
    jetCont->SetJetPtCut(0);
    jetCont->ConnectParticleContainer(trackCont);
    jetCont->ConnectClusterContainer(clusterCont);
  }

  //-------------------------------------------------------
  // Final settings, pass to manager and set the containers
  //-------------------------------------------------------

  mgr->AddTask(rhotask);

  // Create containers for input/output
  mgr->ConnectInput(rhotask, 0, mgr->GetCommonInputContainer());
  if (histo) {
    TString contname(name);
    contname += "_histos";
    AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname.Data(), 
							      TList::Class(),AliAnalysisManager::kOutputContainer,
							      Form("%s", AliAnalysisManager::GetCommonFileName()));
    mgr->ConnectOutput(rhotask, 1, coutput1);
  }

  return rhotask;
}

AliAnalysisTaskRho* AddTaskRho(
   const char    *nJets       = "Jets",
   const char    *nTracks     = "PicoTracks",
   const char    *nClusters   = "CaloClusters",  
   const char    *nRho        = "Rho",
   Double_t       jetradius   = 0.2,
   const char    *cutType     = "TPC",
   Double_t       jetareacut  = 0.01,
   Double_t       emcareacut  = 0,
   const char    *sfuncPath   = "alien:///alice/cern.ch/user/s/saiola/LHC11h_ScaleFactorFunctions.root",
   const char    *sfuncName   = "LHC11h_HadCorr20_ClustersV2",
   const UInt_t   exclJets    = 2,
   const Bool_t   histo       = kFALSE,
   const char    *taskname    = "Rho"
)
{
  TFile *file = TFile::Open(sfuncPath);
  if (!file || file->IsZombie()) {
    ::Error("AddTaskRho", "Could not open scale function file");
    return NULL;
  }

  TF1* sfunc = dynamic_cast<TF1*>(file->Get(sfuncName));

  if (sfunc) {
    ::Info("AddTaskRho", Form("Scale function %s loaded from file %s.", sfuncName, sfuncPath));
  }
  else {
    ::Error("AddTaskRho", Form("Scale function %s not found in file %s.", sfuncName, sfuncPath));
    return NULL;
  }

  AliAnalysisTaskRho *task = AddTaskRho(nJets, nTracks, nClusters, nRho, jetradius, cutType, jetareacut, emcareacut, sfunc, exclJets, histo, taskname);

  file->Close();
  delete file;
  file = 0;

  return task;
}
 AddTaskRho.C:1
 AddTaskRho.C:2
 AddTaskRho.C:3
 AddTaskRho.C:4
 AddTaskRho.C:5
 AddTaskRho.C:6
 AddTaskRho.C:7
 AddTaskRho.C:8
 AddTaskRho.C:9
 AddTaskRho.C:10
 AddTaskRho.C:11
 AddTaskRho.C:12
 AddTaskRho.C:13
 AddTaskRho.C:14
 AddTaskRho.C:15
 AddTaskRho.C:16
 AddTaskRho.C:17
 AddTaskRho.C:18
 AddTaskRho.C:19
 AddTaskRho.C:20
 AddTaskRho.C:21
 AddTaskRho.C:22
 AddTaskRho.C:23
 AddTaskRho.C:24
 AddTaskRho.C:25
 AddTaskRho.C:26
 AddTaskRho.C:27
 AddTaskRho.C:28
 AddTaskRho.C:29
 AddTaskRho.C:30
 AddTaskRho.C:31
 AddTaskRho.C:32
 AddTaskRho.C:33
 AddTaskRho.C:34
 AddTaskRho.C:35
 AddTaskRho.C:36
 AddTaskRho.C:37
 AddTaskRho.C:38
 AddTaskRho.C:39
 AddTaskRho.C:40
 AddTaskRho.C:41
 AddTaskRho.C:42
 AddTaskRho.C:43
 AddTaskRho.C:44
 AddTaskRho.C:45
 AddTaskRho.C:46
 AddTaskRho.C:47
 AddTaskRho.C:48
 AddTaskRho.C:49
 AddTaskRho.C:50
 AddTaskRho.C:51
 AddTaskRho.C:52
 AddTaskRho.C:53
 AddTaskRho.C:54
 AddTaskRho.C:55
 AddTaskRho.C:56
 AddTaskRho.C:57
 AddTaskRho.C:58
 AddTaskRho.C:59
 AddTaskRho.C:60
 AddTaskRho.C:61
 AddTaskRho.C:62
 AddTaskRho.C:63
 AddTaskRho.C:64
 AddTaskRho.C:65
 AddTaskRho.C:66
 AddTaskRho.C:67
 AddTaskRho.C:68
 AddTaskRho.C:69
 AddTaskRho.C:70
 AddTaskRho.C:71
 AddTaskRho.C:72
 AddTaskRho.C:73
 AddTaskRho.C:74
 AddTaskRho.C:75
 AddTaskRho.C:76
 AddTaskRho.C:77
 AddTaskRho.C:78
 AddTaskRho.C:79
 AddTaskRho.C:80
 AddTaskRho.C:81
 AddTaskRho.C:82
 AddTaskRho.C:83
 AddTaskRho.C:84
 AddTaskRho.C:85
 AddTaskRho.C:86
 AddTaskRho.C:87
 AddTaskRho.C:88
 AddTaskRho.C:89
 AddTaskRho.C:90
 AddTaskRho.C:91
 AddTaskRho.C:92
 AddTaskRho.C:93
 AddTaskRho.C:94
 AddTaskRho.C:95
 AddTaskRho.C:96
 AddTaskRho.C:97
 AddTaskRho.C:98
 AddTaskRho.C:99
 AddTaskRho.C:100
 AddTaskRho.C:101
 AddTaskRho.C:102
 AddTaskRho.C:103
 AddTaskRho.C:104
 AddTaskRho.C:105
 AddTaskRho.C:106
 AddTaskRho.C:107
 AddTaskRho.C:108
 AddTaskRho.C:109
 AddTaskRho.C:110
 AddTaskRho.C:111
 AddTaskRho.C:112
 AddTaskRho.C:113
 AddTaskRho.C:114
 AddTaskRho.C:115
 AddTaskRho.C:116
 AddTaskRho.C:117
 AddTaskRho.C:118
 AddTaskRho.C:119