15 const std::string&
name,
27 m_use_mcLUT = use_mcLUT;
41 for (
int i_station=0; i_station<3; i_station++) {
42 superPoints[i_station] = &(trackPattern.
superPoints[i_station]);
45 int etabin,phibin,neweta,newphi,
ch,
add;
46 float phistep,etastep,pstep,dist,distp,disteta,distphi;
47 float A0[6]={0.,0.,0.,0.,0.,0.},A1[6]={0.,0.,0.,0.,0.,0.};
49 const float scale = 0.1;
56 if(etabin<=-1) etabin = 0;
57 if(etabin>=
lut.NbinEta[
add]) etabin =
lut.NbinEta[
add]-1;
58 if(phibin<=-1) phibin = 0;
59 if(phibin>=
lut.NbinPhi[
add]) phibin =
lut.NbinPhi[
add]-1;
61 trackPattern.
etaBin = etabin;
62 trackPattern.
phiBin = phibin;
64 disteta = trackPattern.
etaMap - (etabin*
lut.EtaStep[
add] +
66 distphi = trackPattern.
phiMap - (phibin*
lut.PhiStep[
add] +
68 neweta = (disteta >= 0.) ? etabin+1 : etabin-1;
69 newphi = (distphi >= 0.) ? phibin+1 : phibin-1;
70 etastep = (disteta >= 0.) ?
lut.EtaStep[
add] : -
lut.EtaStep[
add];
71 phistep = (distphi >= 0.) ?
lut.PhiStep[
add] : -
lut.PhiStep[
add];
73 ch = (trackPattern.
charge>=0.)? 1 : 0;
78 int iR = ( superPoints[0]->
R > 5800 )? 1: 0;
79 int qeta = ( trackPattern.
charge*trackPattern.
etaMap >= 0.)? 1 : 0;
88 A0[0] =
lut.table[
add][
ch][etabin][phibin][0];
89 A1[0] =
lut.table[
add][
ch][etabin][phibin][1];
90 if((neweta<0||neweta>=
lut.NbinEta[
add])&&
91 (newphi<0||newphi>=
lut.NbinPhi[
add])) {
93 }
else if (neweta<0||neweta>=
lut.NbinEta[
add]) {
94 A0[1] =
lut.table[
add][
ch][etabin][newphi][0];
95 A1[1] =
lut.table[
add][
ch][etabin][newphi][1];
96 A0[2] = A0[0] + ((A0[1] - A0[0])/phistep)*distphi;
97 A1[2] = A1[0] + ((A1[1] - A1[0])/phistep)*distphi;
99 }
else if (newphi<0||newphi>=
lut.NbinPhi[
add]) {
100 A0[1] =
lut.table[
add][
ch][neweta][phibin][0];
101 A1[1] =
lut.table[
add][
ch][neweta][phibin][1];
102 A0[2] = A0[0] + ((A0[1] - A0[0])/etastep)*disteta;
103 A1[2] = A1[0] + ((A1[1] - A1[0])/etastep)*disteta;
106 if(disteta >= distphi*
lut.EtaStep[
add]/
lut.PhiStep[
add]) {
107 A0[1] =
lut.table[
add][
ch][neweta][phibin][0];
108 A1[1] =
lut.table[
add][
ch][neweta][phibin][1];
109 A0[2] =
lut.table[
add][
ch][neweta][newphi][0];
110 A1[2] =
lut.table[
add][
ch][neweta][newphi][1];
111 A0[3] = A0[0] + ((A0[1] - A0[0])/etastep)*disteta;
112 A1[3] = A1[0] + ((A1[1] - A1[0])/etastep)*disteta;
113 dist = std::sqrt(phistep*phistep + etastep*etastep);
114 distp = std::sqrt(disteta*disteta + distphi*distphi);
115 A0[4] = A0[0] + ((A0[2] - A0[0])/dist)*distp;
116 A1[4] = A1[0] + ((A1[2] - A1[0])/dist)*distp;
117 pstep = (phistep/dist)*distp;
118 A0[5] = A0[3] + ((A0[4] - A0[3])/pstep)*distphi;
119 A1[5] = A1[3] + ((A1[4] - A1[3])/pstep)*distphi;
122 A0[1] =
lut.table[
add][
ch][etabin][newphi][0];
123 A1[1] =
lut.table[
add][
ch][etabin][newphi][1];
124 A0[2] =
lut.table[
add][
ch][neweta][newphi][0];
125 A1[2] =
lut.table[
add][
ch][neweta][newphi][1];
126 A0[3] = A0[0] + ((A0[1] - A0[0])/phistep)*distphi;
127 A1[3] = A1[0] + ((A1[1] - A1[0])/phistep)*distphi;
128 dist = std::sqrt(phistep*phistep + etastep*etastep);
129 distp = std::sqrt(disteta*disteta + distphi*distphi);
130 A0[4] = A0[0] + ((A0[2] - A0[0])/dist)*distp;
131 A1[4] = A1[0] + ((A1[2] - A1[0])/dist)*distp;
132 pstep = (etastep/dist)*distp;
133 A0[5] = A0[3] + ((A0[4] - A0[3])/pstep)*disteta;
134 A1[5] = A1[3] + ((A1[4] - A1[3])/pstep)*disteta;
141 ATH_MSG_DEBUG(
"pT determined from radius: barrelRadius/barrelSagitta/pT/charge/s_address="
143 << trackPattern.
pt <<
"/" << trackPattern.
charge <<
"/" << trackPattern.
s_address);
146 return StatusCode::SUCCESS;