+inline void AliDielectronVarManager::InitEffMap(const Char_t* filename) {
+ //
+ // init an efficiency object for on-the-fly correction calculations
+ //
+ fgEffMap=0x0;
+ TFile* file=TFile::Open(filename);
+ THnBase *hGen = (THnBase*) file->Get("hGenerated");
+ THnBase *hFnd = (THnBase*) file->Get("hFound");
+ if(!hFnd || !hGen) return;
+
+ fgEffMap = (THnBase*) hFnd->Clone("effMap");
+ fgEffMap->Reset();
+ fgEffMap->Sumw2();
+ fgEffMap->Divide(hFnd, hGen);//, 1, 1, ""); //assume uncorrelated err, otherwise give option "B"
+ if(fgEffMap) printf("[I] AliDielectronVarManager::InitEffMap efficiency maps loaded! \n");
+}
+
+inline Double_t AliDielectronVarManager::GetSingleLegEff(Double_t * const values) {
+ //
+ // get the single leg efficiency for a given particle
+ //
+ if(!fgEffMap) return -1.;
+
+ Int_t dim=fgEffMap->GetNdimensions();
+ Int_t idx[dim];
+ for(Int_t idim=0; idim<dim; idim++) {
+ UInt_t var = GetValueType(fgEffMap->GetAxis(idim)->GetName());
+ idx[idim] = fgEffMap->GetAxis(idim)->FindBin(values[var]);
+ if(idx[idim] < 0 || idx[idim]>fgEffMap->GetAxis(idim)->GetNbins())
+ printf(" [E] AliDielectronVarManager::GetSingleLegEff values %f for %s not found in axis range \n",values[var],fgEffMap->GetAxis(idim)->GetName());
+ // printf(" (%d,%f,%s) \t",idx[idim],values[var],fgEffMap->GetAxis(idim)->GetName());
+ }
+ // printf(" bin content %f+-%f \n",fgEffMap->GetBinContent(idx), fgEffMap->GetBinError(idx));
+ return (fgEffMap->GetBinContent(idx));
+}
+