Beispiel #1
0
double KinZfitter::GetRefitMZ1()
{

  vector<TLorentzVector> p4s = GetRefitP4s();

  TLorentzVector pZ1(0,0,0,0);

  pZ1 = p4s[0] + p4s[1];

  return pZ1.M();

}
Beispiel #2
0
double KinZfitter::GetRefitMZ2()
{

  vector<TLorentzVector> p4s = GetRefitP4s();

  TLorentzVector pZ2(0,0,0,0);

  pZ2 = p4s[2] + p4s[3];

  return pZ2.M();

}
Beispiel #3
0
double KinZfitter::GetRefitM4l()
{

  vector<TLorentzVector> p4s = GetRefitP4s();

  TLorentzVector pH(0,0,0,0); 
  for(unsigned int i = 0; i< p4s.size(); i++){
     pH = pH + p4s[i];
  }

  return pH.M();

}
Beispiel #4
0
double KinZfitter::GetRefitM4lErrFullCov()
{


  vector<TLorentzVector> Lp4s = GetRefitP4s();
  vector<TLorentzVector> p4s;
  vector<double> pTErrs;

  p4s.push_back(p4sZ1REFIT_[0]);p4s.push_back(p4sZ1REFIT_[1]);
  pTErrs.push_back(pTerrsZ1REFIT_[0]); pTErrs.push_back(pTerrsZ1REFIT_[1]);

  // patch when MINUIT FAILS
  if(pTerrsZ1REFIT_[0]==0||pTerrsZ1REFIT_[1]==0)

   return GetM4lErr();

  if(p4sZ1phREFIT_.size()>=1){
   p4s.push_back(p4sZ1phREFIT_[0]); pTErrs.push_back(pTerrsZ1phREFIT_[0]);
  } 
  if(p4sZ1phREFIT_.size()==2){
   p4s.push_back(p4sZ1phREFIT_[1]); pTErrs.push_back(pTerrsZ1phREFIT_[1]);
  }

  p4s.push_back(p4sZ2REFIT_[0]);p4s.push_back(p4sZ2REFIT_[1]);
  pTErrs.push_back(pTerrsZ2REFIT_[0]); pTErrs.push_back(pTerrsZ2REFIT_[1]);

  if(p4sZ2phREFIT_.size()>=1){
   p4s.push_back(p4sZ2phREFIT_[0]); pTErrs.push_back(pTerrsZ2phREFIT_[0]);
  }
  if(p4sZ2phREFIT_.size()==2){
   p4s.push_back(p4sZ2phREFIT_[1]); pTErrs.push_back(pTerrsZ2phREFIT_[1]);
  }

  double errorUncorr = helperFunc_->masserror(p4s,pTErrs);

  vector<double> pTErrs1; vector<double> pTErrs2;
  for(unsigned int i = 0; i<pTErrs.size(); i++){
     if(i==0) pTErrs1.push_back(pTErrs[i]);
     else pTErrs1.push_back(0.0);
  }
  for(unsigned int i = 0; i<pTErrs.size(); i++){
     if(i==1) pTErrs2.push_back(pTErrs[i]);
     else pTErrs2.push_back(0.0);
  }

  double error1 = helperFunc_->masserror(p4s,pTErrs1);
  double error2 = helperFunc_->masserror(p4s,pTErrs2);

  double errorph1 = 0.0; double errorph2 = 0.0; 
  if(p4sZ2phREFIT_.size()>=1){ 
 
   vector<double> pTErrsph1;
   for(unsigned int i = 0; i<pTErrs.size(); i++){
     if(i==2) pTErrsph1.push_back(pTErrs[i]);
     else pTErrsph1.push_back(0.0);
   }

   errorph1 = helperFunc_->masserror(p4s,pTErrsph1);

  }

  if(p4sZ2phREFIT_.size()>=2){

   vector<double> pTErrsph2;
   for(unsigned int i = 0; i<pTErrs.size(); i++){
     if(i==3) pTErrsph2.push_back(pTErrs[i]);
     else pTErrsph2.push_back(0.0);
   }
  
   errorph2 = helperFunc_->masserror(p4s,pTErrsph2);  

  }

  if(debug_) cout<<"error1 "<<error1<<" error2 "<<error2<<endl;

  ////
  // covariance matrix

  double delta12 = error1*error2*covMatrixZ1_(0,1)/sqrt(covMatrixZ1_(0,0)*covMatrixZ1_(1,1));
  double delta1ph1 = 0.0; double delta1ph2 = 0.0;
  double delta2ph1 = 0.0; double delta2ph2 = 0.0;
  double deltaph1ph2 = 0.0;

  if(p4sZ1phREFIT_.size()>=1){
     delta1ph1 = error1*errorph1*covMatrixZ1_(0,2)/sqrt(covMatrixZ1_(0,0)*covMatrixZ1_(2,2));
     delta2ph1 = error2*errorph1*covMatrixZ1_(1,2)/sqrt(covMatrixZ1_(1,1)*covMatrixZ1_(2,2));
  }

  if(p4sZ1phREFIT_.size()>=2){
     delta1ph2 = error1*errorph2*covMatrixZ1_(0,3)/sqrt(covMatrixZ1_(0,0)*covMatrixZ1_(3,3));
     delta2ph2 = error2*errorph2*covMatrixZ1_(1,3)/sqrt(covMatrixZ1_(1,1)*covMatrixZ1_(3,3));
     delta1ph2 = errorph1*errorph2*covMatrixZ1_(2,3)/sqrt(covMatrixZ1_(2,2)*covMatrixZ1_(3,3));
  }


  double correlation = delta12+delta1ph1+delta1ph2+delta2ph1+delta2ph2+deltaph1ph2;

  double err = sqrt(errorUncorr*errorUncorr+correlation);

  return err;
  
}