CMS 3D CMS Logo

GeometricDet.h
Go to the documentation of this file.
1 #ifndef Geometry_TrackerNumberingBuilder_GeometricDet_H
2 #define Geometry_TrackerNumberingBuilder_GeometricDet_H
3 
11 
12 #include <DD4hep/Shapes.h>
13 #include <Math/Rotation3D.h>
14 #include <Math/Vector3D.h>
15 
16 #include <vector>
17 #include <memory>
18 #include <ext/pool_allocator.h>
19 
20 class DDFilteredView;
21 
22 namespace cms {
23  class DDFilteredView;
24 }
25 
31 class GeometricDet {
32 public:
33  using NavRange = std::pair<int const*, size_t>;
34  using ConstGeometricDetContainer = std::vector<GeometricDet const*>;
35  using GeometricDetContainer = std::vector<GeometricDet*>;
36  using RotationMatrix = ROOT::Math::Rotation3D;
37  using Translation = ROOT::Math::DisplacementVector3D<ROOT::Math::Cartesian3D<double> >;
38 
39 #ifdef PoolAlloc
40  using nav_type = std::vector<int, PoolAlloc<int> >;
41 #else
42  using nav_type = std::vector<int>;
43 #endif
44 
47 
48  typedef enum GDEnumType {
49  unknown = 100,
50  Tracker = 0,
53  TIB = 3,
54  TID = 4,
55  TOB = 5,
56  TEC = 6,
57  layer = 8,
58  wheel = 9,
59  strng = 10,
60  rod = 11,
61  petal = 12,
62  ring = 13,
63  ladder = 14,
64  mergedDet = 15,
65  DetUnit = 16,
66  disk = 17,
67  panel = 18,
84 
85  // Constructors from Filtered View (called while looping over DD).
88  // Constructors from persistent data (from DB)
90 
91  // ACCESS GENERAL INFO
92  const std::string& name() const { return ddname_; }
93  const GeometricEnumType& type() const { return type_; }
94 
95  // NAVIGATION related info
96  const nav_type& navType() const { return ddd_; }
97  NavRange navpos() const { return NavRange(&ddd_.front(), ddd_.size()); }
98  const DetId& geographicalId() const { return geographicalID_; }
100 
101  // VOLUME POSITION in CMS frame of reference
102  const Translation& translation() const { return trans_; } // in mm
103  double rho() const { return rho_; } // in mm
104  double phi() const { return phi_; }
105  const RotationMatrix& rotation() const { return rot_; }
106 
107  // BOUNDS
108  std::unique_ptr<Bounds> bounds() const;
109  Position positionBounds() const; // in cm
110  Rotation rotationBounds() const;
111 
112  // SOLID SHAPE
113  // old DD
115  // DD4hep
116  const cms::DDSolidShape& shape_dd4hep() const { return shape_; }
117  // solid shape parameters
118  const std::vector<double>& params() const {
121  edm::LogError("GeometricDet::params()")
122  << "Called on a shape which is neither a box, a trap, nor a tub. This is not supported!";
123  }
124  return params_;
125  } // in mm
126 
127  // RADIATION LENGTH AND ENERGY LOSS
128  double radLength() const { return radLength_; }
129  double xi() const { return xi_; }
130 
131  // SENSOR INFO
132  // Only return meaningful results for pixels.
133  double pixROCRows() const { return pixROCRows_; }
134  double pixROCCols() const { return pixROCCols_; }
135  double pixROCx() const { return pixROCx_; }
136  double pixROCy() const { return pixROCy_; }
137  // Only return meaningful results for Outer Trackers.
138  bool stereo() const { return stereo_; }
139  bool isLowerSensor() const { return isLowerSensor_; }
140  bool isUpperSensor() const { return isUpperSensor_; }
141  double siliconAPVNum() const { return siliconAPVNum_; }
142 
143  // DETECTOR DESCRIPTION ORIGIN INFO
144  bool isFromDD4hep() const { return isFromDD4hep_; }
145 
146  // CHILDREN INFO
147  GeometricDet* component(size_t index) { return const_cast<GeometricDet*>(container_[index]); }
148  bool isLeaf() const { return container_.empty(); }
149  // direct children only
150  // if the current GeometricDet is a leaf, it returns nothing.
153  // all descendants
154  // if the current GeometricDet is a leaf, it returns itself!
157 
158  // PUBLIC SETTERS (they should obviously be as few as possible!!)
161  void addComponent(GeometricDet*);
162  void clearComponents() { container_.clear(); } // only empties the container, THE CHILDREN ARE NOT DELETED!
163  void deleteComponents(); // EXPLICITLY DELETES THE CHILDREN
164 
165  // CUSTOM DESTRUCTOR
166  ~GeometricDet();
167 
168  // Utility function
169  static std::string printNavType(int const* n, size_t sz);
170 
171 private:
172  std::vector<double> computeLegacyShapeParameters(const cms::DDSolidShape& mySolidShape,
173  const dd4hep::Solid& mySolid) const;
174 
177 
180 
181  Translation trans_; // in mm
182  double rho_ = 0.; // in mm
183  double phi_ = 0.;
185 
187  std::vector<double> params_; // in mm
188 
189  double radLength_ = 0.;
190  double xi_ = 0.;
191  double pixROCRows_ = 0.;
192  double pixROCCols_ = 0.;
193  double pixROCx_ = 0.;
194  double pixROCy_ = 0.;
195  bool stereo_ = false;
196  bool isLowerSensor_ = false;
197  bool isUpperSensor_ = false;
198  double siliconAPVNum_ = 0.;
199 
200  bool isFromDD4hep_ = false;
201 
203 };
204 
205 namespace geometric_det_ns {
206  inline std::ostream& operator<<(std::ostream& os, const GeometricDet::NavRange& n) {
207  os << GeometricDet::printNavType(n.first, n.second);
208  return os;
209  }
210 } // namespace geometric_det_ns
211 
212 #undef PoolAlloc
213 #endif
double siliconAPVNum() const
Definition: GeometricDet.h:141
std::vector< GeometricDet * > GeometricDetContainer
Definition: GeometricDet.h:35
cms::DDSolidShape shape_
Definition: GeometricDet.h:186
double pixROCy() const
Definition: GeometricDet.h:136
bool isLowerSensor_
Definition: GeometricDet.h:196
double pixROCCols_
Definition: GeometricDet.h:192
void addComponent(GeometricDet *)
std::vector< double > params_
Definition: GeometricDet.h:187
double phi() const
Definition: GeometricDet.h:104
const std::vector< double > & params() const
Definition: GeometricDet.h:118
void clearComponents()
Definition: GeometricDet.h:162
const cms::DDSolidShape & shape_dd4hep() const
Definition: GeometricDet.h:116
bool isUpperSensor() const
Definition: GeometricDet.h:140
void setGeographicalID(DetId id)
Definition: GeometricDet.h:99
Position positionBounds() const
DetId geographicalID_
Definition: GeometricDet.h:179
Log< level::Error, false > LogError
bool isLowerSensor() const
Definition: GeometricDet.h:139
std::vector< int > nav_type
Definition: GeometricDet.h:42
bool stereo() const
Definition: GeometricDet.h:138
enum GeometricDet::GDEnumType GeometricEnumType
string dd
Definition: createTree.py:154
bool isUpperSensor_
Definition: GeometricDet.h:197
nav_type ddd_
Definition: GeometricDet.h:178
Mapping::value_type::value_type value(Mapping a, const std::string &name)
Definition: DDSolidShapes.h:42
ConstGeometricDetContainer & components()
Definition: GeometricDet.h:151
ConstGeometricDetContainer container_
Definition: GeometricDet.h:202
bool isFromDD4hep() const
Definition: GeometricDet.h:144
const Translation & translation() const
Definition: GeometricDet.h:102
double pixROCx_
Definition: GeometricDet.h:193
bool isFromDD4hep_
Definition: GeometricDet.h:200
static std::string printNavType(int const *n, size_t sz)
GeometricEnumType type_
Definition: GeometricDet.h:176
double radLength_
Definition: GeometricDet.h:189
std::ostream & operator<<(std::ostream &os, const GeometricDet::NavRange &n)
Definition: GeometricDet.h:206
LegacySolidShape shape() const
Definition: GeometricDet.h:114
Rotation rotationBounds() const
const ConstGeometricDetContainer & components() const
Definition: GeometricDet.h:152
GeometricDet(DDFilteredView *fv, GeometricEnumType dd)
Definition: GeometricDet.cc:73
GeometricDet * component(size_t index)
Definition: GeometricDet.h:147
double rho() const
Definition: GeometricDet.h:103
std::vector< GeometricDet const * > ConstGeometricDetContainer
Definition: GeometricDet.h:34
const std::string & name() const
Definition: GeometricDet.h:92
const std::array< const cms::dd::ValuePair< LegacySolidShape, cms::DDSolidShape >, 21 > LegacySolidShapeMap
void deleteComponents()
Point3DBase< float, GlobalTag > PositionType
Surface::RotationType Rotation
Definition: GeometricDet.h:46
const RotationMatrix & rotation() const
Definition: GeometricDet.h:105
double xi() const
Definition: GeometricDet.h:129
double pixROCy_
Definition: GeometricDet.h:194
Namespace of DDCMS conversion namespace.
std::vector< double > computeLegacyShapeParameters(const cms::DDSolidShape &mySolidShape, const dd4hep::Solid &mySolid) const
bool isLeaf() const
Definition: GeometricDet.h:148
double pixROCRows_
Definition: GeometricDet.h:191
Definition: DetId.h:17
const DetId & geographicalId() const
Definition: GeometricDet.h:98
double radLength() const
Definition: GeometricDet.h:128
const GeometricEnumType & type() const
Definition: GeometricDet.h:93
DDSolidShape
Definition: DDSolidShapes.h:6
double pixROCRows() const
Definition: GeometricDet.h:133
Translation trans_
Definition: GeometricDet.h:181
void addComponents(GeometricDetContainer const &cont)
std::string ddname_
Definition: GeometricDet.h:175
double pixROCx() const
Definition: GeometricDet.h:135
std::pair< int const *, size_t > NavRange
Definition: GeometricDet.h:33
TkRotation< float > RotationType
ROOT::Math::Rotation3D RotationMatrix
Definition: GeometricDet.h:36
ConstGeometricDetContainer deepComponents() const
const nav_type & navType() const
Definition: GeometricDet.h:96
NavRange navpos() const
Definition: GeometricDet.h:97
RotationMatrix rot_
Definition: GeometricDet.h:184
Surface::PositionType Position
Definition: GeometricDet.h:45
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > Translation
Definition: GeometricDet.h:37
cont
load Luminosity info ##
Definition: generateEDF.py:628
double siliconAPVNum_
Definition: GeometricDet.h:198
double pixROCCols() const
Definition: GeometricDet.h:134
std::unique_ptr< Bounds > bounds() const
DDSolidShape
Definition: DDSolidShapes.h:73