Software for Liquid Argon time projection chambers
Data product: a class representing data, that is stored in a ROOT tree
Q. Are dictionary libraries independent of art etc.?
A. Currently they are not.
It might be possible to fix that for some of the products which do not explicitly require art
.
#ifndef __GCCXML__
blocks)Is CET library (cetlib) allowed in the implementation too7?
cet::exception
cet
search paths anywayThe only part positively needed is an exception that can be recognized by the frameworks (it could be derived from std::exception
).
Data products can contain data members:
They must not contain:
std::array
)The data members will be /private/, accessed through the class interface11.
The interface should offer a read-only access12.
The object will not operate on its data, leaving the task to additional layers and algorithms13.
Suggestions:
3-vectors (position…) | TVector3 (unless there are data size issues) or double[3] ? (both are currently used) |
3-vectors (momentum…) | TVector3 or float[3] (as above, except that we don’t have, nor need, more than 6 digits precision) |
4-vectors | TLorentzVector (unless there are data size issues) |
error/correlation matrices | TMatrixTSym<> or float[6] ? (both TMatrixD and double[6] are currently used) |
wire/time pair | short int[2] , float[2] |
… |
Each data product represents a physics quantity or some concept.
First step: identify and define those concepts for the existing and needed objects.
In the standard MicroBooNE simulation + reconstruction chain, 34 classes from LArSoft (lardata
) are used as data products, plus 4 more for simulation from nutools
.
Let’s start from the largest chunk of correlate objects: reconstruction (base)
recob
namespacesim
namespace) and raw data (raw
namespace)This encompasses 13 LArSoft classes:
raw::RawDigit
recob::Cluster
recob::EndPoint2D
recob::Hit
recob::PFParticle
recob::Shower
recob::SpacePoint
recob::Track
recob::Vertex
recob::Wire
anab::Calorimetry
anab::CosmicTag
anab::ParticleID
“(version with modules creating each associations)”:recoblock_assns.svg
raw::RawDigit
The sequence of (uncalibrated?) ADC counts measured on one channel in the full time window.
recob::Wire
The signal deposited on a single channel as function of data acquisition time (TDC).
The signal may have been be zero-suppressed, filtered from noise and deconvoluted from electronics effects.
raw::RawDigit
object on its channelart::Ptr
from the data products14recob::Wire
and raw::RawDigit
15recob::Wire
1617recob::Hit
The observed charge from a travelling particle that drifted to a single wire .
A hit describes the charge profile in time using a shape hypothesis .
Its position information is two-dimensional: wire location and time.
It includes:
geo::WireID
)art::Ptr
from the data products18recob::Hit
and recob::Wire
19recob::Hit
2021fHitSignal
member private, add constructors to initialize it22fHitSignal
is never filled in LArSoft code… should it be? or should it be removed?fView
and fSignalType
are felt by MicroBooNE useless23recob::Cluster
A sequence of hits showing geometrical correlation.
Its position information is two-dimensional.
It includes:
geo::PlaneID
, wire direction)float
or a float[2]
double
items with float
recob::EndPoint2D
Two-dimensional coordinate on a plane
recob::Track
The observed information from a single physical particle with well-defined trajectory.
Q. All the information? or just trajectory? or…?
recob::Shower
The observed information from a single physical particle evolving in a shower.
recob::SpacePoint
A geometrical point in the detector.
recob::Vertex
A point in the detector origin of particles
anab::Calorimetry
Calorimetric information of a particle.
anab::CosmicTag
Cosmic-ray-like attributes of a particle.
anab::ParticleID
Hypothesis on the nature of a particle.
recob::PFParticle
The evolution of a particle in the event (particle flow).
pandora
From discussion on September 15, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 6, 2014 . ↩
From discussion on October 13, 2014 . ↩
From discussion on October 13, 2014 . ↩
From discussion on October 13, 2014 . ↩
After discussion at [^24], two proposals have been evaluated: adding the channel ID as a new data member, or adding it in the geo::WireID
structure. No compelling reason was identified to prefer either. The decision was in the end taken from the idea of having geo::WireID
reflect a strictly geometric concept, as opposed to integrate a data acquisition concept. ↩
From discussion on October 13, 2014 . ↩
From discussion on October 13, 2014 . ↩
From discussion on October 13, 2014 . ↩
After discussion at [^25], two proposals have been evaluated: adding the channel ID as a new data member, or adding it in the geo::WireID
structure. No compelling reason was identified to prefer either. The decision was in the end taken from the idea of having geo::WireID
reflect a strictly geometric concept, as opposed to integrate a data acquisition concept. ↩
From discussion on MicroBooNE Analysis Tools meeting, October 16, 2014, and following private e-mail exchange with Brian Rebel. ↩
From discussion on MicroBooNE Analysis Tools meeting, October 16, 2014, and following private e-mail exchange with Brian Rebel. ↩