8 #include "GaudiKernel/MsgStream.h" 
    9 #include "GaudiKernel/IToolSvc.h" 
   16 #include "GaudiKernel/IChronoStatSvc.h" 
   29     inRange(
const double val, 
const double lo, 
const double hi){
 
   30     return (
val>lo) and (
val<hi);
 
   37   declareInterface<ITRT_ToT_dEdx>(
this);
 
   57     return StatusCode::FAILURE;
 
   69     ATH_MSG_ERROR(
"Property TRT_dEdx_useTrackPartWithGasType has an invalid " 
   71     return StatusCode::FAILURE;
 
   74   return StatusCode::SUCCESS;
 
  104   if(trkP==
nullptr)
return false;
 
  106   double Trt_Rtrack = std::abs(trkP->parameters()[
Trk::locR]);
 
  120     if (TrtHl==1) 
return false;
 
  136                    std::optional<float> localOccupancy)
 const 
  150   double mu = eventInfoDecor(0);
 
  152     nVtx = 1.3129 + 0.716194*
mu + (-0.00475074)*
mu*
mu;
 
  155     nVtx = 1.0897 + 0.748287*
mu + (-0.00421788)*
mu*
mu;
 
  169   size_t vtos_size = vtsos->
size();
 
  170   double correctionFactor = 1.;
 
  173     std::vector<double> vecToT;
 
  174     vecToT.reserve(vtos_size);
 
  177     for ( ; itr!=itre ; ++itr) {
 
  183             ToT_correct*=correctionFactor;
 
  185         vecToT.push_back(ToT_correct);
 
  189     sort(vecToT.begin(), vecToT.end());
 
  190     size_t nhits = vecToT.size();
 
  197     if (nhits<1) 
return 0.0;
 
  205     ToTsum*=correctionFactor;
 
  210     std::vector<double> vecToT_Xe;
 
  211     vecToT_Xe.reserve(vtos_size/2);
 
  212     std::vector<double> vecToT_Ar;
 
  213     vecToT_Ar.reserve(vtos_size/2);
 
  214     std::vector<double> vecToT_Kr;
 
  218         "dEdX_Estimator():: Using m_toolScenario=" 
  219         << 
m_toolScenario << 
" scenario m_useTrackPartWithGasType is set to" 
  221         << 
", but kUnset is requiered. Check you tool configuration.");
 
  224     for ( ; itr!=itre ; ++itr) {
 
  232           ToT_correct*=correctionFactor;
 
  234           vecToT_Xe.push_back(ToT_correct);
 
  235         } 
else if (gasType==
kArgon) {
 
  236             vecToT_Ar.push_back(ToT_correct);
 
  238             vecToT_Kr.push_back(ToT_correct);
 
  240           ATH_MSG_ERROR(
"dEdX_Estimator():: During scenario kAlgReweight variable gasTypeInStraw got value kUnset.");
 
  245     sort(vecToT_Xe.begin(), vecToT_Xe.end());
 
  246     sort(vecToT_Ar.begin(), vecToT_Ar.end());
 
  247     sort(vecToT_Kr.begin(), vecToT_Kr.end());
 
  249     size_t nhitsXe = vecToT_Xe.size();
 
  250     size_t nhitsAr = vecToT_Ar.size();
 
  251     size_t nhitsKr = vecToT_Kr.size();
 
  261             if (nhitsXe>0 && vecToT_Xe.at(nhitsXe-1)>maxToT) {
 
  263               maxToT = vecToT_Xe.at(nhitsXe-1);
 
  265             if(nhitsAr>0 && vecToT_Ar.at(nhitsAr-1)>maxToT){
 
  267               maxToT = vecToT_Ar.at(nhitsAr-1);
 
  269         if (nhitsKr>0 && vecToT_Kr.at(nhitsKr-1)>maxToT) {
 
  275         } 
else if (trunkGas==
kArgon) {
 
  283     size_t nhits  = nhitsXe + nhitsAr + nhitsKr;
 
  284     if(nhits<1) 
return 0.0;
 
  289     for (
size_t i = 0; 
i < nhitsXe;
i++) {
 
  290       ToTsumXe+=vecToT_Xe[
i];
 
  292     for (
size_t i = 0; 
i < nhitsAr;
i++) {
 
  293       ToTsumAr+=vecToT_Ar[
i];
 
  295     for (
size_t i = 0; 
i < nhitsKr;
i++) {
 
  296       ToTsumKr+=vecToT_Kr[
i];
 
  299     ToTsumXe = (nhitsXe>0) ? ToTsumXe/nhitsXe : 0;
 
  300     ToTsumAr = (nhitsAr>0) ? ToTsumAr/nhitsAr : 0;
 
  301     ToTsumKr = (nhitsKr>0) ? ToTsumKr/nhitsKr : 0;
 
  302     double ToTsum = ToTsumXe*nhitsXe + ToTsumAr*nhitsAr + ToTsumKr*nhitsKr;
 
  310     ToTsum *= correctionFactor;
 
  322                        bool useHitsHT)
 const 
  341     for ( ; itr!=itre ; ++itr) {
 
  357         "usedHits_Estimator():: Using m_toolScenario=" 
  358         << 
m_toolScenario << 
" scenario m_useTrackPartWithGasType is set to " 
  360         << 
", but kUnset is required. Check you tool configuration.");
 
  363     for ( ; itr!=itre ; ++itr) {
 
  369         } 
else if (gasType==
kArgon) {
 
  374           ATH_MSG_ERROR(
"usedHits_Estimator():: During scenario kAlgReweight variable gasTypeInStraw got value kUnset.");
 
  385         if(nhitsXe>0 || nhitsAr>0 || nhitsKr>0)
 
  390     nhits  = nhitsXe + nhitsAr + nhitsKr;
 
  401                       const double dEdx_obs,
 
  407   return getProb(ctx,gasType, dEdx_obs, pTrk, hypothesis, nUsedHits);
 
  413                       const double dEdx_obs,
 
  422   if (dEdxCorrection==
nullptr) {
 
  423     ATH_MSG_ERROR(
" getProb: Could not find any dEdxCorrection in CondStore. Return zero.");
 
  428     ATH_MSG_DEBUG(
"getProb():: gasTypeInStraw set kUnset that is not allowed! Use gasTypeInStraw(*itr) to get gas type info for that hit first!");
 
  429     ATH_MSG_DEBUG(
"getProb():: Now gasTypeInStraw sets to kXenon.");
 
  433   double dEdx_pred = 
predictdEdx(ctx,gasType, pTrk, hypothesis);
 
  434   if (dEdx_pred==0) 
return 0.0;
 
  438     double correct = 1+factor*(0.045*log10(pTrk)+0.885-1);
 
  439     dEdx_pred= dEdx_pred/correct;
 
  443     dEdxCorrection->resolution[gasType][0] +
 
  444     dEdxCorrection->resolution[gasType][1] * (nUsedHits + 0.5) +
 
  445     dEdxCorrection->resolution[gasType][2] * (nUsedHits + 0.5) *
 
  447     dEdxCorrection->resolution[gasType][3] * (nUsedHits + 0.5) *
 
  448       (nUsedHits + 0.5) * (nUsedHits + 0.5);
 
  451       dEdxCorrection->resolutionElectron[gasType][0] +
 
  452       dEdxCorrection->resolutionElectron[gasType][1] * (nUsedHits + 0.5) +
 
  453       dEdxCorrection->resolutionElectron[gasType][2] * (nUsedHits + 0.5) *
 
  455       dEdxCorrection->resolutionElectron[gasType][3] * (nUsedHits + 0.5) *
 
  456         (nUsedHits + 0.5) * (nUsedHits + 0.5);
 
  459   double prob = 
std::exp( -0.5 * ( ( ( dEdx_obs - dEdx_pred ) / (Resolution*dEdx_pred) ) *
 
  460                              ( ( dEdx_obs - dEdx_pred ) / (Resolution*dEdx_pred) ) ))  ;
 
  468                       const double dEdx_obs,
 
  477   if ( dEdx_obs<=0. || pTrk<=0. || nUsedHits<=0 ) 
return 0.5;
 
  479   double Pone = 
getProb(ctx,gasType, dEdx_obs,pTrk,hypothesis,nUsedHits);
 
  480   double Ptwo = 
getProb(ctx,gasType, dEdx_obs,pTrk,antihypothesis,nUsedHits);
 
  481   if ((Pone+Ptwo) != 0) {
 
  483     return Pone/(Pone+Ptwo);
 
  505   ATH_MSG_DEBUG(
"predictdEdx(): gasTypeInStraw = " << gasType << 
"");
 
  509   if (dEdxCorrection == 
nullptr) {
 
  510     ATH_MSG_ERROR(
" predictdEdx: Could not find any dEdxCorrection in " 
  511                   "CondStore. Return zero.");
 
  517       "predictdEdx():: gasTypeInStraw set kUnset that is not allowed! Use " 
  518       "gasTypeInStraw(*itr) to get gas type info for that hit first!");
 
  519     ATH_MSG_DEBUG(
"predictdEdx():: Now gasTypeInStraw sets to kXenon.");
 
  525   double betaGamma = pTrk/
mass;
 
  533     if (dEdxCorrection->paraDivideByLengthDedxP3[gasType] +
 
  535                          dEdxCorrection->paraDivideByLengthDedxP5[gasType])) <=
 
  538     return dEdxCorrection->paraDivideByLengthDedxP1[gasType] /
 
  539            std::pow(std::sqrt((betaGamma * betaGamma) /
 
  540                               (1. + (betaGamma * betaGamma))),
 
  541                     dEdxCorrection->paraDivideByLengthDedxP4[gasType]) *
 
  542            (dEdxCorrection->paraDivideByLengthDedxP2[gasType] -
 
  543             std::pow(std::sqrt((betaGamma * betaGamma) /
 
  544                                (1. + (betaGamma * betaGamma))),
 
  545                      dEdxCorrection->paraDivideByLengthDedxP4[gasType]) -
 
  546             log(dEdxCorrection->paraDivideByLengthDedxP3[gasType] +
 
  549                        dEdxCorrection->paraDivideByLengthDedxP5[gasType]))));
 
  551   if (dEdxCorrection->paraDedxP3[gasType] +
 
  552         1. / (
std::pow(betaGamma, dEdxCorrection->paraDedxP5[gasType])) <=
 
  555   return dEdxCorrection->paraDedxP1[gasType] /
 
  557            std::sqrt((betaGamma * betaGamma) / (1. + (betaGamma * betaGamma))),
 
  558            dEdxCorrection->paraDedxP4[gasType]) *
 
  559          (dEdxCorrection->paraDedxP2[gasType] -
 
  561             std::sqrt((betaGamma * betaGamma) / (1. + (betaGamma * betaGamma))),
 
  562             dEdxCorrection->paraDedxP4[gasType]) -
 
  563           log(dEdxCorrection->paraDedxP3[gasType] +
 
  564               1. / (
std::pow(betaGamma, dEdxCorrection->paraDedxP5[gasType]))));
 
  581   if(dEdxCorrection==
nullptr)
 
  583       ATH_MSG_ERROR(
" mass: Could not find any dEdxCorrection in CondStore. Return zero.");
 
  589       ATH_MSG_WARNING(
"mass():: gasTypeInStraw set kUnset that is not allowed! Use gasTypeInStraw(*itr) to get gas type info for that hit first!");
 
  597   static const double bg_min = 0.001;
 
  598   static const double bg_max = 3;   
 
  600   static const std::string blumRolandiFunction =
 
  601     "( [0]/sqrt( (x*x/([5]*[5]))/(1.+(x*x/([5]*[5]))) )^[3] ) * ([1] - sqrt( " 
  602     "(x*x/([5]*[5]))/(1.+(x*x/([5]*[5]))) )^[3] - log([2]+1./((x/[5])^[4]) ) )";
 
  604   TF1 blumRolandi( 
"BR", blumRolandiFunction.c_str(), 0.7, 100000);
 
  606   blumRolandi.SetParameters(dEdxCorrection->paraDedxP1[gasType],
 
  607                             dEdxCorrection->paraDedxP2[gasType],
 
  608                             dEdxCorrection->paraDedxP3[gasType],
 
  609                             dEdxCorrection->paraDedxP4[gasType],
 
  610                             dEdxCorrection->paraDedxP5[gasType],
 
  613   double betaGamma = blumRolandi.GetX(
dEdx, bg_min, bg_max);
 
  617   return pTrk/betaGamma;
 
  650   const EventContext& ctx,
 
  670         << 
", must be 'Good(2)||Xenon(3)' or 'Dead(1)||Argon(4)' or " 
  671            "'Krypton(5)' or 'EmulatedArgon(6)' or 'EmulatedKr(7)'!");
 
  688   if(dEdxCorrection==
nullptr) {
 
  689     ATH_MSG_ERROR(
" correctNormalization: Could not find any dEdxCorrection in CondStore. Return zero.");
 
  695   if (nVtx<=0) nVtx=dEdxCorrection->normNzero[gasType];
 
  696   double slope = dEdxCorrection->normSlopeTot[gasType];
 
  697   double offset = dEdxCorrection->normOffsetTot[gasType];
 
  699     slope = dEdxCorrection->normSlopeTotDivideByLength[gasType];
 
  700     offset = dEdxCorrection->normOffsetTotDivideByLength[gasType];
 
  702   double shift = dEdxCorrection->normOffsetData[gasType];
 
  704   return (slope*dEdxCorrection->normNzero[gasType]+
offset)/(slope*nVtx+
offset+shift);
 
  742   double hitRtrack = std::abs(trkP->parameters()[
Trk::locR]);
 
  745     ATH_MSG_ERROR(
"correctToT_corrRZ(const Trk::TrackStateOnSurface *itr):: Gas type in straw is kUnset! Return ToT = 0");
 
  756   double hitPosR = std::sqrt(trackx*trackx+tracky*tracky);
 
  773   if (std::isinf(valToT)) 
return 0.;
 
  784                                    int StrawLayer)
 const 
  786   if (
Layer == 0 && StrawLayer < 9) {
 
  796                                    double radialPosition,
 
  805   return T0+
a*radialPosition;
 
  814                                        int StrawLayer)
 const 
  821   double z = std::abs(zPosition);
 
  823   if(zPosition<0)
sign=-1;
 
  831   const double expArg=(
z-
l)/
s;
 
  832   if (not 
inRange(expArg, -600.0,600.0)){
 
  833     return expArg>0 ? std::numeric_limits<double>::infinity():0.;
 
  843                                         int StrawLayer)
 const 
  848   double z = std::abs(zPosition);
 
  850   if(zPosition<0)
sign=-1;
 
  868   if(dEdxCorrection==
nullptr)
 
  870       ATH_MSG_ERROR(
" fitFuncPol_corrRZ: Could not find any dEdxCorrection in CondStore. Return zero.");
 
  884       a = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+0)*30*3+
Layer*30+Strawlayer+
offset];
 
  885       b = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+1)*30*3+
Layer*30+Strawlayer+
offset];
 
  886       c = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+2)*30*3+
Layer*30+Strawlayer+
offset];
 
  887       d = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+3)*30*3+
Layer*30+Strawlayer+
offset];
 
  888       e = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+4)*30*3+
Layer*30+Strawlayer+
offset];
 
  889       f = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+5)*30*3+
Layer*30+Strawlayer+
offset];
 
  893       a = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+0)*9+
Layer+
offset];
 
  894       b = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+1)*9+
Layer+
offset];
 
  895       c = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+2)*9+
Layer+
offset];
 
  896       d = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+3)*9+
Layer+
offset];
 
  897       e = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+4)*9+
Layer+
offset];
 
  898       f = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+5)*9+
Layer+
offset];
 
  901       a = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+0)*28+
Layer];
 
  902       b = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+1)*28+
Layer];
 
  903       c = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+2)*28+
Layer];
 
  904       d = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+3)*28+
Layer];
 
  905       e = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+4)*28+
Layer];
 
  906       f = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+5)*28+
Layer];
 
  911       a = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+0)*30*3+
Layer*30+Strawlayer+
offset];
 
  912       b = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+1)*30*3+
Layer*30+Strawlayer+
offset];
 
  913       c = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+2)*30*3+
Layer*30+Strawlayer+
offset];
 
  914       d = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+3)*30*3+
Layer*30+Strawlayer+
offset];
 
  915       e = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+4)*30*3+
Layer*30+Strawlayer+
offset];
 
  916       f = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+5)*30*3+
Layer*30+Strawlayer+
offset];
 
  919       a = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+0)*9+
Layer+
offset];
 
  920       b = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+1)*9+
Layer+
offset];
 
  921       c = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+2)*9+
Layer+
offset];
 
  922       d = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+3)*9+
Layer+
offset];
 
  923       e = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+4)*9+
Layer+
offset];
 
  924       f = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+5)*9+
Layer+
offset];
 
  927       a = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+0)*28+
Layer];
 
  928       b = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+1)*28+
Layer];
 
  929       c = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+2)*28+
Layer];
 
  930       d = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+3)*28+
Layer];
 
  931       e = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+4)*28+
Layer];
 
  932       f = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+5)*28+
Layer];
 
  942                                     double radialPosition,
 
  952   if(dEdxCorrection==
nullptr) {
 
  953     ATH_MSG_ERROR(
" fitFuncEndcap_corrRZL: Could not find any dEdxCorrection in CondStore. Return zero.");
 
  961     a = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(0)*28+
Layer];
 
  962     b = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(1)*28+
Layer];
 
  963     c = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(2)*28+
Layer];
 
  964     d = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(3)*28+
Layer];
 
  965     e = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(4)*28+
Layer];
 
  966     f = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(5)*28+
Layer];
 
  967     g = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(6)*28+
Layer];
 
  968     h = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(7)*28+
Layer];
 
  969     i = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(8)*28+
Layer];
 
  971     a = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(0)*28+
Layer];
 
  972     b = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(1)*28+
Layer];
 
  973     c = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(2)*28+
Layer];
 
  974     d = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(3)*28+
Layer];
 
  975     e = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(4)*28+
Layer];
 
  976     f = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(5)*28+
Layer];
 
  977     g = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(6)*28+
Layer];
 
  978     h = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(7)*28+
Layer];
 
  979     i = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(8)*28+
Layer];
 
  983   double slope = 
g+
h*
r+
i*
r*
r;
 
  986   return T0+T1+slope*radialPosition;
 
  995                                     int Strawlayer)
 const 
 1002   if(dEdxCorrection==
nullptr) {
 
 1003     ATH_MSG_ERROR(
" fitFuncBarrel_corrRZL: Could not find any dEdxCorrection in CondStore. Return zero.");
 
 1008   if (
Layer==0 && Strawlayer<9) { 
 
 1010       a = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(0)*9+Strawlayer];
 
 1011       b = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(1)*9+Strawlayer];
 
 1012       c = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(2)*9+Strawlayer];
 
 1013       d = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(3)*9+Strawlayer];
 
 1014       e = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(4)*9+Strawlayer];
 
 1015       f = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(5)*9+Strawlayer];
 
 1016       g = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(6)*9+Strawlayer];
 
 1018       a = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(0)*9+Strawlayer];
 
 1019       b = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(1)*9+Strawlayer];
 
 1020       c = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(2)*9+Strawlayer];
 
 1021       d = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(3)*9+Strawlayer];
 
 1022       e = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(4)*9+Strawlayer];
 
 1023       f = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(5)*9+Strawlayer];
 
 1024       g = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(6)*9+Strawlayer];
 
 1028       a = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(0)*30*3+
Layer*30+Strawlayer];
 
 1029       b = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(1)*30*3+
Layer*30+Strawlayer];
 
 1030       c = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(2)*30*3+
Layer*30+Strawlayer];
 
 1031       d = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(3)*30*3+
Layer*30+Strawlayer];
 
 1032       e = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(4)*30*3+
Layer*30+Strawlayer];
 
 1033       f = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(5)*30*3+
Layer*30+Strawlayer];
 
 1034       g = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(6)*30*3+
Layer*30+Strawlayer];
 
 1036       a = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(0)*30*3+
Layer*30+Strawlayer];
 
 1037       b = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(1)*30*3+
Layer*30+Strawlayer];
 
 1038       c = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(2)*30*3+
Layer*30+Strawlayer];
 
 1039       d = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(3)*30*3+
Layer*30+Strawlayer];
 
 1040       e = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(4)*30*3+
Layer*30+Strawlayer];
 
 1041       f = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(5)*30*3+
Layer*30+Strawlayer];
 
 1042       g = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(6)*30*3+
Layer*30+Strawlayer];
 
 1045   double z = std::abs(zPosition);
 
 1053   if (zPosition>0) 
result = T0pos+T1+slope*
z;
 
 1098   double Trt_HitTheta = trkP->parameters()[
Trk::theta];
 
 1105   double p0=0., 
p1=0., 
p2=0., p0_flat=0.;
 
 1110   int nBarrelLayers = 3, nEndcapLayers = 14;
 
 1112   int nParametersPerLayer = 3;
 
 1114   int nHTConfigurations = 2;
 
 1116   int nSharedConfigurations = 2;
 
 1118     layer * nParametersPerLayer +
 
 1119     isHT * ((abs(HitPart) - 1) * (nEndcapLayers - nBarrelLayers) *
 
 1120               nParametersPerLayer +
 
 1121             nBarrelLayers * nParametersPerLayer) +
 
 1122     isShared * ((abs(HitPart) - 1) * (nEndcapLayers - nBarrelLayers) *
 
 1123                   nParametersPerLayer * nHTConfigurations +
 
 1124                 nBarrelLayers * nParametersPerLayer * nHTConfigurations) +
 
 1125     (abs(HitPart) - 1) * nParametersPerLayer * nBarrelLayers *
 
 1126       nHTConfigurations * nSharedConfigurations;
 
 1128   int num_flat = 
layer * 3 +
 
 1129                  isHT * ((abs(HitPart) - 1) * (nEndcapLayers - nBarrelLayers) *
 
 1130                            nParametersPerLayer +
 
 1131                          nBarrelLayers * nParametersPerLayer) +
 
 1132                  (abs(HitPart) - 1) * nParametersPerLayer * nBarrelLayers *
 
 1133                    nHTConfigurations * nSharedConfigurations;
 
 1135   p0 = dEdxCorrection->hitOccPar[
num];
 
 1136   p1 = dEdxCorrection->hitOccPar[
num+1];
 
 1137   p2 = dEdxCorrection->hitOccPar[
num+2];
 
 1138   p0_flat = dEdxCorrection->hitOccPar[num_flat];
 
 1143   valToT = p0_flat/(
p0+
p1*localOccupancy+
p2*localOccupancy*localOccupancy);
 
 1145   return ToTmip*valToT;
 
 1152                                        std::optional<float> localOccupancy)
 const 
 1159   double trackOcc = localOccupancy != std::nullopt
 
 1174     corr=dEdxCorrection->trackOccPar0[
index]+dEdxCorrection->trackOccPar1[
index]*trackOcc+dEdxCorrection->trackOccPar2[
index]*
pow(trackOcc,2);
 
 1176     corr=dEdxCorrection->trackOccPar0NoHt[
index]+dEdxCorrection->trackOccPar1NoHt[
index]*trackOcc+dEdxCorrection->trackOccPar2NoHt[
index]*
pow(trackOcc,2);
 
 1209   if(trkP==
nullptr) 
return 0.;
 
 1211   double Trt_Rtrack = std::abs(trkP->parameters()[
Trk::locR]);
 
 1212   double Trt_HitTheta = trkP->parameters()[
Trk::theta];
 
 1213   double Trt_HitPhi = trkP->parameters()[
Trk::phi];
 
 1215   int HitPart = std::abs(
identifier->barrel_ec(DCId));
 
 1217   double strawphi = element->
center(DCId).phi();
 
 1220   if (Trt_Rtrack >= 2.0) {
 
 1226     length = 2*std::sqrt(4-Trt_Rtrack*Trt_Rtrack)*1./std::abs(
std::sin(Trt_HitTheta));
 
 1227   } 
else if (HitPart == 2) { 
 
 1231     throw std::runtime_error(
"Unknown barrel/endcap identifier: " + 
std::to_string(HitPart) + 
". Must be 1(Barrel) or 2(Endcap)");