+ // Correct for mean material budget
+ Double_t dEdx(0.),
+ bg(t.GetP()/mass);
+ if(AliLog::GetDebugLevel("TRD", "AliTRDtrackerV1")>=3){
+ const char *pn[] = {"rho", "x/X0", "<A>", "<Z>", "L", "<Z/A>", "Nb"};
+ printf("D-AliTRDtrackerV1::PropagateTo(): x[%6.2f] bg[%6.2f]\n", xpos, bg);
+ printf(" param :: %s[%e] %s[%e] %s[%e] %s[%e] %s[%e] %s[%e] %s[%e]\n"
+ , pn[0], param[0]
+ , pn[1], param[1]
+ , pn[2], param[2]
+ , pn[3], param[3]
+ , pn[4], param[4]
+ , pn[5], param[5]
+ , pn[6], param[6]);
+ }
+ switch(fgBB){
+ case kSolid:
+ dEdx = AliExternalTrackParam::BetheBlochSolid(bg);
+ break;
+ case kGas:
+ dEdx = AliExternalTrackParam::BetheBlochGas(bg);
+ break;
+ case kGeant:
+ { // mean exitation energy (GeV)
+ Double_t mee = ((param[3] < 13.) ? (12. * param[3] + 7.) : (9.76 * param[3] + 58.8 * TMath::Power(param[3],-0.19))) * 1.e-9;
+ Double_t mZA = param[5]>1.e-5?param[5]:(param[3]/param[2]);
+ if(AliLog::GetDebugLevel("TRD", "AliTRDtrackerV1")>=3) printf("D-AliTRDtrackerV1::PropagateTo(): Mee[%e] <Z/A>[%e]\n", mee, mZA);
+ // protect against failed calculation of rho in MeanMaterialBudget()
+ dEdx = AliExternalTrackParam::BetheBlochGeant(bg, param[0]>1.e-6?param[0]:2.33, 0.2, 3., mee, mZA);
+ }
+ break;
+ }
+ if(AliLog::GetDebugLevel("TRD", "AliTRDtrackerV1")>=2) printf("D-AliTRDtrackerV1::PropagateTo(): dEdx(bg=%e, m=%e)= %e[GeV/cm]\n", bg, mass, dEdx);
+ if (!t.CorrectForMeanMaterialdEdx(param[1], dir*param[0]*param[4], mass, dEdx)) return 0;
+