5 double ele_z0 =
getValue(
"unc_vtx_ele_track_z0");
6 double pos_z0 =
getValue(
"unc_vtx_pos_track_z0");
11 double b0p = 5.199e-2;
12 double b1p = -2.301e-3;
13 double b0n = -4.716e-2;
14 double b1n = 1.086e-3;
15 double z0p_gt = a + b0p*Z + b1p*Z/mass;
16 double z0n_lt = -a + b0n*Z + b1n*Z/mass;
22 if(ele_z0 < z0p_gt) passCut =
false;
25 if(ele_z0 > z0n_lt) passCut =
false;
28 if(pos_z0 < z0p_gt) passCut =
false;
31 if(pos_z0 > z0n_lt) passCut =
false;
37 if(variableName ==
"unc_vtx_ele_zalpha")
39 if(variableName ==
"unc_vtx_pos_zalpha")
41 if(variableName ==
"unc_vtx_deltaZ")
54 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_ele_zalpha with param " << slope << std::endl;
55 std::string variableName =
"unc_vtx_ele_zalpha";
59 double& ele_z0 = *
tuple_[
"unc_vtx_ele_track_z0"];
60 double& recon_z = *
tuple_[
"unc_vtx_z"];
62 std::function<double()> calculate_ele_zalpha = [&, slope]()->
double{
64 return (recon_z - (ele_z0/slope));
66 return (recon_z - (ele_z0/-slope));
68 functions_[variableName] = calculate_ele_zalpha;
72 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_pos_zalpha with param " << slope << std::endl;
73 std::string variableName =
"unc_vtx_pos_zalpha";
77 double& pos_z0 = *
tuple_[
"unc_vtx_pos_track_z0"];
78 double& recon_z = *
tuple_[
"unc_vtx_z"];
80 std::function<double()> calculate_pos_zalpha = [&, slope]()->
double{
82 return (recon_z - (pos_z0/slope));
84 return (recon_z - (pos_z0/-slope));
86 functions_[variableName] = calculate_pos_zalpha;
90 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_deltaZ" << std::endl;
91 std::string variableName =
"unc_vtx_deltaZ";
95 double& pos_z0 = *
tuple_[
"unc_vtx_pos_track_z0"];
96 double& ele_z0 = *
tuple_[
"unc_vtx_ele_track_z0"];
97 double& ele_tanlambda = *
tuple_[
"unc_vtx_ele_track_tanLambda"];
98 double& pos_tanlambda = *
tuple_[
"unc_vtx_pos_track_tanLambda"];
100 std::function<double()> calculate_unc_vtx_deltaZ = [&]()->
double{
101 return std::abs((pos_z0/pos_tanlambda) - (ele_z0/ele_tanlambda));
103 functions_[variableName] = calculate_unc_vtx_deltaZ;
107 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_ele_zalpha with slope " << slope << std::endl;
110 double* ele_zalpha =
new double{999.9};
111 tuple_[
"unc_vtx_ele_zalpha"] = ele_zalpha;
112 newtree_->Branch(
"unc_vtx_ele_zalpha",
tuple_[
"unc_vtx_ele_zalpha"],
"unc_vtx_ele_zalpha/D");
116 std::function<double()> calculate_ele_zalpha = [&, slope]()->
double{
117 if(*
tuple_[
"unc_vtx_ele_track_z0"] > 0.0)
118 return ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_ele_track_z0"])/slope)) );
120 return ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_ele_track_z0"])/(-1*slope)) ));
122 functions_[
"unc_vtx_ele_zalpha"] = calculate_ele_zalpha;
126 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_pos_zalpha with slope " << slope << std::endl;
129 double* pos_zalpha =
new double{999.9};
130 tuple_[
"unc_vtx_pos_zalpha"] = pos_zalpha;
131 newtree_->Branch(
"unc_vtx_pos_zalpha",
tuple_[
"unc_vtx_pos_zalpha"],
"unc_vtx_pos_zalpha/D");
135 std::function<double()> calculate_pos_zalpha = [&,slope]()->
double{
136 if(*
tuple_[
"unc_vtx_pos_track_z0"] > 0.0)
137 return ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_pos_track_z0"])/slope)) );
139 return ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_pos_track_z0"]))/(-1*slope)) );
141 functions_[
"unc_vtx_pos_zalpha"] = calculate_pos_zalpha;
145 std::cout <<
"[SimpAnaTTree]::Add variable unc_vtx_zalpha_max with slope " << slope << std::endl;
148 double* zalpha_max =
new double{999.9};
149 tuple_[
"unc_vtx_zalpha_max"] = zalpha_max;
150 newtree_->Branch(
"unc_vtx_zalpha_max",
tuple_[
"unc_vtx_zalpha_max"],
"unc_vtx_zalpha_max/D");
154 std::function<double()> calculate_zalpha_max = [&, slope]()->
double{
157 if(*
tuple_[
"unc_vtx_ele_track_z0"] > 0.0)
158 ele_zalpha = ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_ele_track_z0"])/slope)) );
160 ele_zalpha = ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_ele_track_z0"])/(-1*slope)) ));
162 if(*
tuple_[
"unc_vtx_pos_track_z0"] > 0.0)
163 pos_zalpha = ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_pos_track_z0"])/slope)) );
165 pos_zalpha = ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_pos_track_z0"])/(-1*slope)) ));
166 if(ele_zalpha > pos_zalpha)
171 functions_[
"unc_vtx_zalpha_max"] = calculate_zalpha_max;
175 std::cout <<
"[SimpAnaTTree]::Add variable unc_vtx_zalpha_min with slope " << slope << std::endl;
178 double* zalpha_min =
new double{999.9};
179 tuple_[
"unc_vtx_zalpha_min"] = zalpha_min;
180 newtree_->Branch(
"unc_vtx_zalpha_min",
tuple_[
"unc_vtx_zalpha_min"],
"unc_vtx_zalpha_min/D");
184 std::function<double()> calculate_zalpha_min = [&, slope]()->
double{
187 if(*
tuple_[
"unc_vtx_ele_track_z0"] > 0.0)
188 ele_zalpha = ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_ele_track_z0"])/slope)) );
190 ele_zalpha = ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_ele_track_z0"])/(-1*slope)) ));
192 if(*
tuple_[
"unc_vtx_pos_track_z0"] > 0.0)
193 pos_zalpha = ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_pos_track_z0"])/slope)) );
195 pos_zalpha = ( *
tuple_[
"unc_vtx_z"] - (((*
tuple_[
"unc_vtx_pos_track_z0"])/(-1*slope)) ));
196 if(ele_zalpha < pos_zalpha)
201 functions_[
"unc_vtx_zalpha_min"] = calculate_zalpha_min;
205 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_ele_iso_z0err " << std::endl;
206 double* ele_iso_z0err =
new double{9999.9};
207 tuple_[
"unc_vtx_ele_iso_z0err"] = ele_iso_z0err;
208 newtree_->Branch(
"unc_vtx_ele_iso_z0err",
tuple_[
"unc_vtx_ele_iso_z0err"],
"unc_vtx_ele_iso_z0err/D");
211 std::function<double()> calculate_ele_iso_z0err = [&]()->
double{
212 return 2.0* *
tuple_[
"unc_vtx_ele_track_L1_isolation"] / *
tuple_[
"unc_vtx_ele_track_z0Err"];
214 functions_[
"unc_vtx_ele_iso_z0err"] = calculate_ele_iso_z0err;
218 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_pos_iso_z0err " << std::endl;
219 double* pos_iso_z0err =
new double{9999.9};
220 tuple_[
"unc_vtx_pos_iso_z0err"] = pos_iso_z0err;
221 newtree_->Branch(
"unc_vtx_pos_iso_z0err",
tuple_[
"unc_vtx_pos_iso_z0err"],
"unc_vtx_pos_iso_z0err/D");
224 std::function<double()> calculate_pos_iso_z0err = [&]()->
double{
225 return 2.0* *
tuple_[
"unc_vtx_pos_track_L1_isolation"] / *
tuple_[
"unc_vtx_pos_track_z0Err"];
227 functions_[
"unc_vtx_pos_iso_z0err"] = calculate_pos_iso_z0err;
231 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_ele_z0_z0err " << std::endl;
232 double* ele_z0_z0err =
new double{9999.9};
233 tuple_[
"unc_vtx_ele_z0_z0err"] = ele_z0_z0err;
234 newtree_->Branch(
"unc_vtx_ele_z0_z0err",
tuple_[
"unc_vtx_ele_z0_z0err"],
"unc_vtx_ele_z0_z0err/D");
237 std::function<double()> calculate_ele_z0_z0err = [&]()->
double{
238 return std::abs(*
tuple_[
"unc_vtx_ele_track_z0"])/ *
tuple_[
"unc_vtx_ele_track_z0Err"];
240 functions_[
"unc_vtx_ele_z0_z0err"] = calculate_ele_z0_z0err;
244 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_pos_z0_z0err " << std::endl;
245 double* pos_z0_z0err =
new double{9999.9};
246 tuple_[
"unc_vtx_pos_z0_z0err"] = pos_z0_z0err;
247 newtree_->Branch(
"unc_vtx_pos_z0_z0err",
tuple_[
"unc_vtx_pos_z0_z0err"],
"unc_vtx_pos_z0_z0err/D");
250 std::function<double()> calculate_pos_z0_z0err = [&]()->
double{
251 return std::abs(*
tuple_[
"unc_vtx_pos_track_z0"])/ *
tuple_[
"unc_vtx_pos_track_z0Err"];
253 functions_[
"unc_vtx_pos_z0_z0err"] = calculate_pos_z0_z0err;
257 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_ele_isolation_cut" << std::endl;
258 double* ele_isolation =
new double{9999.9};
259 tuple_[
"unc_vtx_ele_isolation_cut"] = ele_isolation;
260 newtree_->Branch(
"unc_vtx_ele_isolation_cut",
tuple_[
"unc_vtx_ele_isolation_cut"],
"unc_vtx_ele_isolation_cut/D");
263 std::function<double()> calculate_ele_isolation_cut = [&]()->
double{
265 return ( (2.0* *
tuple_[
"unc_vtx_ele_track_L1_isolation"] / *
tuple_[
"unc_vtx_ele_track_z0Err"]) - (std::abs(*
tuple_[
"unc_vtx_ele_track_z0"])/ *
tuple_[
"unc_vtx_ele_track_z0Err"]) );
267 functions_[
"unc_vtx_ele_isolation_cut"] = calculate_ele_isolation_cut;
271 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_pos_isolation_cut" << std::endl;
272 double* pos_isolation =
new double{9999.9};
273 tuple_[
"unc_vtx_pos_isolation_cut"] = pos_isolation;
274 newtree_->Branch(
"unc_vtx_pos_isolation_cut",
tuple_[
"unc_vtx_pos_isolation_cut"],
"unc_vtx_pos_isolation_cut/D");
277 std::function<double()> calculate_pos_isolation_cut = [&]()->
double{
279 return ( (2.0* *
tuple_[
"unc_vtx_pos_track_L1_isolation"] / *
tuple_[
"unc_vtx_pos_track_z0Err"]) - (std::abs(*
tuple_[
"unc_vtx_pos_track_z0"])/ *
tuple_[
"unc_vtx_pos_track_z0Err"]) );
281 functions_[
"unc_vtx_pos_isolation_cut"] = calculate_pos_isolation_cut;
285 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_ele_z0tanlambda" << std::endl;
286 double* ele_z0tanlambda =
new double{999.9};
287 tuple_[
"unc_vtx_ele_z0tanlambda"] = ele_z0tanlambda;
288 newtree_->Branch(
"unc_vtx_ele_z0tanlambda",
tuple_[
"unc_vtx_ele_z0tanlambda"],
"unc_vtx_ele_z0tanlambda/D");
290 std::function<double()> calculate_ele_z0tanlambda = [&]()->
double{
291 return *
tuple_[
"unc_vtx_ele_track_z0"] / *
tuple_[
"unc_vtx_ele_track_tanLambda"];
293 functions_[
"unc_vtx_ele_z0tanlambda"] = calculate_ele_z0tanlambda;
297 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_pos_z0tanlambda" << std::endl;
298 double* pos_z0tanlambda =
new double{999.9};
299 tuple_[
"unc_vtx_pos_z0tanlambda"] = pos_z0tanlambda;
300 newtree_->Branch(
"unc_vtx_pos_z0tanlambda",
tuple_[
"unc_vtx_pos_z0tanlambda"],
"unc_vtx_pos_z0tanlambda/D");
302 std::function<double()> calculate_pos_z0tanlambda = [&]()->
double{
303 return *
tuple_[
"unc_vtx_pos_track_z0"] / *
tuple_[
"unc_vtx_pos_track_tanLambda"];
305 functions_[
"unc_vtx_pos_z0tanlambda"] = calculate_pos_z0tanlambda;
309 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_ele_z0tanlambda_right with slope " << slope << std::endl;
310 double* ele_z0tanlambda_right =
new double{999.9};
311 tuple_[
"unc_vtx_ele_z0tanlambda_right"] = ele_z0tanlambda_right;
312 newtree_->Branch(
"unc_vtx_ele_z0tanlambda_right",
tuple_[
"unc_vtx_ele_z0tanlambda_right"],
"unc_vtx_ele_z0tanlambda_right/D");
313 new_variables_[
"unc_vtx_ele_z0tanlambda_right"] = ele_z0tanlambda_right;
314 std::function<double()> calculate_ele_z0tanlambda_right = [&,slope]()->
double{
315 return (*
tuple_[
"unc_vtx_ele_track_z0"] / *
tuple_[
"unc_vtx_ele_track_tanLambda"]) + (-*
tuple_[
"unc_vtx_z"]/-slope);
317 functions_[
"unc_vtx_ele_z0tanlambda_right"] = calculate_ele_z0tanlambda_right;
321 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_pos_z0tanlambda_right with slope " << slope << std::endl;
322 double* pos_z0tanlambda_right =
new double{999.9};
323 tuple_[
"unc_vtx_pos_z0tanlambda_right"] = pos_z0tanlambda_right;
324 newtree_->Branch(
"unc_vtx_pos_z0tanlambda_right",
tuple_[
"unc_vtx_pos_z0tanlambda_right"],
"unc_vtx_pos_z0tanlambda_right/D");
325 new_variables_[
"unc_vtx_pos_z0tanlambda_right"] = pos_z0tanlambda_right;
326 std::function<double()> calculate_pos_z0tanlambda_right = [&, slope]()->
double{
327 return (*
tuple_[
"unc_vtx_pos_track_z0"] / *
tuple_[
"unc_vtx_pos_track_tanLambda"]) + (-*
tuple_[
"unc_vtx_z"]/-slope);
329 functions_[
"unc_vtx_pos_z0tanlambda_right"] = calculate_pos_z0tanlambda_right;
333 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_ele_z0tanlambda_left with slope " << slope << std::endl;
334 double* ele_z0tanlambda_left =
new double{999.9};
335 tuple_[
"unc_vtx_ele_z0tanlambda_left"] = ele_z0tanlambda_left;
336 newtree_->Branch(
"unc_vtx_ele_z0tanlambda_left",
tuple_[
"unc_vtx_ele_z0tanlambda_left"],
"unc_vtx_ele_z0tanlambda_left/D");
337 new_variables_[
"unc_vtx_ele_z0tanlambda_left"] = ele_z0tanlambda_left;
338 std::function<double()> calculate_ele_z0tanlambda_left = [&,slope]()->
double{
339 return (*
tuple_[
"unc_vtx_ele_track_z0"] / *
tuple_[
"unc_vtx_ele_track_tanLambda"]) + (-*
tuple_[
"unc_vtx_z"]/-slope);
341 functions_[
"unc_vtx_ele_z0tanlambda_left"] = calculate_ele_z0tanlambda_left;
345 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_pos_z0tanlambda_left with slope " << slope << std::endl;
346 double* pos_z0tanlambda_left =
new double{999.9};
347 tuple_[
"unc_vtx_pos_z0tanlambda_left"] = pos_z0tanlambda_left;
348 newtree_->Branch(
"unc_vtx_pos_z0tanlambda_left",
tuple_[
"unc_vtx_pos_z0tanlambda_left"],
"unc_vtx_pos_z0tanlambda_left/D");
349 new_variables_[
"unc_vtx_pos_z0tanlambda_left"] = pos_z0tanlambda_left;
350 std::function<double()> calculate_pos_z0tanlambda_left = [&, slope]()->
double{
351 return (*
tuple_[
"unc_vtx_pos_track_z0"] / *
tuple_[
"unc_vtx_pos_track_tanLambda"]) + (-*
tuple_[
"unc_vtx_z"]/-slope);
353 functions_[
"unc_vtx_pos_z0tanlambda_left"] = calculate_pos_z0tanlambda_left;
357 std::cout <<
"[SimpAnaTTree]::Adding variable unc_vtx_abs_delta_z0tanlambda" << std::endl;
358 double* abs_delta_z0tanlambda =
new double{999.9};
359 tuple_[
"unc_vtx_abs_delta_z0tanlambda"] = abs_delta_z0tanlambda;
360 newtree_->Branch(
"unc_vtx_abs_delta_z0tanlambda",
tuple_[
"unc_vtx_abs_delta_z0tanlambda"],
361 "unc_vtx_abs_delta_z0tanlambda/D");
362 new_variables_[
"unc_vtx_abs_delta_z0tanlambda"] = abs_delta_z0tanlambda;
364 std::function<double()> calculate_abs_delta_z0tanlambda = [&]()->
double{
365 return ( std::abs((*
tuple_[
"unc_vtx_pos_track_z0"] / *
tuple_[
"unc_vtx_pos_track_tanLambda"]) -
366 (*
tuple_[
"unc_vtx_ele_track_z0"] / *
tuple_[
"unc_vtx_ele_track_tanLambda"])));
368 functions_[
"unc_vtx_abs_delta_z0tanlambda"] = calculate_abs_delta_z0tanlambda;
double getValue(std::string branch_name)
Get the value of a flat tuple variable.
TTree * newtree_
temporary ttree used to create and fill new branches
std::map< std::string, double * > tuple_
holds all variables and values
void addVariableToTBranch(const std::string &variableName)
std::map< std::string, std::function< double()> > functions_
functions that calculate new variables
std::map< std::string, double * > new_variables_
list of new variables
void unc_vtx_pos_zalpha(double slope)
void addVariable_unc_vtx_pos_zalpha(double slope)
void addVariable_unc_vtx_pos_z0tanlambda_right(double slope)
void unc_vtx_ele_zalpha(double slope)
void addVariable_unc_vtx_ele_iso_z0err()
void addVariable_unc_vtx_pos_isolation_cut()
void addVariable_unc_vtx_zalpha_max(double slope)
bool impactParameterCut2016Canonical(double mass)
void addVariable_unc_vtx_pos_z0tanlambda_left(double slope)
void addVariable_unc_vtx_ele_z0tanlambda_left(double slope)
void addVariable_unc_vtx_pos_z0tanlambda()
void addVariable_unc_vtx_ele_z0_z0err()
void addVariable_unc_vtx_pos_iso_z0err()
void addVariable_unc_vtx_ele_z0tanlambda_right(double slope)
void addVariable_unc_vtx_ele_isolation_cut()
void addVariable_unc_vtx_abs_delta_z0tanlambda()
void addVariable(std::string variableName, double param) override
void addVariable_unc_vtx_zalpha_min(double slope)
void addVariable_unc_vtx_ele_z0tanlambda()
void addVariable_unc_vtx_ele_zalpha(double slope)
New Variables.
void addVariable_unc_vtx_pos_z0_z0err()