PyLamarr
Pythonizations for the ultra-fast simulation option for the LHCb experiment
 
Loading...
Searching...
No Matches
GanPipeline.py
1from typing import Tuple, Optional, Union
2from dataclasses import dataclass
3
4from pydantic import validate_arguments, validator
5
6from PyLamarr import RemoteResource, Wrapper
7
8@validate_arguments
9@dataclass(frozen=True)
11 library: RemoteResource
12 symbol: str
13 output_table: str
14 abs_mcid: int
15 ismuon_tab: Optional[str] = 'tmp_is_muon'
16 particle_table: Optional[str] = "MCParticles"
17 track_table: Optional[str] = "tmp_particles_recoed_as"
18 track_type: Optional[int] = 3
19 n_random: Optional[int] = 256
20 references: Optional[Tuple[str, ...]] = ( "mcparticle_id", "isMuon")
21 output_columns: Optional[Tuple[str, ...]] = (
22 # Rich
23 "RichDLLe", "RichDLLmu", "RichDLLK", "RichDLLp",
24 # Muon
25 "MuonMuLL", "MuonBkgLL",
26 # Global PID
27 "PIDe", "PIDK", "PIDp", "ProbNNe", "ProbNNpi", "ProbNNk", "ProbNNp",
28 # Global PID
29 "PIDmu", "ProbNNmu"
30 )
31
32 def query(self):
33 return f"""
34 SELECT
35 p.mcparticle_id AS mcparticle_id,
36 norm2(p.px, p.py, p.pz) AS p,
37 pseudorapidity(p.px, p.py, p.pz) AS eta,
38 random_normal() * 10 + 100 as nTracks,
39 propagation_charge(p.pid) AS track_charge,
40 ismuon_tab.is_muon as isMuon, --used as input
41 ismuon_tab.is_muon as is_muon -- passed for reference
42 FROM {self.particle_table} AS p
43 INNER JOIN {self.track_table} AS recguess
44 ON p.mcparticle_id = recguess.mcparticle_id
45 INNER JOIN {self.ismuon_tab} AS ismuon_tab
46 ON p.mcparticle_id = ismuon_tab.mcparticle_id
47 WHERE
48 recguess.track_type == {self.track_type}
49 AND
50 abs(p.pid) == {self.abs_mcid};
51 """
52
53 implements: str = "GenerativePlugin"
54 @property
55 def config(self):
56 return dict(
57 library_path=self.library,
58 function_name=self.symbol,
59 query=self.query(),
60 output_table=self.output_table,
61 outputs=self.output_columns,
62 nRandom=self.n_random,
63 references=self.references,
64 )
65
66
67