ROOT logo
void ConfigWeightFactors(AliAnalysisTaskHFE *task, Bool_t syst = kFALSE, Int_t collType = 1){
  //
  // Set weighting factors for nonHFE backgrounds
  // Option "collType": 0 for pp 2.76 TeV; 1 for pp 7 TeV; 2 for PbPb
  //
  //Get the correction factors for Non-HF electron yields from a root-file
  Double_t elecBackGroundWeight[11][6][44][3];//centrality, species, momentum, background level
  for(Int_t iCent = 0; iCent < 11; iCent++){
    for(Int_t iSpecies = 0; iSpecies < 6; iSpecies++){
      for(Int_t iBin = 0; iBin < 44; iBin++){
        for(Int_t iError = 0; iError < 3; iError++){
          elecBackGroundWeight[iCent][iSpecies][iBin][iError] = 0;
        }
      }
    }
  }
  const Char_t *backNameMC[6] = {"pion","eta","omega","phi","etap","rho"};
  TFile *weightFile = TFile::Open(Form("%s/util/hfe/nonHFEcorrect.root", gSystem->Getenv("TRAIN_ROOT")));
  if(weightFile){
    if(syst){
      TH1F *hRelErr[2][2];//errors for pion yields, which form the correlated component of the relative error for all other decaying mesons, except for eta, which are parameterized independently
      if(collType == 1){
        hRelErr[0][0] = (TH1F*)weightFile->Get("hErrorspionLower");
        hRelErr[0][1] = (TH1F*)weightFile->Get("hErrorspionUpper");
        hRelErr[1][0] = (TH1F*)weightFile->Get("hErrorsetaLower");
        hRelErr[1][1] = (TH1F*)weightFile->Get("hErrorsetaUpper");
      }
      else if(collType == 0){
        hRelErr[0][0] = (TH1F*)weightFile->Get("hErrors_2.76TeV_pionLower");
        hRelErr[0][1] = (TH1F*)weightFile->Get("hErrors_2.76TeV_pionUpper");
        //hRelErr[1][0] = (TH1F*)weightFile->Get("hErrors_2.76TeV_etaLower");
        //hRelErr[1][1] = (TH1F*)weightFile->Get("hErrors_2.76TeV_etaUpper");
      }
    }
    for(Int_t iCent = 0; iCent < 11; iCent++){//centrality bins
      for(Int_t iSpecies = 0; iSpecies < 6; iSpecies++){//species of decaying mesons
        TH1F *hRatio = 0x0;
        if(collType == 1){
          hRatio = (TH1F*)weightFile->Get(Form("hRatio%s",backNameMC[iSpecies]));
        }
        else if(collType == 0){
          hRatio = (TH1F*)weightFile->Get(Form("hRatio_2.76TeV_%s",backNameMC[iSpecies]));
        }
        else{
          if((iCent == 1)||(iCent == 4)){ 
            hRatio = (TH1F*)weightFile->Get(Form("hRatio%s%d",backNameMC[iSpecies],iCent-1));
          }
          else if(iCent > 7){
            hRatio = (TH1F*)weightFile->Get(Form("hRatio%s7",backNameMC[iSpecies]));
          }
          else{
            hRatio = (TH1F*)weightFile->Get(Form("hRatio%s%d",backNameMC[iSpecies],iCent));
          }
        }
	for(Int_t iBin = 1; iBin < 45; iBin++){//momentum bin of mother meson
	  if(iCent == 0){
 	    elecBackGroundWeight[iCent][iSpecies][iBin-1][0] = hRatio->GetBinContent(iBin);
            if(syst && (collType < 2)){
              for(Int_t iError = 0; iError < 2; iError++){//0: best estimate, 1,2: lower, upper uncertainty level
                if((iSpecies == 1) && (collType == 1))
                  elecBackGroundWeight[iCent][iSpecies][iBin-1][iError+1]=elecBackGroundWeight[iCent][iSpecies][iBin-1][0]*(1+hRelErr[1][iError]->GetBinContent(iBin));
                else
                  elecBackGroundWeight[iCent][iSpecies][iBin-1][iError+1]=elecBackGroundWeight[iCent][iSpecies][iBin-1][0]*(1+hRelErr[0][iError]->GetBinContent(iBin));//Addition of relative errors from histograms with "+", because lower errors are defined as negative numbers in the reference histograms!
	      }
	    }
	  }
          else{
            if(collType == 2){
              elecBackGroundWeight[iCent][iSpecies][iBin-1][0] = hRatio->GetBinContent(iBin);    
            }           
          }
	}
      }
    }
    weightFile->Close();
  }
  else{
    printf("No reference file for background electron weighting found!\n");   
  }
  
  const Double_t binLimit[45] =  {0.1,0.112797,0.127231,0.143512,0.161877,0.182592,0.205957,0.232313,0.262041,0.295573,0.333397,0.37606,0.424183,0.478465,0.539692,0.608754,0.686654,0.774523,0.873636,0.985432,1.11153,1.25377,1.41421,1.59519,1.79932,2.02957,2.28928,2.58223,2.91267,3.2854,3.70582,4.18004,4.71494,5.3183,5.99886,6.76651,7.6324,8.60909,9.71076,10.9534,12.3551,13.9361,15.7195,17.731,20};//bin limits from the measured pi0 spectrum
  
  for(Int_t iCent = 0; iCent < 11; iCent++){//centrality bins
    for(Int_t iBin = 1; iBin < 45; iBin++){//for all centralities, pt bins and all meson decays, set weighting factors for daughter electrons
      task->SetBinLimits(iBin-1,binLimit[iBin-1]);
      for(Int_t iSpecies = 0; iSpecies < 6; iSpecies++){
        for(Int_t iError = 0; iError < 3; iError++)
          task->SetElecBackGroundFactors(iBin-1, iSpecies, iCent, iError, elecBackGroundWeight[iCent][iSpecies][iBin-1][iError]);
      }
    }
  }
}
 ConfigWeightFactors.C:1
 ConfigWeightFactors.C:2
 ConfigWeightFactors.C:3
 ConfigWeightFactors.C:4
 ConfigWeightFactors.C:5
 ConfigWeightFactors.C:6
 ConfigWeightFactors.C:7
 ConfigWeightFactors.C:8
 ConfigWeightFactors.C:9
 ConfigWeightFactors.C:10
 ConfigWeightFactors.C:11
 ConfigWeightFactors.C:12
 ConfigWeightFactors.C:13
 ConfigWeightFactors.C:14
 ConfigWeightFactors.C:15
 ConfigWeightFactors.C:16
 ConfigWeightFactors.C:17
 ConfigWeightFactors.C:18
 ConfigWeightFactors.C:19
 ConfigWeightFactors.C:20
 ConfigWeightFactors.C:21
 ConfigWeightFactors.C:22
 ConfigWeightFactors.C:23
 ConfigWeightFactors.C:24
 ConfigWeightFactors.C:25
 ConfigWeightFactors.C:26
 ConfigWeightFactors.C:27
 ConfigWeightFactors.C:28
 ConfigWeightFactors.C:29
 ConfigWeightFactors.C:30
 ConfigWeightFactors.C:31
 ConfigWeightFactors.C:32
 ConfigWeightFactors.C:33
 ConfigWeightFactors.C:34
 ConfigWeightFactors.C:35
 ConfigWeightFactors.C:36
 ConfigWeightFactors.C:37
 ConfigWeightFactors.C:38
 ConfigWeightFactors.C:39
 ConfigWeightFactors.C:40
 ConfigWeightFactors.C:41
 ConfigWeightFactors.C:42
 ConfigWeightFactors.C:43
 ConfigWeightFactors.C:44
 ConfigWeightFactors.C:45
 ConfigWeightFactors.C:46
 ConfigWeightFactors.C:47
 ConfigWeightFactors.C:48
 ConfigWeightFactors.C:49
 ConfigWeightFactors.C:50
 ConfigWeightFactors.C:51
 ConfigWeightFactors.C:52
 ConfigWeightFactors.C:53
 ConfigWeightFactors.C:54
 ConfigWeightFactors.C:55
 ConfigWeightFactors.C:56
 ConfigWeightFactors.C:57
 ConfigWeightFactors.C:58
 ConfigWeightFactors.C:59
 ConfigWeightFactors.C:60
 ConfigWeightFactors.C:61
 ConfigWeightFactors.C:62
 ConfigWeightFactors.C:63
 ConfigWeightFactors.C:64
 ConfigWeightFactors.C:65
 ConfigWeightFactors.C:66
 ConfigWeightFactors.C:67
 ConfigWeightFactors.C:68
 ConfigWeightFactors.C:69
 ConfigWeightFactors.C:70
 ConfigWeightFactors.C:71
 ConfigWeightFactors.C:72
 ConfigWeightFactors.C:73
 ConfigWeightFactors.C:74
 ConfigWeightFactors.C:75
 ConfigWeightFactors.C:76
 ConfigWeightFactors.C:77
 ConfigWeightFactors.C:78
 ConfigWeightFactors.C:79
 ConfigWeightFactors.C:80
 ConfigWeightFactors.C:81
 ConfigWeightFactors.C:82
 ConfigWeightFactors.C:83
 ConfigWeightFactors.C:84
 ConfigWeightFactors.C:85
 ConfigWeightFactors.C:86
 ConfigWeightFactors.C:87
 ConfigWeightFactors.C:88
 ConfigWeightFactors.C:89
 ConfigWeightFactors.C:90
 ConfigWeightFactors.C:91
 ConfigWeightFactors.C:92
 ConfigWeightFactors.C:93