ROOT logo
/* AddTask macro for Jet V2 task 
 * Redmer Alexander Bertens, rbertens@cern.ch
 * Utrecht University, Utrecht, Netherlands */

AliAnalysisTaskJetV2* AddTaskJetV2(
  const char *ntracks            = "Tracks",
  const char *nclusters          = "",
  const char *njets              = "Jets",
  const char *nrho               = "Rho",
  Double_t   jetradius          = 0.2,
  Double_t   jetptcut           = 1,
  Double_t   jetareacut         = 0.557,
  const char* type              = "TPC",
  Int_t      leadhadtype        = 0,
  const char *taskname           = "AliAnalysisTaskJetV2",
  UInt_t     runMode            = AliAnalysisTaskJetV2::kGrid,
  Bool_t     fillQA             = kTRUE,
  TString    fitOpts            = "WLQI",
  UInt_t     fitType            = AliAnalysisTaskJetV2::kCombined,
  TArrayD    *centralities      = 0x0,
  TRandom3   *randomizer        = 0x0,
  Double_t   trackptcut         = .15,
  Bool_t     LHC10h             = kFALSE
  )
{  
  // Get the pointer to the existing analysis manager via the static access method.
  //==============================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr)
  {
    ::Error("AddTaskEmcalJetSample", "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("AddTaskEmcalJetSample", "This task requires an input event handler");
    return NULL;
  }
  
  //-------------------------------------------------------
  // Init the task and do settings
  //-------------------------------------------------------

  TString name(taskname);
  if (strcmp(njets,"")) {
    name += "_";
    name += njets;
  }
  if (strcmp(nrho,"")) {
    name += "_";
    name += nrho;
  }
  if (!strcmp(type, "TPC"))
    name += "_TPC";
  else if (!strcmp(type, "EMCAL"))
    name += "_EMCAL";
  else if (!strcmp(type, "USER")) 
    name += "_USER";

  // create instance of the object
  AliAnalysisTaskJetV2* jetTask = new AliAnalysisTaskJetV2(name, runMode);
  
  // create and connect data containers
  AliParticleContainer* partCont = jetTask->AddParticleContainer(ntracks);
  if(partCont) {
      partCont->SetName("Tracks");
      partCont->SetParticlePtCut(trackptcut);
  }
  TString tmp(nclusters);
  AliClusterContainer* clusterCont = 0x0;
  if(!tmp.IsNull()) {
      clusterCont = jetTask->AddClusterContainer(nclusters);
      jetTask->SetAnalysisType(AliAnalysisTaskJetV2::kFull);
  }
  AliJetContainer* jetCont = jetTask->AddJetContainer(njets, type, jetradius);
  if(jetCont) {
      jetCont->SetName("Jets");
      jetCont->SetPercAreaCut(jetareacut);
      jetCont->SetRhoName(nrho);
      if(partCont)      jetCont->ConnectParticleContainer(partCont);
      if(clusterCont)   jetCont->ConnectClusterContainer(clusterCont);
  }

  // task specific setters
  jetTask->SetFillQAHistograms(fillQA);
  jetTask->SetDebugMode(-1);
  jetTask->SetModulationFitType(fitType);
  jetTask->SetModulationFitOptions(fitOpts);
  jetTask->SetModulationFitMinMaxP(.01, 1);
  // if centralities haven't been specified use defaults
  if(!centralities) {
     Double_t c[] = {0., 10., 30., 50., 70., 90.};
     jetTask->SetCentralityClasses(new TArrayD(sizeof(c)/sizeof(c[0]), c));
  }
  else jetTask->SetCentralityClasses(centralities);
  // if a randomized hasn't specified use a safe default 
  if(!randomizer) jetTask->SetRandomSeed(new TRandom3(0));

  // pass the expected run lists to the task. the total list is used for QA plots which are stored per run-number, the semi-good list is used to change the phi acceptance of jets and pico trakcs, and - if an alternatie is provided - switch to a 'small rho' task, which also runs on limited acceptance
  Int_t totalRuns[] = {167813, 167988, 168066, 168068, 168069, 168076, 168104, 168212, 168311, 168322, 168325, 168341, 168361, 168362, 168458, 168460, 168461, 168992, 169091, 169094, 169138, 169143, 169167, 169417, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169956, 170027, 170036, 170081, /* up till here original good TPC list */169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309, /* original semi-good tpc list */169415, 169411, 169035, 168988, 168984, 168826, 168777, 168512, 168511, 168467, 168464, 168342, 168310, 168115, 168108, 168107, 167987, 167915, 167903, /*new runs, good according to RCT */ 169238, 169160, 169156, 169148, 169145, 169144 /* run swith missing OROC 8 but seem ok in QA */};

  Int_t totalRuns10h[] = {139510, 139507, 139505, 139503, 139465, 139438, 139437, 139360, 139329, 139328, 139314, 139310, 139309, 139173, 139107, 139105, 139038, 139037, 139036, 139029, 139028, 138872, 138871, 138870, 138837, 138732, 138730, 138666, 138662, 138653, 138652, 138638, 138624, 138621, 138583, 138582, 138579, 138578, 138534, 138469, 138442, 138439, 138438, 138396, 138364, 138275, 138225, 138201, 138197, 138192, 138190, 137848, 137844, 137752, 137751, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137686, 137685, 137639, 137638, 137608, 137595, 137549, 137544, 137541, 137539, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137430, 137366, 137243, 137236, 137235, 137232, 137231, 137230, 137162, 137161, 137135};

  // set the runnumbers for either 10h or 11h
  (LHC10h) ? jetTask->SetExpectedRuns(new TArrayI(sizeof(totalRuns10h)/sizeof(totalRuns10h[0]), totalRuns10h)) : jetTask->SetExpectedRuns(new TArrayI(sizeof(totalRuns)/sizeof(totalRuns[0]), totalRuns));

  Int_t semiGoodRuns[] = {169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309};

  // set the semi-good runnumbers for 10h or 11h (10h has no semi-good numbers, so pass a NULL pointer)
  (LHC10h) ? jetTask->SetExpectedSemiGoodRuns(0x0) : jetTask->SetExpectedSemiGoodRuns(new TArrayI(sizeof(semiGoodRuns)/sizeof(semiGoodRuns[0]), semiGoodRuns));

  // and if 10h, pass this info to the task so acceptance isn't changed
  if(LHC10h) jetTask->SetCollisionType(AliAnalysisTaskJetV2::kPbPb10h);

  //-------------------------------------------------------
  // Final settings, pass to manager and set the containers
  //-------------------------------------------------------
  
  mgr->AddTask(jetTask);
  
  // Create containers for input/output
  AliAnalysisDataContainer *cinput1  = mgr->GetCommonInputContainer()  ;
  TString contname(name);
  contname+="_PWGJE";
  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname.Data(), 
							    TList::Class(),AliAnalysisManager::kOutputContainer,
							    Form("%s", AliAnalysisManager::GetCommonFileName()));
  mgr->ConnectInput  (jetTask, 0,  cinput1 );
  mgr->ConnectOutput (jetTask, 1, coutput1 );

  switch (runMode) {
      case AliAnalysisTaskJetV2::kLocal : {
          gStyle->SetOptFit(1);
          AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(Form("good_fits_%s", name.Data()), 
							    TList::Class(),AliAnalysisManager::kOutputContainer,
							    Form("%s", AliAnalysisManager::GetCommonFileName()));
          AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(Form("bad_fits_%s", name.Data()),
							    TList::Class(),AliAnalysisManager::kOutputContainer,
							     Form("%s", AliAnalysisManager::GetCommonFileName()));
          mgr->ConnectOutput (jetTask, 2, coutput2);
          mgr->ConnectOutput (jetTask, 3, coutput3);
      } break;
      default: break;
  }
  return jetTask;
}
 AddTaskJetV2.C:1
 AddTaskJetV2.C:2
 AddTaskJetV2.C:3
 AddTaskJetV2.C:4
 AddTaskJetV2.C:5
 AddTaskJetV2.C:6
 AddTaskJetV2.C:7
 AddTaskJetV2.C:8
 AddTaskJetV2.C:9
 AddTaskJetV2.C:10
 AddTaskJetV2.C:11
 AddTaskJetV2.C:12
 AddTaskJetV2.C:13
 AddTaskJetV2.C:14
 AddTaskJetV2.C:15
 AddTaskJetV2.C:16
 AddTaskJetV2.C:17
 AddTaskJetV2.C:18
 AddTaskJetV2.C:19
 AddTaskJetV2.C:20
 AddTaskJetV2.C:21
 AddTaskJetV2.C:22
 AddTaskJetV2.C:23
 AddTaskJetV2.C:24
 AddTaskJetV2.C:25
 AddTaskJetV2.C:26
 AddTaskJetV2.C:27
 AddTaskJetV2.C:28
 AddTaskJetV2.C:29
 AddTaskJetV2.C:30
 AddTaskJetV2.C:31
 AddTaskJetV2.C:32
 AddTaskJetV2.C:33
 AddTaskJetV2.C:34
 AddTaskJetV2.C:35
 AddTaskJetV2.C:36
 AddTaskJetV2.C:37
 AddTaskJetV2.C:38
 AddTaskJetV2.C:39
 AddTaskJetV2.C:40
 AddTaskJetV2.C:41
 AddTaskJetV2.C:42
 AddTaskJetV2.C:43
 AddTaskJetV2.C:44
 AddTaskJetV2.C:45
 AddTaskJetV2.C:46
 AddTaskJetV2.C:47
 AddTaskJetV2.C:48
 AddTaskJetV2.C:49
 AddTaskJetV2.C:50
 AddTaskJetV2.C:51
 AddTaskJetV2.C:52
 AddTaskJetV2.C:53
 AddTaskJetV2.C:54
 AddTaskJetV2.C:55
 AddTaskJetV2.C:56
 AddTaskJetV2.C:57
 AddTaskJetV2.C:58
 AddTaskJetV2.C:59
 AddTaskJetV2.C:60
 AddTaskJetV2.C:61
 AddTaskJetV2.C:62
 AddTaskJetV2.C:63
 AddTaskJetV2.C:64
 AddTaskJetV2.C:65
 AddTaskJetV2.C:66
 AddTaskJetV2.C:67
 AddTaskJetV2.C:68
 AddTaskJetV2.C:69
 AddTaskJetV2.C:70
 AddTaskJetV2.C:71
 AddTaskJetV2.C:72
 AddTaskJetV2.C:73
 AddTaskJetV2.C:74
 AddTaskJetV2.C:75
 AddTaskJetV2.C:76
 AddTaskJetV2.C:77
 AddTaskJetV2.C:78
 AddTaskJetV2.C:79
 AddTaskJetV2.C:80
 AddTaskJetV2.C:81
 AddTaskJetV2.C:82
 AddTaskJetV2.C:83
 AddTaskJetV2.C:84
 AddTaskJetV2.C:85
 AddTaskJetV2.C:86
 AddTaskJetV2.C:87
 AddTaskJetV2.C:88
 AddTaskJetV2.C:89
 AddTaskJetV2.C:90
 AddTaskJetV2.C:91
 AddTaskJetV2.C:92
 AddTaskJetV2.C:93
 AddTaskJetV2.C:94
 AddTaskJetV2.C:95
 AddTaskJetV2.C:96
 AddTaskJetV2.C:97
 AddTaskJetV2.C:98
 AddTaskJetV2.C:99
 AddTaskJetV2.C:100
 AddTaskJetV2.C:101
 AddTaskJetV2.C:102
 AddTaskJetV2.C:103
 AddTaskJetV2.C:104
 AddTaskJetV2.C:105
 AddTaskJetV2.C:106
 AddTaskJetV2.C:107
 AddTaskJetV2.C:108
 AddTaskJetV2.C:109
 AddTaskJetV2.C:110
 AddTaskJetV2.C:111
 AddTaskJetV2.C:112
 AddTaskJetV2.C:113
 AddTaskJetV2.C:114
 AddTaskJetV2.C:115
 AddTaskJetV2.C:116
 AddTaskJetV2.C:117
 AddTaskJetV2.C:118
 AddTaskJetV2.C:119
 AddTaskJetV2.C:120
 AddTaskJetV2.C:121
 AddTaskJetV2.C:122
 AddTaskJetV2.C:123
 AddTaskJetV2.C:124
 AddTaskJetV2.C:125
 AddTaskJetV2.C:126
 AddTaskJetV2.C:127
 AddTaskJetV2.C:128
 AddTaskJetV2.C:129
 AddTaskJetV2.C:130
 AddTaskJetV2.C:131
 AddTaskJetV2.C:132
 AddTaskJetV2.C:133
 AddTaskJetV2.C:134
 AddTaskJetV2.C:135
 AddTaskJetV2.C:136
 AddTaskJetV2.C:137
 AddTaskJetV2.C:138
 AddTaskJetV2.C:139
 AddTaskJetV2.C:140
 AddTaskJetV2.C:141
 AddTaskJetV2.C:142
 AddTaskJetV2.C:143
 AddTaskJetV2.C:144
 AddTaskJetV2.C:145
 AddTaskJetV2.C:146
 AddTaskJetV2.C:147
 AddTaskJetV2.C:148
 AddTaskJetV2.C:149
 AddTaskJetV2.C:150