double KinZfitter::GetRefitMZ1() { vector<TLorentzVector> p4s = GetRefitP4s(); TLorentzVector pZ1(0,0,0,0); pZ1 = p4s[0] + p4s[1]; return pZ1.M(); }
double KinZfitter::GetRefitMZ2() { vector<TLorentzVector> p4s = GetRefitP4s(); TLorentzVector pZ2(0,0,0,0); pZ2 = p4s[2] + p4s[3]; return pZ2.M(); }
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(); }
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; }