CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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  bool isBricked() const { return isBricked_; }
134  double pixROCRows() const { return pixROCRows_; }
135  double pixROCCols() const { return pixROCCols_; }
136  double pixROCx() const { return pixROCx_; }
137  double pixROCy() const { return pixROCy_; }
138  // Only return meaningful results for Outer Trackers.
139  bool stereo() const { return stereo_; }
140  bool isLowerSensor() const { return isLowerSensor_; }
141  bool isUpperSensor() const { return isUpperSensor_; }
142  double siliconAPVNum() const { return siliconAPVNum_; }
143 
144  // DETECTOR DESCRIPTION ORIGIN INFO
145  bool isFromDD4hep() const { return isFromDD4hep_; }
146 
147  // CHILDREN INFO
148  GeometricDet* component(size_t index) { return const_cast<GeometricDet*>(container_[index]); }
149  bool isLeaf() const { return container_.empty(); }
150  // direct children only
151  // if the current GeometricDet is a leaf, it returns nothing.
154  // all descendants
155  // if the current GeometricDet is a leaf, it returns itself!
158 
159  // PUBLIC SETTERS (they should obviously be as few as possible!!)
162  void addComponent(GeometricDet*);
163  void clearComponents() { container_.clear(); } // only empties the container, THE CHILDREN ARE NOT DELETED!
164  void deleteComponents(); // EXPLICITLY DELETES THE CHILDREN
165 
166  // CUSTOM DESTRUCTOR
167  ~GeometricDet();
168 
169 private:
170  std::vector<double> computeLegacyShapeParameters(const cms::DDSolidShape& mySolidShape,
171  const dd4hep::Solid& mySolid) const;
172 
175 
178 
179  Translation trans_; // in mm
180  double rho_ = 0.; // in mm
181  double phi_ = 0.;
183 
185  std::vector<double> params_; // in mm
186 
187  double radLength_ = 0.;
188  double xi_ = 0.;
189  bool isBricked_ = false;
190  double pixROCRows_ = 0.;
191  double pixROCCols_ = 0.;
192  double pixROCx_ = 0.;
193  double pixROCy_ = 0.;
194  bool stereo_ = false;
195  bool isLowerSensor_ = false;
196  bool isUpperSensor_ = false;
197  double siliconAPVNum_ = 0.;
198 
199  bool isFromDD4hep_ = false;
200 
202 };
203 
204 #undef PoolAlloc
205 #endif
std::vector< GeometricDet * > GeometricDetContainer
Definition: GeometricDet.h:35
double pixROCy() const
Definition: GeometricDet.h:137
bool isFromDD4hep() const
Definition: GeometricDet.h:145
cms::DDSolidShape shape_
Definition: GeometricDet.h:184
double radLength() const
Definition: GeometricDet.h:128
bool isLowerSensor_
Definition: GeometricDet.h:195
double pixROCCols_
Definition: GeometricDet.h:191
bool isUpperSensor() const
Definition: GeometricDet.h:141
tuple cont
load Luminosity info ##
Definition: generateEDF.py:628
uint16_t *__restrict__ id
void addComponent(GeometricDet *)
std::vector< double > params_
Definition: GeometricDet.h:185
void clearComponents()
Definition: GeometricDet.h:163
void setGeographicalID(DetId id)
Definition: GeometricDet.h:99
bool isLeaf() const
Definition: GeometricDet.h:149
const ConstGeometricDetContainer & components() const
Definition: GeometricDet.h:153
DetId geographicalID_
Definition: GeometricDet.h:177
LegacySolidShape shape() const
Definition: GeometricDet.h:114
Log< level::Error, false > LogError
std::vector< int > nav_type
Definition: GeometricDet.h:42
enum GeometricDet::GDEnumType GeometricEnumType
bool isUpperSensor_
Definition: GeometricDet.h:196
nav_type ddd_
Definition: GeometricDet.h:176
std::vector< double > computeLegacyShapeParameters(const cms::DDSolidShape &mySolidShape, const dd4hep::Solid &mySolid) const
const std::vector< double > & params() const
Definition: GeometricDet.h:118
Mapping::value_type::value_type value(Mapping a, const std::string &name)
Definition: DDSolidShapes.h:42
ConstGeometricDetContainer & components()
Definition: GeometricDet.h:152
ConstGeometricDetContainer container_
Definition: GeometricDet.h:201
Position positionBounds() const
const RotationMatrix & rotation() const
Definition: GeometricDet.h:105
double pixROCx_
Definition: GeometricDet.h:192
bool isFromDD4hep_
Definition: GeometricDet.h:199
const GeometricEnumType & type() const
Definition: GeometricDet.h:93
const nav_type & navType() const
Definition: GeometricDet.h:96
GeometricEnumType type_
Definition: GeometricDet.h:174
double radLength_
Definition: GeometricDet.h:187
GeometricDet(DDFilteredView *fv, GeometricEnumType dd)
Definition: GeometricDet.cc:73
std::unique_ptr< Bounds > bounds() const
double pixROCCols() const
Definition: GeometricDet.h:135
GeometricDet * component(size_t index)
Definition: GeometricDet.h:148
std::vector< GeometricDet const * > ConstGeometricDetContainer
Definition: GeometricDet.h:34
const std::array< const cms::dd::ValuePair< LegacySolidShape, cms::DDSolidShape >, 21 > LegacySolidShapeMap
void deleteComponents()
const cms::DDSolidShape & shape_dd4hep() const
Definition: GeometricDet.h:116
Point3DBase< float, GlobalTag > PositionType
Surface::RotationType Rotation
Definition: GeometricDet.h:46
double pixROCy_
Definition: GeometricDet.h:193
const DetId & geographicalId() const
Definition: GeometricDet.h:98
double pixROCRows_
Definition: GeometricDet.h:190
Definition: DetId.h:17
double xi() const
Definition: GeometricDet.h:129
DDSolidShape
Definition: DDSolidShapes.h:6
Translation trans_
Definition: GeometricDet.h:179
double pixROCx() const
Definition: GeometricDet.h:136
NavRange navpos() const
Definition: GeometricDet.h:97
double phi() const
Definition: GeometricDet.h:104
ConstGeometricDetContainer deepComponents() const
void addComponents(GeometricDetContainer const &cont)
Rotation rotationBounds() const
std::string ddname_
Definition: GeometricDet.h:173
std::pair< int const *, size_t > NavRange
Definition: GeometricDet.h:33
TkRotation< float > RotationType
ROOT::Math::Rotation3D RotationMatrix
Definition: GeometricDet.h:36
const Translation & translation() const
Definition: GeometricDet.h:102
const std::string & name() const
Definition: GeometricDet.h:92
double siliconAPVNum() const
Definition: GeometricDet.h:142
RotationMatrix rot_
Definition: GeometricDet.h:182
Surface::PositionType Position
Definition: GeometricDet.h:45
bool stereo() const
Definition: GeometricDet.h:139
double pixROCRows() const
Definition: GeometricDet.h:134
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > Translation
Definition: GeometricDet.h:37
bool isBricked() const
Definition: GeometricDet.h:133
bool isLowerSensor() const
Definition: GeometricDet.h:140
double siliconAPVNum_
Definition: GeometricDet.h:197
double rho() const
Definition: GeometricDet.h:103
DDSolidShape
Definition: DDSolidShapes.h:73