CMS 3D CMS Logo

SiPixelCoordinates.h
Go to the documentation of this file.
1 #ifndef SiPixelCoordinates_h
2 #define SiPixelCoordinates_h
3 // -*- C++ -*-
4 //
5 // Class: SiPixelCoordinates
6 //
7 // This class provides floating point numbers for
8 // digis, clusters and hits that can be used to
9 // easily plot various geometry related histograms
10 //
11 // Online and Offline conventions are kept for the variables
12 // An additional ]0, +1[ or ]-0.5, +0.5[ is added depending on
13 // the location of digi/cluster/hit on the module, so
14 // the variables provided are roughly monotonic vs. global
15 // coordinates (except that overlaps are removed), eg:
16 // global z: module, disk, disk_ring (large division)
17 // global r-phi: ladder, blade, blade_panel
18 // global r: ring, disk_ring (small division)
19 //
20 // Original Author: Janos Karancsi
21 
30 
31 #include <cstdint>
32 #include <unordered_map>
33 #include <utility>
34 
36 public:
38  SiPixelCoordinates(int);
39  virtual ~SiPixelCoordinates();
40 
41  void init(const TrackerTopology*, const TrackerGeometry*, const SiPixelFedCablingMap*);
42 
43  // Integers
44  int quadrant(const DetId&);
45  int side(const DetId&);
46  int module(const DetId&);
47  // barrel specific
48  int layer(const DetId&);
49  int sector(const DetId&);
50  int ladder(const DetId&);
51  int signed_ladder(const DetId&);
52  int signed_module(const DetId&);
53  int half(const DetId&);
54  int outer(const DetId&);
55  int flipped(const DetId&);
56  // endcap specific
57  int disk(const DetId&);
58  int signed_disk(const DetId&);
59  int panel(const DetId&);
60  int ring(const DetId&);
61  int blade(const DetId&);
62  int signed_blade(const DetId&);
63 
64  unsigned int fedid(const DetId&);
65 
66  int channel(const DetId&, const std::pair<int, int>&);
67  int channel(const DetId&, const PixelDigi*);
68  int channel(const DetId&, const SiPixelCluster*);
69  int channel(const SiPixelRecHit*);
70  int channel(const TrackingRecHit*);
71 
72  int roc(const DetId&, const std::pair<int, int>&);
73  int roc(const DetId&, const PixelDigi*);
74  int roc(const DetId&, const SiPixelCluster*);
75  int roc(const SiPixelRecHit*);
76  int roc(const TrackingRecHit*);
77 
78  // Floats (coordinates)
79  float module_coord(const DetId&, const std::pair<int, int>&);
80  float module_coord(const DetId&, const PixelDigi*);
81  float module_coord(const DetId&, const SiPixelCluster*);
82  float module_coord(const SiPixelRecHit*);
83  float module_coord(const TrackingRecHit*);
84 
85  float signed_module_coord(const DetId&, const std::pair<int, int>&);
86  float signed_module_coord(const DetId&, const PixelDigi*);
87  float signed_module_coord(const DetId&, const SiPixelCluster*);
88  float signed_module_coord(const SiPixelRecHit*);
89  float signed_module_coord(const TrackingRecHit*);
90 
91  float ladder_coord(const DetId&, const std::pair<int, int>&);
92  float ladder_coord(const DetId&, const PixelDigi*);
93  float ladder_coord(const DetId&, const SiPixelCluster*);
94  float ladder_coord(const SiPixelRecHit*);
95  float ladder_coord(const TrackingRecHit*);
96 
97  float signed_ladder_coord(const DetId&, const std::pair<int, int>&);
98  float signed_ladder_coord(const DetId&, const PixelDigi*);
99  float signed_ladder_coord(const DetId&, const SiPixelCluster*);
100  float signed_ladder_coord(const SiPixelRecHit*);
101  float signed_ladder_coord(const TrackingRecHit*);
102 
103  float ring_coord(const DetId&, const std::pair<int, int>&);
104  float ring_coord(const DetId&, const PixelDigi*);
105  float ring_coord(const DetId&, const SiPixelCluster*);
106  float ring_coord(const SiPixelRecHit*);
107  float ring_coord(const TrackingRecHit*);
108 
109  float disk_coord(const DetId&, const std::pair<int, int>&);
110  float disk_coord(const DetId&, const PixelDigi*);
111  float disk_coord(const DetId&, const SiPixelCluster*);
112  float disk_coord(const SiPixelRecHit*);
113  float disk_coord(const TrackingRecHit*);
114 
115  float signed_disk_coord(const DetId&, const std::pair<int, int>&);
116  float signed_disk_coord(const DetId&, const PixelDigi*);
117  float signed_disk_coord(const DetId&, const SiPixelCluster*);
118  float signed_disk_coord(const SiPixelRecHit*);
119  float signed_disk_coord(const TrackingRecHit*);
120 
121  float disk_ring_coord(const DetId&, const std::pair<int, int>&);
122  float disk_ring_coord(const DetId&, const PixelDigi*);
123  float disk_ring_coord(const DetId&, const SiPixelCluster*);
124  float disk_ring_coord(const SiPixelRecHit*);
125  float disk_ring_coord(const TrackingRecHit*);
126 
127  float signed_disk_ring_coord(const DetId&, const std::pair<int, int>&);
128  float signed_disk_ring_coord(const DetId&, const PixelDigi*);
129  float signed_disk_ring_coord(const DetId&, const SiPixelCluster*);
132 
133  float blade_coord(const DetId&, const std::pair<int, int>&);
134  float blade_coord(const DetId&, const PixelDigi*);
135  float blade_coord(const DetId&, const SiPixelCluster*);
136  float blade_coord(const SiPixelRecHit*);
137  float blade_coord(const TrackingRecHit*);
138 
139  float signed_blade_coord(const DetId&, const std::pair<int, int>&);
140  float signed_blade_coord(const DetId&, const PixelDigi*);
141  float signed_blade_coord(const DetId&, const SiPixelCluster*);
142  float signed_blade_coord(const SiPixelRecHit*);
143  float signed_blade_coord(const TrackingRecHit*);
144 
145  float blade_panel_coord(const DetId&, const std::pair<int, int>&);
146  float blade_panel_coord(const DetId&, const PixelDigi*);
147  float blade_panel_coord(const DetId&, const SiPixelCluster*);
148  float blade_panel_coord(const SiPixelRecHit*);
149  float blade_panel_coord(const TrackingRecHit*);
150 
151  float signed_blade_panel_coord(const DetId&, const std::pair<int, int>&);
152  float signed_blade_panel_coord(const DetId&, const PixelDigi*);
153  float signed_blade_panel_coord(const DetId&, const SiPixelCluster*);
156 
157  float signed_shifted_blade_panel_coord(const DetId&, const std::pair<int, int>&);
158  float signed_shifted_blade_panel_coord(const DetId&, const PixelDigi*);
162 
163 private:
164  int phase_;
165 
169 
170  // Internal containers for optimal speed
171  // - only calculate things once per DetId
172  std::unordered_map<uint32_t, int> quadrant_;
173  std::unordered_map<uint32_t, int> side_;
174  std::unordered_map<uint32_t, int> module_;
175  std::unordered_map<uint32_t, int> layer_;
176  std::unordered_map<uint32_t, int> sector_;
177  std::unordered_map<uint32_t, int> ladder_;
178  std::unordered_map<uint32_t, int> signed_ladder_;
179  std::unordered_map<uint32_t, int> signed_module_;
180  std::unordered_map<uint32_t, int> half_;
181  std::unordered_map<uint32_t, int> outer_;
182  std::unordered_map<uint32_t, int> flipped_;
183  std::unordered_map<uint32_t, int> disk_;
184  std::unordered_map<uint32_t, int> signed_disk_;
185  std::unordered_map<uint32_t, int> panel_;
186  std::unordered_map<uint32_t, int> ring_;
187  std::unordered_map<uint32_t, int> blade_;
188  std::unordered_map<uint32_t, int> signed_blade_;
189 
190  std::unordered_map<uint32_t, unsigned int> fedid_;
191  std::unordered_map<uint64_t, unsigned int> channel_;
192  std::unordered_map<uint64_t, unsigned int> roc_;
193 
194  // Internal methods used for pixel coordinates
195  bool isPixel_(const DetId&);
196  bool isBPix_(const DetId&);
197  bool isFPix_(const DetId&);
198  std::pair<int, int> pixel_(const PixelDigi*);
199  std::pair<int, int> pixel_(const SiPixelCluster*);
200  std::pair<int, int> pixel_(const SiPixelRecHit*);
201  float xcoord_on_module_(const DetId&, const std::pair<int, int>&);
202  float ycoord_on_module_(const DetId&, const std::pair<int, int>&);
203 };
204 
205 #endif
float ycoord_on_module_(const DetId &, const std::pair< int, int > &)
int sector(const DetId &)
float signed_module_coord(const DetId &, const std::pair< int, int > &)
std::unordered_map< uint32_t, int > panel_
std::unordered_map< uint64_t, unsigned int > channel_
float signed_blade_panel_coord(const DetId &, const std::pair< int, int > &)
int signed_blade(const DetId &)
float disk_ring_coord(const DetId &, const std::pair< int, int > &)
std::unordered_map< uint32_t, int > half_
float ring_coord(const DetId &, const std::pair< int, int > &)
bool isPixel_(const DetId &)
std::unordered_map< uint32_t, int > sector_
std::unordered_map< uint32_t, int > ladder_
std::unordered_map< uint32_t, int > signed_disk_
int side(const DetId &)
int blade(const DetId &)
float ladder_coord(const DetId &, const std::pair< int, int > &)
int signed_disk(const DetId &)
float disk_coord(const DetId &, const std::pair< int, int > &)
const TrackerTopology * tTopo_
float blade_coord(const DetId &, const std::pair< int, int > &)
int ring(const DetId &)
unsigned int fedid(const DetId &)
int flipped(const DetId &)
int module(const DetId &)
bool isBPix_(const DetId &)
int layer(const DetId &)
std::pair< int, int > pixel_(const PixelDigi *)
std::unordered_map< uint32_t, int > signed_module_
std::unordered_map< uint32_t, int > flipped_
std::unordered_map< uint32_t, int > ring_
std::unordered_map< uint32_t, int > outer_
int half(const DetId &)
std::unordered_map< uint32_t, int > layer_
std::unordered_map< uint32_t, int > module_
int channel(const DetId &, const std::pair< int, int > &)
const SiPixelFedCablingMap * cablingMap_
int disk(const DetId &)
void init(const TrackerTopology *, const TrackerGeometry *, const SiPixelFedCablingMap *)
std::unordered_map< uint32_t, int > signed_blade_
int roc(const DetId &, const std::pair< int, int > &)
std::unordered_map< uint32_t, int > disk_
Definition: DetId.h:17
int outer(const DetId &)
std::unordered_map< uint32_t, int > signed_ladder_
const TrackerGeometry * tGeom_
int signed_module(const DetId &)
std::unordered_map< uint32_t, int > quadrant_
std::unordered_map< uint32_t, int > side_
int quadrant(const DetId &)
int panel(const DetId &)
std::unordered_map< uint64_t, unsigned int > roc_
float xcoord_on_module_(const DetId &, const std::pair< int, int > &)
Pixel cluster – collection of neighboring pixels above threshold.
float signed_disk_coord(const DetId &, const std::pair< int, int > &)
std::unordered_map< uint32_t, int > blade_
int ladder(const DetId &)
float module_coord(const DetId &, const std::pair< int, int > &)
float signed_shifted_blade_panel_coord(const DetId &, const std::pair< int, int > &)
float signed_blade_coord(const DetId &, const std::pair< int, int > &)
float signed_disk_ring_coord(const DetId &, const std::pair< int, int > &)
float blade_panel_coord(const DetId &, const std::pair< int, int > &)
float signed_ladder_coord(const DetId &, const std::pair< int, int > &)
int signed_ladder(const DetId &)
std::unordered_map< uint32_t, unsigned int > fedid_
bool isFPix_(const DetId &)
Our base class.
Definition: SiPixelRecHit.h:23