ROOT logo
Float_t kPtTrackMin = 0.15; // pt cut on tracks
Int_t kDetectorType = 1;    // 0 = MC, 1 = TPC

AliAnalysisDataContainer*  cout_jet_cont = 0x0;

void SetJetReaderExchangeContainer(AliAnalysisDataContainer* acont) {
  cout_jet_cont = acont;

}

AliAnalysisDataContainer* GetJetReaderExchangeContainer() { return cout_jet_cont;}
AliAnalysisDataContainer* AddJetExchangeContainer(const char* contname) { return AliAnalysisManager::GetAnalysisManager()->CreateContainer(contname, TTree::Class(),AliAnalysisManager::kExchangeContainer);}

AliJetReader *CreateJetReader(AliAnalysisDataContainer* contname,Char_t *jr,UInt_t filterMask); // Common config

AliAnalysisTaskJetsReader *AddTaskJetsReader(AliAnalysisDataContainer* contname,Char_t *jr, UInt_t filterMask = 0,Float_t ptTrackMin = 0.15 , Int_t dettype = 1); // for the new AF
Int_t AddTaskJetsReaderDelta(AliAnalysisDataContainer* contname,char *nonStdFile = "",UInt_t filterMask = 0,Bool_t kUseAODMC = kTRUE,UInt_t runFlag = 1|4|32|128|256);     
AliAnalysisTaskJetsReader *AddTaskJetsReader(AliAnalysisDataContainer* contname,UInt_t filterMask = 0);

AliAnalysisTaskJetsReader *AddTaskJetsReader(const char* contname, UInt_t filterMask = 0) { return AddTaskJetsReader(AddJetExchangeContainer(contname),filterMask); } // LEGO trains  
AliAnalysisTaskJetsReader *AddTaskJetsReader(const char* contname,Char_t *jr, UInt_t filterMask = 0,Float_t ptTrackMin = 0.15 , Int_t dettype = 1) {  
 return AddTaskJetsReader(AddJetExchangeContainer(contname),jr,filterMask,ptTrackMin,dettype); 

}

AliAnalysisTaskJetsReader *AddTaskJetsReader(AliAnalysisDataContainer* contname,UInt_t filterMask){
  // fills the standard input "jets" branch in the AOD
  // need the ESDFilter to run before, to access the AODtracks
  // Tracks selected by the first Filter (1<<0)
  // needs to be adapted for different cuts
  

  return AddTaskJetsReader(contname,"AOD",filterMask);

}



Int_t AddTaskJetsReaderDelta(AliAnalysisDataContainer* contname,char *nonStdFile,UInt_t filterMask,Bool_t kUseAODMC,UInt_t runFlag){

  // Adds a whole set of jet finders  all to be written
  // to a delta AOD
  
  // this can in principle be done also with on the fly 
  // if we have an ESD input jet fidner task does automatically fetch the ouput aod

  
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskJetsReaderDelta", "No analysis manager to connect to.");
    return -1;
  }  
  
  
  // Check the analysis type using the event handlers connected to the analysis manager.
  //==============================================================================
  if (!mgr->GetInputEventHandler()) {
    ::Error("AddTaskJetsReaderDelta", "This task requires an input event handler");
    return -1;
  }


  AliAODHandler *aodh = (AliAODHandler*)mgr->GetOutputEventHandler();
  if (!aodh) {
    ::Error("AddTaskJetsReaderDelta", "This task needs an output event handler");
    return -1;
  }

  TString outFile(nonStdFile);


  AliAnalysisTaskJetsReader *taskjetsReader = 0;
  Int_t iCount = 0;

  const char *cReader[4] = {"AOD","AODMC","AODMC2","AODMC2b"};  

  

  // Ligne a revoir
  //  if(!kUseAODMC)ib=1; // switch OFF MC if we do not have it
  for(int ib = 0;ib<4;ib++){      
    if(1<<ib){
      cout << "cReader[" << ib << "]: " << cReader[ib] << ", filterMask: " << filterMask << endl;
      taskjetsReader = AddTaskJetsReader(contname,cReader[ib],filterMask);
      if(taskjetsReader){
	if(outFile.Length()>0)taskjetsReader->SetNonStdOutputFile(outFile.Data());
      }
    }
  }
  return 0;
}

AliAnalysisTaskJetsReader *AddTaskJetsReader(AliAnalysisDataContainer* contname,Char_t *jr, UInt_t filterMask,Float_t ptTrackMin,Int_t dettype)
{
  // Creates a jet finder task, configures it and adds it to the analysis manager.

  kPtTrackMin = ptTrackMin;
  kDetectorType = dettype;

  // Get the pointer to the existing analysis manager via the static access method.
  //==============================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskJetsReader", "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("AddTaskJetsReader", "This task requires an input event handler");
    return NULL;
  }

  AliAODHandler *aodh = (AliAODHandler*)mgr->GetOutputEventHandler();
  if (!aodh) {
    ::Error("AddTaskJetsReader", "This task needs an output event handler");
    return NULL;
  }   
  

  // Create the task and configure it.
  //===========================================================================
  AliAnalysisTaskJetsReader *taskjetsReader;
  AliJetReader *er = CreateJetReader(contname,jr,filterMask);

  taskjetsReader = new AliAnalysisTaskJetsReader(Form("JetAnalysis%s",jr));

  // Connect jet finder to task.
  taskjetsReader->SetJetReader(er);
  taskjetsReader->SetConfigFile("");
  taskjetsReader->SetDebugLevel(-1);
  mgr->SetGlobalStr(cout_jet_cont->GetName(),Form("%s#_Filter%05d_Cut%05d",jr,filterMask,(int)((1000.*ptTrackMin))));
  mgr->AddTask(taskjetsReader);

  cout_jet_cont = GetJetReaderExchangeContainer();
  if(! cout_jet_cont) { ::Error("AddTaskJetsReader", "This task needs an Exchange container");  return NULL;}
  // Create ONLY the output containers for the data produced by the task.
  // Get and connect other common input/output containers via the manager as below
  //==============================================================================
  mgr->ConnectInput  (taskjetsReader, 0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput (taskjetsReader, 0, mgr->GetCommonOutputContainer());
  mgr->ConnectOutput (taskjetsReader, 1, cout_jet_cont); 
   

  return taskjetsReader;
}


AliJetReader *CreateJetReader(AliAnalysisDataContainer* contname,Char_t *jr,UInt_t filterMask){
  AliJetReader *er = 0;
  SetJetReaderExchangeContainer(contname);
  Float_t ptCut  = kPtTrackMin ; // cut on track p_T
 
  switch (jr) {
  case "ESD":
    AliJetReaderHeader *jrh = new AliJetReaderHeader(kDetectorType);
    jrh->SetDataType("ESD");
    jrh->SetComment("ESD Reader");
    jrh->SetDebug(-1);
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-0.9,0.9);
    jrh->SetFiducialPhi(0,2*TMath::Pi());
    // Define reader and set its header                                     
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;
  case "AOD":
    AliJetReaderHeader *jrh = new AliJetReaderHeader(kDetectorType);
    jrh->SetDataType("AOD");
    jrh->SetComment("AOD Reader");
    jrh->SetDebug(-1);
    jrh->SetPtCut(ptCut);
    jrh->SetTestFilterMask(32); // Change this one for a different set of cuts
    if(filterMask>0)jrh->SetTestFilterMask(filterMask); 
    jrh->SetFilterType(0); // Filter type
    jrh->SetFiducialEta(-0.9,0.9);
    jrh->SetFiducialPhi(0,2*TMath::Pi());
    // Define reader and set its header
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODMC":
    AliJetReaderHeader *jrh = new AliJetReaderHeader(/*kDetectorType =*/0);
    jrh->SetComment("AOD MC Reader");
    jrh->SetDataType("AODMC");
    jrh->SetDebug(-1);
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9
    // Define reader and set its header
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODMC2":
    AliJetReaderHeader *jrh = new AliJetReaderHeader(/*kDetectorType =*/0);
    jrh->SetDataType("AODMC2");
    jrh->SetComment("AOD MC Reader");
    jrh->SetDebug(-1);
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9
    // Define reader and set its header
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODMC2b":
    AliJetReaderHeader *jrh = new AliJetReaderHeader(/*kDetectorType =*/0);
    jrh->SetDataType("AODMC2b");
    jrh->SetComment("AOD MC Reader");
    jrh->SetDebug(-1);
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-0.9,0.9); 
    // Define reader and set its header
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODextra":
    AliJetReaderHeader *jrh = new AliJetReaderHeader(kDetectorType);
    jrh->SetDataType("AODextra");
    jrh->SetComment("AOD Reader with extra branch");
    jrh->SetDebug(-1);
    jrh->SetPtCut(ptCut);
    jrh->SetTestFilterMask(32); // Change this one for a different set of cuts
    if(filterMask>0)jrh->SetTestFilterMask(filterMask);
    // Define reader and set its header
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODextraonly":
    AliJetReaderHeader *jrh = new AliJetReaderHeader(kDetectorType);
    jrh->SetDataType("AODextraonly");
    jrh->SetComment("AOD Reader with extra branch");
    jrh->SetDebug(-1);
    jrh->SetPtCut(ptCut);
    jrh->SetTestFilterMask(32); // Change this one for a different set of cuts
    if(filterMask>0)jrh->SetTestFilterMask(filterMask);
    // Define reader and set its header
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;

  case "MC":
    AliJetKineReaderHeader *jrh = new AliJetKineReaderHeader();
    jrh->SetDataType("MC");
    jrh->SetComment("MC full Kinematics");
    jrh->SetDebug(-1);
    jrh->SetFastSimTPC(kFALSE);
    jrh->SetFastSimEMCAL(kFALSE);
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9                                                                             
    // Define reader and set its header                                     
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;
  case "MC2":
    AliJetKineReaderHeader *jrh = new AliJetKineReaderHeader();
    jrh->SetDataType("MC2");
    jrh->SetComment("MC full Kinematics spearate config charged only");
    jrh->SetDebug(-1);
    jrh->SetFastSimTPC(kFALSE);
    jrh->SetFastSimEMCAL(kFALSE);
    jrh->SetChargedOnly(kTRUE);
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0 .9                                                                             
    // Define reader and set its header                                     
    er = new AliJetReader();
    er->SetReaderHeader(jrh);
    break;

  default:
    ::Error("AddTaskJetsReader", Form("Wrong jet reader selected: %s\n",jr));
    return 0x0;
    break;
  }

  return er;

}
 AddTaskJetsReader.C:1
 AddTaskJetsReader.C:2
 AddTaskJetsReader.C:3
 AddTaskJetsReader.C:4
 AddTaskJetsReader.C:5
 AddTaskJetsReader.C:6
 AddTaskJetsReader.C:7
 AddTaskJetsReader.C:8
 AddTaskJetsReader.C:9
 AddTaskJetsReader.C:10
 AddTaskJetsReader.C:11
 AddTaskJetsReader.C:12
 AddTaskJetsReader.C:13
 AddTaskJetsReader.C:14
 AddTaskJetsReader.C:15
 AddTaskJetsReader.C:16
 AddTaskJetsReader.C:17
 AddTaskJetsReader.C:18
 AddTaskJetsReader.C:19
 AddTaskJetsReader.C:20
 AddTaskJetsReader.C:21
 AddTaskJetsReader.C:22
 AddTaskJetsReader.C:23
 AddTaskJetsReader.C:24
 AddTaskJetsReader.C:25
 AddTaskJetsReader.C:26
 AddTaskJetsReader.C:27
 AddTaskJetsReader.C:28
 AddTaskJetsReader.C:29
 AddTaskJetsReader.C:30
 AddTaskJetsReader.C:31
 AddTaskJetsReader.C:32
 AddTaskJetsReader.C:33
 AddTaskJetsReader.C:34
 AddTaskJetsReader.C:35
 AddTaskJetsReader.C:36
 AddTaskJetsReader.C:37
 AddTaskJetsReader.C:38
 AddTaskJetsReader.C:39
 AddTaskJetsReader.C:40
 AddTaskJetsReader.C:41
 AddTaskJetsReader.C:42
 AddTaskJetsReader.C:43
 AddTaskJetsReader.C:44
 AddTaskJetsReader.C:45
 AddTaskJetsReader.C:46
 AddTaskJetsReader.C:47
 AddTaskJetsReader.C:48
 AddTaskJetsReader.C:49
 AddTaskJetsReader.C:50
 AddTaskJetsReader.C:51
 AddTaskJetsReader.C:52
 AddTaskJetsReader.C:53
 AddTaskJetsReader.C:54
 AddTaskJetsReader.C:55
 AddTaskJetsReader.C:56
 AddTaskJetsReader.C:57
 AddTaskJetsReader.C:58
 AddTaskJetsReader.C:59
 AddTaskJetsReader.C:60
 AddTaskJetsReader.C:61
 AddTaskJetsReader.C:62
 AddTaskJetsReader.C:63
 AddTaskJetsReader.C:64
 AddTaskJetsReader.C:65
 AddTaskJetsReader.C:66
 AddTaskJetsReader.C:67
 AddTaskJetsReader.C:68
 AddTaskJetsReader.C:69
 AddTaskJetsReader.C:70
 AddTaskJetsReader.C:71
 AddTaskJetsReader.C:72
 AddTaskJetsReader.C:73
 AddTaskJetsReader.C:74
 AddTaskJetsReader.C:75
 AddTaskJetsReader.C:76
 AddTaskJetsReader.C:77
 AddTaskJetsReader.C:78
 AddTaskJetsReader.C:79
 AddTaskJetsReader.C:80
 AddTaskJetsReader.C:81
 AddTaskJetsReader.C:82
 AddTaskJetsReader.C:83
 AddTaskJetsReader.C:84
 AddTaskJetsReader.C:85
 AddTaskJetsReader.C:86
 AddTaskJetsReader.C:87
 AddTaskJetsReader.C:88
 AddTaskJetsReader.C:89
 AddTaskJetsReader.C:90
 AddTaskJetsReader.C:91
 AddTaskJetsReader.C:92
 AddTaskJetsReader.C:93
 AddTaskJetsReader.C:94
 AddTaskJetsReader.C:95
 AddTaskJetsReader.C:96
 AddTaskJetsReader.C:97
 AddTaskJetsReader.C:98
 AddTaskJetsReader.C:99
 AddTaskJetsReader.C:100
 AddTaskJetsReader.C:101
 AddTaskJetsReader.C:102
 AddTaskJetsReader.C:103
 AddTaskJetsReader.C:104
 AddTaskJetsReader.C:105
 AddTaskJetsReader.C:106
 AddTaskJetsReader.C:107
 AddTaskJetsReader.C:108
 AddTaskJetsReader.C:109
 AddTaskJetsReader.C:110
 AddTaskJetsReader.C:111
 AddTaskJetsReader.C:112
 AddTaskJetsReader.C:113
 AddTaskJetsReader.C:114
 AddTaskJetsReader.C:115
 AddTaskJetsReader.C:116
 AddTaskJetsReader.C:117
 AddTaskJetsReader.C:118
 AddTaskJetsReader.C:119
 AddTaskJetsReader.C:120
 AddTaskJetsReader.C:121
 AddTaskJetsReader.C:122
 AddTaskJetsReader.C:123
 AddTaskJetsReader.C:124
 AddTaskJetsReader.C:125
 AddTaskJetsReader.C:126
 AddTaskJetsReader.C:127
 AddTaskJetsReader.C:128
 AddTaskJetsReader.C:129
 AddTaskJetsReader.C:130
 AddTaskJetsReader.C:131
 AddTaskJetsReader.C:132
 AddTaskJetsReader.C:133
 AddTaskJetsReader.C:134
 AddTaskJetsReader.C:135
 AddTaskJetsReader.C:136
 AddTaskJetsReader.C:137
 AddTaskJetsReader.C:138
 AddTaskJetsReader.C:139
 AddTaskJetsReader.C:140
 AddTaskJetsReader.C:141
 AddTaskJetsReader.C:142
 AddTaskJetsReader.C:143
 AddTaskJetsReader.C:144
 AddTaskJetsReader.C:145
 AddTaskJetsReader.C:146
 AddTaskJetsReader.C:147
 AddTaskJetsReader.C:148
 AddTaskJetsReader.C:149
 AddTaskJetsReader.C:150
 AddTaskJetsReader.C:151
 AddTaskJetsReader.C:152
 AddTaskJetsReader.C:153
 AddTaskJetsReader.C:154
 AddTaskJetsReader.C:155
 AddTaskJetsReader.C:156
 AddTaskJetsReader.C:157
 AddTaskJetsReader.C:158
 AddTaskJetsReader.C:159
 AddTaskJetsReader.C:160
 AddTaskJetsReader.C:161
 AddTaskJetsReader.C:162
 AddTaskJetsReader.C:163
 AddTaskJetsReader.C:164
 AddTaskJetsReader.C:165
 AddTaskJetsReader.C:166
 AddTaskJetsReader.C:167
 AddTaskJetsReader.C:168
 AddTaskJetsReader.C:169
 AddTaskJetsReader.C:170
 AddTaskJetsReader.C:171
 AddTaskJetsReader.C:172
 AddTaskJetsReader.C:173
 AddTaskJetsReader.C:174
 AddTaskJetsReader.C:175
 AddTaskJetsReader.C:176
 AddTaskJetsReader.C:177
 AddTaskJetsReader.C:178
 AddTaskJetsReader.C:179
 AddTaskJetsReader.C:180
 AddTaskJetsReader.C:181
 AddTaskJetsReader.C:182
 AddTaskJetsReader.C:183
 AddTaskJetsReader.C:184
 AddTaskJetsReader.C:185
 AddTaskJetsReader.C:186
 AddTaskJetsReader.C:187
 AddTaskJetsReader.C:188
 AddTaskJetsReader.C:189
 AddTaskJetsReader.C:190
 AddTaskJetsReader.C:191
 AddTaskJetsReader.C:192
 AddTaskJetsReader.C:193
 AddTaskJetsReader.C:194
 AddTaskJetsReader.C:195
 AddTaskJetsReader.C:196
 AddTaskJetsReader.C:197
 AddTaskJetsReader.C:198
 AddTaskJetsReader.C:199
 AddTaskJetsReader.C:200
 AddTaskJetsReader.C:201
 AddTaskJetsReader.C:202
 AddTaskJetsReader.C:203
 AddTaskJetsReader.C:204
 AddTaskJetsReader.C:205
 AddTaskJetsReader.C:206
 AddTaskJetsReader.C:207
 AddTaskJetsReader.C:208
 AddTaskJetsReader.C:209
 AddTaskJetsReader.C:210
 AddTaskJetsReader.C:211
 AddTaskJetsReader.C:212
 AddTaskJetsReader.C:213
 AddTaskJetsReader.C:214
 AddTaskJetsReader.C:215
 AddTaskJetsReader.C:216
 AddTaskJetsReader.C:217
 AddTaskJetsReader.C:218
 AddTaskJetsReader.C:219
 AddTaskJetsReader.C:220
 AddTaskJetsReader.C:221
 AddTaskJetsReader.C:222
 AddTaskJetsReader.C:223
 AddTaskJetsReader.C:224
 AddTaskJetsReader.C:225
 AddTaskJetsReader.C:226
 AddTaskJetsReader.C:227
 AddTaskJetsReader.C:228
 AddTaskJetsReader.C:229
 AddTaskJetsReader.C:230
 AddTaskJetsReader.C:231
 AddTaskJetsReader.C:232
 AddTaskJetsReader.C:233
 AddTaskJetsReader.C:234
 AddTaskJetsReader.C:235
 AddTaskJetsReader.C:236
 AddTaskJetsReader.C:237
 AddTaskJetsReader.C:238
 AddTaskJetsReader.C:239
 AddTaskJetsReader.C:240
 AddTaskJetsReader.C:241
 AddTaskJetsReader.C:242
 AddTaskJetsReader.C:243
 AddTaskJetsReader.C:244
 AddTaskJetsReader.C:245
 AddTaskJetsReader.C:246
 AddTaskJetsReader.C:247
 AddTaskJetsReader.C:248
 AddTaskJetsReader.C:249
 AddTaskJetsReader.C:250
 AddTaskJetsReader.C:251
 AddTaskJetsReader.C:252
 AddTaskJetsReader.C:253
 AddTaskJetsReader.C:254
 AddTaskJetsReader.C:255
 AddTaskJetsReader.C:256
 AddTaskJetsReader.C:257
 AddTaskJetsReader.C:258
 AddTaskJetsReader.C:259
 AddTaskJetsReader.C:260
 AddTaskJetsReader.C:261
 AddTaskJetsReader.C:262
 AddTaskJetsReader.C:263
 AddTaskJetsReader.C:264
 AddTaskJetsReader.C:265
 AddTaskJetsReader.C:266
 AddTaskJetsReader.C:267
 AddTaskJetsReader.C:268
 AddTaskJetsReader.C:269
 AddTaskJetsReader.C:270
 AddTaskJetsReader.C:271
 AddTaskJetsReader.C:272
 AddTaskJetsReader.C:273
 AddTaskJetsReader.C:274
 AddTaskJetsReader.C:275
 AddTaskJetsReader.C:276
 AddTaskJetsReader.C:277
 AddTaskJetsReader.C:278