DataProductsArchitectureActionItems - LArSoft/larsoft_docs GitHub Wiki
{{toc}}
(from lardata v03_04_04)
class RawDigit {
public:
RawDigit(); // Default constructor
std::vector<short> fADC;
private:
uint32_t fChannel; ///< channel in the readout
unsigned short fSamples; ///< number of ticks of the clock
double fPedestal; ///< pedestal for this channel
double fSigma; ///< sigma of the pedestal counts for this channel
raw::Compress_t fCompression; ///< compression scheme used for the ADC vector
public:
RawDigit(uint32_t channel,
unsigned short samples,
const std::vector<short>& adclist,
raw::Compress_t compression=raw::kNone);
RawDigit(uint32_t channel,
const std::vector<short>& adclist,
raw::Compress_t compression=raw::kNone);
// Set Methods
void SetPedestal(double ped);
// Get Methods
unsigned int NADC() const;
short ADC(int i) const;
uint32_t Channel() const;
unsigned short Samples() const;
double GetPedestal() const;
double GetSigma() const;
raw::Compress_t Compression() const;
};
| Target | Action | Action item | Status | |
|---|---|---|---|---|
fPedestal |
removal | get approval | ArgoNeuT approval pending, ongoing discussion | |
fADC |
move to private | get approval | approved1 | |
| move to private | done | |||
| provide interface access | done (ACDs()) |
|||
| verify constructors | done | |||
| user code | LArSoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
fFlags |
add saturation flag | get approval | rejected2 | |
| design the implementation | done | Currently implemented as std::bitset<16>, might be not optimal in gcc STL implementation (seems based on unsigned long, 32 bits) |
||
| implementation | done | |||
| update constructors | done | |||
| user code: constructors | LArSoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: initialization | LArSoft, uboonecode, lbnecode, t962offline, lar1ndcode |
saturation flag is not set ever yet | ||
| documentation | add member documentation | for class | done | |
| for constructor I | done | |||
| for constructor II | constructor removed | |||
for NADC() |
done | |||
for ADC() |
done | |||
for Channel() |
done | |||
for Samples() |
done | |||
for GetPedestal() |
done (pending removal) | |||
for GetSigma() |
done (pending removal) | |||
for Compression() |
done | |||
| for flag interface | done | |||
for new fADC accessor |
done | |||
| documentation | complete class documentation | in progress |
| Test type | Ran on version | Outcome |
|---|---|---|
| standard LArSoft test suite | v03_06_00 |
success |
v03_08_00 |
TODO |
(from lardata v03_04_04)
class Wire {
public:
///< a region of interest is a pair (TDC offset, readings)
typedef lar::sparse_vector<float> RegionsOfInterest_t;
Wire(); // Default constructor
~Wire();
private:
RegionsOfInterest_t fSignalROI;
art::Ptr<raw::RawDigit> fRawDigit; ///< vector to index of raw digit for this wire
geo::View_t fView; ///< view corresponding to the plane of this wire
geo::SigType_t fSignalType; ///< signal type of the plane for this wire
unsigned int fMaxSamples; ///< max number of ADC samples possible on the wire
// partial constructor, used only as common part by the other constructors
Wire(art::Ptr<raw::RawDigit> &rawdigit);
public:
// ROI constructor
Wire(const RegionsOfInterest_t& sigROIlist,
art::Ptr<raw::RawDigit> &rawdigit);
Wire(RegionsOfInterest_t&& sigROIlist,
art::Ptr<raw::RawDigit> &rawdigit);
// Get Methods
// zero-padded full length vector filled with ROIs
std::vector<float> Signal() const;
const RegionsOfInterest_t& SignalROI() const;
size_t NSignal() const;
art::Ptr<raw::RawDigit> RawDigit() const;
geo::View_t View() const;
geo::SigType_t SignalType() const;
uint32_t Channel() const;
};
| Target | Action | Action item | Status | |
|---|---|---|---|---|
fRawDigit |
removal | approval | approved1 | |
| remove data member | done | |||
| interface removal | done | |||
| constructor update | done | |||
| user code update: removal | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: association | LArSoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
fChannel |
adding a channel ID | approval | approved1 | |
| add data member | done | |||
| update accessor | done | |||
| constructor update | done | |||
| documentation | done | |||
fSignalType |
removal | approval | approved1 | |
| remove data member | done | |||
| remove accessor | done | |||
| alternative implementation | optional | |||
| constructor update | done | |||
| user code: construction | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
WireCreator |
helper class for Wire construction | coding | done | |
| documentation | done | |||
| user code: construction | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| documentation | complete class documentation | in progress |
| Test type | Ran on version | Outcome |
|---|---|---|
| standard LArSoft test suite | v03_06_00 |
success |
v03_08_00 |
TODO |
(from lardata v03_04_04)
/// hits are 2D representations of charge deposited in the tdc/wire plane
/// hits are assumed to be made from deconvoluted, unipolar signals
class Hit {
public:
Hit(); // Default constructor
std::vector<double> fHitSignal; ///< vector of ADC values within the hit window
private:
double fStartTime; ///< initial tdc tick for hit
double fSigmaStartTime; ///< uncertainty on initial tick
double fEndTime; ///< final tdc tick for hit
double fSigmaEndTime; ///< uncertainty on final tick
double fPeakTime; ///< tdc for the peak charge deposition
double fSigmaPeakTime; ///< uncertainty for tdc of the peak
double fCharge; ///< total charge deposited for hit
double fMaxCharge; ///< maximum ADC value in hit window
double fSigmaCharge; ///< uncertainty in total charge deposited
double fSigmaMaxCharge; ///< maximum ADC value in hit window
int fMultiplicity; ///< how many hits could this one be shared with
double fGoodnessOfFit; ///< how well do we believe we know this hit?
art::Ptr<recob::Wire> fWire; ///< index of Wire object this Hit was created on
art::Ptr<raw::RawDigit> fRawDigit; ///< index of RawDigit object this Hit was created on
geo::View_t fView; ///< view for the plane of the hit
geo::SigType_t fSignalType; ///< signal type for the plane of the hit
geo::WireID fWireID; ///< WireID for the hit (Cryostat, TPC, Plane, Wire)
public:
Hit(art::Ptr<recob::Wire> &wire,
geo::WireID wid,
double startTime, double sigmaStartTime,
double endTime, double sigmaEndTime,
double peakTime, double sigmaPeakTime,
double totcharge, double sigmaTotCharge,
double maxcharge, double sigmaMaxCharge,
int multiplicity,
double goodnessOfFit);
Hit(art::Ptr<raw::RawDigit> rawdigit,
geo::View_t view,
geo::SigType_t signaltype,
geo::WireID wid,
double startTime, double sigmaStartTime,
double endTime, double sigmaEndTime,
double peakTime, double sigmaPeakTime,
double totcharge, double sigmaTotCharge,
double maxcharge, double sigmaMaxCharge,
int multiplicity,
double goodnessOfFit);
// Get Methods
double StartTime() const;
double EndTime() const;
double PeakTime() const;
double SigmaStartTime() const;
double SigmaEndTime() const;
double SigmaPeakTime() const;
int Multiplicity() const;
uint32_t Channel() const;
double Charge(bool max=false) const;
double SigmaCharge(bool max=false) const;
double GoodnessOfFit() const;
geo::SigType_t SignalType() const;
geo::View_t View() const;
art::Ptr<recob::Wire> Wire() const;
art::Ptr<raw::RawDigit> RawDigit() const;
geo::WireID WireID() const;
friend std::ostream& operator << (std::ostream & o, const Hit & a);
friend bool operator < (const Hit & a, const Hit & b);
};
| Target | Action | Action item | Status | Comment |
|---|---|---|---|---|
fRawDigit |
removal | approval | approved1 | |
| remove data member | done | |||
| interface removal | done | |||
| constructor update | done | |||
| user code update: removal | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: association | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
fWire |
removal | approval | approved1 | |
| remove data member | done | |||
| interface removal | done | |||
| constructor update | done | |||
| user code update: removal | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: association | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
fChannel |
adding a channel ID | approval | approved1 | |
| add data member | done | |||
| update accessor | done | |||
| constructor update | done | |||
| documentation | done | |||
fHitSignal |
removal | approval | approved4 | |
| remove member | done | |||
| remove accessor | done | |||
| update constructors | done | |||
| user code: construction | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: use | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
Charge() |
replace with PeakAmplitude() (Charge(true)), add IntegratedADC() (Charge([false])) and SummedADC() and uncertainties |
approval | approved1 | |
| add data members | done | |||
| add data accessors | done | |||
| update constructors | done | |||
| user code: construction | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: update use | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: use of new members | optional | |||
| document | done | |||
fMaxCharge |
removal | approval | approved1 | currently inaccessible |
| remove data member | done | |||
| hit width | add a RMS field |
approval | approved1 | |
| add data member | done (fRMS) |
|||
| add data accessor | done (RMS()) |
|||
| alternative implementation | optional | |||
| update constructors | done | |||
| user code: construction | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: update use | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: use of new members | optional | |||
| document | done | |||
| start and end times | remove StartTime(), EndTime(), SigmaStartTime(), SigmaEndTime() and the data members they access |
approval | approved1 | these are defined as peak ± σ |
| remove data members | done | |||
| remove accessors | done | |||
| constructor update | done | |||
| document | done | |||
| user code update: construction | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| start and end ticks | add StartTick() and EndTick() |
approval | approved1 | defined as the time window of the hit |
| add data members | done | |||
| add accessors | done | |||
| constructor update | done | |||
| document | done | |||
| user code update: construction | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: renaming | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
LocalIndex() |
add a member fLocalIndex describing the index of this hit among the Multiplicity() ones reconstructed between StartTick() and EndTick() |
approval | approved1 | |
| add data member | done | |||
| add data accessor | done | |||
| update constructors | done | |||
| user code: construction | larcore, lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: use of new members | optional | |||
| document | done | |||
| documentation | complete class documentation | done | inline, Doxygen format |
| Test type | Ran on version | Outcome |
|---|---|---|
| standard LArSoft test suite | v03_06_00 |
success |
v03_08_00 |
TODO |
| Old construct | New construct | Comments |
|---|---|---|
Hit::Charge() |
Hit::Integral() |
|
Hit::Charge(false) |
Hit::Integral() |
|
Hit::Charge(true) |
Hit::PeakAmplitude() |
|
Hit::StartTime() |
Hit::PeakTimePlusRMS(-1.) |
this is the old definition in GausHitFinder module |
Hit::StopTime() |
Hit::PeakTimePlusRMS(+1.) |
|
Hit::Wire() |
defunct; look up through associations | |
Hit::RawDigit() |
defunct; look up through associations | |
#include "RecoBase/Hit.h" |
#include "RawData/raw.h" |
if using raw::RawDigit or raw::Uncompress(); these are not included by Hit.h any more |
#include "RawData/RawDigit.h" |
Although it's kind of doomed to be a χ², this should be officially blessed by the authors, and also it must be decided whether it is χ² or reduced χ² (χ² / NDF), as it has been implemented so far.
HarrisVertexFinder module (larreco/VertexFinder/HarrisVertexFinder_module.cc) and EndPoint2D algorithm (larreco/RecoAlg/EndPoint2D.cxx)
It uses lines like:
Gaussian((int)(j-((hit[i]->EndTick()-hit[i]->StartTick())/2.)+.5),0,hit[i]->EndTick()-hit[i]->StartTick())
(of course it was
StartTime()/EndTime()). The width of the gaussian is the time window of the hit;this suggests that the interpretation of that time window was half σ of the hit, or something like that.
I have currently implemented something that makes vaguely sense, but it has to be checked.
The HitInfo and WireROIInfo data structures need to be checked.
Contact person: Wesley Ketchum
Hit makers: GausHitFinder (larreco/HitFinder/GausHitFinder_module.cc), FFTHitFinder (larreco/HitFinder/FFTHitFinder_module.cc), RFFHitFinder (larreco/HitFinder/RFFHitFinder_module.cc), APAHitFinder (larreco/HitFinder/APAHitFinder_module.cc), HitCheater (larreco/HitFinder/HitCheater_module.cc), TTHitFinder (larreco/HitFinder/TTHitFinder_module.cc), ClusterCrawler (larreco/ClusterFinder/ClusterCrawler_module.cc), CalGausHFLBNE10kt (lbnecode/CalData/CalGausHFLBNE10kt_module.cc), maybe more
The algorithms need to define fStartTick, fEndTick and fSummedADC.
Many need also fLocalIndex and to check the order of the local hits in the collection
(the local hits are prescribed to be consecutive entries sorted by peak time).
Should check that the new associations make sense and are correctly initialized.
Hit creation modules and algorithms:
| Module name | Source file | Contact person |
|---|---|---|
ClusterCrawler |
larreco/ClusterFinder/ClusterCrawler_module.cc |
Bruce Baller |
APAHitFinder |
larreco/HitFinder/APAHitFinder_module.cc |
Tyler Alion (?) |
DisambigCheater |
larreco/HitFinder/DisambigCheater_module.cc |
Tyler Alion (?) |
FFTHitFinder |
larreco/HitFinder/FFTHitFinder_module.cc |
/candidate for removal?/ |
GausHitFinder |
larreco/HitFinder/GausHitFinder_module.cc |
Jonathan Asaadi |
HitCheater |
larreco/HitFinder/HitCheater_module.cc |
Brian Rebel |
RFFHitFinder |
larreco/HitFinder/RFFHitFinder_module.cc |
Wesley Ketchum |
TTHitFinder |
larreco/HitFinder/TTHitFinder_module.cc |
Wesley Ketchum |
CCHitFinderAlg |
@larreco/RecoAlg/CCHitFinderAlg.cxx | Bruce Baller |
DisambigAlg |
@larreco/RecoAlg/DisambigAlg.cxx | Tyler Alion (?) |
CalGausHFLBNE35t |
lbnecode/lbne/CalData/CalGausHFLBNE10kt_module.cc |
Jonathan Insler (?) |
CalGausHFLBNE10kt |
lbnecode/lbne/CalData/CalGausHFLBNE35t_module.cc |
Jonathan Insler (?) |
HitFinder35t |
lbnecode/lbne/HitFinderLBNE/HitFinder35t_module.cc |
Jonathan Insler, Tylet Alion (?) |
DeconvGausHFLBNE10kt |
lbnecode/lbne/CalData/DeconvGausHFLBNE10kt_module.cc |
Jonathan Insler (?) |
DeconvGausHFLBNE35t |
lbnecode/lbne/CalData/DeconvGausHFLBNE35t_module.cc |
Jonathan Insler (?) |
Files affected by hit changes, that need checking:
| Source file | Contact person | |
|---|---|---|
ClusterCheater |
larreco/ClusterFinder/ClusterCheater_module.cc |
Jonathan Asaadi |
ClusterCrawlerShower |
larreco/ClusterFinder/ClusterCrawlerShower_module.cc |
Bruce Baller |
KingaCluster |
larreco/ClusterFinder/KingaCluster_module.cc |
/candidate for removal?/ |
BezierTrackerAlgorithm |
larreco/RecoAlg/BezierTrackerAlgorithm.cxx |
Wesley Ketchum |
ClusterMatchAlg |
larreco/RecoAlg/ClusterMatchAlg.cxx |
Kazuhiro Terao |
DBScanAlg |
larreco/RecoAlg/DBScanAlg.cxx |
Tingjun Yang |
EndPointAlg |
larreco/RecoAlg/EndPointAlg.cxx |
Brian Rebel |
HoughBaseAlg |
larreco/RecoAlg/HoughBaseAlg.cxx |
Ben Carls |
SeedFinderAlgorithm |
larreco/RecoAlg/SeedFinderAlgorithm.cxx |
Herbert Greenlee |
fuzzyClusterAlg |
larreco/RecoAlg/fuzzyClusterAlg.cxx |
Ben Carls |
HarrisVertexFinder |
larreco/VertexFinder/HarrisVertexFinder_module.cc |
Josh Spitz |
VertexMatch |
larreco/VertexFinder/VertexMatch_module.cc |
Wesley Ketchum |
(from lardata v03_04_04)
class Cluster {
public:
Cluster(); ///Default constructor
private:
double fTotalCharge; ///< total charge in cluster
double fdTdW; ///< slope of cluster in tdc vs wire
double fdQdW; ///< slope of cluster in charge vs wire
double fSigmadTdW; ///< slope of cluster in tdc vs wire
double fSigmadQdW; ///< slope of cluster in charge vs wire
std::vector<double> fStartPos; ///< start of cluster in (wire, tdc) plane
std::vector<double> fEndPos; ///< start of cluster in (wire, tdc) plane
std::vector<double> fSigmaStartPos; ///< start of cluster in (wire, tdc) plane
std::vector<double> fSigmaEndPos; ///< start of cluster in (wire, tdc) plane
int fID; ///< cluster's ID
geo::View_t fView; ///< view for this cluster
geo::PlaneID fPlaneID; ///< location of the start of the cluster (cryo, tdc, plane)
public:
Cluster(double startWire, double sigmaStartWire,
double startTime, double sigmaStartTime,
double endWire, double sigmaEndWire,
double endTime, double sigmaEndTime,
double dTdW, double sigmadTdW,
double dQdW, double sigmadQdW,
double totalQ,
geo::View_t view,
int id);
Cluster(double startWire, double sigmaStartWire,
double startTime, double sigmaStartTime,
double endWire, double sigmaEndWire,
double endTime, double sigmaEndTime,
double dTdW, double sigmadTdW,
double dQdW, double sigmadQdW,
double totalQ,
geo::View_t view,
int id,
const geo::PlaneID& planeID);
//@{
/// Accessors
double Charge() const;
geo::View_t View() const;
double dTdW() const;
double dQdW() const;
double SigmadTdW() const;
double SigmadQdW() const;
std::vector<double> StartPos() const;
std::vector<double> EndPos() const;
std::vector<double> SigmaStartPos() const;
std::vector<double> SigmaEndPos() const;
int ID() const;
const geo::PlaneID& Plane() const; ///< returns the geometry plane of the cluster
//@}
/// Returns whether geometry plane is valid
bool hasPlane() const;
/// Moves the cluster to the specified plane
Cluster& MoveToPlane(const geo::PlaneID& new_plane);
/// Makes the plane of this cluster invalid
Cluster& InvalidatePlane();
Cluster operator + (const Cluster&);
friend std::ostream& operator << (std::ostream& o, const Cluster& c);
friend bool operator < (const Cluster & a, const Cluster & b);
}; // class Cluster
} // namespace recob
The implementation status refers to the branch feature/DataProductRevisionNewCluster.
| Target | Action | Action item | Status | |
|---|---|---|---|---|
dQdW() |
removal (also uncertainty) | approval | approved1 | |
| remove data member | done | |||
| interface removal | done | |||
| constructor update | done | |||
| user code update: removal | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: verify it's not used | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
dTdW() |
removal (also uncertainty) | approval | approved1 | |
| remove data members | done | |||
| interface removal | done | |||
| constructor update | done | |||
| user code update: removal | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: verify it's not used | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
NHits() |
add number of hits | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| write algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
Start/EndWire() |
add wire coordinates | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
Start/EndTick() |
add tick coordinates | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
Start/EndCharge() |
add charge at ends | approval | pending3 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| write algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
Start/EndAngle() |
add angles | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| connect algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
Start/EndOpeningAngle() |
add opening angles | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| connect algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
SummedADC() |
add total summed ADC | approval | approved1 | from recob::Hit::SummedADC() |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| write algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
SummedADCave() |
add hit summed ADC average | approval | approved1 | |
| add data member | skipped | being just SummedADC()/NHits(), we don't store it |
||
| add accessor | done | |||
| constructor update | done | |||
| write algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
SummedADCstdDev() |
add hit summed ADC std. dev. | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| write algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
IntegratedADC() |
add total integrated charge | approval | approved1 | from recob::Hit::Integral() |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| connect algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
IntegratedADCave() |
add hit integrated ADC average | approval | approved1 | |
| add data member | skipped | being just Integral()/NHits(), we don't store it |
||
| add accessor | done | |||
| constructor update | done | |||
| connect algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
IntegratedADCstdDev() |
add hit integrated ADC std. dev. | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| connect algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
fTotalCharge |
removal | approval | approved1 | |
| remove data member | done | |||
| interface removal | done | |||
| constructor update | done | |||
| user code update: removal | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code: verify it's not used | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
MultipleHitWires() |
ratio between wires span and hits number | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| write algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
Width() |
a measure of cluster width | approval | approved1 | |
| add data member | done | |||
| add accessor | done | |||
| constructor update | done | |||
| connect algorithm | done | |||
| user code update: construct | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| user code update: fill | lardata, larevt, larsim, larreco, larpandora, lareventdisplay, larexamples, larana, larsoft, uboonecode, lbnecode, t962offline, lar1ndcode |
|||
| documentation | complete class documentation | done |
| Test type | Ran on version | Outcome |
|---|---|---|
| standard LArSoft test suite | v03_06_00 |
success |
v03_08_00 |
TODO |
recob::Cluster::MultipleHitWires() may need a better name.
ClusterMergeAlg::Angle2DCompatibility() seems to expect slope as a dT/dW, but then it uses in a formula that suggests angle is in degrees.
The new code assumes angle to be an angle in radians, and the comparison angle is converted from degrees to radians. This needs to be checked.
The slope variable is used at one point like a angle in degrees (and converted into degrees), at another as a dTdW in -homogeneous units (and converted into a ratio of wire over time ticks).
I have added a angle variable and hope it makes the thing a bit clearer. Needs checking.
This module requires some more work than the average cluster finder.
- cluster compatibility criteria: I have replaced the use of
dTdW()withStartAngle()andEndAngle() - position compatibility still has hard-coded constants; it urges to have a general function to compute 2D distance on wire/time plane
- the addition of clusters is removed, since it's impossible to correctly add all the features; some replacement needs to be created
The fix is being delayed, since this module depends on the old version of ClusterParamsAlg while my changes depend on the new one.
I will wait for the update of ShowerAlgleCluster module before I pick it again.
RecoBaseDrawer::Cluster2D() used Cluster::dTdW() to get the slope for a line to be drawn.
It's not clear to me if it expects it homogeneous (“cm/cm”) or in the time/wire units.
I am assuming it wants it homogeneous, but it might be wrong.
This is a cluster producer, and it would need ClusterParamsAlg to fill completely the cluster.
I suspect this cluster is going to be used only for drawing purposes and that therefore it does not need that complication.
The complication is that to use ClusterParamsAlg, lareventdisplay must depend and link to larreco.
So I hope I am getting away without setting the angles and charge (dTdW was filled with 0 anyway) and I have just filled the “easy” total charge statistics.
A new feature has been left half-implemented: non-core hits are excluded from some computation, but no hit is yet acknowledged as isolated non-core.
Bruce Baller is still working on updating ClusterCrawler and CCTrackMaker modules.
I have added some placeholder code, and the tracker won't work (the hit finder and the cluster finder will have some variable with a default value).
I have used the StandardClusterParamsAlg class to define all the parameters of the new cluster.
The original code computes a meaningful dT/dW, though, and it should be used instead of the standard one.
I should implement a new ClusterParamsAlgBase class that allows to override some fields with a set value.
Cluster creation modules and algorithms:
| Module name | Source file | Contact person |
|---|---|---|
LArPandoraParticleCreator |
larpandora/LArPandoraInterface/LArPandoraParticleCreator.cxx |
Andrew Blake |
ClusterCheater |
larreco/ClusterFinder/ClusterCheater_module.cc |
Brian Rebel |
ClusterCrawler |
larreco/ClusterFinder/ClusterCrawler_module.cc |
Bruce Baller |
DBcluster |
larreco/ClusterFinder/DBcluster_module.cc |
Tingjun Yang |
ClusterCrawlerShower |
larreco/ClusterFinder/ClusterCrawlerShower_module.cc |
removed |
HoughLineFinder |
larreco/ClusterFinder/HoughLineFinder_module.cc |
Ben Carls |
KingaCluster |
larreco/ClusterFinder/KingaCluster_module.cc |
removed |
LineMerger |
larreco/ClusterFinder/LineMerger_module.cc |
Ben Carls |
ShowerAngleCluster |
larreco/ClusterFinder/ShowerAngleCluster_module.cc |
removed |
SmallClusterFinder |
larreco/ClusterFinder/SmallClusterFinder_module.cc |
Corey Adams |
GraphCluster |
lareventdisplay/EventDisplay/GraphCluster_module.cc |
Andrzej Szelc |
| Old construct | New construct | Comments |
|---|---|---|
Cluster::StartPos()[0] |
Cluster::StartWire() |
|
Cluster::StartPos()[1] |
Cluster::StartTick() |
|
Cluster::EndPos()[0] |
Cluster::EndWire() |
|
Cluster::EndPos()[1] |
Cluster::EndTick() |
|
Cluster::SigmaStartPos() |
removed | |
Cluster::SigmaEndPos() |
||
Cluster::TotalCharge() |
Cluster::Integral() |
from hit shape |
Cluster::SummedADC() |
from calibrated ADC counts | |
Cluster::dTdW() |
start from std::tan(Cluster::StartAngle()) |
dTdW was in wire/tick units, conversions with radians may be needed |
Cluster::dQdW() |
start from Cluster::StartCharge() |
recob::EndPoint2D should be redefined as:
-
Vertex2Ddata product: a reconstructed object (probably defined from the output ofFeatureVertexFinderproducer) -
EndPoint2Dclass: a simple geometric object (wire,time tick), not necessarily a data product
(from lardata v03_04_04)
class EndPoint2D {
public:
EndPoint2D(); ///Default constructor
private:
double fDriftTime; ///< vertex's drift time
geo::WireID fWireID; ///< vertex's wireID
int fID; ///< vertex's ID
double fStrength; ///< vertex's strength
geo::View_t fView; ///< view for this end point
double fTotalCharge; ///< total charge of hits associated with end point
public:
EndPoint2D(double driftTime,
geo::WireID wireID,
double strength,
int id,
geo::View_t view,
double totalQ);
double Charge() const;
geo::View_t View() const;
double DriftTime() const;
geo::WireID WireID() const;
int ID() const;
double Strength() const;
friend std::ostream& operator << (std::ostream& o, const EndPoint2D& c);
};
| Target | Action | Action item | Status |
|---|---|---|---|
| class definitions | to be defined | ||
| documentation | complete class documentation | to be defined |
| Test type | Ran on version | Outcome |
|---|---|---|
| standard LArSoft test suite | not run | TO DO |
The tracking product model is still under discussion.
The agreement is currently toward:
-
recob::Trackdata product: contains simple track information (begin and end of track, quality of fit) and owns “trajectory points” -
recob::Trajectorydata products: concrete data products following an abstract interface; the interface represents a geometrical continuous representation of the trajectory of the track -
recob::Momentumdata product: contains the result of momentum calculation algorithms
The priorty of at least part of this implementation will yield to the other changes.
Also, policies will be defined:
- minimum density of trajectory points stored in the track object
(from lardata v03_04_04)
class Track {
public:
//Default constructor
Track();
private:
protected:
std::vector<TVector3> fXYZ; ///< position of points along the track
std::vector<TVector3> fDir; ///< direction at each point along the track
std::vector<TMatrixD > fCov; ///< covariance matrix of positions
///< possibly only end points are stored
std::vector< std::vector <double> > fdQdx; ///< charge deposition per unit length at points
///< along track outer vector index is over view
std::vector<double> fFitMomentum; ///< momentum at start and end of track
///< determined from a fit. Intermediate points
///< can be added if desired
int fID; ///< track's ID
public:
// Bezier-like constructor
Track(std::vector<TVector3> const& xyz,
std::vector<TVector3> const& dxdydz,
std::vector< std::vector <double> > dQdx = std::vector< std::vector<double> >(0),
std::vector<double> fitMomentum = std::vector<double>(2, util::kBogusD),
int ID = -1);
// Kalman-like constructor
Track(std::vector<TVector3> const& xyz,
std::vector<TVector3> const& dxdydz,
std::vector<TMatrixD > const& cov,
std::vector< std::vector <double> > dQdx = std::vector< std::vector<double> >(0),
std::vector<double> fitMomentum = std::vector<double>(2, util::kBogusD),
int ID = -1);
void Extent(std::vector<double> &xyzStart,
std::vector<double> &xyzEnd) const;
void Direction(double *dcosStart,
double *dcosEnd) const;
double ProjectedLength(geo::View_t view) const;
double PitchInView(geo::View_t view,
size_t trajectory_point=0) const;
int ID() const;
// A trajectory point is the combination of a position vector
// and its corresponding direction vector
size_t NumberTrajectoryPoints() const;
size_t NumberCovariance() const;
size_t NumberFitMomentum() const;
size_t NumberdQdx(geo::View_t view=geo::kUnknown) const;
double Length(size_t p=0) const;
void TrajectoryAtPoint(unsigned int p,
TVector3 &pos,
TVector3 &dir) const;
const double& DQdxAtPoint(unsigned int p,
geo::View_t view=geo::kUnknown) const;
const TVector3& DirectionAtPoint (unsigned int p) const;
const TVector3& LocationAtPoint (unsigned int p) const;
const double& MomentumAtPoint (unsigned int p) const;
const TMatrixD& CovarianceAtPoint(unsigned int p) const;
const TVector3& Vertex() const;
const TVector3& End() const;
const TVector3& VertexDirection() const;
const TVector3& EndDirection() const;
const TMatrixD& VertexCovariance() const;
const TMatrixD& EndCovariance() const;
const double& VertexMomentum() const;
const double& EndMomentum() const;
double Theta() const;
double Phi() const;
// Calculate rotation matrices between global (x,y,z) and local (u,v,w)
// coordinate systems based on track direction (fDir).
// The local w-axis points along the track direction.
void GlobalToLocalRotationAtPoint(unsigned int p, TMatrixD& rot) const;
void LocalToGlobalRotationAtPoint(unsigned int p, TMatrixD& rot) const;
friend bool operator < (const Track & a, const Track & b);
protected:
friend std::ostream& operator << (std::ostream& stream, Track const& a);
};
| Target | Action | Action item | Status |
|---|---|---|---|
Track definition |
definition of @recob@Track@ content | to be defined | |
| other definitions | definition of @recob@Trajectory@ and recob::Momentum |
to be defined | |
| documentation | complete class documentation | to be defined |
| Test type | Ran on version | Outcome |
|---|---|---|
| standard LArSoft test suite | not run | TO DO |
1 LArSoft Data Architecture Meeting, December 8, 2014
2 Discussion, including Erica Snider and Gianluca Petrillo, on December 11, 2014. Saturation is inherently per-sample and flagging the whole raw digit where saturation happened is not informative.
3 Latest discussion: MicroBooNE IIT workshop, January 7th, 2015.
4 Proposal by MicroBooNE on January 7th, 2015 and acknowledgement by LBNF on January 28th, 2015