#include <MultiDuctor.h>
Classes | |
struct | SubDuctor |
Public Member Functions | |
MultiDuctor (const std::string anode="AnodePlane") | |
virtual | ~MultiDuctor () |
virtual bool | operator() (const input_pointer &depo, output_queue &frames) |
The calling signature: More... | |
virtual void | configure (const WireCell::Configuration &config) |
Accept a configuration. More... | |
virtual WireCell::Configuration | default_configuration () const |
Optional, override to return a hard-coded default configuration. More... | |
Public Member Functions inherited from WireCell::IDuctor | |
virtual | ~IDuctor () |
virtual std::string | signature () |
Public Member Functions inherited from WireCell::IQueuedoutNode< IDepo, IFrame > | |
virtual | ~IQueuedoutNode () |
virtual bool | operator() (const boost::any &anyin, queuedany &outanyq) |
The calling signature: More... | |
virtual std::vector< std::string > | input_types () |
virtual std::vector< std::string > | output_types () |
Public Member Functions inherited from WireCell::IQueuedoutNodeBase | |
virtual | ~IQueuedoutNodeBase () |
virtual NodeCategory | category () |
Return the behavior category type. More... | |
virtual int | concurrency () |
By default assume all subclasses maintain state. More... | |
Public Member Functions inherited from WireCell::INode | |
virtual | ~INode () |
virtual void | reset () |
Public Member Functions inherited from WireCell::IComponent< INode > | |
virtual | ~IComponent () |
Public Member Functions inherited from WireCell::Interface | |
virtual | ~Interface () |
Public Member Functions inherited from WireCell::IConfigurable | |
virtual | ~IConfigurable () |
Public Member Functions inherited from WireCell::IComponent< IConfigurable > | |
virtual | ~IComponent () |
Private Types | |
typedef std::vector< SubDuctor > | ductorchain_t |
Private Member Functions | |
void | merge (const output_queue &newframes) |
void | maybe_extract (const input_pointer &depo, output_queue &outframes) |
bool | start_processing (const input_pointer &depo) |
void | dump_frame (const IFrame::pointer frame, std::string msg="Gen::MultiDuctor:") |
Private Attributes | |
std::string | m_anode_tn |
IAnodePlane::pointer | m_anode |
double | m_tick |
double | m_start_time |
double | m_readout_time |
int | m_frame_count |
bool | m_continuous |
bool | m_eos |
std::vector< ductorchain_t > | m_chains |
output_queue | m_frame_buffer |
Additional Inherited Members | |
Public Types inherited from WireCell::IDuctor | |
typedef std::shared_ptr< IDuctor > | pointer |
Public Types inherited from WireCell::IQueuedoutNode< IDepo, IFrame > | |
typedef std::shared_ptr< IQueuedoutNodeBase > | pointer |
typedef IDepo | input_type |
typedef IFrame | output_type |
typedef std::shared_ptr< const IDepo > | input_pointer |
typedef std::shared_ptr< const IFrame > | output_pointer |
typedef std::deque< output_pointer > | output_queue |
Public Types inherited from WireCell::IQueuedoutNodeBase | |
typedef std::shared_ptr< IQueuedoutNodeBase > | pointer |
typedef std::deque< boost::any > | queuedany |
Public Types inherited from WireCell::INode | |
enum | NodeCategory { unknown, sourceNode, sinkNode, functionNode, queuedoutNode, joinNode, splitNode, faninNode, fanoutNode, multioutNode, hydraNode } |
Public Types inherited from WireCell::IComponent< INode > | |
typedef std::shared_ptr< INode > | pointer |
Access subclass facet by pointer. More... | |
typedef std::vector< pointer > | vector |
Vector of shared pointers. More... | |
Public Types inherited from WireCell::Interface | |
typedef std::shared_ptr< Interface > | pointer |
Public Types inherited from WireCell::IComponent< IConfigurable > | |
typedef std::shared_ptr< IConfigurable > | pointer |
Access subclass facet by pointer. More... | |
typedef std::vector< pointer > | vector |
Vector of shared pointers. More... | |
Definition at line 22 of file MultiDuctor.h.
|
private |
Definition at line 57 of file MultiDuctor.h.
Gen::MultiDuctor::MultiDuctor | ( | const std::string | anode = "AnodePlane" | ) |
Definition at line 20 of file MultiDuctor.cxx.
|
virtual |
Definition at line 30 of file MultiDuctor.cxx.
|
virtual |
Accept a configuration.
fixme: this is totally going to break when going to two-faced anodes.
Implements WireCell::IConfigurable.
Definition at line 126 of file MultiDuctor.cxx.
|
virtual |
Optional, override to return a hard-coded default configuration.
The initial time for this ductor
The time span for each readout.
If false then determine start time of each readout based on the input depos. This option is useful when running WCT sim on a source of depos which have already been "chunked" in time. If true then this Ductor will continuously simulate all time in "readout_time" frames leading to empty frames in the case of some readout time with no depos.
Allow for a custom starting frame number
Reimplemented from WireCell::IConfigurable.
Definition at line 34 of file MultiDuctor.cxx.
|
private |
Definition at line 221 of file MultiDuctor.cxx.
|
private |
Big fat lazy programmer FIXME: there is a bug waiting to bite here. If somehow a sub-ductor manages to make a frame that remains bigger than m_readout_time after the split() above, it will cause the final output frame to extend past requested duration. There needs to be a loop over to_extract added.
Big fat lazy programmer FIXME v2: there can be multiple traces on the same channel which may overlap in time.
Definition at line 240 of file MultiDuctor.cxx.
|
private |
Definition at line 387 of file MultiDuctor.cxx.
|
virtual |
The calling signature:
Implements WireCell::IQueuedoutNode< IDepo, IFrame >.
Definition at line 400 of file MultiDuctor.cxx.
|
private |
Definition at line 204 of file MultiDuctor.cxx.
|
private |
Definition at line 41 of file MultiDuctor.h.
|
private |
Definition at line 40 of file MultiDuctor.h.
|
private |
Definition at line 58 of file MultiDuctor.h.
|
private |
Definition at line 46 of file MultiDuctor.h.
|
private |
Definition at line 47 of file MultiDuctor.h.
|
private |
As sub ductors are called they will each return frames which are not in general synchronized with the others. Their frames must be buffered here and released as a merged frame in order for MultiDuctor to behave just like a monolithic ductor.
Definition at line 65 of file MultiDuctor.h.
|
private |
Definition at line 45 of file MultiDuctor.h.
|
private |
Definition at line 44 of file MultiDuctor.h.
|
private |
Definition at line 43 of file MultiDuctor.h.
|
private |
Definition at line 42 of file MultiDuctor.h.