ROOT logo
TF1* GetEtaCorrection(TString listname){
 
  TString etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
  
  if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
    Error("ConfigHFEpid2SYS","Eta map not found: %s",etaMap.Data());
    return 0;
  }

  TFile f(etaMap.Data());
  if (!f.IsOpen()) return 0;
  gROOT->cd();
  TList *keys=f.GetListOfKeys();

  for (Int_t i=0; i<keys->GetEntries(); ++i){
    TString kName=keys->At(i)->GetName();
    TPRegexp reg(kName);
    if (reg.MatchB(listname)){
      printf("Using Eta Correction Function: %s\n",kName.Data());
      return (TF1*)f.Get(kName.Data());
    }
  }
  return 0;
}

AliAnalysisTaskHFE* ConfigHFEpid2SYS(Bool_t useMC, 
				     TString appendix, 
				     UChar_t TPCcl=70, UChar_t TPCclPID = 80, UChar_t ITScl=3, 
				     Double_t DCAxy=1000., Double_t DCAz=1000.,
				     Double_t TPCs=0., Double_t TPCu=3.09, Double_t TOFs=3.,
				     Double_t IpSig=3., Bool_t prodcut = kFALSE, Bool_t IPAbs = kTRUE, Int_t itshitpixel = 0, 
				     Bool_t withetacorrection = kTRUE, TString listname="",
				     Int_t ptbin=0,
				     Bool_t kAnalyseTaggedTracks=kFALSE, Bool_t kMCQA=kFALSE, Bool_t kDEStep=kFALSE,
				     Long_t aodfilter=-1){
  //
  // HFE task configuration PID2 (TOF-TPC only!)
  //

  // Name
  printf("appendix %s\n", appendix.Data());

  // hfecuts
  AliHFEcuts *hfecuts = new AliHFEcuts(Form("hfeCutsPID2_%s",appendix.Data()),"HFE cuts TOF TPC");
  hfecuts->CreateStandardCuts();
  hfecuts->SetMinNClustersTPC(TPCcl);
  hfecuts->SetMinNClustersTPCPID(TPCclPID);
  hfecuts->SetMinNClustersITS(ITScl);
  hfecuts->SetMinRatioTPCclusters(0.6);
  hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable);
  hfecuts->SetCutITSpixel(itshitpixel);
  hfecuts->SetCheckITSLayerStatus(kFALSE);
  hfecuts->SetIPcutParam(0,0,0,IpSig,kTRUE,IPAbs);
  if(IpSig>100&&IpSig<300){
    hfecuts->SetIPcutParam(0.0064,0.078,-0.56,0,kFALSE,IPAbs); // used Carlo's old parameter (new: 0.011+0.077*exp(-0.65*pt))
  }
  else if(IpSig>300&&IpSig<320){
    hfecuts->SetIPcutParam(0.0044,0.078,-0.56,0,kFALSE,IPAbs); // used Carlo's old parameter (new: 0.011+0.077*exp(-0.65*pt))
  }
  else if(IpSig>320&&IpSig<350){
    hfecuts->SetIPcutParam(0.0054,0.078,-0.56,0,kFALSE,IPAbs); // used Carlo's old parameter (new: 0.011+0.077*exp(-0.65*pt))
  }
  else if(IpSig>350&&IpSig<500){
    hfecuts->SetIPcutParam(0.011,0.077,-0.65,0,kFALSE,IPAbs); // used Carlo's old parameter (new: 0.011+0.077*exp(-0.65*pt))
  }
  else if(IpSig>500&&IpSig<700){
    hfecuts->SetIPcutParam(0.012,0.077,-0.65,0,kFALSE,IPAbs); // used Carlo's old parameter (new: 0.011+0.077*exp(-0.65*pt))
  }
  else if(IpSig>700&&IpSig<900){
    hfecuts->SetIPcutParam(0.013,0.077,-0.65,0,kFALSE,IPAbs); // used Carlo's old parameter (new: 0.011+0.077*exp(-0.65*pt))
  }

  if(prodcut) hfecuts->SetProductionVertex(0,100,0,100);
  else {
    if((itshitpixel==AliHFEextraCuts::kAny) || (itshitpixel==AliHFEextraCuts::kSecond)) hfecuts->SetProductionVertex(0,7,0,7);
  }
  
  hfecuts->SetMaxImpactParam(DCAxy,DCAz);
  hfecuts->SetTOFPIDStep(kTRUE);
  hfecuts->SetUseMixedVertex(kTRUE);
  hfecuts->SetVertexRange(10.);

  // analysis task
  AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE(Form("HFEanalysisPID2_%s",appendix.Data()));
  task->SetHFECuts(hfecuts);
  task->SetRemovePileUp(kTRUE);
  task->GetPIDQAManager()->SetHighResolutionHistos();
  if(useMC) task->SetHasMCData(kTRUE); // necessary for AOD
  printf("AOD filter %d On/OFF?\n",aodfilter);
  if(aodfilter > 0) {
    printf("ON AOD filter %d\n",aodfilter);
    task->SetUseFilterAOD(kTRUE);
    task->SetFilter(aodfilter);
  }


  // Define Variables
  if(ptbin==1){
    Double_t ptbinning[19] = {0., 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 2., 2.5, 3., 4., 5., 6., 8., 12., 16., 20.};
  }
  else{
    Double_t ptbinning[36] = {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1., 1.1, 1.2, 1.3, 1.4, 1.5, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.5, 4., 4.5, 5., 5.5, 6., 7., 8., 10., 12., 14., 16., 18., 20.};
  }
  Double_t etabinning[17] = {-0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8};

  Int_t sizept=(sizeof(ptbinning)/sizeof(double))-1;
  Int_t sizeeta=(sizeof(etabinning)/sizeof(double))-1;

  AliHFEvarManager *vm = task->GetVarManager();
  vm->AddVariable("pt", sizept, ptbinning);
  vm->AddVariable("eta", sizeeta, -0.8,0.8);
  vm->AddVariable("phi",21, -0, 2*TMath::Pi());
  vm->AddVariable("charge");
  vm->AddVariable("source");
  
  // Contamination
  if(!useMC){
    // New background model (LHC10d pass2)
    TF1 *hBackground = new TF1("hadronicBackgroundFunction", "TMath::Exp(([0]/(x**1.5))+[1])", 0., 20.);
    // These settings assume that the default is a cut on .ge.120 TPC clusters (Sep 27, 2011)
    hBackground->SetParameter(0, -55.18);
    hBackground->SetParameter(1, -0.0026);
    if (TPCcl == 100){
      hBackground->SetParameter(0, -39.5);
      hBackground->SetParameter(1, -0.438);
    } elseif (TPCcl == 140){
      hBackground->SetParameter(0, -82.11);
      hBackground->SetParameter(1, 1.138);
    } 

    task->SetBackGroundFactorsFunction(hBackground);
  }

  // Define PID
  AliHFEpid *pid = task->GetPID();
  if(useMC) pid->SetHasMCData(kTRUE);
  pid->AddDetector("TOF", 0);
  pid->AddDetector("TPC", 1);
  // HERE PUT THE STRAIGHT CUT
  Double_t params[4];
  char *cutmodel;
  if(useMC){
    // Monte-Carlo needs modelling of the falling mean with momentum at low momentum
    // for high momentum it is consistent with a flat -0.94
    cutmodel = "expo(0)+pol1(2)";//[0]*TMath::Exp([1]*x) + [2] + [3]*x";
    Double_t paramsMC[4] = {-1.00625e-01, -2.09446e+00, -4.71247e-01, 1.80301e-02};
    for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar];
  } else {
    // Data is consistent with a flat constant: (Sep 27, 2011)
    // 100 clusters: mean = -0.076, width = 1.035
    // 120 clusters: mean = -0.113, width = 1.03
    // 140 clusters: mean = -0.093, width = 1.004
    cutmodel = "pol0(0)";
    params[0] = TPCs;

    if(withetacorrection) {
      // Apply eta correction
      AliHFEpidTPC *tpcpid = pid->GetDetPID(AliHFEpid::kTPCpid);
      TF1 *etacorrection = GetEtaCorrection(listname);
      if(etacorrection) tpcpid->SetEtaCorrection(etacorrection);
    }
  }
  pid->ConfigureTOF(TOFs);
  pid->ConfigureTPCdefaultCut(cutmodel, params, TPCu);

  if(kAnalyseTaggedTracks){
    AliHFEcuts *v0trackCuts = new AliHFEcuts("V0trackCuts", "Track Cuts for tagged track Analysis");
    v0trackCuts->CreateStandardCuts();
    v0trackCuts->SetMinNClustersTPC(TPCcl);  
    v0trackCuts->SetMinRatioTPCclusters(0.6);
    v0trackCuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable);
    v0trackCuts->SetMinNClustersITS(1);
    v0trackCuts->SetCutITSpixel(AliHFEextraCuts::kFirst);
    v0trackCuts->SetCheckITSLayerStatus(kFALSE);
    v0trackCuts->UnsetVertexRequirement();
    v0trackCuts->SetTOFPIDStep(kTRUE);
    v0trackCuts->SetQAOn();

    task->SwitchOnPlugin(AliAnalysisTaskHFE::kTaggedTrackAnalysis);
    task->SetTaggedTrackCuts(v0trackCuts);
    task->SetCleanTaggedTrack(kTRUE);
  }

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