Public Member Functions | Private Member Functions | Private Attributes | List of all members
recob::ChargedSpacePointCollectionCreator Class Reference

Creates a collection of space points with associated charge. More...

#include <ChargedSpacePointCreator.h>

Public Member Functions

void put ()
 Puts all data products into the event, leaving the creator empty(). More...
 
Insertion and finish operations
void add (recob::SpacePoint const &spacePoint, recob::PointCharge const &charge)
 Inserts the specified space point and associated data into the collection. More...
 
void add (recob::SpacePoint &&spacePoint, recob::PointCharge &&charge)
 
void addAll (std::vector< recob::SpacePoint > &&spacePoints, std::vector< recob::PointCharge > &&charges)
 Inserts all the space points and associated data from the vectors into the collection. More...
 
void addAll (std::vector< recob::SpacePoint > const &spacePoints, std::vector< recob::PointCharge > const &charges)
 
Queries and operations
bool empty () const
 Returns whether there are currently no space points in the collection. More...
 
std::size_t size () const
 Returns the number of space points currently in the collection. More...
 
void clear ()
 Removes all data from the collection, making it empty(). More...
 
bool spent () const
 Returns whether put() has already been called. More...
 
bool canMakePointers () const
 Returns whether art pointer making is enabled. More...
 
Complimentary unchecked element access
recob::SpacePoint const & spacePoint (std::size_t i) const
 Returns the specified space point; undefined behaviour if not there. More...
 
recob::SpacePoint const & lastSpacePoint () const
 Returns the last inserted space point; undefined behaviour if empty(). More...
 
art::Ptr< recob::SpacePointspacePointPtr (std::size_t i) const
 Returns an art pointer to the specified space point (no check done!). More...
 
art::Ptr< recob::SpacePointlastSpacePointPtr () const
 Returns an art pointer to the last inserted space point (no check!). More...
 
recob::PointCharge const & charge (std::size_t i) const
 Returns the last inserted charge; undefined behaviour if empty(). More...
 
recob::PointCharge const & lastCharge () const
 Returns the last inserted charge; undefined behaviour if empty(). More...
 
art::Ptr< recob::PointChargechargePtr (std::size_t i) const
 Returns an art pointer to the specified charge (no check done!). More...
 
art::Ptr< recob::PointChargelastChargePtr () const
 Returns an art pointer to the inserted charge (no check!). More...
 

Static Public Member Functions

Static constructor interface

These methods take care of initialization that needs to take place on construction of the module.

static void produces (art::ProducesCollector &producesCollector, std::string const &instanceName={})
 Declares the data products being produced. More...
 

Private Member Functions

std::size_t lastIndex () const
 Returns the index of the last element (undefined if empty). More...
 

Private Attributes

art::EventfEvent
 The event this object is bound to. More...
 
std::string fInstanceName
 Instance name of all the data products. More...
 
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
 Space point data. More...
 
std::unique_ptr< art::PtrMaker< recob::SpacePoint > > fSpacePointPtrMaker
 Space point pointer maker. More...
 
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
 Charge data. More...
 
std::unique_ptr< art::PtrMaker< recob::PointCharge > > fChargePtrMaker
 Charge pointer maker. More...
 

Constructors

 ChargedSpacePointCollectionCreator (art::Event &event, std::string const &instanceName={})
 Constructor binding this object to a specific art event. More...
 
static ChargedSpacePointCollectionCreator forPtrs (art::Event &event, std::string const &instanceName={})
 Static function binding a new object to a specific art event. More...
 

Detailed Description

Creates a collection of space points with associated charge.

This class facilitates the creation of data products satisfying the requirements the proxy::ChargedSpacePoints proxy relies on. It will keep track of space points and reconstructed charge, and will put them into the event at the end.

Requirements of the data products

The requirements guaranteed by the output of this collection creator satisfy the proxy::ChargedSpacePoints proxy requirements. They are:

Usage

The usage pattern is made of two main parts:

declaration of the data products, at producer construction time

production of the data products, event by event

The second part happens within the context of the producer's produce() (or filter(), or equivalent) method, and it can be split into three stages:

construction of the collection creator, binding it to the current event

filling of the creator, usually in a loop

explicit transfer of the data products into the event

Declaration of the data products

In the same fashion as data products must be declared to art with a produces() call, the collection creator will have to perform an equivalent step. This is achieved by calling the staticproduces()` method from your module's constructor (see its documentation for an example).

Construction of a collection creator object

Collection creator objects are bound to a specific event and therefore can't be data members of the producer class. In the produces() method, we'll have:

void MyProducer::produce(art::Event& event) {
// ...
} // MyProducer::produce()

If art pointers to the data products are needed (e.g. to create associations), then the named-constructor idiom should be followed:

void MyProducer::produce(art::Event& event) {
// ...
} // MyProducer::produce()

In both cases, an instance name can be specified which will be used for all the managed data products (space points and reconstructed charge).

Populating the collections

The core of the usage of this object is feeding the objects to the data product collections. This is done using the add() member function. If the data objects already exist, they can be moved in instead of being copied. For example:

void MyProducer::produce(art::Event& event) {
auto hitAssns
= std::make_unique<art::Assns<recob::SpacePoint, recob::Hit>>();
// some processing
for (auto const& hitSet: hitSets) {
fSpacePointChargeAlgo->run(hitSet, spacePoint, charge);
// add the new space point and charge to the collection
spacePoints.add(std::move(spacePoint), std::move(charge));
// associate this space point with all the hits in the source set
auto const& spacePointPtr = spacePoints.lastSpacePointPtr();
for (art::Ptr<recob::Hit> const& hitPtr: hitSet)
hitAssns.addSingle(spacePointPtr, hitPtr);
} // for
// ...
} // MyProducer::produce()

If your algorithm is creating a subcollection of space points and charges which are in the same order, a shortcut to a loop of add() is addAll():

void MyProducer::produce(art::Event& event) {
// some processing
for (auto const& track: tracks) {
std::vector<recob::SpacePoint> trackSpacePoints;
std::vector<recob::PointCharge> trackCharges;
fSpacePointChargeAlgo->run(track, trackSpacePoints, trackCharges);
spacePoints.addAll
(std::move(trackSpacePoints), std::move(trackCharges));
} // for
// ...
} // MyProducer::produce()

Operations on the collection

While the collection creator object is designed to be just a single-use, single-pattern helper, there are a few operations that it allows:

Insertion of the data products into the event

Again as in the standard producer pattern, where Event::put() needs to be called to finally move the data into art, the collection creator will need to be told to do the same:

void MyProducer::produce(art::Event& event) {
auto hitAssns
= std::make_unique<art::Assns<recob::SpacePoint, recob::Hit>>();
// ... filling here ...
spacePoints.put();
event.put(std::move(hitAssns)); // other data products go the usual way
} // MyProducer::produce()

The instance name used in put() had been set at construction time.

After put() is called, the object has served its purpose and can't be used any further. In this state, spent() method will return true.

Definition at line 225 of file ChargedSpacePointCreator.h.

Constructor & Destructor Documentation

recob::ChargedSpacePointCollectionCreator::ChargedSpacePointCollectionCreator ( art::Event event,
std::string const &  instanceName = {} 
)

Constructor binding this object to a specific art event.

Parameters
eventthe art event to bind to
instanceName_(default: empty)_ instance name for all data products

When the object is constructed with this constructor, the creation of art pointers will not be enabled (canMakePointers() will return false).

Definition at line 26 of file ChargedSpacePointCreator.cpp.

27  : fEvent(event)
28  , fInstanceName(instanceName)
29  , fSpacePoints(std::make_unique<std::vector<recob::SpacePoint>>())
30  , fCharges(std::make_unique<std::vector<recob::PointCharge>>())
31  {}
art::Event & fEvent
The event this object is bound to.
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
std::string fInstanceName
Instance name of all the data products.
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
Charge data.

Member Function Documentation

void recob::ChargedSpacePointCollectionCreator::add ( recob::SpacePoint const &  spacePoint,
recob::PointCharge const &  charge 
)

Inserts the specified space point and associated data into the collection.

Parameters
spacePointthe space point to be copied into the collection
chargethe charge to be copied into the collection

The data is pushed as the new last element of the collection.

Data is copied or moved depending on which variant of this method is used.

Definition at line 51 of file ChargedSpacePointCreator.cpp.

52 {
53  // if these assertion fail, add() is being called after put()
54  assert(fSpacePoints);
55  assert(fCharges);
56 
57  fSpacePoints->push_back(spacePoint);
58  fCharges->push_back(charge);
59 
60  assert(fSpacePoints->size() == fCharges->size());
61 
62 } // recob::ChargedSpacePointCollectionCreator::add(copy)
recob::PointCharge const & charge(std::size_t i) const
Returns the last inserted charge; undefined behaviour if empty().
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
Charge data.
recob::SpacePoint const & spacePoint(std::size_t i) const
Returns the specified space point; undefined behaviour if not there.
void recob::ChargedSpacePointCollectionCreator::add ( recob::SpacePoint &&  spacePoint,
recob::PointCharge &&  charge 
)

Definition at line 67 of file ChargedSpacePointCreator.cpp.

68 {
69  // if these assertion fail, add() is being called after put()
70  assert(fSpacePoints);
71  assert(fCharges);
72 
73  fSpacePoints->push_back(std::move(spacePoint));
74  fCharges->push_back(std::move(charge));
75 
76  assert(fSpacePoints->size() == fCharges->size());
77 
78 } // recob::ChargedSpacePointCollectionCreator::add()
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
def move(depos, offset)
Definition: depos.py:107
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
Charge data.
void recob::ChargedSpacePointCollectionCreator::addAll ( std::vector< recob::SpacePoint > &&  spacePoints,
std::vector< recob::PointCharge > &&  charges 
)

Inserts all the space points and associated data from the vectors into the collection.

Parameters
spacePointsthe space point to be copied into the collection
chargesthe charges to be copied into the collection
Exceptions
cet::exception(category ChargedSpacePointCollectionCreator) if the input collections are inconsistent

The data is pushed as the new last element of the collection.

Data is copied or moved depending on which variant of this method is used.

No exception safety is offered here.

Definition at line 82 of file ChargedSpacePointCreator.cpp.

86 {
87  // if these assertion fail, addAll() is being called after put()
88  assert(fSpacePoints);
89  assert(fCharges);
90 
91  if (spacePoints.size() != charges.size()) {
92  throw cet::exception("ChargedSpacePointCollectionCreator")
93  << "Input collections of inconsistent size:"
94  << " " << spacePoints.size() << " (space points)"
95  << "and " << charges.size() << " (charges)"
96  << "\n";
97  }
98  if (empty()) {
99  *fSpacePoints = std::move(spacePoints);
100  *fCharges = std::move(charges);
101  }
102  else {
103  fSpacePoints->reserve(fSpacePoints->size() + spacePoints.size());
104  for (auto&& obj: spacePoints) fSpacePoints->push_back(std::move(obj));
105  spacePoints.clear();
106 
107  fCharges->reserve(fCharges->size() + charges.size());
108  for (auto&& obj: charges) fCharges->push_back(std::move(obj));
109  charges.clear();
110  }
111 
112  assert(fSpacePoints->size() == fCharges->size());
113 
114 } // recob::ChargedSpacePointCollectionCreator::addAll()
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
def move(depos, offset)
Definition: depos.py:107
bool empty() const
Returns whether there are currently no space points in the collection.
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
Charge data.
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
void recob::ChargedSpacePointCollectionCreator::addAll ( std::vector< recob::SpacePoint > const &  spacePoints,
std::vector< recob::PointCharge > const &  charges 
)

Definition at line 118 of file ChargedSpacePointCreator.cpp.

122 {
123  // if these assertion fail, addAll() is being called after put()
124  assert(fSpacePoints);
125  assert(fCharges);
126 
127 
128  if (spacePoints.size() != charges.size()) {
129  throw cet::exception("ChargedSpacePointCollectionCreator")
130  << "Input collections of inconsistent size:"
131  << " " << spacePoints.size() << " (space points)"
132  << "and " << charges.size() << " (charges)"
133  << "\n";
134  }
135  fSpacePoints->reserve(fSpacePoints->size() + spacePoints.size());
136  std::copy
137  (spacePoints.begin(), spacePoints.end(), std::back_inserter(*fSpacePoints));
138 
139  fCharges->reserve(fCharges->size() + charges.size());
140  std::copy(charges.begin(), charges.end(), std::back_inserter(*fCharges));
141 
142  assert(fSpacePoints->size() == fCharges->size());
143 
144 } // recob::ChargedSpacePointCollectionCreator::addAll()
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
Charge data.
T copy(T const &v)
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
bool recob::ChargedSpacePointCollectionCreator::canMakePointers ( ) const
inline

Returns whether art pointer making is enabled.

Definition at line 343 of file ChargedSpacePointCreator.h.

343 { return bool(fSpacePointPtrMaker); }
std::unique_ptr< art::PtrMaker< recob::SpacePoint > > fSpacePointPtrMaker
Space point pointer maker.
int bool
Definition: qglobal.h:345
recob::PointCharge const& recob::ChargedSpacePointCollectionCreator::charge ( std::size_t  i) const
inline

Returns the last inserted charge; undefined behaviour if empty().

Definition at line 370 of file ChargedSpacePointCreator.h.

371  { return fCharges->operator[](i); }
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
Charge data.
art::Ptr< recob::PointCharge > recob::ChargedSpacePointCollectionCreator::chargePtr ( std::size_t  i) const

Returns an art pointer to the specified charge (no check done!).

Definition at line 183 of file ChargedSpacePointCreator.cpp.

184 {
185  return fChargePtrMaker? (*fChargePtrMaker)(i): art::Ptr<recob::PointCharge>{};
186 } // recob::ChargedSpacePointCollectionCreator::chargePtr()
Definition: fwd.h:31
std::unique_ptr< art::PtrMaker< recob::PointCharge > > fChargePtrMaker
Charge pointer maker.
void recob::ChargedSpacePointCollectionCreator::clear ( )

Removes all data from the collection, making it empty().

Definition at line 160 of file ChargedSpacePointCreator.cpp.

160  {
161 
162  if (fSpacePoints) fSpacePoints->clear();
163  if (fCharges) fCharges->clear();
164 
165  assert(empty());
166 
167 } // recob::ChargedSpacePointCollectionCreator::clear()
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
bool empty() const
Returns whether there are currently no space points in the collection.
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
Charge data.
bool recob::ChargedSpacePointCollectionCreator::empty ( ) const
inline

Returns whether there are currently no space points in the collection.

Definition at line 331 of file ChargedSpacePointCreator.h.

331 { return spent() || fSpacePoints->empty(); }
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
bool spent() const
Returns whether put() has already been called.
recob::ChargedSpacePointCollectionCreator recob::ChargedSpacePointCollectionCreator::forPtrs ( art::Event event,
std::string const &  instanceName = {} 
)
static

Static function binding a new object to a specific art event.

Parameters
eventthe art event to bind to
instanceName_(default: empty)_ instance name for all data products

This static function follows the named-constructor idiom, enabling the creation of art pointers.

Definition at line 37 of file ChargedSpacePointCreator.cpp.

39 {
40  ChargedSpacePointCollectionCreator creator(event, instanceName);
41  creator.fSpacePointPtrMaker = std::make_unique<art::PtrMaker<recob::SpacePoint>>
42  (event, instanceName);
43  creator.fChargePtrMaker = std::make_unique<art::PtrMaker<recob::PointCharge>>
44  (event, instanceName);
45  return creator;
46 } // ChargedSpacePointCollectionCreator(ProducesCollector)
ChargedSpacePointCollectionCreator(art::Event &event, std::string const &instanceName={})
Constructor binding this object to a specific art event.
recob::PointCharge const& recob::ChargedSpacePointCollectionCreator::lastCharge ( ) const
inline

Returns the last inserted charge; undefined behaviour if empty().

Definition at line 374 of file ChargedSpacePointCreator.h.

375  { return charge(lastIndex()); }
recob::PointCharge const & charge(std::size_t i) const
Returns the last inserted charge; undefined behaviour if empty().
std::size_t lastIndex() const
Returns the index of the last element (undefined if empty).
art::Ptr<recob::PointCharge> recob::ChargedSpacePointCollectionCreator::lastChargePtr ( ) const
inline

Returns an art pointer to the inserted charge (no check!).

Definition at line 381 of file ChargedSpacePointCreator.h.

382  { return chargePtr(lastIndex()); }
std::size_t lastIndex() const
Returns the index of the last element (undefined if empty).
art::Ptr< recob::PointCharge > chargePtr(std::size_t i) const
Returns an art pointer to the specified charge (no check done!).
std::size_t recob::ChargedSpacePointCollectionCreator::lastIndex ( ) const
inlineprivate

Returns the index of the last element (undefined if empty).

Definition at line 434 of file ChargedSpacePointCreator.h.

434 { return size() - 1U; }
std::size_t size() const
Returns the number of space points currently in the collection.
recob::SpacePoint const& recob::ChargedSpacePointCollectionCreator::lastSpacePoint ( ) const
inline

Returns the last inserted space point; undefined behaviour if empty().

Definition at line 358 of file ChargedSpacePointCreator.h.

359  { return spacePoint(lastIndex()); }
std::size_t lastIndex() const
Returns the index of the last element (undefined if empty).
recob::SpacePoint const & spacePoint(std::size_t i) const
Returns the specified space point; undefined behaviour if not there.
art::Ptr<recob::SpacePoint> recob::ChargedSpacePointCollectionCreator::lastSpacePointPtr ( ) const
inline

Returns an art pointer to the last inserted space point (no check!).

Definition at line 365 of file ChargedSpacePointCreator.h.

366  { return spacePointPtr(lastIndex()); }
art::Ptr< recob::SpacePoint > spacePointPtr(std::size_t i) const
Returns an art pointer to the specified space point (no check done!).
std::size_t lastIndex() const
Returns the index of the last element (undefined if empty).
void recob::ChargedSpacePointCollectionCreator::produces ( art::ProducesCollector producesCollector,
std::string const &  instanceName = {} 
)
static

Declares the data products being produced.

Parameters
producerthe module producing the data products
instanceName_(default: empty)_ name of instance of all data products

Call this method in the constructor of producer, e.g.:

MyProducer::MyProducer(Parameters const& config) {
(producesCollector(), config().instanceName());
} // MyProducer::MyProducer()

Definition at line 191 of file ChargedSpacePointCreator.cpp.

192 {
193 
194  producesCollector.produces<std::vector<recob::SpacePoint>>(instanceName);
195  producesCollector.produces<std::vector<recob::PointCharge>>(instanceName);
196 
197 } // recob::ChargedSpacePointCollectionCreator::produces()
void produces(std::string const &instanceName={}, Persistable const persistable=Persistable::Yes)
void recob::ChargedSpacePointCollectionCreator::put ( )

Puts all data products into the event, leaving the creator empty().

The accumulated data is moved into the event.

This is the last valid action of the object. After this, only empty(), spent() and the art pointer makers (if enabled) are guaranteed to work.

Definition at line 149 of file ChargedSpacePointCreator.cpp.

149  {
150 
153 
154  assert(spent());
155  assert(empty());
156 } // recob::ChargedSpacePointCollectionCreator::put()
art::Event & fEvent
The event this object is bound to.
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
std::string fInstanceName
Instance name of all the data products.
bool spent() const
Returns whether put() has already been called.
def move(depos, offset)
Definition: depos.py:107
ProductID put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
Definition: DataViewImpl.h:686
bool empty() const
Returns whether there are currently no space points in the collection.
std::unique_ptr< std::vector< recob::PointCharge > > fCharges
Charge data.
std::size_t recob::ChargedSpacePointCollectionCreator::size ( void  ) const
inline

Returns the number of space points currently in the collection.

Definition at line 334 of file ChargedSpacePointCreator.h.

334 { return spent()? 0U: fSpacePoints->size(); }
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
bool spent() const
Returns whether put() has already been called.
recob::SpacePoint const& recob::ChargedSpacePointCollectionCreator::spacePoint ( std::size_t  i) const
inline

Returns the specified space point; undefined behaviour if not there.

Definition at line 354 of file ChargedSpacePointCreator.h.

355  { return fSpacePoints->operator[](i); }
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.
art::Ptr< recob::SpacePoint > recob::ChargedSpacePointCollectionCreator::spacePointPtr ( std::size_t  i) const

Returns an art pointer to the specified space point (no check done!).

Definition at line 173 of file ChargedSpacePointCreator.cpp.

174 {
175  return fSpacePointPtrMaker
176  ? (*fSpacePointPtrMaker)(i): art::Ptr<recob::SpacePoint>{};
177 } // recob::ChargedSpacePointCollectionCreator::spacePointPtr()
std::unique_ptr< art::PtrMaker< recob::SpacePoint > > fSpacePointPtrMaker
Space point pointer maker.
bool recob::ChargedSpacePointCollectionCreator::spent ( ) const
inline

Returns whether put() has already been called.

Definition at line 340 of file ChargedSpacePointCreator.h.

340 { return !fSpacePoints; }
std::unique_ptr< std::vector< recob::SpacePoint > > fSpacePoints
Space point data.

Member Data Documentation

std::unique_ptr<art::PtrMaker<recob::PointCharge> > recob::ChargedSpacePointCollectionCreator::fChargePtrMaker
private

Charge pointer maker.

Definition at line 431 of file ChargedSpacePointCreator.h.

std::unique_ptr<std::vector<recob::PointCharge> > recob::ChargedSpacePointCollectionCreator::fCharges
private

Charge data.

Definition at line 429 of file ChargedSpacePointCreator.h.

art::Event& recob::ChargedSpacePointCollectionCreator::fEvent
private

The event this object is bound to.

Definition at line 420 of file ChargedSpacePointCreator.h.

std::string recob::ChargedSpacePointCollectionCreator::fInstanceName
private

Instance name of all the data products.

Definition at line 422 of file ChargedSpacePointCreator.h.

std::unique_ptr<art::PtrMaker<recob::SpacePoint> > recob::ChargedSpacePointCollectionCreator::fSpacePointPtrMaker
private

Space point pointer maker.

Definition at line 427 of file ChargedSpacePointCreator.h.

std::unique_ptr<std::vector<recob::SpacePoint> > recob::ChargedSpacePointCollectionCreator::fSpacePoints
private

Space point data.

Definition at line 425 of file ChargedSpacePointCreator.h.


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