Logical multi-level gate associated to one or more readout channels. More...
#include <ReadoutTriggerGate.h>
Public Types | |
using | ClockTick_t = Tick |
Tick point. More... | |
using | ClockTicks_t = TickInterval |
Tick interval. More... | |
using | ChannelID_t = ChannelIDType |
Type of stored channel ID. More... | |
using | GateData_t = Base_t |
Type for gate data access. More... | |
using | ChannelList_t = std::vector< ChannelID_t > |
Type of list of associated channels. More... | |
Public Types inherited from icarus::trigger::TriggerGateData< Tick, TickInterval > | |
using | triggergatedata_t = TriggerGateData< Tick, TickInterval > |
This type. More... | |
using | ClockTick_t = Tick |
Type of a point in time, measured in ticks. More... | |
using | ClockTicks_t = TickInterval |
Type of a time interval, measured in ticks. More... | |
using | OpeningCount_t = unsigned int |
Type of count of number of open channels. More... | |
using | OpeningDiff_t = std::make_signed_t< OpeningCount_t > |
Type representing a variation of open channels. More... | |
Public Member Functions | |
ReadoutTriggerGate ()=default | |
ReadoutTriggerGate (ReadoutTriggerGate const &)=default | |
ReadoutTriggerGate (ReadoutTriggerGate &&)=default | |
ReadoutTriggerGate & | operator= (ReadoutTriggerGate const &)=default |
ReadoutTriggerGate & | operator= (ReadoutTriggerGate &&)=default |
ReadoutTriggerGate (std::initializer_list< ChannelID_t > channels) | |
Constructor: a closed gate associated to the specified channels . More... | |
bool | hasChannels () const |
Returns whether there is any channel id associated to the gate data. More... | |
bool | hasChannel () const |
Returns whether exactly one channel id associated to the gate data. More... | |
std::size_t | nChannels () const |
Returns the number of associated channels. More... | |
decltype(auto) | channels () const |
Returns the channels associated to the gate data. More... | |
ChannelID_t | channel () const |
Returns the channel associated to the gate data. More... | |
This_t & | addChannel (ChannelID_t const channel) |
Associates the specified channel to this readout gate. More... | |
This_t & | addChannels (std::initializer_list< ChannelID_t > channels) |
Associates the specified channels to this readout gate. More... | |
bool | operator== (ReadoutTriggerGate const &) const |
bool | operator!= (ReadoutTriggerGate const &) const |
ReadoutTriggerGate & | operator= (GateData_t const &data) |
Copies/steals all the levels from the specified data. More... | |
ReadoutTriggerGate & | operator= (GateData_t &&data) |
Gate query | |
GateData_t const & | gateLevels () const |
Access to the underlying gate level data. More... | |
GateData_t & | gateLevels () |
Access to the underlying gate level data (mutable). More... | |
Public Member Functions inherited from icarus::trigger::TriggerGateData< Tick, TickInterval > | |
TriggerGateData () | |
Constructor: a closed gate for the channel in waveform . More... | |
bool | operator== (TriggerGateData const &) const |
bool | operator!= (TriggerGateData const &) const |
ClockTick_t | lastTick () const |
Returns the number of ticks this gate covers. More... | |
OpeningCount_t | openingCount (ClockTick_t tick) const |
Returns the opening count of the gate at the specified tick . More... | |
bool | alwaysClosed () const |
Returns whether this gate never opened. More... | |
bool | isOpen (ClockTick_t tick) const |
Returns whether the gate is open at all at the specified tick . More... | |
ClockTick_t | findOpen (OpeningCount_t minOpening=1U, ClockTick_t start=MinTick, ClockTick_t end=MaxTick) const |
Returns the tick at which the gate opened. More... | |
ClockTick_t | findClose (OpeningCount_t minOpening=1U, ClockTick_t start=MinTick, ClockTick_t end=MaxTick) const |
Returns the tick at which the gate closed. More... | |
ClockTick_t | findMaxOpen (ClockTick_t start=MinTick, ClockTick_t end=MaxTick) const |
Returns the tick at which the gate has the maximum opening. More... | |
std::pair< OpeningCount_t, OpeningCount_t > | openingRange (ClockTick_t start, ClockTick_t end) const |
Returns the range of trigger opening values in the specified range. More... | |
void | setOpeningAt (ClockTick_t tick, OpeningCount_t openingCount) |
Changes the opening to match openingCount at the specified time. More... | |
void | openAt (ClockTick_t tick, OpeningDiff_t count) |
Open this gate at the specified time (increase the opening by count ). More... | |
void | openAt (ClockTick_t tick) |
Open this gate at the specified time (increase the opening by 1). More... | |
void | openBetween (ClockTick_t start, ClockTick_t end, OpeningDiff_t count=1) |
Open this gate at specified start tick, and close it at end tick. More... | |
void | openFor (ClockTick_t tick, ClockTicks_t length, OpeningDiff_t count=1) |
Open this gate at the specified time, and close it length ticks later. More... | |
void | closeAt (ClockTick_t tick, OpeningDiff_t count) |
Close this gate at the specified time (decrease the opening by count ). More... | |
void | closeAt (ClockTick_t tick) |
Close this gate at the specified time. More... | |
void | closeAllAt (ClockTick_t tick) |
Completely close this gate at the specified time. More... | |
void | clear () |
Sets the gate levels in the state at construction. More... | |
triggergatedata_t & | Min (triggergatedata_t const &other) |
Combines with a gate, keeping the minimum opening among the two. More... | |
triggergatedata_t & | Max (triggergatedata_t const &other) |
Combines with a gate, keeping the maximum opening among the two. More... | |
triggergatedata_t & | Sum (triggergatedata_t const &other) |
Combines with a gate, keeping the sum of openings of the two. More... | |
triggergatedata_t & | Mul (triggergatedata_t const &other) |
Combines with a gate, keeping the product of openings of the two. More... | |
Protected Types | |
using | GateEvolution_t = typename Base_t::GateEvolution_t |
Protected Types inherited from icarus::trigger::TriggerGateData< Tick, TickInterval > | |
using | EventType = details::TriggerGateEventType |
using | Status = details::TriggerGateStatus< ClockTick_t, OpeningCount_t > |
using | GateEvolution_t = std::vector< Status > |
Type to describe the time evolution of the gate. More... | |
Protected Member Functions | |
ReadoutTriggerGate (GateEvolution_t &&gateLevel, ChannelList_t &&channels) | |
Protected constructor: set the data directly. More... | |
template<typename BIter , typename EIter > | |
ReadoutTriggerGate (GateEvolution_t &&gateLevel, BIter b, EIter e) | |
Protected constructor: set the data directly. More... | |
ChannelList_t & | normalizeChannels () |
Removes duplicate channel IDs and sorts the remaining ones. More... | |
void | associateChannelsFromGate (ReadoutTriggerGate const &other) |
Associates this data with the channels from the other gate. More... | |
void | associateChannels (std::initializer_list< ChannelID_t > const &moreChannels) |
Associates this data with the channels from the specified list. More... | |
void | associateChannels (ChannelList_t const &moreChannels) |
Protected Member Functions inherited from icarus::trigger::TriggerGateData< Tick, TickInterval > | |
TriggerGateData (GateEvolution_t &&gateLevel) | |
Protected constructor: set the data directly. More... | |
Static Protected Member Functions | |
template<typename BIter , typename EIter > | |
static ChannelList_t & | mergeSortedChannelsInto (ChannelList_t &channels, BIter b, EIter e) |
static ChannelList_t & | normalizeSortedChannels (ChannelList_t &channels) |
Removes duplicate channel IDs. More... | |
template<typename BIter , typename EIter > | |
static ChannelList_t & | mergeChannelsInto (ChannelList_t &channels, BIter b, EIter e) |
Adds channels from iterators b to e into channels (returned). More... | |
static ChannelList_t | mergeChannels (ChannelList_t const &a, ChannelList_t const &b) |
Returns a merged list of channels from a and b . More... | |
static ChannelList_t & | normalizeChannels (ChannelList_t &channels) |
Removes duplicate channel IDs and sorts the remaining ones. More... | |
static ChannelList_t | normalizeChannels (ChannelList_t &&channels) |
Private Types | |
using | Base_t = icarus::trigger::TriggerGateData< Tick, TickInterval > |
Type of the base class. More... | |
using | This_t = icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType > |
Type of this class. More... | |
Private Attributes | |
ChannelList_t | fChannels |
List of readout channels associated to this data. More... | |
Combination operations | |
ReadoutTriggerGate & | Min (ReadoutTriggerGate const &other) |
Combines with a gate, keeping the minimum opening among the two. More... | |
ReadoutTriggerGate & | Max (ReadoutTriggerGate const &other) |
Combines with a gate, keeping the maximum opening among the two. More... | |
ReadoutTriggerGate & | Sum (ReadoutTriggerGate const &other) |
Combines with a gate, keeping the sum of openings of the two. More... | |
ReadoutTriggerGate & | Mul (ReadoutTriggerGate const &other) |
Combines with a gate, keeping the product of openings of the two. More... | |
static ReadoutTriggerGate | Min (ReadoutTriggerGate const &a, ReadoutTriggerGate const &b) |
Returns a gate with the minimum opening between the specified two. More... | |
static ReadoutTriggerGate | Max (ReadoutTriggerGate const &a, ReadoutTriggerGate const &b) |
Returns a gate with the maximum opening between the specified two. More... | |
static ReadoutTriggerGate | Sum (ReadoutTriggerGate const &a, ReadoutTriggerGate const &b) |
Returns a gate with opening sum of the specified two. More... | |
static ReadoutTriggerGate | Mul (ReadoutTriggerGate const &a, ReadoutTriggerGate const &b) |
Returns a gate with opening product of the specified two. More... | |
template<typename Op > | |
static ReadoutTriggerGate | SymmetricCombination (Op &&op, ReadoutTriggerGate const &a, ReadoutTriggerGate const &b, ClockTicks_t aDelay=ClockTicks_t{0}, ClockTicks_t bDelay=ClockTicks_t{0}) |
Returns a gate combination of the openings of two other gates. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from icarus::trigger::TriggerGateData< Tick, TickInterval > | |
static triggergatedata_t | Min (triggergatedata_t const &a, triggergatedata_t const &b) |
Returns a gate with the minimum opening between the specified two. More... | |
static triggergatedata_t | Max (triggergatedata_t const &a, triggergatedata_t const &b) |
Returns a gate with the maximum opening between the specified two. More... | |
static triggergatedata_t | Sum (triggergatedata_t const &a, triggergatedata_t const &b) |
Returns a gate with opening sum of the specified two. More... | |
static triggergatedata_t | Mul (triggergatedata_t const &a, triggergatedata_t const &b) |
Returns a gate with opening product of the specified two. More... | |
template<typename Op > | |
static triggergatedata_t | SymmetricCombination (Op &&op, triggergatedata_t const &a, triggergatedata_t const &b, ClockTicks_t aDelay=ClockTicks_t{}, ClockTicks_t bDelay=ClockTicks_t{}) |
Returns a gate combination of the openings of two other gates. More... | |
Static Public Attributes inherited from icarus::trigger::TriggerGateData< Tick, TickInterval > | |
static constexpr ClockTick_t | MinTick = std::numeric_limits<ClockTick_t>::min() |
An unbearably small tick number. More... | |
static constexpr ClockTick_t | MaxTick = std::numeric_limits<ClockTick_t>::max() |
An unbearably large tick number. More... | |
Logical multi-level gate associated to one or more readout channels.
Tick | type used to count the ticks |
TickInterval | type used to quantify tick difference |
ChannelIDType | type of channel ID |
This object is a trigger gate associated with one or more readout channels. The channels are expressed as channel identifiers.
detinfo::timescales::optical_tick
). But currently the quantities (util::quantity
derived objects) are not well suited to be serialized by ROOT, becauselardataalg
rather than lardataobj
Definition at line 41 of file ReadoutTriggerGate.h.
|
private |
Type of the base class.
Definition at line 108 of file ReadoutTriggerGate.h.
using icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::ChannelID_t = ChannelIDType |
Type of stored channel ID.
Definition at line 118 of file ReadoutTriggerGate.h.
using icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::ChannelList_t = std::vector<ChannelID_t> |
Type of list of associated channels.
Definition at line 124 of file ReadoutTriggerGate.h.
using icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::ClockTick_t = Tick |
Tick point.
Definition at line 116 of file ReadoutTriggerGate.h.
using icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::ClockTicks_t = TickInterval |
Tick interval.
Definition at line 117 of file ReadoutTriggerGate.h.
using icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::GateData_t = Base_t |
Type for gate data access.
Definition at line 121 of file ReadoutTriggerGate.h.
|
protected |
Definition at line 327 of file ReadoutTriggerGate.h.
|
private |
Type of this class.
Definition at line 112 of file ReadoutTriggerGate.h.
|
default |
Constructor: a closed gate with no associated channels
ReadoutTriggerGate(std::initializer_list<ChannelID_t>)
, addChannel()
, addChannels()
|
default |
|
default |
icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::ReadoutTriggerGate | ( | std::initializer_list< ChannelID_t > | channels | ) |
Constructor: a closed gate associated to the specified channels
.
|
inlineprotected |
Protected constructor: set the data directly.
Definition at line 330 of file ReadoutTriggerGate.h.
|
inlineprotected |
Protected constructor: set the data directly.
Definition at line 336 of file ReadoutTriggerGate.h.
This_t& icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::addChannel | ( | ChannelID_t const | channel | ) |
Associates the specified channel to this readout gate.
|
inline |
Associates the specified channels to this readout gate.
Definition at line 206 of file ReadoutTriggerGate.h.
|
protected |
Associates this data with the channels from the specified list.
|
protected |
|
inlineprotected |
Associates this data with the channels from the other
gate.
Definition at line 352 of file ReadoutTriggerGate.h.
ChannelID_t icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::channel | ( | ) | const |
Returns the channel associated to the gate data.
MoreThanOneChannelError | if more than one associated channel |
NoChannelError | if no channel is associated |
hasChannel()
decltype(auto) icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::channels | ( | ) | const |
Returns the channels associated to the gate data.
hasChannels()
, channel()
|
inline |
Access to the underlying gate level data.
Definition at line 155 of file ReadoutTriggerGate.h.
|
inline |
Access to the underlying gate level data (mutable).
Definition at line 158 of file ReadoutTriggerGate.h.
|
inline |
Returns whether exactly one channel id associated to the gate data.
channel()
If this methods returns true
, channel()
can safely be used.
Definition at line 180 of file ReadoutTriggerGate.h.
|
inline |
Returns whether there is any channel id associated to the gate data.
hasChannel()
Definition at line 171 of file ReadoutTriggerGate.h.
ReadoutTriggerGate& icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::Max | ( | ReadoutTriggerGate< Tick, TickInterval, ChannelIDType > const & | other | ) |
|
static |
|
staticprotected |
Returns a merged list of channels from a
and b
.
|
staticprotected |
Adds channels from iterators b
to e
into channels
(returned).
|
staticprotected |
ReadoutTriggerGate& icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::Min | ( | ReadoutTriggerGate< Tick, TickInterval, ChannelIDType > const & | other | ) |
Combines with a gate, keeping the minimum opening among the two.
other | gate to combine to |
Max()
Multi-level equivalent of an and logical operation.
|
static |
Returns a gate with the minimum opening between the specified two.
a | first gate |
b | second gate |
a
and b
Max()
Multi-level equivalent of an and logical operation.
ReadoutTriggerGate& icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::Mul | ( | ReadoutTriggerGate< Tick, TickInterval, ChannelIDType > const & | other | ) |
|
static |
Returns a gate with opening product of the specified two.
a | first gate |
b | second gate |
a
and b
Max()
|
inline |
Returns the number of associated channels.
Definition at line 183 of file ReadoutTriggerGate.h.
|
inlineprotected |
Removes duplicate channel IDs and sorts the remaining ones.
Definition at line 342 of file ReadoutTriggerGate.h.
|
staticprotected |
Removes duplicate channel IDs and sorts the remaining ones.
|
staticprotected |
|
staticprotected |
Removes duplicate channel IDs.
bool icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::operator!= | ( | ReadoutTriggerGate< Tick, TickInterval, ChannelIDType > const & | ) | const |
|
default |
|
default |
|
inline |
Copies/steals all the levels from the specified data.
Definition at line 143 of file ReadoutTriggerGate.h.
|
inline |
Definition at line 145 of file ReadoutTriggerGate.h.
bool icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::operator== | ( | ReadoutTriggerGate< Tick, TickInterval, ChannelIDType > const & | ) | const |
ReadoutTriggerGate& icarus::trigger::ReadoutTriggerGate< Tick, TickInterval, ChannelIDType >::Sum | ( | ReadoutTriggerGate< Tick, TickInterval, ChannelIDType > const & | other | ) |
|
static |
Returns a gate with opening sum of the specified two.
a | first gate |
b | second gate |
a
and b
Max()
|
static |
Returns a gate combination of the openings of two other gates.
Op | binary operation: OpeningCount_t (x2) to OpeningCount_t |
op | symmetric binary combination operation |
a | first gate |
b | second gate |
a
and b
For this algorithm to work, the operation needs to be symmetric, i.e. op(c1, c2) == op(c2, c1)
for every valid combinations of counts c1
and c2
.
|
private |
List of readout channels associated to this data.
Definition at line 382 of file ReadoutTriggerGate.h.