WireCellToolkit
Wire Cell Simulation, Signal Process and Reconstruction Toolki for Liquid Argon Detectors
WireCell::Gen::Drifter Class Reference

#include <Drifter.h>

Inheritance diagram for WireCell::Gen::Drifter:
Collaboration diagram for WireCell::Gen::Drifter:

Public Member Functions

 Drifter ()
 
virtual ~Drifter ()
 
virtual void reset ()
 
virtual bool operator() (const input_pointer &depo, output_queue &outq)
 
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 bool operator() (const input_pointer &in, output_queue &outq)=0
 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 ()
 

Additional Inherited Members

- Public Types inherited from WireCell::IDrifter
typedef std::shared_ptr< IDrifterpointer
 
- Public Types inherited from WireCell::IQueuedoutNode< IDepo, IDepo >
typedef std::shared_ptr< IQueuedoutNodeBasepointer
 
typedef IDepo input_type
 
typedef IDepo output_type
 
typedef std::shared_ptr< const IDepoinput_pointer
 
typedef std::shared_ptr< const IDepooutput_pointer
 
typedef std::deque< output_pointeroutput_queue
 
- Public Types inherited from WireCell::IQueuedoutNodeBase
typedef std::shared_ptr< IQueuedoutNodeBasepointer
 
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< INodepointer
 Access subclass facet by pointer. More...
 
typedef std::vector< pointervector
 Vector of shared pointers. More...
 
- Public Types inherited from WireCell::Interface
typedef std::shared_ptr< Interfacepointer
 
- Public Types inherited from WireCell::IComponent< IConfigurable >
typedef std::shared_ptr< IConfigurablepointer
 Access subclass facet by pointer. More...
 
typedef std::vector< pointervector
 Vector of shared pointers. More...
 

Detailed Description

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.

  • cathode :: a plane which bounds the maximum possible drift.
  • anode :: a plane which bounds the minimum possible drift.
  • response :: a plane to which all depositions are drifted.

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

Definition at line 102 of file Drifter.h.

Constructor & Destructor Documentation

◆ Drifter()

Gen::Drifter::Drifter ( )

Definition at line 59 of file Drifter.cxx.

◆ ~Drifter()

Gen::Drifter::~Drifter ( )
virtual

Definition at line 74 of file Drifter.cxx.

Member Function Documentation

◆ configure()

void Gen::Drifter::configure ( const WireCell::Configuration config)
virtual

WireCell::IConfigurable interface.

Implements WireCell::IConfigurable.

Definition at line 93 of file Drifter.cxx.

Here is the call graph for this function:

◆ default_configuration()

WireCell::Configuration Gen::Drifter::default_configuration ( ) const
virtual

Optional, override to return a hard-coded default configuration.

Reimplemented from WireCell::IConfigurable.

Definition at line 78 of file Drifter.cxx.

◆ flush()

void Gen::Drifter::flush ( output_queue outq)

Definition at line 206 of file Drifter.cxx.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ flush_ripe()

void Gen::Drifter::flush_ripe ( output_queue outq,
double  now 
)

Definition at line 219 of file Drifter.cxx.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ insert()

bool Gen::Drifter::insert ( const input_pointer depo)

Definition at line 125 of file Drifter.cxx.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator()()

bool Gen::Drifter::operator() ( const input_pointer depo,
output_queue outq 
)
virtual

Definition at line 252 of file Drifter.cxx.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ proper_time()

double WireCell::Gen::Drifter::proper_time ( IDepo::pointer  depo)

◆ reset()

void Gen::Drifter::reset ( )
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.

Here is the caller graph for this function:

◆ set_lifetime()

virtual void WireCell::Gen::Drifter::set_lifetime ( double  lifetime_to_set)
inlinevirtual

Definition at line 129 of file Drifter.h.

Here is the call graph for this function:

◆ transport()

IDepo::pointer WireCell::Gen::Drifter::transport ( IDepo::pointer  depo)

The documentation for this class was generated from the following files: