ROOT logo
AliAnalysisTaskJetHBOM *AddTaskJetHBOM(char* bRec = "AOD",char* bGen = "",UInt_t filterMask = 272, UInt_t iPhysicsSelectionFlag = AliVEvent::kAny,Char_t *jf = "KT", Float_t radius = 0.4,Int_t kWriteAOD = kFALSE,char* deltaFile = "",Float_t ptTrackCut = 0.15, Float_t etaTrackWindow = 0.9,Float_t vertexWindow = 10.,TString effLoc = "$ALICE_ROOT/OADB/PWGJE/HBOM/fastMCInput_LHC10h_110719a.root",Int_t fNHBOM = 0, Int_t constCone = kFALSE, Float_t constConePhi = 0, Float_t constConeEta = 0);

Int_t kBackgroundModeCl = 0;
Float_t kPtTrackCutCl = 0.15;
Float_t kTrackEtaWindowCl = 0.8;
Float_t kVertexWindowCl = 10;


AliAnalysisTaskJetHBOM *AddTaskJetHBOM(char* bRec,char* bGen ,UInt_t filterMask,UInt_t iPhysicsSelectionFlag,Char_t *jf,Float_t radius,Int_t kWriteAOD,char *deltaFile,Float_t ptTrackCut,Float_t etaTrackWindow,Float_t vertexWindow,TString effLoc,Int_t fNHBOM, Int_t constCone, Float_t constConePhi,Float_t constConeEta)
 {
   //if constCone is true, the random Cone positon is set to constConePhi and constConeEta. Else the cone is random set and the parameters constConePhi and constConeEta are irrelevant

 // Creates a jet fider task, configures it and adds it to the analysis manager.
   kPtTrackCutCl = ptTrackCut;
   kTrackEtaWindowCl = etaTrackWindow;
   kVertexWindowCl = vertexWindow;

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

    TString type = mgr->GetInputEventHandler()->GetDataType();
    TString typeRec(bRec);
    TString typeGen(bGen);
    if(!typeRec.Contains("AODextra")) {
      typeGen.ToUpper();
      typeRec.ToUpper();
    }
    cout << "typeRec: " << typeRec << endl;
    // Create the task and configure it.
    //===========================================================================


    TString cAdd = "";
    cAdd += Form("%02d_",(int)((radius+0.01)*10.));
    cAdd += Form("B%d",(int)kBackgroundModeCl);
    cAdd += Form("_Filter%05d",filterMask);
    cAdd += Form("_Cut%05d",(int)(1000.*kPtTrackCutCl));
    cAdd += Form("_hbom%02d",fNHBOM);
    if(constCone){
      cAdd += Form("_constConePhi%02dEta%02d",constConePhi,constConeEta);
    }
    Printf("%s %E",cAdd.Data(),kPtTrackCutCl);
    AliAnalysisTaskJetHBOM* hbom = new  AliAnalysisTaskJetHBOM(Form("JetHBOM%s_%s%s",bRec,jf,cAdd.Data()));
      
   hbom->SetFilterMask(filterMask); 
   //   hbom->SetUseGlobalSelection(kTRUE); 
   hbom->SetVtxCuts(kVertexWindowCl,1);//sets fVtxZCut and fVtxR2Cut
   if(type == "AOD"){
     // Assume all jet are produced already
     hbom->SetAODTrackInput(kTRUE);
     hbom->SetAODMCInput(kTRUE);
   }

   if(typeRec.Contains("AODMC2b")){// work down from the top AODMC2b -> AODMC2 -> AODMC -> AOD
     hbom->SetTrackTypeRec(AliAnalysisTaskJetHBOM::kTrackAODMCChargedAcceptance);
     hbom->SetTrackPtCut(kPtTrackCutCl);
     hbom->SetTrackEtaWindow(kTrackEtaWindowCl);
   }
   else if (typeRec.Contains("AODMC2")){
     hbom->SetTrackTypeRec(AliAnalysisTaskJetHBOM::kTrackAODMCCharged);
     hbom->SetTrackPtCut(kPtTrackCutCl);
     hbom->SetTrackEtaWindow(5);
   }
   else if (typeRec.Contains("AODMC")){
     hbom->SetTrackTypeRec(AliAnalysisTaskJetHBOM::kTrackAODMCAll);
     hbom->SetTrackPtCut(kPtTrackCutCl);
     hbom->SetTrackEtaWindow(5);
   }
   else if (typeRec.Contains("AODextraonly")) {
     hbom->SetTrackTypeRec(AliAnalysisTaskJetHBOM::kTrackAODextraonly);
     hbom->SetTrackPtCut(kPtTrackCutCl);
     hbom->SetTrackEtaWindow(kTrackEtaWindowCl);
   }
   else if (typeRec.Contains("AODextra")) {
     cout << "AliAnalysisTaskJetHBOM::kTrackAODextra: " << AliAnalysisTaskJetHBOM::kTrackAODextra << endl;
     hbom->SetTrackTypeRec(AliAnalysisTaskJetHBOM::kTrackAODextra);
     hbom->SetTrackPtCut(kPtTrackCutCl);
     hbom->SetTrackEtaWindow(kTrackEtaWindowCl);
   }
   else if (typeRec.Contains("AOD")) {
     hbom->SetTrackTypeRec(AliAnalysisTaskJetHBOM::kTrackAOD);
     hbom->SetTrackPtCut(kPtTrackCutCl);
     hbom->SetTrackEtaWindow(kTrackEtaWindowCl);
   }

   hbom->SetRparam(radius);
   hbom->SetGhostArea(0.005);
   hbom->SetGhostEtamax(kTrackEtaWindowCl);

   switch (jf) {
   case "ANTIKT":
     hbom->SetAlgorithm(2); // antikt from fastjet/JetDefinition.hh
     break;
   case "CA":
     hbom->SetAlgorithm(1); // CA from fastjet/JetDefinition.hh
     break;
   case "KT":
     hbom->SetAlgorithm(0); // kt from fastjet/JetDefinition.hh
     break;
   default:
     ::Error("AddTaskJetHBOM", "Wrong jet finder selected\n");
     return 0;
   }

   //Constant Cone analysis
   if(constCone){
     hbom->SetRandConePos(constConeEta,constConePhi);
   }

   
   if(kWriteAOD){
     if(outputFile.Length())hbom->SetJetOutputFile(outputFile);
     hbom->SetJetOutputBranch(Form("hbom%s_%s%s",bRec,jf,cAdd.Data()));
     hbom->SetJetOutputMinPt(0); // store only jets above a certain threshold
   }

   //sets number of detector hits
   hbom->SetfNHBOM(fNHBOM);

   //physics Selection
   if(iPhysicsSelectionFlag)hbom->SelectCollisionCandidates(iPhysicsSelectionFlag);

   mgr->AddTask(hbom);

   // 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
   //==============================================================================
   AliAnalysisDataContainer *coutput1_Spec = mgr->CreateContainer(Form("hbom_%s_%s_%s%s",bRec,bGen,jf,cAdd.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_hbom_%s_%s_%s%s",AliAnalysisManager::GetCommonFileName(),bRec,bGen,jf,cAdd.Data()));

   mgr->ConnectInput  (hbom, 0, mgr->GetCommonInputContainer());
   mgr->ConnectOutput (hbom, 0, mgr->GetCommonOutputContainer());
   mgr->ConnectOutput (hbom,  1, coutput1_Spec );
   
   //loads efficiencies
   hbom->SetEfficiencyPt(GetEfficiencyPt(effLoc));
   hbom->SetEfficiencyPhi(GetEfficiencyPhi(effLoc));
   
   return hbom;
}

//loads single track pT efficiency from root file
TH1F *GetEfficiencyPt(TString effLoc){
  TFile *fIn = 0;
  TH1F *hEffPt = 0; 

  if(!fIn)fIn = TFile::Open(effLoc.Data());
  if(!fIn)Printf("%s%d no input data",(char*)__FILE__,__LINE__);
  if(!hEffPt)hEffPt = (TH1F*)fIn->Get("hSingleTrackEffPt");
  if(!hEffPt)Printf("%s%d no single track efficiency spectrum available",(char*)__FILE__,__LINE__);
  gROOT->cd();

  TH1F *hEffPtClone = (TH1F*)hEffPt->Clone(hEffPt->GetName()); 
  fIn->Close();
  return hEffPtClone;


}

//loads phi-pT efficiency from root file
TH2D *GetEfficiencyPhi(TString effLoc){
  TFile *fIn = 0;
  TH2D *hPhiPt = 0; 

  if(!fIn)fIn = TFile::Open(effLoc.Data());
  if(!fIn)Printf("%s%d no input data",(char*)__FILE__,__LINE__);
  if(!hPhiPt)hPhiPt = (TH2D*)fIn->Get("h2TrackPtPhiNorm");
  if(!hPhiPt) cout<<"Could not load h2TrackPtPhiNorm"<<endl; 
  if(!hPhiPt)Printf("%s%d no phi-pt efficiency spectrum available",(char*)__FILE__,__LINE__);

  gROOT->cd();
  TH2D *hPhiPtClone = (TH2D*)hPhiPt->Clone(hPhiPt->GetName()); 
  fIn->Close();
  return hPhiPtClone;

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