LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
BackTrackerService.cc
Go to the documentation of this file.
1 //
3 // \file BackTrackerService_service.cc
4 // \brief A service for backtracking reconstruction information to its truth
5 // information
6 //
7 // \author jason.stock@mines.sdsmt.edu
8 // Based on the original BackTracker by Brian Rebel (brebel@fnal.gov)
9 //
11 
18 
21 #include "fhiclcpp/ParameterSet.h"
23 
24 namespace cheat {
25 
26  //---------------------------------------------------------------------
29  : BackTracker(pSet.get<fhicl::ParameterSet>("BackTracker"),
31  lar::providerFrom<geo::Geometry>(),
32  &art::ServiceHandle<geo::WireReadout const>()->Get())
33  {
35  }
36 
37  //---------------------------------------------------------------------
39  : BackTracker(config.BackTrackerTable(),
41  lar::providerFrom<geo::Geometry>(),
42  &art::ServiceHandle<geo::WireReadout const>()->Get())
43  {
44  // This line is only to be included until art/LArSoft discussion about lazy rebuild
45  // can be completed.
47  }
48 
49  //---------------------------------------------------------------------
50  // Event Rebuild Implimentation: This section contains the implimentation of all Prep
51  // templates from the service provider.
52 
53  //-----Temp rebuild function.
55  {
57  }
58 
59  //---------------------------------------------------------------------
61  {
62  fEvt = &evt;
64  if (!this->priv_CanRun(evt)) { return; }
65  this->priv_PrepSimChannels(evt);
66  fEvt = nullptr; // don't save the pointer because it will be useless after this
67  // anyways. I want to make sure calls at the wrong time crash.
68  }
69 
70  //---------------------------------------------------------------------
72  {
73  return BackTracker::CanRun(evt);
74  }
75 
76  //---------------------------------------------------------------------
78  {
79  throw cet::exception("BackTrackerService")
80  << "The called Prep Function failed. This is most likely due "
81  << "to a BackTracker function being used on a file that is real data.";
82  }
83 
84  //---------------------------------------------------------------------
86  {
87  if (!this->priv_CanRun(evt)) { this->priv_PrepFailed(); }
88  if (this->priv_SimChannelsReady()) { return; }
89  try {
91  }
92  catch (...) {
93  mf::LogWarning("BackTrackerService")
94  << "Rebuild failed to get the SimChannels. This is expected when running on a generation "
95  "or simulation step.";
96  }
97  }
98 
99  //---------------------------------------------------------------------
100  // BackTracking Functions Implementation: This section contains the implimentation of
101  // all BackTrackerService end user functionality
102 
103  //---------------------------------------------------------------------
104  const std::vector<art::Ptr<sim::SimChannel>>& BackTrackerService::SimChannels() const
105  {
106  return BackTracker::SimChannels();
107  }
108 
109  //---------------------------------------------------------------------
110  std::vector<const sim::IDE*> BackTrackerService::TrackIdToSimIDEs_Ps(int const& id) const
111  {
113  }
114 
115  //---------------------------------------------------------------------
116  std::vector<const sim::IDE*> BackTrackerService::TrackIdToSimIDEs_Ps(int const& id,
117  const geo::View_t view) const
118  {
119  return BackTracker::TrackIdToSimIDEs_Ps(id, view);
120  }
121 
122  //---------------------------------------------------------------------
124  {
125  return BackTracker::FindSimChannel(channel);
126  }
127 
128  //---------------------------------------------------------------------
129  std::vector<sim::TrackIDE> BackTrackerService::ChannelToTrackIDEs(
130  detinfo::DetectorClocksData const& clockData,
131  raw::ChannelID_t channel,
132  const double hit_start_time,
133  const double hit_end_time) const
134  {
135  return BackTracker::ChannelToTrackIDEs(clockData, channel, hit_start_time, hit_end_time);
136  }
137 
138  //---------------------------------------------------------------------
139  std::vector<sim::TrackIDE> BackTrackerService::HitToTrackIDEs(
140  detinfo::DetectorClocksData const& clockData,
141  recob::Hit const& hit) const
142  {
143  return BackTracker::HitToTrackIDEs(clockData, hit);
144  }
145 
146  //---------------------------------------------------------------------
147  std::vector<sim::TrackIDE> BackTrackerService::HitToTrackIDEs(
148  detinfo::DetectorClocksData const& clockData,
149  art::Ptr<recob::Hit> const& hit) const
150  {
151  return BackTracker::HitToTrackIDEs(clockData, hit);
152  }
153 
154  //---------------------------------------------------------------------
156  recob::Hit const& hit) const
157  {
158  return BackTracker::HitToTrackIds(clockData, hit);
159  }
160 
161  //---------------------------------------------------------------------
162  std::vector<sim::TrackIDE> BackTrackerService::HitToEveTrackIDEs(
163  detinfo::DetectorClocksData const& clockData,
164  recob::Hit const& hit) const
165  {
166  return BackTracker::HitToEveTrackIDEs(clockData, hit);
167  }
168 
169  //---------------------------------------------------------------------
170  std::vector<sim::TrackIDE> BackTrackerService::HitToEveTrackIDEs(
171  detinfo::DetectorClocksData const& clockData,
172  art::Ptr<recob::Hit> const& hit) const
173  {
174  return BackTracker::HitToEveTrackIDEs(clockData, hit);
175  }
176 
177  //---------------------------------------------------------------------
178  std::vector<art::Ptr<recob::Hit>> BackTrackerService::TrackIdToHits_Ps(
179  detinfo::DetectorClocksData const& clockData,
180  const int tkId,
181  std::vector<art::Ptr<recob::Hit>> const& hitsIn) const
182  {
183  return BackTracker::TrackIdToHits_Ps(clockData, tkId, hitsIn);
184  }
185 
186  //---------------------------------------------------------------------
187  std::vector<std::vector<art::Ptr<recob::Hit>>> BackTrackerService::TrackIdsToHits_Ps(
188  detinfo::DetectorClocksData const& clockData,
189  std::vector<int> const& tkIds,
190  std::vector<art::Ptr<recob::Hit>> const& hitsIn) const
191  {
192  return BackTracker::TrackIdsToHits_Ps(clockData, tkIds, hitsIn);
193  }
194 
195  //---------------------------------------------------------------------
196  std::vector<sim::IDE> BackTrackerService::HitToAvgSimIDEs(
197  detinfo::DetectorClocksData const& clockData,
198  recob::Hit const& hit) const
199  {
200  return BackTracker::HitToAvgSimIDEs(clockData, hit);
201  }
202 
203  //---------------------------------------------------------------------
204  std::vector<sim::IDE> BackTrackerService::HitToAvgSimIDEs(
205  detinfo::DetectorClocksData const& clockData,
207  {
208  return BackTracker::HitToAvgSimIDEs(clockData, hit);
209  }
210 
211  //---------------------------------------------------------------------
212  std::vector<const sim::IDE*> BackTrackerService::HitToSimIDEs_Ps(
213  detinfo::DetectorClocksData const& clockData,
214  recob::Hit const& hit) const
215  {
216  return BackTracker::HitToSimIDEs_Ps(clockData, hit);
217  }
218 
219  //---------------------------------------------------------------------
220  std::vector<const sim::IDE*> BackTrackerService::HitToSimIDEs_Ps(
221  detinfo::DetectorClocksData const& clockData,
222  art::Ptr<recob::Hit> const& hit) const
223  {
224  return BackTracker::HitToSimIDEs_Ps(clockData, hit);
225  }
226 
227  //---------------------------------------------------------------------
228  std::vector<double> BackTrackerService::SimIDEsToXYZ(std::vector<sim::IDE> const& ides) const
229  {
230  return BackTracker::SimIDEsToXYZ(ides);
231  }
232 
233  //---------------------------------------------------------------------
234  std::vector<double> BackTrackerService::SimIDEsToXYZ(
235  std::vector<const sim::IDE*> const& ide_Ps) const
236  {
237  return BackTracker::SimIDEsToXYZ(ide_Ps);
238  }
239 
240  //---------------------------------------------------------------------
241  std::vector<double> BackTrackerService::HitToXYZ(detinfo::DetectorClocksData const& clockData,
242  const recob::Hit& hit) const
243  {
244  return BackTracker::HitToXYZ(clockData, hit);
245  }
246 
247  //---------------------------------------------------------------------
248  std::vector<double> BackTrackerService::HitToXYZ(detinfo::DetectorClocksData const& clockData,
249  art::Ptr<recob::Hit> const& hit) const
250  {
251  return HitToXYZ(clockData, *hit);
252  }
253 
254  //---------------------------------------------------------------------
256  detinfo::DetectorClocksData const& clockData,
257  std::set<int> const& trackIds,
258  std::vector<art::Ptr<recob::Hit>> const& hits) const
259  {
260  return BackTracker::HitCollectionPurity(clockData, trackIds, hits);
261  }
262 
263  //---------------------------------------------------------------------
265  detinfo::DetectorClocksData const& clockData,
266  std::set<int> const& trackIds,
267  std::vector<art::Ptr<recob::Hit>> const& hits) const
268  {
269  return BackTracker::HitChargeCollectionPurity(clockData, trackIds, hits);
270  }
271 
272  //---------------------------------------------------------------------
274  detinfo::DetectorClocksData const& clockData,
275  std::set<int> const& trackIds,
277  std::vector<art::Ptr<recob::Hit>> const& allhits,
278  geo::View_t const& view) const
279  {
280  return BackTracker::HitCollectionEfficiency(clockData, trackIds, hits, allhits, view);
281  }
282 
283  //---------------------------------------------------------------------
285  detinfo::DetectorClocksData const& clockData,
286  std::set<int> const& trackIds,
288  std::vector<art::Ptr<recob::Hit>> const& allhits,
289  geo::View_t const& view) const
290  {
291  return BackTracker::HitChargeCollectionEfficiency(clockData, trackIds, hits, allhits, view);
292  }
293 
294  //---------------------------------------------------------------------
296  {
298  }
299 
300  //---------------------------------------------------------------------
302  {
304  }
305 
306  //---------------------------------------------------------------------
308  detinfo::DetectorClocksData const& clockData,
309  std::vector<art::Ptr<recob::Hit>> const& hits) const
310  {
311  return BackTracker::GetSetOfTrackIds(clockData, hits);
312  }
313 
314  //---------------------------------------------------------------------
316  detinfo::DetectorClocksData const& clockData,
317  std::vector<art::Ptr<recob::Hit>> const& hits) const
318  {
319  return BackTracker::GetSetOfEveIds(clockData, hits);
320  }
321 
322  //---------------------------------------------------------------------
324  detinfo::DetectorClocksData const& clockData,
325  std::vector<art::Ptr<recob::Hit>> const& hits) const
326  {
328  }
329 
330  //---------------------------------------------------------------------
331  std::vector<art::Ptr<recob::Hit>> BackTrackerService::SpacePointToHits_Ps(
332  art::Ptr<recob::SpacePoint> const& spt) const
333  {
334  // Note, this function is goofy in that it doesn't use the hits prepared by
335  // the module. That should likely be changed to make things more uniform.
336  if (!fEvt) {
337  throw cet::exception("BackTrackerService")
338  << "This function is not yet implimented pending the implimentation of "
339  "backtracker lazy loading.";
340  }
342  }
343 
344  //---------------------------------------------------------------------
346  detinfo::DetectorClocksData const& clockData,
347  art::Ptr<recob::SpacePoint> const& spt) const
348  {
349  // if( !this->priv_CanRun(*fEvt)) { this->priv_PrepFailed(); }
350  if (!fEvt) {
351  throw cet::exception("BackTrackerService")
352  << "This function is not yet implimented pending the implimentation of "
353  "backtracker lazy loading.";
354  }
355  return BackTracker::SpacePointToXYZ(clockData, spt, *fEvt);
356  }
357 
358 } // end namespace cheat
Utilities related to art service access.
void PrepSimChannels(const Evt &evt)
std::vector< art::Ptr< recob::Hit > > TrackIdToHits_Ps(detinfo::DetectorClocksData const &clockData, int tkId, std::vector< art::Ptr< recob::Hit >> const &hitsIn) const
std::vector< sim::TrackIDE > HitToTrackIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
std::vector< std::vector< art::Ptr< recob::Hit > > > TrackIdsToHits_Ps(detinfo::DetectorClocksData const &clockData, std::vector< int > const &tkIds, std::vector< art::Ptr< recob::Hit >> const &hitsIn) const
Definition: BackTracker.cc:256
enum geo::_plane_proj View_t
Enumerate the possible plane projections.
T::provider_type const * providerFrom()
Returns a constant pointer to the provider of specified service.
Definition: ServiceUtil.h:75
std::vector< art::Ptr< recob::Hit > > SpacePointToHits_Ps(art::Ptr< recob::SpacePoint > const &spt) const
double HitChargeCollectionPurity(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits) const
std::vector< sim::TrackIDE > HitToEveTrackIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
Definition: BackTracker.cc:194
std::vector< double > SpacePointToXYZ(detinfo::DetectorClocksData const &clockData, art::Ptr< recob::SpacePoint > const &spt, const Evt &evt) const
double HitCollectionEfficiency(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits, std::vector< art::Ptr< recob::Hit >> const &allhits, geo::View_t const &view) const
std::vector< const sim::IDE * > TrackIdToSimIDEs_Ps(int const &id) const
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
Definition: AddMC.C:8
std::vector< double > HitToXYZ(detinfo::DetectorClocksData const &clockData, const recob::Hit &hit) const
std::vector< sim::TrackIDE > HitToTrackIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
Definition: BackTracker.cc:172
std::vector< int > HitToTrackIds(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
std::vector< art::Ptr< recob::Hit > > SpacePointToHits_Ps(art::Ptr< recob::SpacePoint > const &spt, const Evt &evt) const
bool CanRun(const Evt &evt)
Definition: BackTracker.h:90
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:289
void hits()
Definition: readHits.C:15
art::Ptr< sim::SimChannel > FindSimChannel(raw::ChannelID_t channel) const
void Rebuild(const art::Event &evt)
std::set< int > GetSetOfTrackIds() const
std::vector< double > HitToXYZ(detinfo::DetectorClocksData const &clockData, const recob::Hit &hit) const
Definition: BackTracker.cc:399
BackTrackerService(const fhicl::ParameterSet &pSet, art::ActivityRegistry &reg)
art::Ptr< sim::SimChannel > FindSimChannel(raw::ChannelID_t channel) const
Returns the cached sim::SimChannel on the specified channel.
Definition: BackTracker.cc:118
double HitCollectionPurity(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits) const
parameter set interface
std::vector< art::Ptr< recob::Hit > > TrackIdToHits_Ps(detinfo::DetectorClocksData const &clockData, int tkId, std::vector< art::Ptr< recob::Hit >> const &hitsIn) const
Definition: BackTracker.cc:226
void priv_PrepSimChannels(const art::Event &evt)
std::set< int > GetSetOfTrackIds() const
Definition: BackTracker.h:221
double HitCollectionPurity(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits) const
Definition: BackTracker.cc:406
std::vector< std::vector< art::Ptr< recob::Hit > > > TrackIdsToHits_Ps(detinfo::DetectorClocksData const &clockData, std::vector< int > const &tkIds, std::vector< art::Ptr< recob::Hit >> const &hitsIn) const
void priv_PrepEvent(const art::Event &evt, art::ScheduleContext)
GlobalSignal< detail::SignalResponseType::FIFO, void(Event const &, ScheduleContext)> sPreProcessEvent
Detector simulation of raw signals on wires.
const std::vector< art::Ptr< sim::SimChannel > > & SimChannels() const
Definition: BackTracker.h:111
std::set< int > GetSetOfEveIds() const
bool priv_CanRun(const art::Event &evt)
double HitChargeCollectionEfficiency(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits, std::vector< art::Ptr< recob::Hit >> const &allhits, geo::View_t const &view) const
std::vector< sim::TrackIDE > ChannelToTrackIDEs(detinfo::DetectorClocksData const &clockData, raw::ChannelID_t channel, const double hit_start_time, const double hit_end_time) const
Definition: BackTracker.cc:126
std::set< int > GetSetOfEveIds() const
Definition: BackTracker.h:222
double HitChargeCollectionPurity(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits) const
Definition: BackTracker.cc:425
decltype(auto) get(T &&obj)
ADL-aware version of std::to_string.
Definition: StdUtils.h:120
code to link reconstructed objects back to the MC truth information
Definition: BackTracker.cc:24
LArSoft-specific namespace.
Contains all timing reference information for the detector.
std::vector< int > HitToTrackIds(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
Definition: BackTracker.cc:182
std::vector< sim::IDE > HitToAvgSimIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
static ScheduleContext invalid()
std::vector< double > SpacePointHitsToWeightedXYZ(detinfo::DetectorClocksData const &clockData, std::vector< art::Ptr< recob::Hit >> const &hits) const
std::vector< sim::TrackIDE > HitToEveTrackIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
double HitCollectionEfficiency(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits, std::vector< art::Ptr< recob::Hit >> const &allhits, geo::View_t const &view) const
Definition: BackTracker.cc:445
std::vector< const sim::IDE * > TrackIdToSimIDEs_Ps(int const &id) const
Definition: BackTracker.cc:65
std::vector< double > SimIDEsToXYZ(std::vector< sim::IDE > const &ides) const
Definition: MVAAlg.h:12
const std::vector< art::Ptr< sim::SimChannel > > & SimChannels() const
std::vector< const sim::IDE * > HitToSimIDEs_Ps(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
2D representation of charge deposited in the TDC/wire plane
Definition: Hit.h:46
TCEvent evt
Definition: DataStructs.cxx:8
unsigned int ChannelID_t
Type representing the ID of a readout channel.
Definition: RawTypes.h:28
std::vector< sim::IDE > HitToAvgSimIDEs(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
Definition: BackTracker.cc:301
ROOT libraries.
std::vector< double > SpacePointToXYZ(detinfo::DetectorClocksData const &clockData, art::Ptr< recob::SpacePoint > const &spt) const
std::vector< double > SimIDEsToXYZ(std::vector< sim::IDE > const &ides) const
Definition: BackTracker.cc:368
double HitChargeCollectionEfficiency(detinfo::DetectorClocksData const &clockData, std::set< int > const &trackIds, std::vector< art::Ptr< recob::Hit >> const &hits, std::vector< art::Ptr< recob::Hit >> const &allhits, geo::View_t const &view) const
Definition: BackTracker.cc:483
art framework interface to geometry description
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
std::vector< sim::TrackIDE > ChannelToTrackIDEs(detinfo::DetectorClocksData const &clockData, raw::ChannelID_t channel, const double hit_start_time, const double hit_end_time) const
std::vector< const sim::IDE * > HitToSimIDEs_Ps(detinfo::DetectorClocksData const &clockData, recob::Hit const &hit) const
Definition: BackTracker.cc:313
std::vector< double > SpacePointHitsToWeightedXYZ(detinfo::DetectorClocksData const &clockData, std::vector< art::Ptr< recob::Hit >> const &hits) const
Definition: BackTracker.cc:551