PyLamarr
Pythonizations for the ultra-fast simulation option for the LHCb experiment
 
Loading...
Searching...
No Matches
Acceptance.py
1from typing import Tuple, Optional
2from dataclasses import dataclass
3from pydantic import validate_arguments, Field
4from PyLamarr import RemoteResource
5from PyLamarr import Wrapper
6
7from ._defaults import default_lib_field
8
9
10@validate_arguments
11@dataclass(frozen=True)
13 library: RemoteResource = default_lib_field
14 symbol: str = "acceptance"
15 output_table: Optional[str] = "tmp_acceptance_out"
16 output_columns: Optional[Tuple[str, ...]] = ("acceptance",)
17 references: Optional[Tuple[str, ...]] = ("mcparticle_id",)
18
19 def query(self):
20 return """
21 SELECT
22 mcparticle_id,
23 ov.x AS mc_x,
24 ov.y AS mc_y,
25 ov.z AS mc_z,
26 log(norm2(p.px, p.py, p.pz))/log(10.) AS mc_log10_p,
27 p.px/p.pz AS mc_tx,
28 p.py/p.pz AS mc_ty,
29 pseudorapidity(p.px, p.py, p.pz) AS mc_eta,
30 azimuthal(p.px, p.py, p.pz) AS mc_phi,
31 abs(p.pid) == 11 AS mc_is_e,
32 abs(p.pid) == 13 AS mc_is_mu,
33 (
34 abs(p.pid) == 211 OR abs(p.pid) == 321 OR abs(p.pid) == 2212
35 ) AS mc_is_h,
36 propagation_charge(p.pid) AS mc_charge
37 FROM MCParticles AS p
38 INNER JOIN MCVertices AS ov ON p.production_vertex = ov.mcvertex_id
39 WHERE
40 p.pz > 1.
41 AND
42 propagation_charge(p.pid) <> 0.
43 """
44
45 implements: str = "Plugin"
46
47 @property
48 def config(self):
49 return dict(
50 library_path=self.library,
51 function_name=self.symbol,
52 query=self.query(),
53 output_table=self.output_table,
54 outputs=self.output_columns,
55 references=self.references,
56 )