hpstr
The Heavy Photon Search Toolkit for Reconstruction (hpstr) provides an interface to physics data from the HPS experiment saved in the LCIO format and converts it into an ROOT based format.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
SimpAnaTTree.cxx
Go to the documentation of this file.
1#include <SimpAnaTTree.h>
2
4 mass = mass/1000.0;
5 double ele_z0 = getValue("unc_vtx_ele_track_z0");
6 double pos_z0 = getValue("unc_vtx_pos_track_z0");
7 double Z = getValue("unc_vtx_z");
8 //double dz = -0.377 + (13.79*mass) - (55.84*mass*mass) + (84.00*mass*mass*mass);
9 //Z = Z + dz;
10 double a = -0.2018;
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;
17
18 bool passCut = true;
19 if(Z < 6.0)
20 return passCut;
21 if(ele_z0 >= 0.0){
22 if(ele_z0 < z0p_gt) passCut = false;
23 }
24 else
25 if(ele_z0 > z0n_lt) passCut = false;
26
27 if(pos_z0 >= 0.0){
28 if(pos_z0 < z0p_gt) passCut = false;
29 }
30 else
31 if(pos_z0 > z0n_lt) passCut = false;
32
33 return passCut;
34}
35
36void SimpAnaTTree::addVariable(std::string variableName, double param){
37 if(variableName == "unc_vtx_ele_zalpha")
38 unc_vtx_ele_zalpha(param);
39 if(variableName == "unc_vtx_pos_zalpha")
40 unc_vtx_pos_zalpha(param);
41 if(variableName == "unc_vtx_deltaZ")
43
44}
45/*
46void SimpAnaTTree::addVariableToTBranch(const std::string& variableName){
47 double* variable = new double{999.9};
48 tuple_[variableName] = variable;
49 newtree_->Branch(variableName, tuple_[variableName], variableName+"/D");
50 new_variables_[variableName] = variable;
51}
52*/
54 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_ele_zalpha with param " << slope << std::endl;
55 std::string variableName = "unc_vtx_ele_zalpha";
56 //Create TBranch for variable
57 addVariableToTBranch(variableName);
58
59 double& ele_z0 = *tuple_["unc_vtx_ele_track_z0"];
60 double& recon_z = *tuple_["unc_vtx_z"];
61
62 std::function<double()> calculate_ele_zalpha = [&, slope]()->double{
63 if(ele_z0 > 0.0)
64 return (recon_z - (ele_z0/slope));
65 else
66 return (recon_z - (ele_z0/-slope));
67 };
68 functions_[variableName] = calculate_ele_zalpha;
69}
70
72 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_pos_zalpha with param " << slope << std::endl;
73 std::string variableName = "unc_vtx_pos_zalpha";
74 //Create TBranch for variable
75 addVariableToTBranch(variableName);
76
77 double& pos_z0 = *tuple_["unc_vtx_pos_track_z0"];
78 double& recon_z = *tuple_["unc_vtx_z"];
79
80 std::function<double()> calculate_pos_zalpha = [&, slope]()->double{
81 if(pos_z0 > 0.0)
82 return (recon_z - (pos_z0/slope));
83 else
84 return (recon_z - (pos_z0/-slope));
85 };
86 functions_[variableName] = calculate_pos_zalpha;
87}
88
90 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_deltaZ" << std::endl;
91 std::string variableName = "unc_vtx_deltaZ";
92 //Create TBranch for variable
93 addVariableToTBranch(variableName);
94
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"];
99
100 std::function<double()> calculate_unc_vtx_deltaZ = [&]()->double{
101 return std::abs((pos_z0/pos_tanlambda) - (ele_z0/ele_tanlambda));
102 };
103 functions_[variableName] = calculate_unc_vtx_deltaZ;
104}
105
107 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_ele_zalpha with slope " << slope << std::endl;
108
109 //Create branch to hold new variable
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");
113 new_variables_["unc_vtx_ele_zalpha"] = ele_zalpha;
114
115 //Define lambda function to calculate ele zalpha
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)) );
119 else
120 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/(-1*slope)) ));
121 };
122 functions_["unc_vtx_ele_zalpha"] = calculate_ele_zalpha;
123}
124
126 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_pos_zalpha with slope " << slope << std::endl;
127
128 //Create branch to hold new variable
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");
132 new_variables_["unc_vtx_pos_zalpha"] = pos_zalpha;
133
134 //Define lambda function to calculate pos zalpha
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)) );
138 else
139 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"]))/(-1*slope)) );
140 };
141 functions_["unc_vtx_pos_zalpha"] = calculate_pos_zalpha;
142}
143
145 std::cout << "[SimpAnaTTree]::Add variable unc_vtx_zalpha_max with slope " << slope << std::endl;
146
147 //Create branch to hold new variable
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");
151 new_variables_["unc_vtx_zalpha_max"] = zalpha_max;
152
153 //Define lambda function to calculate ele zalpha
154 std::function<double()> calculate_zalpha_max = [&, slope]()->double{
155 double ele_zalpha;
156 double pos_zalpha;
157 if(*tuple_["unc_vtx_ele_track_z0"] > 0.0)
158 ele_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/slope)) );
159 else
160 ele_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/(-1*slope)) ));
161
162 if(*tuple_["unc_vtx_pos_track_z0"] > 0.0)
163 pos_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/slope)) );
164 else
165 pos_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/(-1*slope)) ));
166 if(ele_zalpha > pos_zalpha)
167 return ele_zalpha;
168 else
169 return pos_zalpha;
170 };
171 functions_["unc_vtx_zalpha_max"] = calculate_zalpha_max;
172}
173
175 std::cout << "[SimpAnaTTree]::Add variable unc_vtx_zalpha_min with slope " << slope << std::endl;
176
177 //Create branch to hold new variable
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");
181 new_variables_["unc_vtx_zalpha_min"] = zalpha_min;
182
183 //Define lambda function to calculate ele zalpha
184 std::function<double()> calculate_zalpha_min = [&, slope]()->double{
185 double ele_zalpha;
186 double pos_zalpha;
187 if(*tuple_["unc_vtx_ele_track_z0"] > 0.0)
188 ele_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/slope)) );
189 else
190 ele_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/(-1*slope)) ));
191
192 if(*tuple_["unc_vtx_pos_track_z0"] > 0.0)
193 pos_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/slope)) );
194 else
195 pos_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/(-1*slope)) ));
196 if(ele_zalpha < pos_zalpha)
197 return ele_zalpha;
198 else
199 return pos_zalpha;
200 };
201 functions_["unc_vtx_zalpha_min"] = calculate_zalpha_min;
202}
203
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");
209 new_variables_["unc_vtx_ele_iso_z0err"] = ele_iso_z0err;
210
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"];
213 };
214 functions_["unc_vtx_ele_iso_z0err"] = calculate_ele_iso_z0err;
215}
216
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");
222 new_variables_["unc_vtx_pos_iso_z0err"] = pos_iso_z0err;
223
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"];
226 };
227 functions_["unc_vtx_pos_iso_z0err"] = calculate_pos_iso_z0err;
228}
229
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");
235 new_variables_["unc_vtx_ele_z0_z0err"] = ele_z0_z0err;
236
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"];
239 };
240 functions_["unc_vtx_ele_z0_z0err"] = calculate_ele_z0_z0err;
241}
242
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");
248 new_variables_["unc_vtx_pos_z0_z0err"] = pos_z0_z0err;
249
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"];
252 };
253 functions_["unc_vtx_pos_z0_z0err"] = calculate_pos_z0_z0err;
254}
255
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");
261 new_variables_["unc_vtx_ele_isolation_cut"] = ele_isolation;
262
263 std::function<double()> calculate_ele_isolation_cut = [&]()->double{
264
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"]) );
266 };
267 functions_["unc_vtx_ele_isolation_cut"] = calculate_ele_isolation_cut;
268}
269
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");
275 new_variables_["unc_vtx_pos_isolation_cut"] = pos_isolation;
276
277 std::function<double()> calculate_pos_isolation_cut = [&]()->double{
278
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"]) );
280 };
281 functions_["unc_vtx_pos_isolation_cut"] = calculate_pos_isolation_cut;
282}
283
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");
289 new_variables_["unc_vtx_ele_z0tanlambda"] = ele_z0tanlambda;
290 std::function<double()> calculate_ele_z0tanlambda = [&]()->double{
291 return *tuple_["unc_vtx_ele_track_z0"] / *tuple_["unc_vtx_ele_track_tanLambda"];
292 };
293 functions_["unc_vtx_ele_z0tanlambda"] = calculate_ele_z0tanlambda;
294}
295
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");
301 new_variables_["unc_vtx_pos_z0tanlambda"] = pos_z0tanlambda;
302 std::function<double()> calculate_pos_z0tanlambda = [&]()->double{
303 return *tuple_["unc_vtx_pos_track_z0"] / *tuple_["unc_vtx_pos_track_tanLambda"];
304 };
305 functions_["unc_vtx_pos_z0tanlambda"] = calculate_pos_z0tanlambda;
306}
307
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);
316 };
317 functions_["unc_vtx_ele_z0tanlambda_right"] = calculate_ele_z0tanlambda_right;
318}
319
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);
328 };
329 functions_["unc_vtx_pos_z0tanlambda_right"] = calculate_pos_z0tanlambda_right;
330}
331
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);
340 };
341 functions_["unc_vtx_ele_z0tanlambda_left"] = calculate_ele_z0tanlambda_left;
342}
343
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);
352 };
353 functions_["unc_vtx_pos_z0tanlambda_left"] = calculate_pos_z0tanlambda_left;
354}
355
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;
363
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"])));
367 };
368 functions_["unc_vtx_abs_delta_z0tanlambda"] = calculate_abs_delta_z0tanlambda;
369}
370
371/*
372void SimpAnaTTree::vertex_target_projection(double target_pos){
373 double* proj_x = new double{9999.9};
374 tuple_["unc_vtx_proj_x"] = proj_x;
375 newtree_->Branch("unc_vtx_proj_x", tuple_["unc_vtx_proj_x"], "unc_vtx_proj_x/D");
376 new_variables_["unc_vtx_proj_x"] = proj_x;
377 std::function<double()> calculate_vtx_proj_x = [&, target_pos]()->double{
378 double* vtx_x = tuple_["unc_vtx_x"];
379 double* vtx_z = tuple_["unc_vtx_z"];
380 double* pz = tuple_["unc_vtx_pz"];
381 double* px = tuple_["unc_vtx_px"];
382 double projx = (*vtx_x - (*vtx_z - target_pos))*( *px / *pz);
383 return projx;
384 };
385 functions_["unc_vtx_proj_x"] = calculate_vtx_proj_x;
386
387 double* proj_y = new double{9999.9};
388 tuple_["unc_vtx_proj_y"] = proj_y;
389 newtree_->Branch("unc_vtx_proj_y", tuple_["unc_vtx_proj_y"], "unc_vtx_proj_y/D");
390 new_variables_["unc_vtx_proj_y"] = proj_y;
391 std::function<double()> calculate_vtx_proj_y = [&, target_pos]()->double{
392 double* vtx_y = tuple_["unc_vtx_y"];
393 double* vtx_z = tuple_["unc_vtx_z"];
394 double* pz = tuple_["unc_vtx_pz"];
395 double* py = tuple_["unc_vtx_py"];
396 double projy = (*vtx_y - (*vtx_z - target_pos))*( *py / *pz);
397 return projy;
398 };
399 functions_["unc_vtx_proj_y"] = calculate_vtx_proj_y;
400}
401
402void SimpAnaTTree::vertex_target_projection_rotation(double angle){
403 double* rot_x = new double{9999.9};
404 tuple_["unc_vtx_proj_x_rot"] = rot_x;
405 newtree_->Branch("unc_vtx_proj_x_rot", tuple_["unc_vtx_proj_x_rot"], "unc_vtx_proj_x_rot/D");
406 new_variables_["unc_vtx_proj_x_rot"] = rot_x;
407 std::function<double()> rotate_vtx_proj_x = [&, angle]()->double{
408 double* x = tuple_["unc_vtx_proj_x"];
409 double* y = tuple_["unc_vtx_proj_y"];
410 return *x*std::cos(angle) - *y*std::sin(angle);
411 };
412 functions_["unc_vtx_proj_x_rot"] = rotate_vtx_proj_x;
413
414 double* rot_y = new double{9999.9};
415 tuple_["unc_vtx_proj_y_rot"] = rot_y;
416 newtree_->Branch("unc_vtx_proj_y_rot", tuple_["unc_vtx_proj_y_rot"], "unc_vtx_proj_y_rot/D");
417 new_variables_["unc_vtx_proj_y_rot"] = rot_y;
418 std::function<double()> rotate_vtx_proj_y = [&, angle]()->double{
419 double* x = tuple_["unc_vtx_proj_x"];
420 double* y = tuple_["unc_vtx_proj_y"];
421 return *x*std::sin(angle) + *y*std::cos(angle);
422 };
423 functions_["unc_vtx_proj_y_rot"] = rotate_vtx_proj_y;
424}
425
426void SimpAnaTTree::addVariable_unc_vtx_proj_significance(){
427
428 //Create target projection values
429 vertex_target_projection(-4.3);
430 //Rotate projections
431 double angle = -0.060;
432 vertex_target_projection_rotation(angle);
433
434 double* radius = new double{0.0};
435 tuple_["unc_vtx_proj_significance"] = radius;
436 newtree_->Branch("unc_vtx_proj_significance", tuple_["unc_vtx_proj_significance"], "unc_vtx_proj_significance/D");
437 new_variables_["unc_vtx_proj_significance"] = radius;
438 std::function<double()> calculate_vtx_proj_significance = [&]()->double{
439 double xmean = -0.24;
440 double ymean = -0.06;
441 double xsigma = 0.38 ;
442 double ysigma = 0.1 ;
443 double* x = tuple_["unc_vtx_proj_x_rot"];
444 double* y = tuple_["unc_vtx_proj_y_rot"];
445 double x_sig = (*x-xmean)/xsigma;
446 double y_sig = (*y-ymean)/ysigma;
447 return std::sqrt( std::pow(x_sig,2) + std::pow(y_sig, 2) );
448 };
449 functions_["unc_vtx_proj_significance"] = calculate_vtx_proj_significance;
450}
451*/
452
453/*
454void SimpAnaTTree::addVariable_unc_vtx_zbravosumAlpha(double slope){
455 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_zbravosumAlpha" << std::endl;
456 double* zbravosumAlpha = new double {999.9};
457 tuple_["unc_vtx_zbravosumAlpha"] = zbravosumAlpha;
458 newtree_->Branch("unc_vtx_zbravosumAlpha", tuple_["unc_vtx_zbravosumAlpha"],"unc_vtx_zbravosumAlpha/D");
459 new_variables_["unc_vtx_zbravosumAlpha"] = zbravosumAlpha;
460 std::function<double()> calculatezbravosumAlpha = [&,slope]()->double{
461 if(*tuple_["unc_vtx_zbravosum"] > 0.0){
462 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_zbravosum"])/slope)) );
463 }
464 else{
465 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_zbravosum"])/(-1.0*slope))) );
466 }
467 };
468 functions_["unc_vtx_zbravosumAlpha"] = calculatezbravosumAlpha;
469}
470
471void SimpAnaTTree::addVariable_unc_vtx_zbravosum(){
472 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_zbravosum" << std::endl;
473 double* zbravosum = new double {999.9};
474 tuple_["unc_vtx_zbravosum"] = zbravosum;
475 newtree_->Branch("unc_vtx_zbravosum", tuple_["unc_vtx_zbravosum"],"unc_vtx_zbravosum/D");
476 new_variables_["unc_vtx_zbravosum"] = zbravosum;
477 std::function<double()> calculateZbravosum = [&]()->double{
478 return *tuple_["unc_vtx_ele_zbravo"] + *tuple_["unc_vtx_pos_zbravo"];
479 };
480 functions_["unc_vtx_zbravosum"] = calculateZbravosum;
481}
482
483void SimpAnaTTree::addVariable_unc_vtx_zbravoAlphaTop(double slope){
484 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_zbravoAlphaTop" << std::endl;
485 double* zbravoAlphaTop = new double{999.9};
486 tuple_["unc_vtx_zbravoAlphaTop"] = zbravoAlphaTop;
487 newtree_->Branch("unc_vtx_zbravoAlphaTop", tuple_["unc_vtx_zbravoAlphaTop"],
488 "unc_vtx_zbravoAlpha/D");
489 new_variables_["unc_vtx_zbravoAlphaTop"] = zbravoAlphaTop;
490
491 //Lambda function to calculate zbravoAlpha
492 std::function<double()> calculate_zbravoAlphaTop = [&, slope]()->double{
493 if(*tuple_["unc_vtx_ele_zbravo"] > 0.0)
494 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_zbravo"])/slope)) );
495 else
496 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_zbravo"])/slope)) );
497 };
498 functions_["unc_vtx_zbravoAlphaTop"] = calculate_zbravoAlphaTop;
499}
500
501void SimpAnaTTree::addVariable_unc_vtx_zbravoAlphaBot(double slope){
502 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_zbravoAlphaBot" << std::endl;
503 double* zbravoAlphaBot = new double{999.9};
504 tuple_["unc_vtx_zbravoAlphaBot"] = zbravoAlphaBot;
505 newtree_->Branch("unc_vtx_zbravoAlphaBot", tuple_["unc_vtx_zbravoAlphaBot"],
506 "unc_vtx_zbravoAlpha/D");
507 new_variables_["unc_vtx_zbravoAlphaBot"] = zbravoAlphaBot;
508
509 //Lambda function to calculate zbravoAlpha
510 std::function<double()> calculate_zbravoAlphaBot = [&, slope]()->double{
511 if(*tuple_["unc_vtx_ele_zbravo"] > 0.0)
512 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_zbravo"])/slope)) );
513 else
514 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_zbravo"])/slope)) );
515 };
516 functions_["unc_vtx_zbravoAlphaBot"] = calculate_zbravoAlphaBot;
517}
518
519void SimpAnaTTree::addVariable_unc_vtx_ele_zbravoAlpha(double slope){
520 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_ele_zbravoAlpha with slope " << slope << std::endl;
521 //04/24 This variable is defined as the difference between z0, and the
522 //Zbravo line, which is defined by fitting signal z0 v reconz with a line
523 //This will depend on signal mass. This is just a starting point
524
525 //ele
526 double* ele_zbravoAlpha = new double {999.9};
527 tuple_["unc_vtx_ele_zbravoAlpha"] = ele_zbravoAlpha;
528 newtree_->Branch("unc_vtx_ele_zbravoAlpha",tuple_["unc_vtx_ele_zbravoAlpha"],"unc_vtx_ele_zbravoAlpha/D");
529 new_variables_["unc_vtx_ele_zbravoAlpha"] = ele_zbravoAlpha;
530 double z0_correction = 0.0; //Details of this not clear yet 04/24/23
531 std::function<double()> calculate_ele_zbravoAlpha = [&,slope]()->double{
532 if(*tuple_["unc_vtx_ele_zbravo"] > -z0_correction){
533 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_zbravo"]+z0_correction)/slope)) );
534 }
535 else{
536 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_zbravo"]+z0_correction)/(-1.0*slope))) );
537 }
538 };
539 functions_["unc_vtx_ele_zbravoAlpha"] = calculate_ele_zbravoAlpha;
540}
541void SimpAnaTTree::addVariable_unc_vtx_pos_zbravoAlpha(double slope){
542 std::cout << "[SimpAnaTTree]::Adding variable unc_vtx_pos_zbravoAlpha with slope " << slope << std::endl;
543 //04/24 This variable is defined as the difference between z0, and the
544 //Zbravo line, which is defined by fitting signal z0 v reconz with a line
545 //This will depend on signal mass. This is just a starting point
546 //
547 //pos
548 double* pos_zbravoAlpha = new double {999.9};
549 tuple_["unc_vtx_pos_zbravoAlpha"] = pos_zbravoAlpha;
550 newtree_->Branch("unc_vtx_pos_zbravoAlpha",tuple_["unc_vtx_pos_zbravoAlpha"],"unc_vtx_pos_zbravoAlpha/D");
551 new_variables_["unc_vtx_pos_zbravoAlpha"] = pos_zbravoAlpha;
552 std::function<double()> calculate_pos_zbravoAlpha = [&,slope]()->double{
553 if(*tuple_["unc_vtx_pos_zbravo"] > -z0_correction){
554 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_zbravo"]+z0_correction)/slope)) );
555 }
556 else{
557 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_zbravo"]+z0_correction)/(-1.0*slope))) );
558 }
559 };
560 functions_["unc_vtx_pos_zbravoAlpha"] = calculate_pos_zbravoAlpha;
561}
562
563void SimpAnaTTree::addVariable_unc_vtx_ele_zbravo(){
564 std::cout << "[SimpAnaTTree]::Adding variable ele_zbravo" << std::endl;
565 double* ele_z0 = tuple_["unc_vtx_ele_track_z0"];
566 double* recon_z = tuple_["unc_vtx_z"];
567
568 //ele
569 double* ele_zbravo = new double {999.9};
570 tuple_["unc_vtx_ele_zbravo"] = ele_zbravo;
571 newtree_->Branch("unc_vtx_ele_zbravo",tuple_["unc_vtx_ele_zbravo"],"unc_vtx_ele_zbravo/D");
572 new_variables_["unc_vtx_ele_zbravo"] = ele_zbravo;
573 std::function<double()> calculate_ele_zbravo = [&]()->double{
574 if(*tuple_["unc_vtx_ele_track_tanLambda"] > 0.0){
575 return *tuple_["unc_vtx_ele_track_z0"] - (-0.039151**tuple_["unc_vtx_z"] - 0.031282);
576 }
577 else{
578 return *tuple_["unc_vtx_ele_track_z0"] - (0.040086**tuple_["unc_vtx_z"] + 0.016186);
579 }
580 };
581 functions_["unc_vtx_ele_zbravo"] = ele_zbravo;
582}
583
584void SimpAnaTTree::addVariable_unc_vtx_pos_zbravo(){
585 std::cout << "[SimpAnaTTree]::Adding variable pos_zbravo" << std::endl;
586 double* pos_z0 = tuple_["unc_vtx_pos_track_z0"];
587 double* recon_z = tuple_["unc_vtx_z"];
588
589 //pos
590 double* pos_zbravo = new double {999.9};
591 tuple_["unc_vtx_pos_zbravo"] = pos_zbravo;
592 newtree_->Branch("unc_vtx_pos_zbravo",tuple_["unc_vtx_pos_zbravo"],"unc_vtx_pos_zbravo/D");
593 new_variables_["unc_vtx_pos_zbravo"] = pos_zbravo;
594 std::function<double()> calculate_pos_zbravo = [&]()->double{
595 if(*tuple_["unc_vtx_pos_track_tanLambda"] > 0.0){
596 return *tuple_["unc_vtx_pos_track_z0"] - (-0.037899**tuple_["unc_vtx_z"] - 0.0094);
597 }
598 else{
599 return *tuple_["unc_vtx_pos_track_z0"] - (0.039501**tuple_["unc_vtx_z"] + 0.004176);
600 }
601 };
602 functions_["unc_vtx_pos_zbravo"] = calculate_pos_zbravo;
603}
604
605void SimpAnaTTree::addVariableZalphaTop(double slope){
606
607 double* zalpha_top = new double{999.9};
608 tuple_["unc_vtx_track_zalpha_top"] = zalpha_top;
609 newtree_->Branch("unc_vtx_track_zalpha_top", tuple_["unc_vtx_track_zalpha_top"],
610 "unc_vtx_track_zalpha_top/D");
611 new_variables_["unc_vtx_track_zalpha_top"] = zalpha_top;
612
613 //Lambda function to calculate zalpha
614 std::function<double()> calculate_zalpha_top = [&, slope]()->double{
615 if(*tuple_["unc_vtx_ele_track_z0"] > 0.0 && *tuple_["unc_vtx_pos_track_z0"] < 0.0)
616 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/slope)) );
617 if(*tuple_["unc_vtx_pos_track_z0"] > 0.0 && *tuple_["unc_vtx_ele_track_z0"] < 0.0)
618 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/slope)) );
619 if(*tuple_["unc_vtx_ele_track_z0"] < 0.0 && *tuple_["unc_vtx_pos_track_z0"] < 0.0)
620 return skipCutVarValue_;
621 if(*tuple_["unc_vtx_ele_track_z0"] > 0.0 && *tuple_["unc_vtx_pos_track_z0"] > 0.0){
622 double ele_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/slope)) );
623 double pos_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/slope)) );
624 if(ele_zalpha > pos_zalpha)
625 return ele_zalpha;
626 else
627 return pos_zalpha;
628 }
629 };
630 functions_["unc_vtx_track_zalpha_top"] = calculate_zalpha_top;
631}
632
633void SimpAnaTTree::addVariableZalphaBot(double slope){
634
635 double* zalpha_bot = new double{999.9};
636 tuple_["unc_vtx_track_zalpha_bot"] = zalpha_bot;
637 newtree_->Branch("unc_vtx_track_zalpha_bot", tuple_["unc_vtx_track_zalpha_bot"],
638 "unc_vtx_track_zalpha_bot/D");
639 new_variables_["unc_vtx_track_zalpha_bot"] = zalpha_bot;
640
641 //Lambda function to calculate zalpha
642 std::function<double()> calculate_zalpha_bot = [&, slope]()->double{
643 if(*tuple_["unc_vtx_ele_track_z0"] < 0.0 && *tuple_["unc_vtx_pos_track_z0"] > 0.0)
644 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/-slope)) );
645 if(*tuple_["unc_vtx_pos_track_z0"] < 0.0 && *tuple_["unc_vtx_ele_track_z0"] > 0.0)
646 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/-slope)) );
647 if(*tuple_["unc_vtx_ele_track_z0"] > 0.0 && *tuple_["unc_vtx_pos_track_z0"] > 0.0)
648 return skipCutVarValue_;
649 if(*tuple_["unc_vtx_ele_track_z0"] < 0.0 && *tuple_["unc_vtx_pos_track_z0"] < 0.0){
650 double ele_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/-slope)) );
651 double pos_zalpha = ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/-slope)) );
652 if(ele_zalpha > pos_zalpha)
653 return ele_zalpha;
654 else
655 return pos_zalpha;
656 }
657 };
658
659 functions_["unc_vtx_track_zalpha_bot"] = calculate_zalpha_bot;
660}
661
662void SimpAnaTTree::addVariableZalphaTopPos(double slope){
663 double* zalpha_top_pos = new double{999.9};
664 tuple_["unc_vtx_track_zalpha_top_pos"] = zalpha_top_pos;
665 newtree_->Branch("unc_vtx_track_zalpha_top_pos", tuple_["unc_vtx_track_zalpha_top_pos"],
666 "unc_vtx_track_zalpha_top_pos/D");
667 new_variables_["unc_vtx_track_zalpha_top_pos"] = zalpha_top_pos;
668 std::function<double()> calculate_zalpha_top_pos = [&, slope]()->double{
669 if(*tuple_["unc_vtx_pos_track_z0"] > 0.0)
670 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/slope)) );
671 else
672 return skipCutVarValue_;
673 };
674 functions_["unc_vtx_track_zalpha_top_pos"] = calculate_zalpha_top_pos;
675}
676
677void SimpAnaTTree::addVariableZalphaTopEle(double slope){
678 double* zalpha_top_ele = new double{999.9};
679 tuple_["unc_vtx_track_zalpha_top_ele"] = zalpha_top_ele;
680 newtree_->Branch("unc_vtx_track_zalpha_top_ele", tuple_["unc_vtx_track_zalpha_top_ele"],
681 "unc_vtx_track_zalpha_top_ele/D");
682 new_variables_["unc_vtx_track_zalpha_top_ele"] = zalpha_top_ele;
683 std::function<double()> calculate_zalpha_top_ele = [&, slope]()->double{
684 if(*tuple_["unc_vtx_ele_track_z0"] > 0.0)
685 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/slope)) );
686 else
687 return skipCutVarValue_;
688 };
689 functions_["unc_vtx_track_zalpha_top_ele"] = calculate_zalpha_top_ele;
690}
691
692void SimpAnaTTree::addVariableZalphaBotEle(double slope){
693 double* zalpha_bot_ele = new double{999.9};
694 tuple_["unc_vtx_track_zalpha_bot_ele"] = zalpha_bot_ele;
695 newtree_->Branch("unc_vtx_track_zalpha_bot_ele", tuple_["unc_vtx_track_zalpha_bot_ele"],
696 "unc_vtx_track_zalpha_bot_ele/D");
697 new_variables_["unc_vtx_track_zalpha_bot_ele"] = zalpha_bot_ele;
698 std::function<double()> calculate_zalpha_bot_ele = [&, slope]()->double{
699 if(*tuple_["unc_vtx_ele_track_z0"] < 0.0)
700 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_ele_track_z0"])/-slope)) );
701 else
702 return skipCutVarValue_;
703 };
704 functions_["unc_vtx_track_zalpha_bot_ele"] = calculate_zalpha_bot_ele;
705}
706
707void SimpAnaTTree::addVariableZalphaBotPos(double slope){
708 double* zalpha_bot_pos = new double{999.9};
709 tuple_["unc_vtx_track_zalpha_bot_pos"] = zalpha_bot_pos;
710 newtree_->Branch("unc_vtx_track_zalpha_bot_pos", tuple_["unc_vtx_track_zalpha_bot_pos"],"unc_vtx_track_zalpha_bot_pos/D");
711 new_variables_["unc_vtx_track_zalpha_bot_pos"] = zalpha_bot_pos;
712 std::function<double()> calculate_zalpha_bot_pos = [&, slope]()->double{
713 if(*tuple_["unc_vtx_pos_track_z0"] < 0.0)
714 return ( *tuple_["unc_vtx_z"] - (((*tuple_["unc_vtx_pos_track_z0"])/-slope)) );
715 else
716 return skipCutVarValue_;
717 };
718 functions_["unc_vtx_track_zalpha_bot_pos"] = calculate_zalpha_bot_pos;
719}
720
721void SimpAnaTTree::addVariableZalphaTopBot(double top_slope, double bot_slope){
722 addVariableZalphaTop(top_slope);
723 addVariableZalphaBot(bot_slope);
724}
725
726*/
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 unc_vtx_deltaZ()
void addVariable_unc_vtx_ele_z0tanlambda()
void addVariable_unc_vtx_ele_zalpha(double slope)
New Variables.
void addVariable_unc_vtx_pos_z0_z0err()