LArSoft
v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
|
A container for photon visibility mapping data. More...
#include "OpDetVisibilityData.h"
Public Types | |
using | DataContainer_t = Cont |
Type of the original container. More... | |
using | Mapping_t = Mapping |
Type of the mapping object. More... | |
using | size_type = std::size_t |
using | value_type = Value_t |
using | MappedContainer_t = MappedContainer< DataContainer_t, Mapping_t > |
Type of this class. More... | |
using | DataIndex_t = util::collection_value_t< Mapping_t > |
Type of the index passed to the original container. More... | |
using | MappingIndex_t = std::size_t |
Type of the index passed to the mapping. More... | |
C++ standard container definitions | |
Type of datum in the container. | |
using | difference_type = std::ptrdiff_t |
using | reference = util::with_const_as_t< typename Storage_t::reference, util::collection_value_access_t< DataContainer_t >> |
using | const_reference = typename Storage_t::const_reference |
using | iterator = IteratorBase< MappedContainer_t, reference > |
using | const_iterator = IteratorBase< MappedContainer_t const, const_reference > |
Public Member Functions | |
void | setDefaultValue (value_type defValue) |
Validity information | |
OpDetVisibilityData ()=default | |
Constructor: acquires data, mapping and a default value. More... | |
OpDetVisibilityData (DataContainer_t const &cont, Mapping_t const &mapping, size_type size, value_type defValue) | |
Constructor: acquires data, mapping and a default value. More... | |
OpDetVisibilityData (DataContainer_t const &cont, Mapping_t const &mapping, size_type size) | |
Constructor: acquires data and mapping. More... | |
OpDetVisibilityData (DataContainer_t const &cont, Mapping_t const &mapping) | |
Constructor: acquires data and mapping. More... | |
bool | isValid () const |
Returns whether the contained data is valid or not. More... | |
operator bool () const | |
Returns whether the container has valid data. More... | |
bool | operator! () const |
Returns whether the container has no valid data. More... | |
Container information | |
The size of the container after mapping is not strictly defined, since there might be elements not present in the original container, as well as those elements might appear more than once. On top of this, this object does not need to know the size to correctly operate, because no storage is used for the container data after mapping. Nevertheless, users may rightfully wonder and ask how many elements of the container are valid after the mapping. This class allows an answer to be provided at construction time, relying on the superior wisdom of the user. If the user does not care to impart such wisdom, a guess is made with using the minimal size needed to accommodate all the elements after mapping (see | |
size_type | size () const |
Returns the nominal size of the container (after mapping). More... | |
size_type | minimal_size () const |
Returns the minimum size to include all mapped values. More... | |
size_type | max_size () const |
Returns the size of the largest possible container of this type. More... | |
bool | empty () const |
Returns whether the container has no elements. More... | |
reference | defaultValue () |
Returns the default value for elements with no original content. More... | |
const_reference | defaultValue () const |
Returns the nominal size of the container (after mapping). More... | |
Random access to elements | |
decltype(auto) | operator[] (MappingIndex_t index) const |
Returns the content corresponding to the specified index . More... | |
decltype(auto) | operator[] (MappingIndex_t index) |
Returns the content corresponding to the specified index . More... | |
decltype(auto) | at (MappingIndex_t index) const |
Returns the content corresponding to the specified index . More... | |
decltype(auto) | at (MappingIndex_t index) |
Returns the content corresponding to the specified index . More... | |
decltype(auto) | front () const |
Returns the first element in the container. More... | |
decltype(auto) | front () |
Returns the first element in the container. More... | |
decltype(auto) | back () const |
Returns the last element in the container. More... | |
decltype(auto) | back () |
Returns the last element in the container. More... | |
decltype(auto) | map_index (MappingIndex_t index) const |
Returns the index in the original data which is mapped to index . More... | |
decltype(auto) | map_index (MappingIndex_t index) |
Returns the index in the original data which is mapped to index . More... | |
Iteration | |
const_iterator | cbegin () const |
Returns a constant iterator to the first mapped element. More... | |
const_iterator | begin () const |
Returns a constant iterator to the first mapped element. More... | |
iterator | begin () |
Returns an iterator to the first mapped element. More... | |
const_iterator | cend () const |
Returns a constant iterator past the last mapped element. More... | |
const_iterator | end () const |
Returns a constant iterator past the last mapped element. More... | |
iterator | end () |
Returns an iterator past the last mapped element. More... | |
Static Public Attributes | |
static constexpr DataIndex_t | InvalidIndex = invalidIndex<DataIndex_t>() |
Static Protected Member Functions | |
static size_type | minimal_size (DataContainer_t const &cont, Mapping_t const &mapping) |
Returns the minimum size to include all mapped values. More... | |
Private Types | |
using | ContainerBase_t = util::MappedContainer< Cont, Mapping > |
Static Private Member Functions | |
static size_type | effectiveSize (DataContainer_t const &cont, size_type allegedSize) |
Determines whether the current content should be considered valid. More... | |
static size_type | effectiveSize (DataContainer_t const &cont, Mapping_t const &mapping) |
Determines whether the current content should be considered valid. More... | |
A container for photon visibility mapping data.
This container is designed to replace the use of plain pointers to library data, adding an intermediate mapping layer.
A proper mapping allows to use symmetries of the detector to reduce the redundant size of the library, at the cost of some run time.
This container is used as a util::MappedContainer
object, with the addition of being aware of whether the contained data is valid or not. The validity is estimated by considering the original data that is being mapped, that is the data from the library. If the data is invalid or empty, as it may be for a null pointer or an empty vector, the container data is also considered to be invalid.
In the current implementation, the concept of data being invalid is implemented by forcing the nominal size of the container to be zero.
Currently the mapping of the optical detectors is forced to be a static collection of detector IDs. If more flexibility is needed, the design of the container internals need to be updated to allow run time polymorphism.
Given the type of validity detection described above, it takes extra steps to provide a default mapping for areas not covered by the library. While with plain util::MappedContainer
that can be achieved by a empty data container and a mapping returning InvalidIndex
for all optical detectors, here this would just yield to an invalid container. Instead, together with that mapping, some fake data needs to be supplied to phot::OpDetVisibilityData
, which will be basically ignored and may be of any size larger than zero (or more precisely, phot::isValidLibraryData()
must return false
).
Definition at line 117 of file OpDetVisibilityData.h.
|
inherited |
Definition at line 179 of file MappedContainer.h.
|
inherited |
Definition at line 176 of file MappedContainer.h.
|
private |
Definition at line 118 of file OpDetVisibilityData.h.
using util::MappedContainer< Cont, Mapping >::DataContainer_t = Cont |
Type of the original container.
Definition at line 153 of file MappedContainer.h.
|
inherited |
Type of the index passed to the original container.
Definition at line 160 of file MappedContainer.h.
|
inherited |
Definition at line 172 of file MappedContainer.h.
|
inherited |
Definition at line 178 of file MappedContainer.h.
|
inherited |
Type of this class.
Definition at line 157 of file MappedContainer.h.
using util::MappedContainer< Cont, Mapping >::Mapping_t = Mapping |
Type of the mapping object.
Definition at line 154 of file MappedContainer.h.
|
inherited |
Type of the index passed to the mapping.
Definition at line 163 of file MappedContainer.h.
|
inherited |
Definition at line 175 of file MappedContainer.h.
using util::MappedContainer< Cont, Mapping >::size_type = std::size_t |
Definition at line 171 of file MappedContainer.h.
using util::MappedContainer< Cont, Mapping >::value_type = Value_t |
Definition at line 169 of file MappedContainer.h.
|
default |
Constructor: acquires data, mapping and a default value.
cont | container with the data to be mapped |
mapping | the mapping to be used |
size | the size of the container after mapping |
defValue | value to be used as default |
This works as the equivalent util::MappedContainer
constructor, except that if the data in cont
is deemed invalid the size is overridden to zero.
|
inline |
Constructor: acquires data, mapping and a default value.
cont | container with the data to be mapped |
mapping | the mapping to be used |
size | the size of the container after mapping |
defValue | value to be used as default |
This works as the equivalent util::MappedContainer
constructor, except that if the data in cont
is deemed invalid the size is overridden to zero.
Definition at line 154 of file OpDetVisibilityData.h.
|
inline |
Constructor: acquires data and mapping.
cont | container with the data to be mapped |
mapping | the mapping to be used |
size | the size of the container after mapping |
This works as the equivalent util::MappedContainer
constructor, except that if the data in cont
is deemed invalid the size is overridden to zero.
Definition at line 172 of file OpDetVisibilityData.h.
|
inline |
Constructor: acquires data and mapping.
cont | container with the data to be mapped |
mapping | the mapping to be used |
The size of the container is declared to be the minimal one (see minimal_size()
), unless data of the library cont
is invalid, in which case the full container is invalid.
The default value is assigned as in util::MappedContainer(DataContainer_t const&, Mapping_t const&, size_type)
.
Definition at line 189 of file OpDetVisibilityData.h.
|
inherited |
Returns the content corresponding to the specified index
.
index | the index of the data to be retrieved |
value_type
) std::out_of_range | if the index is not in the container |
Referenced by util::MappedContainer< Cont, Mapping >::minimal_size().
|
inherited |
Returns the content corresponding to the specified index
.
index | the index of the data to be retrieved |
value_type
) std::out_of_range | if the index is not in the container |
|
inlineinherited |
Returns the last element in the container.
empty()
Definition at line 347 of file MappedContainer.h.
|
inlineinherited |
Returns the last element in the container.
empty()
Definition at line 348 of file MappedContainer.h.
|
inlineinherited |
Returns a constant iterator to the first mapped element.
Definition at line 372 of file MappedContainer.h.
|
inlineinherited |
Returns an iterator to the first mapped element.
Definition at line 375 of file MappedContainer.h.
|
inlineinherited |
Returns a constant iterator to the first mapped element.
Definition at line 369 of file MappedContainer.h.
|
inlineinherited |
Returns a constant iterator past the last mapped element.
Definition at line 378 of file MappedContainer.h.
|
inlineinherited |
Returns the default value for elements with no original content.
Note that changing it will change at the same time the value returned for all unmapped elements afterwards.
Definition at line 294 of file MappedContainer.h.
|
inlineinherited |
Returns the nominal size of the container (after mapping).
This is the value provided at construction time, or the minimal_size()
at that time if no value was provided.
Definition at line 295 of file MappedContainer.h.
|
staticprivate |
Determines whether the current content should be considered valid.
Definition at line 351 of file OpDetVisibilityData.h.
References phot::isValidLibraryData().
|
staticprivate |
Determines whether the current content should be considered valid.
Definition at line 358 of file OpDetVisibilityData.h.
References phot::isValidLibraryData(), and util::MappedContainer< Cont, Mapping >::minimal_size().
|
inlineinherited |
Returns whether the container has no elements.
Definition at line 285 of file MappedContainer.h.
Referenced by phot::OpDetVisibilityData< phot::IPhotonLibrary::T0s_t >::isValid().
|
inlineinherited |
Returns a constant iterator past the last mapped element.
Definition at line 381 of file MappedContainer.h.
|
inlineinherited |
Returns an iterator past the last mapped element.
Definition at line 384 of file MappedContainer.h.
|
inlineinherited |
Returns the first element in the container.
empty()
Definition at line 338 of file MappedContainer.h.
|
inlineinherited |
Returns the first element in the container.
empty()
Definition at line 339 of file MappedContainer.h.
|
inline |
Returns whether the contained data is valid or not.
Definition at line 200 of file OpDetVisibilityData.h.
Referenced by phot::isValidLibraryData(), phot::OpDetVisibilityData< phot::IPhotonLibrary::T0s_t >::operator bool(), and phot::OpDetVisibilityData< phot::IPhotonLibrary::T0s_t >::operator!().
|
inherited |
Returns the index in the original data which is mapped to index
.
index | the index to be mapped (like e.g. in at() ) |
InvalidIndex
Referenced by util::MappedContainer< Cont, Mapping >::minimal_size().
|
inherited |
Returns the index in the original data which is mapped to index
.
index | the index to be mapped (like e.g. in at() ) |
InvalidIndex
|
inlineinherited |
Returns the size of the largest possible container of this type.
Definition at line 282 of file MappedContainer.h.
|
inherited |
Returns the minimum size to include all mapped values.
This method is available only if the mapping type (Mapping_t
) answers a std::size()
call, which is expected to return the number of elements the original data can be mapped into.
Definition at line 753 of file MappedContainer.h.
References util::MappedContainer< Cont, Mapping >::at(), util::MappedContainer< Cont, Mapping >::map_element(), util::size(), and util::to_string().
Referenced by phot::OpDetVisibilityData< Cont, Mapping >::effectiveSize().
|
staticprotectedinherited |
Returns the minimum size to include all mapped values.
Definition at line 798 of file MappedContainer.h.
References util::collection_from_reference(), util::MappedContainer< Cont, Mapping >::map_index(), and util::size().
|
inline |
Returns whether the container has valid data.
Definition at line 203 of file OpDetVisibilityData.h.
|
inline |
Returns whether the container has no valid data.
Definition at line 206 of file OpDetVisibilityData.h.
|
inlineinherited |
Returns the content corresponding to the specified index
.
index | the index of the data to be retrieved |
value_type
)The content requested for index
is fetched from the original data, at the element resulting from the mapping of the index
argument.
Definition at line 318 of file MappedContainer.h.
|
inlineinherited |
Returns the content corresponding to the specified index
.
index | the index of the data to be retrieved |
value_type
)The content requested for index
is fetched from the original data, at the element resulting from the mapping of the index
argument.
Definition at line 319 of file MappedContainer.h.
|
inlineinherited |
Changes the default value. The new value will be used for all following mappings.
Definition at line 300 of file MappedContainer.h.
|
inlineinherited |
Returns the nominal size of the container (after mapping).
This is the value provided at construction time, or the minimal_size()
at that time if no value was provided.
Definition at line 270 of file MappedContainer.h.
Referenced by phot::details::generic_size().
|
staticinherited |
Invalid index to be returned by the mapping when the required index is not mapped back to the original container; in that case, a defaultValue()
is mapped instead.
Definition at line 187 of file MappedContainer.h.