110   auto trajectories = std::make_unique<std::vector<recob::TrackTrajectory>>();
   111   auto tracks = std::make_unique<std::vector<recob::Track>>();
   113     = std::make_unique<std::vector<std::vector<recob::TrackFitHitInfo>>>();
   115     = std::make_unique<art::Assns<recob::Track, recob::Hit, recob::TrackHitMeta>>();
   116   auto hitTrajectoryAssn
   117     = std::make_unique<art::Assns<recob::TrackTrajectory, recob::Hit>>();
   118   auto trackTrajectoryAssn
   119     = std::make_unique<art::Assns<recob::Track, recob::TrackTrajectory>>();
   121   auto hitHandle = 
event.getValidHandle<std::vector<recob::Hit>>(
hitsTag);
   122   auto const& hits = *hitHandle;
   126   unsigned int iTrack = 0;
   127   unsigned int usedHits = 0;
   128   while (usedHits < hits.size()) {
   131     unsigned int const nTrackHits = (iTrack < 
hitsPerTrack.size())
   133       : (hits.size() - usedHits)
   139     std::size_t 
const firstHit = usedHits;
   143     std::vector<recob::TrackFitHitInfo> fitInfo;
   144     for (
unsigned int iPoint = 0; iPoint < nTrackHits; ++iPoint) {
   167         pointFlags.set(recob::TrajectoryPointFlags::flag::DetectorIssue);
   169       pos.emplace_back(iPoint, iPoint, iPoint);
   170       mom.emplace_back(2.0, 1.0, 0.0);
   171       flags.emplace_back(usedHits++, pointFlags);
   176         double(iPoint) * 2.5,              
   177         double(iPoint) * 1.5,              
   179         { ROOT::Math::SMatrixIdentity{} }, 
   180         hits[usedHits + iPoint].WireID()   
   185     trajectories->emplace_back();
   187     trajectories->emplace_back
   194     auto const trajPtr = trajectoryPtrMaker(trajectories->size() - 1U);
   195     for (std::size_t iHit = firstHit; iHit < usedHits; ++iHit)
   196       hitTrajectoryAssn->addSingle(trajPtr, { hitHandle, iHit });
   202       (trajectories->back(), 2112, 1.0, nTrackHits, {}, {}, iTrack);
   208     trackFitInfo->push_back(
std::move(fitInfo));
   213     auto const trackPtr = trackPtrMaker(iTrack);
   214     for (std::size_t iHit = firstHit; iHit < usedHits; ++iHit) {
   216       auto const hitIndex = iHit - firstHit;
   218       hitTrackAssn->addSingle(trackPtr, { hitHandle, iHit }, hitInfo);
   225     trackTrajectoryAssn->addSingle(trackPtr, trajPtr);
   228       << 
"New track #" << tracks->back().ID()
   229       << 
" with " << nTrackHits << 
" hits";
   239     << 
"Produced " << tracks->size() << 
" tracks from " << usedHits << 
" hits.";
   246   event.put(
std::move(trackTrajectoryAssn));
 std::vector< unsigned int > hitsPerTrack
Hits per produced track. 
 
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
 
static constexpr Flag_t Suspicious
The point reconstruction is somehow questionable. 
 
static constexpr Flag_t NoPoint
The trajectory point is not defined. 
 
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
 
tracking::Positions_t Positions_t
Type of trajectory point list. 
 
tracking::Momenta_t Momenta_t
Type of momentum list. 
 
art::InputTag hitsTag
Input hit collection label. 
 
static constexpr Flag_t HitIgnored
Hit was not included for the computation of the trajectory. 
 
std::vector< PointFlags_t > Flags_t
Type of point flag list. 
 
Flags_t::Mask_t Mask_t
Type of mask of bits. 
 
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
 
static constexpr Flag_t DetectorIssue
The hit is associated to a problematic channel. 
 
Track from a non-cascading particle.A recob::Track consists of a recob::TrackTrajectory, plus additional members relevant for a "fitted" track: