23 double p3,
double p4,
double p5,
double p6) {
45 float absEta = fabs(
eta);
47 if( ( 1.3 <= absEta && absEta < 1.45) &&
56 else if( ( 1.5 <= absEta && absEta < 1.65 ) &&
68 double getIDSCANRes(std::vector<double> barrelvec, std::vector<double> ec1vec,
69 std::vector<double> ec2vec, std::vector<double> ec3vec, std::vector<double> ec4vec,
70 double pt_id,
double eta_id) {
73 if (pt == 0)
return 1.0e33;
75 double AbsPtInv = fabs(1./pt);
76 double AbsEta = fabs(eta_id);
78 std::vector<double>
vec;
79 if (AbsEta < 1.05)
vec = std::move(barrelvec);
80 else if (AbsEta>=1.05 && AbsEta<1.35)
vec = std::move(ec1vec);
81 else if (AbsEta>=1.35 && AbsEta<1.65)
vec = std::move(ec2vec);
82 else if (AbsEta>=1.65 && AbsEta<2.0)
vec = std::move(ec3vec);
83 else vec = std::move(ec4vec);
85 return vec[0]*AbsPtInv+
vec[1]/1000.;
93 if (pt < 4. ) pt = 4.;
94 if (pt > 40.) pt = 40.;
100 if (fabs(
eta) < 0.5) {
101 return 6.0e-3/(pt*pt) + 4.4e-2/pt + 1.2e-2 + (-3.2e-5*pt);
103 else if (fabs(
eta) >= 0.5 && fabs(
eta) < 1.0) {
104 return 5.6e-3/(pt*pt) + 3.9e-2/pt + 1.3e-2 + (-3.7e-5*pt);
106 else if (fabs(
eta) >= 1.0 && fabs(
eta) < 1.5) {
107 return 2.1e-1/(pt*pt) + 8.8e-2/pt + 7.1e-4 + (1.7e-4*pt);
109 else if (fabs(
eta) >= 1.5 && fabs(
eta) < 2.0) {
110 return 4.5e-3/(pt*pt) + 1.4e-2/pt + 1.1e-2 + (-5.7e-5*pt);
113 return 3.1e-2/(pt*pt) + 4.9e-1/pt + (-2.6e-3) + (3.2e-5*pt);
122 if (pt < 4. ) pt = 4.;
123 if (pt > 40.) pt = 40.;
129 if (fabs(
eta) < 0.5) {
130 return 4.1e-2/(pt*pt) + 1.5e-1/pt + 1.4e-3 + (5.8e-5*pt);
132 else if (fabs(
eta) >= 0.5 && fabs(
eta) < 1.0) {
133 return 9.4e-3/(pt*pt) + 8.8e-2/pt + 1.1e-2 + (-1.e-4*pt);
135 else if (fabs(
eta) >= 1.0 && fabs(
eta) < 1.5) {
136 return 3.5e-1/(pt*pt) + 9.4e-2/pt + 8.2e-3 + (-3.3e-7*pt);
138 else if (fabs(
eta) >= 1.5 && fabs(
eta) < 2.0) {
139 return 2.6e-2/(pt*pt) + 1.2e-1/pt + 3.8e-3 + (2.2e-5*pt);
142 return 2.7e-1/(pt*pt) + 3.2e-2/pt + (9.0e-3) + (-2.6e-5*pt);
147 double dphi = phi1 - phi2;
154 return fabs(eta1-eta2);
157 double getDeltaR(
double eta1,
double phi1,
double eta2,
double phi2) {
160 return sqrt(deta*deta + dphi*dphi);
164 if (sp1 != 0 && sp2 != 0)
return (sp2*sp2*fabs(p1) + sp1*sp1*fabs(p2))/(sp1*sp1 + sp2*sp2);
165 else if (sp1 != 0 && sp2 == 0)
return fabs(p2);
166 else if (sp1 == 0 && sp2 != 0)
return fabs(p1);
167 else return (fabs(p1)+fabs(p2))*0.5;
171 if (sp1 != 0 && sp2 != 0)
return sqrt((sp1*sp1*sp2*sp2)/(sp1*sp1 + sp2*sp2));
176 double eta1,
double seta1,
double phi1,
double sphi1,
double ipt1,
double sipt1,
177 double eta2,
double seta2,
double phi2,
double sphi2,
double ipt2,
double sipt2,
bool useAbsPt) {
180 double sdeta = seta1*seta1+seta2*seta2;
182 double sdphi = sphi1*sphi1+sphi2*sphi2;
183 double dipt_1 = ipt - ipt1;
184 if (useAbsPt) dipt_1 = fabs(ipt) - fabs(ipt1);
185 double sdipt_1 = sipt1*sipt1;
186 double dipt_2 = ipt - ipt2;
187 if (useAbsPt) dipt_2 = fabs(ipt) - fabs(ipt2);
188 double sdipt_2 = sipt2*sipt2;
192 if (sdeta != 0) {
chi2 += deta*deta/sdeta; ndof++; }
193 if (sdphi != 0) {
chi2 += dphi*dphi/sdphi; ndof++; }
194 if (sdipt_1 != 0) {
chi2 += dipt_1*dipt_1/sdipt_1; ndof++; }
195 if (sdipt_2 != 0) {
chi2 += dipt_2*dipt_2/sdipt_2; ndof++; }
197 if (ndof == 0)
return 1.0e30;
203 double eta1,
double seta1,
double phi1,
double sphi1,
double qOvpt1,
double sqOvpt1,
204 double eta2,
double seta2,
double phi2,
double sphi2,
double qOvpt2,
double sqOvpt2,
bool useAbsPt) {
207 double sdeta = seta1*seta1+seta2*seta2;
209 double sdphi = sphi1*sphi1+sphi2*sphi2;
210 double dipt = qOvpt1 - qOvpt2;
211 if (useAbsPt) dipt = fabs(qOvpt1) - fabs(qOvpt2);
212 double sdipt = sqOvpt1*sqOvpt1+sqOvpt2*sqOvpt2;
216 if (sdeta != 0) {
chi2 += deta*deta/sdeta; ndof++; }
217 if (sdphi != 0) {
chi2 += dphi*dphi/sdphi; ndof++; }
218 if (sdipt != 0) {
chi2 += dipt*dipt/sdipt; ndof++; }
220 if (ndof == 0)
return 1.0e30;
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
std::vector< size_t > vec
double chi2(TH1 *h0, TH1 *h1)
int whichECRegion(const float eta, const float phi)
utility function for getMuFastRes
double getIDSCANRes(std::vector< double > barrelvec, std::vector< double > ec1vec, std::vector< double > ec2vec, std::vector< double > ec3vec, std::vector< double > ec4vec, double pt_id, double eta_id)
Get parametrized IDSCAN 1/pt resolution.
double getChi2(int &ndof, double ipt, double eta1, double seta1, double phi1, double sphi1, double ipt1, double sipt1, double eta2, double seta2, double phi2, double sphi2, double ipt2, double sipt2, bool useAbsPt)
Get OLD style (i.e. muFast time) Chi2.
double getCombinedAverage(double p1, double sp1, double p2, double sp2)
Get weighted mean.
double getG4ExtEtaRes(double pt, double eta)
Get parametrized Geant4 Eta resolution (extrapolated).
double getStdChi2(int &ndof, double eta1, double seta1, double phi1, double sphi1, double qOvpt1, double sqOvpt1, double eta2, double seta2, double phi2, double sphi2, double qOvpt2, double sqOvpt2, bool useAbsPt)
Get Std Chi2.
double getCombinedAverageSigma(double sp1, double sp2)
Get sigma of weighted mean.
double getDeltaEta(double eta1, double eta2)
Get DeltaEta.
double getDeltaR(double eta1, double phi1, double eta2, double phi2)
Get DeltaR.
void setMuFastRes(std::vector< double > &vec, double p1, double p2, double p3, double p4, double p5, double p6)
utility vector set
void setIDSCANRes(std::vector< double > &vec, double p1, double p2)
utility vector set
double getDeltaPhi(double phi1, double phi2)
Get DeltaPhi.
double getG4ExtPhiRes(double pt, double eta)
Get parametrized Geant4 Phi resolution (extrapolated).