38 if (muon.author() == xAOD::Muon::Author::STACO) {
42 using enum xAOD::Muon::TrackParticleType;
43 const Trk::Track* theTrack = muon.trackParticle(CombinedTrackParticle)
44 ? muon.trackParticle(CombinedTrackParticle)->track()
49 const Trk::Track* theTrack1 = muon.trackParticle(InnerDetectorTrackParticle)
50 ? muon.trackParticle(InnerDetectorTrackParticle)->track()
55 const Trk::Track* theTrack2 = muon.trackParticle(MuonSpectrometerTrackParticle)
56 ? muon.trackParticle(MuonSpectrometerTrackParticle)->track()
61 const Trk::Track* theTrack3 = muon.trackParticle(Primary)->track();
65 ATH_MSG_DEBUG(
"No primary author original track for refitted muon, stop calculation...");
70 bool doMdtGasGainCorrectionForMc =
false;
77 doMdtGasGainCorrectionForMc =
true;
84 ATH_MSG_INFO(
"Cannot get track states on surface for TrackParticle");
92 double correction = 0;
94 double maxhit = -999.;
98 std::vector<double> dADCvec;
100 double meanMDTdADC = 0.;
102 testEta = asinh(1. / tan(track.perigeeParameters()->parameters()[
Trk::theta]));
103 double track_phi = track.perigeeParameters()->parameters()[
Trk::phi];
110 if (!measurement) {
continue; }
115 if (!
id.is_valid()) {
continue; }
120 ATH_MSG_WARNING(
"cannot cast Trk::MeasurementBase to Muon::MdtDriftCircleOnTrack");
129 bool isInBme = fabs(testEta) >= 0.644 && fabs(testEta) <= 0.772 && track_phi >= -1.72 && track_phi <= -1.42;
131 if ((!isInBme && (absR <= 0.4 || absR >= 14.)) || (isInBme && (absR <= 0.4 || absR >= 6.5)))
continue;
134 if (fabs(testEta) < 1.) {
135 datfit = 105.088 + 27.0638 * pow(absR, 1) - 4.72089 * pow(absR, 2) + 0.110274 * pow(absR, 3) +
136 0.041508 * pow(absR, 4) - 0.00403678 * pow(absR, 5) + 0.000111072 * pow(absR, 6);
137 mcfit = 73.8974 + 12.0642 * pow(absR, 1) + 0.975372 * pow(absR, 2) - 0.922337 * pow(absR, 3) +
138 0.140759 * pow(absR, 4) - 0.00881345 * pow(absR, 5) + 0.000202078 * pow(absR, 6);
140 datfit = 106.329 + 26.5296 * pow(absR, 1) - 4.07423 * pow(absR, 2) - 0.0594686 * pow(absR, 3) +
141 0.0608916 * pow(absR, 4) - 0.00506114 * pow(absR, 5) + 0.000131493 * pow(absR, 6);
142 mcfit = 73.3596 + 12.9939 * pow(absR, 1) + 0.494472 * pow(absR, 2) - 0.812082 * pow(absR, 3) +
143 0.128345 * pow(absR, 4) - 0.00814268 * pow(absR, 5) + 0.000188203 * pow(absR, 6);
146 if (doMdtGasGainCorrectionForMc) {
147 correction = datfit / mcfit;
148 meandADC += (correction * rawdata->
adc() - datfit);
149 dADCvec.push_back(correction * rawdata->
adc() - datfit);
151 maxhit = ((correction * rawdata->
adc() - datfit) >= maxhit) ? (correction * rawdata->
adc() - datfit) : maxhit;
153 meandADC += (rawdata->
adc() - datfit);
154 dADCvec.push_back(rawdata->
adc() - datfit);
156 maxhit = ((rawdata->
adc() - datfit) >= maxhit) ? (rawdata->
adc() - datfit) : maxhit;
162 if (nhitsadc == 0) { meandADC = -9999; }
164 if (nhitsadc == 1) { meandADC = meandADC / double(nhitsadc); }
165 if (nhitsadc >= 2) { meandADC = double(meandADC - maxhit) / double(nhitsadc - 1); }
167 if (doMdtGasGainCorrectionForMc) {
168 if (track_phi > -3.2 && track_phi <= -2.87) PhiFit = -13.5471 * pow(track_phi, 2) - 39.0001 * track_phi + 4.23613;
169 if (track_phi > -2.87 && track_phi <= -2.13) PhiFit = 53.209 * pow(track_phi, 2) + 272.502 * track_phi + 342.867;
170 if (track_phi > -2.13 && track_phi <= -1.37) PhiFit = 72.4707 * pow(track_phi, 2) + 254.911 * track_phi + 216.811;
171 if (track_phi > -1.37 && track_phi <= -0.57) PhiFit = 77.218 * pow(track_phi, 2) + 149.676 * track_phi + 65.371;
172 if (track_phi > -0.57 && track_phi < 0.21) PhiFit = 86.977 * pow(track_phi, 2) + 29.0558 * track_phi - 6.09313;
173 if (track_phi >= 0.21 && track_phi <= 1.00) PhiFit = 79.203 * pow(track_phi, 2) - 92.9512 * track_phi + 21.6361;
174 if (track_phi > 1.00 && track_phi <= 1.79) PhiFit = 85.5711 * pow(track_phi, 2) - 239.068 * track_phi + 161.918;
175 if (track_phi > 1.79 && track_phi <= 2.60) PhiFit = 82.8996 * pow(track_phi, 2) - 362.665 * track_phi + 391.419;
176 if (track_phi > 2.60 && track_phi < 3.20) PhiFit = 73.8744 * pow(track_phi, 2) - 443.274 * track_phi + 656.926;
178 meandADC += PhiFit - 5.01 + 9.46;
183 meanMDTdADC = meandADC;