void
HHV4Vector::Rotate(const HHV4Vector & q)
{
  Double_t ex, ey, ez, en;
  Double_t a, b, c, d, px1, py1, pz1, px2, py2, pz2, px3, py3, pz3;
  px1 = Px();
  py1 = Py();
  pz1 = Pz();
  ex = q.Px();
  ey = q.Py();
  ez = q.Pz();
  en = sqrt(ex * ex + ey * ey + ez * ez);
  ex = ex / en;
  ey = ey / en;
  ez = ez / en;
  //  cout << "Rotate e: " << ex << "  " << ey << "  " << ez << endl;
  a = ez;
  b = sqrt(1. - a * a);
  c = ex / b;
  d = -ey / b;
  px2 = a * px1 + b * pz1;   // rotation around y-axis
  py2 = py1;
  pz2 = -b * px1 + a * pz1;
  //  cout << "Rotate p2: " << px2 << "  " << py2 << "  " << pz2 << endl;
  px3 = c * px2 + d * py2;   // rotation around z-axis
  py3 = -d * px2 + c * py2;
  pz3 = pz2;
  //  cout << "Rotate p3: " << px3 << "  " << py3 << "  " << pz3 << endl;
  SetPxPyPzE(px3, py3, pz3, E());
}
void
HHV4Vector::Subtract(const HHV4Vector & q1, const HHV4Vector & q2)
{
  Double_t Etemp  = q1.E()  - q2.E();
  Double_t Pxtemp = q1.Px() - q2.Px();
  Double_t Pytemp = q1.Py() - q2.Py();
  Double_t Pztemp = q1.Pz() - q2.Pz();
  SetPxPyPzE(Pxtemp, Pytemp, Pztemp, Etemp);
}
HHKinFit2::HHLorentzVector&
HHKinFit2::HHLorentzVector::operator=(const HHLorentzVector& other)
{
  SetPxPyPzE(other.Px(), other.Py(), other.Pz(), other.E() );
  return *this;
}