195 double herMomentum, herThetaX, herThetaY;
196 double lerMomentum, lerThetaX, lerThetaY;
199 if (s_BoostVectorInverseCovariance.Determinant() == 0) {
200 B2WARNING(
"Determinant of boost covariance matrix is 0, "
201 "using generic inverse covariance matrix for fit.");
203 s_BoostVectorInverseCovariance[0][1] = 0;
204 s_BoostVectorInverseCovariance[0][2] = 0;
205 s_BoostVectorInverseCovariance[1][0] = 0;
207 s_BoostVectorInverseCovariance[1][2] = 0;
208 s_BoostVectorInverseCovariance[2][0] = 0;
209 s_BoostVectorInverseCovariance[2][1] = 0;
212 s_BoostVectorInverseCovariance.Invert();
216 if (s_InvariantMassError == 0) {
217 B2WARNING(
"Invariant-mass errror is 0, using generic error for fit.");
220 s_DirectionHER.SetX(0);
221 s_DirectionHER.SetY(0);
222 s_DirectionHER.SetZ(1);
224 s_DirectionLER.SetX(0);
225 s_DirectionLER.SetY(0);
226 s_DirectionLER.SetZ(1);
231 minuit.SetPrintLevel(-1);
233 minuit.mnparm(0,
"PHER_E", 7, 0.01, 0, 0, minuitResult);
234 minuit.mnparm(1,
"PHER_TX", 0, 0.01, 0, 0, minuitResult);
235 minuit.mnparm(2,
"PHER_TY", 0, 0.01, 0, 0, minuitResult);
236 minuit.mnparm(3,
"PLER_E", 4, 0.01, 0, 0, minuitResult);
237 minuit.mnparm(4,
"PLER_TX", 0, 0.01, 0, 0, minuitResult);
238 minuit.mnparm(5,
"PLER_TY", 0, 0.01, 0, 0, minuitResult);
239 minuit.mncomd(
"FIX 2 3 5 6", minuitResult);
240 minuit.mncomd(
"MIGRAD 10000", minuitResult);
241 minuit.mncomd(
"RELEASE 2 3 5 6", minuitResult);
242 minuit.mncomd(
"MIGRAD 10000", minuitResult);
244 minuit.GetParameter(0, herMomentum, error);
245 minuit.GetParameter(1, herThetaX, error);
246 minuit.GetParameter(2, herThetaY, error);
247 minuit.GetParameter(3, lerMomentum, error);
248 minuit.GetParameter(4, lerThetaX, error);
249 minuit.GetParameter(5, lerThetaY, error);
251 ROOT::Math::PxPyPzEVector pHER = getMomentum(herMomentum, herThetaX, herThetaY,
false);
252 ROOT::Math::PxPyPzEVector pLER = getMomentum(lerMomentum, lerThetaX, lerThetaY,
true);
253 ROOT::Math::PxPyPzEVector pBeam = pHER + pLER;
254 double fittedInvariantMass = pBeam.M();
255 B2RESULT(
"Initial invariant mass: " << s_InvariantMass <<
256 "; fitted invariant mass: " << fittedInvariantMass);
257 double cosThetaX = cos(herThetaX);
258 double sinThetaX = sin(herThetaX);
259 double cosThetaY = cos(herThetaY);
260 double sinThetaY = sin(herThetaY);
262 (pBeam.E() - pHER.E() / pHER.P() *
263 (pBeam.Px() * cosThetaX * sinThetaY - pBeam.Py() * sinThetaX +
264 pBeam.Pz() * cosThetaX * cosThetaY)) / fittedInvariantMass;
265 cosThetaX = cos(lerThetaX);
266 sinThetaX = sin(lerThetaX);
267 cosThetaY = cos(lerThetaY + M_PI);
268 sinThetaY = sin(lerThetaY + M_PI);
270 (pBeam.E() - pLER.E() / pLER.P() *
271 (pBeam.Px() * cosThetaX * sinThetaY - pBeam.Py() * sinThetaX +
272 pBeam.Pz() * cosThetaX * cosThetaY)) / fittedInvariantMass;
274 double k =
sqrt(sigmaInvariantMass * sigmaInvariantMass /
275 (pow(herPartial * pHER.E(), 2) +
276 pow(lerPartial * pLER.E(), 2)));
277 double herSpread = k * pHER.E();
278 double lerSpread = k * pLER.E();
279 B2INFO(
"Invariant mass spread: " << sigmaInvariantMass);
280 B2RESULT(
"HER energy spread: " << herSpread <<
281 "; LER energy spread: " << lerSpread);
285 TMatrixDSym covariance(3);
286 for (
int i = 0; i < 3; ++i) {
287 for (
int j = 0; j < 3; ++j)
288 covariance[i][j] = 0;
290 covariance[0][0] = herSpread * herSpread;
292 covariance[0][0] = lerSpread * lerSpread;