ROOT logo
// $Id$

// File config location
// alien:///alice/cern.ch/user/t/tschuste/correction_hybrid_nulled.root

AliDhcTask *AddTaskDhc(
  Int_t iAna          = 2, /*1=h-h, 2=mu-h, 4=mu-mu*/ 
  TString chUName     = "", 
  TString chHEffFile  = "", 
  TString chMuEffFile = "", 
  TString chTaskFile  = "", 
  TString chTaskName  = "", 
  TString chNTracks   = "PicoTracks",
  TString centSel     = "V0M",
  TString className   = "",
  Bool_t  doTrigMatch = kFALSE,
  Bool_t  doMassCut   = kFALSE,
  Bool_t  doFillSame  = kFALSE,
  UInt_t  trigsel     = AliVEvent::kINT7
)
{
  Char_t chExtraName[256];
  
  // Get the analysis manager
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    Error("AddTaskDhc", "No analysis manager found.");
    return;
  }

  // ESD or AOD? write into the task name etc.
  sprintf(chExtraName,"_%s",mgr->GetInputEventHandler()->GetDataType());

  AliDhcTask *dhcTask = 0x0;

  // if string chTaskFile is given, load a pre-configured task from file
  if (!chTaskFile.EqualTo("")) {
    iAna=999;
    TFile *fiDhcTask = 0x0;
    fiDhcTask = TFile::Open(chTaskFile,"OLD");
    if (!fiDhcTask){
      Error("AddTaskDhc",Form("Requested file: %s was not opened. ABORT.",chTaskFile));
      return;
    }
    dhcTask = (AliDhcTask*) fiDhcTask->Get(chTaskName);
  }
  else { // create a new task
    // Binning
    Double_t arPt[5] = {0.5, 1.0, 2.0, 4.0};
    TAxis *axPt = new TAxis(3,arPt);
    Double_t arCent[5] = {0.0, 20.0, 40.0, 60.0, 100.0};
    TAxis *axCent = new TAxis(4,arCent);
    TAxis *axZvtx = new TAxis(1,-10.0,10.0);
    Double_t arCentMix[9] = {0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 80.0, 100.0};
    TAxis *axCentMix = new TAxis(8,arCentMix);
    TAxis *axZvtxMix = new TAxis(8,-10.0,10.0);
    
    // Efficiency correction files
    TFile *fiHEff  = 0x0;
    TFile *fiMuEff = 0x0;
    THnF* hHEff    = 0x0;
    THnF* hMuEff   = 0x0;
    if (!chHEffFile.EqualTo("")) {
      fiHEff = TFile::Open(chHEffFile,"OLD");
      if (!fiHEff){
        Error("AddTaskDhc",Form("Requested file: %s was not opened. ABORT.",chHEffFile));
        return;
      }
      hHEff = (THnF*) fiHEff->Get("correction");
    }
    if (!chMuEffFile.EqualTo("")) {
      fiMuEff = TFile::Open(chMuEffFile,"OLD");
      if (!fiMuEff){
        Error("AddTaskDhc",Form("Requested file: %s was not opened. ABORT.",chMuEffFile));
        return;
      }
      hMuEff = (THnF*) fiMuEff->Get("correction");
    }
    
    dhcTask = new AliDhcTask("Task_Dhc_Temp_Name");
    dhcTask->SetDoFillSame(doFillSame);
    if (iAna==1) { // h-h
      Int_t nDetaBins = 40;
      Int_t nDPhiBins = 72;
      dhcTask->SetAnaMode(AliDhcTask::kHH);
      dhcTask->SetHEffT(hHEff);
      dhcTask->SetHEffA(hHEff);
      dhcTask->SetEtaMax(1.2);
      dhcTask->SetPtTACrit(kTRUE);
      sprintf(chExtraName,"%s_HH",chExtraName);
      if (hHEff) {
        sprintf(chExtraName,"%s_corrH",chExtraName);
      }
    } else if (iAna==2) { // mu-h
      Int_t nDetaBins = 100;
      Int_t nDPhiBins = 36;
      dhcTask->SetAnaMode(AliDhcTask::kMuH);
      dhcTask->SetHEffT(hMuEff);
      dhcTask->SetHEffA(hHEff);
      dhcTask->SetEtaMax(5.0);
      dhcTask->SetPtTACrit(kFALSE);
      dhcTask->SetTriggerMatch(doTrigMatch);
      sprintf(chExtraName,"%s_MuH",chExtraName);
      if (hMuEff) {
        sprintf(chExtraName,"%s_corrMu",chExtraName);
      }
      if (hHEff) {
        sprintf(chExtraName,"%s_corrH",chExtraName);
      }
    } else if (iAna==3) { // h-mu
      Int_t nDetaBins = 100;
      Int_t nDPhiBins = 36;
      dhcTask->SetAnaMode(AliDhcTask::kHMu);
      dhcTask->SetHEffT(hHEff);
      dhcTask->SetHEffA(hMuEff);
      dhcTask->SetEtaMax(5.0);
      dhcTask->SetPtTACrit(kFALSE);
      dhcTask->SetTriggerMatch(doTrigMatch);
      sprintf(chExtraName,"%s_HMu",chExtraName);
      if (hMuEff) {
        sprintf(chExtraName,"%s_corrMu",chExtraName);
      }
      if (hHEff) {
        sprintf(chExtraName,"%s_corrH",chExtraName);
      }
    } else if (iAna==4) { // mu-mu
      Int_t nDetaBins = 60;
      Int_t nDPhiBins = 36;
      dhcTask->SetAnaMode(AliDhcTask::kMuMu);
      dhcTask->SetHEffT(hMuEff);
      dhcTask->SetHEffA(hMuEff);
      dhcTask->SetEtaMax(5.0);
      dhcTask->SetPtTACrit(kFALSE);
      dhcTask->SetTriggerMatch(doTrigMatch);
      sprintf(chExtraName,"%s_MuMu",chExtraName);
      if (hMuEff) {
        sprintf(chExtraName,"%s_corrMu",chExtraName);
      }
      dhcTask->SetTrackDepth(100);
      dhcTask->SetDoFillSame(kTRUE);
    } else {
      Error("AddTaskDhc", Form("iAna %d not known", iAna));
    }
    dhcTask->SetTracksName(chNTracks);
    dhcTask->SetDoWeights(kFALSE);
    dhcTask->SetDoMassCut(doMassCut);
    dhcTask->SetClassName(className);
    dhcTask->SetCentMethod(centSel);
    dhcTask->SetDEtaDPhiBins(nDetaBins,nDPhiBins);
    dhcTask->SetPtTBins(axPt);
    dhcTask->SetPtABins(axPt);
    dhcTask->SetCentBins(axCent);
    dhcTask->SetZVtxBins(axZvtx);
    dhcTask->SetCentMixBins(axCentMix);
    dhcTask->SetZVtxMixBins(axZvtxMix);
    dhcTask->SelectCollisionCandidates(trigsel);
    dhcTask->SetVerbosity(0);
  }
  if (!dhcTask) {
    Error("AddTaskDhc","no dhcTask");
    return 0x0;
  }

  // make a unique task name
  Char_t chNewTaskName[256];
  if (chTaskName.EqualTo("")) {
    sprintf(chNewTaskName,"Task_Dhc%s_%s_%s",chExtraName,centSel.Data(),chUName.Data());
  } else {
    sprintf(chNewTaskName,"%s",chTaskName.Data());
  }

  AliDhcTask *mgrTask = mgr->GetTask(chNewTaskName);
  if (mgrTask)
    sprintf(chNewTaskName,"%s_bis%04.0f",chNewTaskName,10000*gRandom->Rndm());
  
  dhcTask->SetName(chNewTaskName);
  Info("AddTaskDhc",Form("DHC Analysis, adding task %s",dhcTask->GetName()));
  mgr->AddTask(dhcTask);
  AliAnalysisDataContainer *co_Dhc = mgr->CreateContainer(Form("Cont_%s",chNewTaskName),
                                                          TList::Class(),
                                                          AliAnalysisManager::kOutputContainer,
                                                          Form("%s:PWGCF_out_%s", AliAnalysisManager::GetCommonFileName(), chNewTaskName));
  mgr->ConnectInput(dhcTask,0,mgr->GetCommonInputContainer());
  mgr->ConnectOutput(dhcTask,1,co_Dhc);
  
  return dhcTask;
}
 AddTaskDhc.C:1
 AddTaskDhc.C:2
 AddTaskDhc.C:3
 AddTaskDhc.C:4
 AddTaskDhc.C:5
 AddTaskDhc.C:6
 AddTaskDhc.C:7
 AddTaskDhc.C:8
 AddTaskDhc.C:9
 AddTaskDhc.C:10
 AddTaskDhc.C:11
 AddTaskDhc.C:12
 AddTaskDhc.C:13
 AddTaskDhc.C:14
 AddTaskDhc.C:15
 AddTaskDhc.C:16
 AddTaskDhc.C:17
 AddTaskDhc.C:18
 AddTaskDhc.C:19
 AddTaskDhc.C:20
 AddTaskDhc.C:21
 AddTaskDhc.C:22
 AddTaskDhc.C:23
 AddTaskDhc.C:24
 AddTaskDhc.C:25
 AddTaskDhc.C:26
 AddTaskDhc.C:27
 AddTaskDhc.C:28
 AddTaskDhc.C:29
 AddTaskDhc.C:30
 AddTaskDhc.C:31
 AddTaskDhc.C:32
 AddTaskDhc.C:33
 AddTaskDhc.C:34
 AddTaskDhc.C:35
 AddTaskDhc.C:36
 AddTaskDhc.C:37
 AddTaskDhc.C:38
 AddTaskDhc.C:39
 AddTaskDhc.C:40
 AddTaskDhc.C:41
 AddTaskDhc.C:42
 AddTaskDhc.C:43
 AddTaskDhc.C:44
 AddTaskDhc.C:45
 AddTaskDhc.C:46
 AddTaskDhc.C:47
 AddTaskDhc.C:48
 AddTaskDhc.C:49
 AddTaskDhc.C:50
 AddTaskDhc.C:51
 AddTaskDhc.C:52
 AddTaskDhc.C:53
 AddTaskDhc.C:54
 AddTaskDhc.C:55
 AddTaskDhc.C:56
 AddTaskDhc.C:57
 AddTaskDhc.C:58
 AddTaskDhc.C:59
 AddTaskDhc.C:60
 AddTaskDhc.C:61
 AddTaskDhc.C:62
 AddTaskDhc.C:63
 AddTaskDhc.C:64
 AddTaskDhc.C:65
 AddTaskDhc.C:66
 AddTaskDhc.C:67
 AddTaskDhc.C:68
 AddTaskDhc.C:69
 AddTaskDhc.C:70
 AddTaskDhc.C:71
 AddTaskDhc.C:72
 AddTaskDhc.C:73
 AddTaskDhc.C:74
 AddTaskDhc.C:75
 AddTaskDhc.C:76
 AddTaskDhc.C:77
 AddTaskDhc.C:78
 AddTaskDhc.C:79
 AddTaskDhc.C:80
 AddTaskDhc.C:81
 AddTaskDhc.C:82
 AddTaskDhc.C:83
 AddTaskDhc.C:84
 AddTaskDhc.C:85
 AddTaskDhc.C:86
 AddTaskDhc.C:87
 AddTaskDhc.C:88
 AddTaskDhc.C:89
 AddTaskDhc.C:90
 AddTaskDhc.C:91
 AddTaskDhc.C:92
 AddTaskDhc.C:93
 AddTaskDhc.C:94
 AddTaskDhc.C:95
 AddTaskDhc.C:96
 AddTaskDhc.C:97
 AddTaskDhc.C:98
 AddTaskDhc.C:99
 AddTaskDhc.C:100
 AddTaskDhc.C:101
 AddTaskDhc.C:102
 AddTaskDhc.C:103
 AddTaskDhc.C:104
 AddTaskDhc.C:105
 AddTaskDhc.C:106
 AddTaskDhc.C:107
 AddTaskDhc.C:108
 AddTaskDhc.C:109
 AddTaskDhc.C:110
 AddTaskDhc.C:111
 AddTaskDhc.C:112
 AddTaskDhc.C:113
 AddTaskDhc.C:114
 AddTaskDhc.C:115
 AddTaskDhc.C:116
 AddTaskDhc.C:117
 AddTaskDhc.C:118
 AddTaskDhc.C:119
 AddTaskDhc.C:120
 AddTaskDhc.C:121
 AddTaskDhc.C:122
 AddTaskDhc.C:123
 AddTaskDhc.C:124
 AddTaskDhc.C:125
 AddTaskDhc.C:126
 AddTaskDhc.C:127
 AddTaskDhc.C:128
 AddTaskDhc.C:129
 AddTaskDhc.C:130
 AddTaskDhc.C:131
 AddTaskDhc.C:132
 AddTaskDhc.C:133
 AddTaskDhc.C:134
 AddTaskDhc.C:135
 AddTaskDhc.C:136
 AddTaskDhc.C:137
 AddTaskDhc.C:138
 AddTaskDhc.C:139
 AddTaskDhc.C:140
 AddTaskDhc.C:141
 AddTaskDhc.C:142
 AddTaskDhc.C:143
 AddTaskDhc.C:144
 AddTaskDhc.C:145
 AddTaskDhc.C:146
 AddTaskDhc.C:147
 AddTaskDhc.C:148
 AddTaskDhc.C:149
 AddTaskDhc.C:150
 AddTaskDhc.C:151
 AddTaskDhc.C:152
 AddTaskDhc.C:153
 AddTaskDhc.C:154
 AddTaskDhc.C:155
 AddTaskDhc.C:156
 AddTaskDhc.C:157
 AddTaskDhc.C:158
 AddTaskDhc.C:159
 AddTaskDhc.C:160
 AddTaskDhc.C:161
 AddTaskDhc.C:162
 AddTaskDhc.C:163
 AddTaskDhc.C:164
 AddTaskDhc.C:165
 AddTaskDhc.C:166
 AddTaskDhc.C:167
 AddTaskDhc.C:168
 AddTaskDhc.C:169
 AddTaskDhc.C:170
 AddTaskDhc.C:171
 AddTaskDhc.C:172
 AddTaskDhc.C:173
 AddTaskDhc.C:174
 AddTaskDhc.C:175
 AddTaskDhc.C:176
 AddTaskDhc.C:177
 AddTaskDhc.C:178
 AddTaskDhc.C:179
 AddTaskDhc.C:180
 AddTaskDhc.C:181
 AddTaskDhc.C:182
 AddTaskDhc.C:183
 AddTaskDhc.C:184
 AddTaskDhc.C:185
 AddTaskDhc.C:186
 AddTaskDhc.C:187
 AddTaskDhc.C:188