135 Belle::Mdst_klm_mu_ex_Manager& muexMgr = Belle::Mdst_klm_mu_ex_Manager::get_manager();
141 if ((
void*)&muexMgr == NULL) {
142 B2ERROR(
"%B2BIIFixMdst muid did not find Belle::Mdst_klm_mu_ex table "
143 <<
"in this event, which implies" << std::endl
144 <<
" that muid_set and muid_dec were not run yet. "
145 <<
"Required order of modules is " << std::endl
146 <<
" ... muid_set muid_dec ... rec2mdst ... B2BIIFixMdst ..."
147 << std::endl <<
" This program is terminated.");
150 Belle::Mdst_ecl_trk_Manager& eclTrkMgr = Belle::Mdst_ecl_trk_Manager::get_manager();
151 Belle::Mdst_ecl_trk_Index eclTrkIdx = eclTrkMgr.index(
"trk");
161 for (std::vector<Belle::Mdst_klm_mu_ex>::iterator iMuex = muexMgr.begin();
162 iMuex < muexMgr.end(); ++iMuex) {
163 Belle::Mdst_charged& chg = iMuex->pMDST_Charged();
164 Belle::Mdst_muid& muid = chg.muid();
165 int ECMaxLyr = (muid.quality() & 0x400000) ? 1 : 0;
173 double px = chg.px();
174 double py = chg.py();
175 double pz = chg.pz();
176 double p =
sqrt(px * px + py * py + pz * pz);
177 double muon = iMuex->Muon_likelihood();
178 double pion = iMuex->Pion_likelihood();
179 double kaon = iMuex->Kaon_likelihood();
180 double miss = iMuex->Miss_likelihood();
181 double junk = iMuex->Junk_likelihood();
182 int outcome = iMuex->Outcome();
183 int lyrPasMax = iMuex->Layer_trk_brl() +
184 iMuex->Layer_trk_end() + 1;
185 int lyrPicMax = iMuex->Layer_hit_brl();
186 if (iMuex->Layer_hit_end() != -1) {
187 lyrPicMax = iMuex->Layer_trk_brl() +
188 iMuex->Layer_hit_end() + 1;
190 int lyrDiff = lyrPasMax - lyrPicMax;
191 int lyrExt = iMuex->Layer_trk_brl();
192 if ((outcome == 2) || (outcome == 4)) {
193 lyrExt = iMuex->Layer_trk_end();
194 if ((ECMaxLyr == 1) && (lyrExt > 11)) {
197 int lyrEnd = std::min(iMuex->Layer_hit_end(), 11);
198 lyrPasMax = iMuex->Layer_trk_brl() + lyrExt + 1;
199 lyrPicMax = iMuex->Layer_trk_brl() + lyrEnd + 1;
200 lyrDiff = lyrPasMax - lyrPicMax;
203 int nPoints = iMuex->N_hits() * 2;
204 double rChi2 = 1.0E10;
206 rChi2 = iMuex->Chi_2() / nPoints;
210 muon =
m_muonprob->prob(ECMaxLyr, outcome, lyrExt, lyrDiff, rChi2);
211 pion =
m_pionprob->prob(ECMaxLyr, outcome, lyrExt, lyrDiff, rChi2);
212 kaon =
m_kaonprob->prob(ECMaxLyr, outcome, lyrExt, lyrDiff, rChi2);
213 double denom = muon + pion + kaon;
214 if (denom < 1.0E-10) {
216 muon = pion = kaon = 0.0;
224 Belle::Mdst_trk& trk = chg.trk();
225 std::vector<Belle::Mdst_ecl_trk> eclTrk = point_from(trk.get_ID(), eclTrkIdx);
226 std::vector<Belle::Mdst_ecl_trk>::iterator iEclTrk = eclTrk.begin();
227 if (iEclTrk != eclTrk.end()) {
228 Belle::Mdst_ecl& ecl = iEclTrk->ecl();
230 if (ecl.match() >= 1) {
231 double eEcl = ecl.energy();
232 if ((eEcl > 0.0) && (p > 0.25)) {
236 double denom = muonE + pionE + kaonE;
237 if (denom > 1.0E-10) {
238 if (miss + junk > 0.0) {
253 denom = muon + pion + kaon;
254 if (denom < 1.0E-10) {
256 muon = pion = kaon = 0.0;
268 iMuex->Muon_likelihood(muon);
269 iMuex->Pion_likelihood(pion);
270 iMuex->Kaon_likelihood(kaon);
271 iMuex->Miss_likelihood(miss);
272 iMuex->Junk_likelihood(junk);
273 iMuex->Outcome(outcome);