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