@@ -53,7 +53,11 @@ class surface {
53
53
// / @param desc from that detector.
54
54
DETRAY_HOST_DEVICE
55
55
constexpr surface (const detector_t &det, const descr_t &desc)
56
- : m_detector{det}, m_desc{desc} {}
56
+ : m_detector{det}, m_desc{desc} {
57
+ assert (!m_desc.barcode ().is_invalid ());
58
+ assert (m_desc.index () < det.surfaces ().size ());
59
+ assert (m_desc.transform () < det.transform_store ().size ());
60
+ }
57
61
58
62
// / Constructor from detector @param det and barcode @param bcd in
59
63
// / that detector.
@@ -84,20 +88,30 @@ class surface {
84
88
// / @returns the surface barcode
85
89
DETRAY_HOST_DEVICE
86
90
constexpr auto barcode () const -> geometry::barcode {
91
+ assert (!m_desc.barcode ().is_invalid ());
87
92
return m_desc.barcode ();
88
93
}
89
94
90
95
// / @returns the index of the mother volume
91
96
DETRAY_HOST_DEVICE
92
- constexpr auto volume () const -> dindex { return barcode ().volume (); }
97
+ constexpr auto volume () const -> dindex {
98
+ assert (barcode ().volume () < m_detector.volumes ().size ());
99
+ return barcode ().volume ();
100
+ }
93
101
94
102
// / @returns the index of the surface in the detector surface lookup
95
103
DETRAY_HOST_DEVICE
96
- constexpr auto index () const -> dindex { return barcode ().index (); }
104
+ constexpr auto index () const -> dindex {
105
+ assert (barcode ().index () < m_detector.surfaces ().size ());
106
+ return barcode ().index ();
107
+ }
97
108
98
109
// / @returns the surface id (sensitive, passive or portal)
99
110
DETRAY_HOST_DEVICE
100
- constexpr auto id () const -> surface_id { return barcode ().id (); }
111
+ constexpr auto id () const -> surface_id {
112
+ assert (barcode ().id () != surface_id::e_unknown);
113
+ return barcode ().id ();
114
+ }
101
115
102
116
// / @returns the extra bits in the barcode
103
117
DETRAY_HOST_DEVICE
@@ -110,7 +124,7 @@ class surface {
110
124
// / @returns the surface source link
111
125
DETRAY_HOST_DEVICE
112
126
constexpr auto source () const {
113
- return m_detector.surface (m_desc. barcode ()).source ;
127
+ return m_detector.surface (barcode ()).source ;
114
128
}
115
129
116
130
// / @returns true if the surface is a senstive detector module.
@@ -156,6 +170,7 @@ class surface {
156
170
DETRAY_HOST_DEVICE
157
171
constexpr auto transform (const context &ctx) const
158
172
-> const transform3_type & {
173
+ assert (m_desc.transform () < m_detector.transform_store ().size ());
159
174
return m_detector.transform_store ().at (m_desc.transform (), ctx);
160
175
}
161
176
@@ -239,8 +254,8 @@ class surface {
239
254
// / @tparam Args types of additional arguments to the functor
240
255
template <typename functor_t , typename ... Args>
241
256
DETRAY_HOST_DEVICE constexpr auto visit_mask (Args &&... args) const {
257
+ assert (!m_desc.mask ().is_invalid ());
242
258
const auto &masks = m_detector.mask_store ();
243
-
244
259
return masks.template visit <functor_t >(m_desc.mask (),
245
260
std::forward<Args>(args)...);
246
261
}
@@ -251,8 +266,8 @@ class surface {
251
266
// / @tparam Args types of additional arguments to the functor
252
267
template <typename functor_t , typename ... Args>
253
268
DETRAY_HOST_DEVICE constexpr auto visit_material (Args &&... args) const {
269
+ assert (has_material ());
254
270
const auto &materials = m_detector.material_store ();
255
-
256
271
return materials.template visit <functor_t >(m_desc.material (),
257
272
std::forward<Args>(args)...);
258
273
}
0 commit comments