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 
31 
33 
34 
36 
37  public:
38 
40  SiPixelCoordinates(int);
41  virtual ~SiPixelCoordinates();
42 
43  void init(edm::EventSetup const&);
44 
45  // Integers
46  int quadrant(const DetId&);
47  int side(const DetId&);
48  int module(const DetId&);
49  // barrel specific
50  int layer(const DetId&);
51  int sector(const DetId&);
52  int ladder(const DetId&);
53  int signed_ladder(const DetId&);
54  int signed_module(const DetId&);
55  int half(const DetId&);
56  int outer(const DetId&);
57  int flipped(const DetId&);
58  // endcap specific
59  int disk(const DetId&);
60  int signed_disk(const DetId&);
61  int panel(const DetId&);
62  int ring(const DetId&);
63  int blade(const DetId&);
64  int signed_blade(const DetId&);
65 
66  unsigned int fedid(const DetId&);
67 
68  int channel(const DetId&, const std::pair<int, int>&);
69  int channel(const DetId&, const PixelDigi*);
70  int channel(const DetId&, const SiPixelCluster*);
71  int channel(const SiPixelRecHit*);
72  int channel(const TrackingRecHit*);
73 
74  int roc(const DetId&, const std::pair<int, int>&);
75  int roc(const DetId&, const PixelDigi*);
76  int roc(const DetId&, const SiPixelCluster*);
77  int roc(const SiPixelRecHit*);
78  int roc(const TrackingRecHit*);
79 
80  // Floats (coordinates)
81  float module_coord(const DetId&, const std::pair<int, int>&);
82  float module_coord(const DetId&, const PixelDigi*);
83  float module_coord(const DetId&, const SiPixelCluster*);
84  float module_coord(const SiPixelRecHit*);
85  float module_coord(const TrackingRecHit*);
86 
87  float signed_module_coord(const DetId&, const std::pair<int, int>&);
88  float signed_module_coord(const DetId&, const PixelDigi*);
89  float signed_module_coord(const DetId&, const SiPixelCluster*);
90  float signed_module_coord(const SiPixelRecHit*);
91  float signed_module_coord(const TrackingRecHit*);
92 
93  float ladder_coord(const DetId&, const std::pair<int, int>&);
94  float ladder_coord(const DetId&, const PixelDigi*);
95  float ladder_coord(const DetId&, const SiPixelCluster*);
96  float ladder_coord(const SiPixelRecHit*);
97  float ladder_coord(const TrackingRecHit*);
98 
99  float signed_ladder_coord(const DetId&, const std::pair<int, int>&);
100  float signed_ladder_coord(const DetId&, const PixelDigi*);
101  float signed_ladder_coord(const DetId&, const SiPixelCluster*);
102  float signed_ladder_coord(const SiPixelRecHit*);
103  float signed_ladder_coord(const TrackingRecHit*);
104 
105  float ring_coord(const DetId&, const std::pair<int, int>&);
106  float ring_coord(const DetId&, const PixelDigi*);
107  float ring_coord(const DetId&, const SiPixelCluster*);
108  float ring_coord(const SiPixelRecHit*);
109  float ring_coord(const TrackingRecHit*);
110 
111  float disk_coord(const DetId&, const std::pair<int, int>&);
112  float disk_coord(const DetId&, const PixelDigi*);
113  float disk_coord(const DetId&, const SiPixelCluster*);
114  float disk_coord(const SiPixelRecHit*);
115  float disk_coord(const TrackingRecHit*);
116 
117  float signed_disk_coord(const DetId&, const std::pair<int, int>&);
118  float signed_disk_coord(const DetId&, const PixelDigi*);
119  float signed_disk_coord(const DetId&, const SiPixelCluster*);
120  float signed_disk_coord(const SiPixelRecHit*);
121  float signed_disk_coord(const TrackingRecHit*);
122 
123  float disk_ring_coord(const DetId&, const std::pair<int, int>&);
124  float disk_ring_coord(const DetId&, const PixelDigi*);
125  float disk_ring_coord(const DetId&, const SiPixelCluster*);
126  float disk_ring_coord(const SiPixelRecHit*);
127  float disk_ring_coord(const TrackingRecHit*);
128 
129  float signed_disk_ring_coord(const DetId&, const std::pair<int, int>&);
130  float signed_disk_ring_coord(const DetId&, const PixelDigi*);
131  float signed_disk_ring_coord(const DetId&, const SiPixelCluster*);
134 
135  float blade_coord(const DetId&, const std::pair<int, int>&);
136  float blade_coord(const DetId&, const PixelDigi*);
137  float blade_coord(const DetId&, const SiPixelCluster*);
138  float blade_coord(const SiPixelRecHit*);
139  float blade_coord(const TrackingRecHit*);
140 
141  float signed_blade_coord(const DetId&, const std::pair<int, int>&);
142  float signed_blade_coord(const DetId&, const PixelDigi*);
143  float signed_blade_coord(const DetId&, const SiPixelCluster*);
144  float signed_blade_coord(const SiPixelRecHit*);
145  float signed_blade_coord(const TrackingRecHit*);
146 
147  float blade_panel_coord(const DetId&, const std::pair<int, int>&);
148  float blade_panel_coord(const DetId&, const PixelDigi*);
149  float blade_panel_coord(const DetId&, const SiPixelCluster*);
150  float blade_panel_coord(const SiPixelRecHit*);
151  float blade_panel_coord(const TrackingRecHit*);
152 
153  float signed_blade_panel_coord(const DetId&, const std::pair<int, int>&);
154  float signed_blade_panel_coord(const DetId&, const PixelDigi*);
155  float signed_blade_panel_coord(const DetId&, const SiPixelCluster*);
158 
159  float signed_shifted_blade_panel_coord(const DetId&, const std::pair<int, int>&);
160  float signed_shifted_blade_panel_coord(const DetId&, const PixelDigi*);
164 
165  private:
166  int phase_;
167 
171 
172  // Internal containers for optimal speed
173  // - only calculate things once per DetId
174  std::unordered_map<uint32_t, int> quadrant_;
175  std::unordered_map<uint32_t, int> side_;
176  std::unordered_map<uint32_t, int> module_;
177  std::unordered_map<uint32_t, int> layer_;
178  std::unordered_map<uint32_t, int> sector_;
179  std::unordered_map<uint32_t, int> ladder_;
180  std::unordered_map<uint32_t, int> signed_ladder_;
181  std::unordered_map<uint32_t, int> signed_module_;
182  std::unordered_map<uint32_t, int> half_;
183  std::unordered_map<uint32_t, int> outer_;
184  std::unordered_map<uint32_t, int> flipped_;
185  std::unordered_map<uint32_t, int> disk_;
186  std::unordered_map<uint32_t, int> signed_disk_;
187  std::unordered_map<uint32_t, int> panel_;
188  std::unordered_map<uint32_t, int> ring_;
189  std::unordered_map<uint32_t, int> blade_;
190  std::unordered_map<uint32_t, int> signed_blade_;
191 
192  std::unordered_map<uint32_t, unsigned int> fedid_;
193  std::unordered_map<uint64_t, unsigned int> channel_;
194  std::unordered_map<uint64_t, unsigned int> roc_;
195 
196  // Internal methods used for pixel coordinates
197  bool isPixel_(const DetId&);
198  bool isBPix_(const DetId&);
199  bool isFPix_(const DetId&);
200  std::pair<int, int> pixel_(const PixelDigi*);
201  std::pair<int, int> pixel_(const SiPixelCluster*);
202  std::pair<int, int> pixel_(const SiPixelRecHit*);
203  float xcoord_on_module_(const DetId&, const std::pair<int, int>&);
204  float ycoord_on_module_(const DetId&, const std::pair<int, int>&);
205 
206 };
207 
208 #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_
void init(edm::EventSetup const &)
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 &)
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:18
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