#include <Drifter.h>
Classes | |
struct | DepoTimeCompare |
struct | IsInsideBulk |
struct | IsInsideResp |
struct | Xregion |
Public Member Functions | |
Drifter () | |
virtual | ~Drifter () |
virtual void | reset () |
virtual bool | operator() (const input_pointer &depo, output_queue &outq) |
The calling signature: More... | |
virtual void | configure (const WireCell::Configuration &config) |
WireCell::IConfigurable interface. More... | |
virtual WireCell::Configuration | default_configuration () const |
Optional, override to return a hard-coded default configuration. More... | |
IDepo::pointer | transport (IDepo::pointer depo) |
double | proper_time (IDepo::pointer depo) |
bool | insert (const input_pointer &depo) |
void | flush (output_queue &outq) |
void | flush_ripe (output_queue &outq, double now) |
virtual void | set_lifetime (double lifetime_to_set) |
Public Member Functions inherited from WireCell::IDrifter | |
virtual | ~IDrifter () |
virtual std::string | signature () |
Public Member Functions inherited from WireCell::IQueuedoutNode< IDepo, IDepo > | |
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 () |
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 Attributes | |
IRandom::pointer | m_rng |
std::string | m_rng_tn |
double | m_DL |
double | m_DT |
double | m_lifetime |
bool | m_fluctuate |
double | m_speed |
double | m_toffset |
int | n_dropped |
int | n_drifted |
std::vector< Xregion > | m_xregions |
Log::logptr_t | l |
Additional Inherited Members | |
Public Types inherited from WireCell::IDrifter | |
typedef std::shared_ptr< IDrifter > | pointer |
Public Types inherited from WireCell::IQueuedoutNode< IDepo, IDepo > | |
typedef std::shared_ptr< IQueuedoutNodeBase > | pointer |
typedef IDepo | input_type |
typedef IDepo | output_type |
typedef std::shared_ptr< const IDepo > | input_pointer |
typedef std::shared_ptr< const IDepo > | 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... | |
This component drifts depos bounded by planes perpendicular to the X-axis. The boundary planes are specified with the "xregions" list. Each list is an object fully specified with a "cathode" an "anode" and a "response" attribute giving X locations in the same coordinate system as depos of three planes.
If "anode" is not given then its value is take to be that of "response" and vice versa and at least one must be specified. A "cathode" value must be specified.
Any depo not falling between "anode" and "cathode" will be dropped.
Any depo falling between "response" and "cathode" will be drifted to the "response" plane.
Any depo falling between "anode" and "response" will be ANTI-DRIFTED to the "response" plane. Ie, it will be "BACKED UP" in space an time as if it had be produced earlier and at the response plane.
Input depositions must be ordered in absolute time (their current time) and output depositions are produced ordered by their time after being drifted to the response plane.
Diffusion and absorption effects and also, optionally, fluctuations are applied. Fano factor and Recombination are not applied in this component (see IRecombinationModel implementations).
Typically a drifter is used just prior to a ductor and in such cases the "response" plane should be made coincident with the non-physical "response plane" which defines the starting point for the field response functions. The location of the response plane realtive to the wire planes can be found using:
$ wriecell-sigproc response-info garfield-1d-3planes-21wires-6impacts-dune-v1.json.bz2 origin:10.00 cm, period:0.10 us, tstart:0.00 us, speed:1.60 mm/us, axis:(1.00,0.00,0.00) plane:0, location:9.4200mm, pitch:4.7100mm plane:1, location:4.7100mm, pitch:4.7100mm plane:2, location:0.0000mm, pitch:4.7100mm
Here, "origin" gives the location of the response plane. The location of the wire planes according to wire geometry can be similarly dumped.
$ wirecell-util wires-info protodune-wires-larsoft-v3.json.bz2 anode:0 face:0 X=[-3584.63,-3584.63]mm Y=[6066.70,6066.70]mm Z=[7.92,7.92]mm 0: x=-3584.63mm dx=9.5250mm 1: x=-3589.39mm dx=4.7620mm 2: x=-3594.16mm dx=0.0000mm .... anode:5 face:1 X=[3584.63,3584.63]mm Y=[6066.70,6066.70]mm Z=[6940.01,6940.01]mm 0: x=3584.63mm dx=-9.5250mm 1: x=3589.39mm dx=-4.7620mm 2: x=3594.16mm dx=0.0000mm
Note, as can see, these two sources of information may not be consistent w.r.t. the inter-plane separation distance (4.71mm and 4.76mm, respectively). This mismatch will result in a relative shift in time between the planes for various waveform features (eg induction zero crossings and collection peak).
For the example above, likely candidates for "anode" X locations are:
x = -3594.16mm + 10cm
and
x = +3594.16mm - 10cm
Gen::Drifter::Drifter | ( | ) |
Definition at line 59 of file Drifter.cxx.
|
virtual |
Definition at line 74 of file Drifter.cxx.
|
virtual |
WireCell::IConfigurable interface.
Implements WireCell::IConfigurable.
Definition at line 93 of file Drifter.cxx.
|
virtual |
Optional, override to return a hard-coded default configuration.
Reimplemented from WireCell::IConfigurable.
Definition at line 78 of file Drifter.cxx.
void Gen::Drifter::flush | ( | output_queue & | outq | ) |
Definition at line 206 of file Drifter.cxx.
void Gen::Drifter::flush_ripe | ( | output_queue & | outq, |
double | now | ||
) |
Definition at line 219 of file Drifter.cxx.
bool Gen::Drifter::insert | ( | const input_pointer & | depo | ) |
Definition at line 125 of file Drifter.cxx.
|
virtual |
The calling signature:
Implements WireCell::IQueuedoutNode< IDepo, IDepo >.
Definition at line 252 of file Drifter.cxx.
double WireCell::Gen::Drifter::proper_time | ( | IDepo::pointer | depo | ) |
|
virtual |
Optional hook to be implemented in order to reset after an end of stream is encountered. Fixme: this should be removed.
Reimplemented from WireCell::INode.
Definition at line 119 of file Drifter.cxx.
|
inlinevirtual |
IDepo::pointer WireCell::Gen::Drifter::transport | ( | IDepo::pointer | depo | ) |
|
private |
|
private |
|
private |
|
private |