+//__________________________________________
+Double_t AliHFEmcQA::GetWeightFactor(AliMCParticle *mctrack){
+ //
+ // Get weighting factor for the realistic background estimation
+ //
+ AliMCParticle *mctrackmother = NULL;
+ Double_t weightElecBg = 0.;
+ Double_t mesonPt = 0.;
+ Double_t bgcategory = 0.;
+ Int_t mArr = -1;
+ Int_t mesonID = GetElecSource(mctrack->Particle());
+ if(mesonID==kGammaPi0 || mesonID==kPi0) mArr=0; //pion
+ else if(mesonID==kGammaEta || mesonID==kEta) mArr=1; //eta
+ else if(mesonID==kGammaOmega || mesonID==kOmega) mArr=2; //omega
+ else if(mesonID==kGammaPhi || mesonID==kPhi) mArr=3; //phi
+ else if(mesonID==kGammaEtaPrime || mesonID==kEtaPrime) mArr=4; //etaprime
+ else if(mesonID==kGammaRho0 || mesonID==kRho0) mArr=5; //rho
+
+ if(!(mArr<0)){
+ if(mesonID>=kGammaPi0) { // conversion electron, be careful with the enum odering
+ Int_t glabel=TMath::Abs(mctrack->GetMother()); // gamma label
+ if((mctrackmother = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(glabel)))){
+ glabel=TMath::Abs(mctrackmother->GetMother()); // gamma's mother's label
+ if((mctrackmother = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(glabel)))){
+ mesonPt = mctrackmother->Pt(); //meson pt
+ bgcategory = 1.;
+ }
+ }
+ }
+ else{ // nonHFE except for the conversion electron
+ Int_t glabel=TMath::Abs(mctrack->GetMother());
+ if((mctrackmother = dynamic_cast<AliMCParticle *>(fMCEvent->GetTrack(glabel)))){
+ mesonPt=mctrackmother->Pt(); //meson pt
+ bgcategory = -1.;
+ }
+ }
+ weightElecBg=fElecBackgroundFactor[mArr][kBgPtBins-1];
+ for(int ii=0; ii<kBgPtBins; ii++){
+ if( (mesonPt > fBinLimit[ii]) && (mesonPt < fBinLimit[ii+1])){
+ weightElecBg = fElecBackgroundFactor[mArr][ii];
+ }
+ }
+ /*for(int jj=0; jj<6; jj++){
+ for(int ii=0; ii<kBgPtBins; ii++){
+ printf("species= %d ptbin= %d wfactor= %lf\n",jj,ii,fElecBackgroundFactor[jj][ii]);
+ }
+ }*/
+ }
+
+ return bgcategory*weightElecBg;
+}
+