All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TrackAreaHit_module.cc
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 // Class: TrackAreaHit
3 // Plugin Type: producer (art v3_02_06)
4 // File: TrackAreaHit_module.cc
5 //
6 // Generated at Wed Feb 19 17:38:21 2020 by Gray Putnam using cetskelgen
7 // from cetlib version v3_07_02.
8 ////////////////////////////////////////////////////////////////////////
9 
10 #include "art/Framework/Core/EDProducer.h"
11 #include "art/Framework/Core/ModuleMacros.h"
12 #include "art/Framework/Principal/Event.h"
13 #include "art/Framework/Principal/Handle.h"
14 #include "art/Framework/Principal/Run.h"
15 #include "art/Framework/Principal/SubRun.h"
16 #include "canvas/Utilities/InputTag.h"
17 #include "fhiclcpp/ParameterSet.h"
18 #include "messagefacility/MessageLogger/MessageLogger.h"
23 
39 
40 #include <memory>
41 
42 namespace sbn {
43  class TrackAreaHit;
44 }
45 
46 
47 class sbn::TrackAreaHit : public art::EDProducer {
48 public:
49  explicit TrackAreaHit(fhicl::ParameterSet const& p);
50  // The compiler-generated destructor is fine for non-base
51  // classes without bare pointers or other resource use.
52 
53  // Plugins should not be copied or assigned.
54  TrackAreaHit(TrackAreaHit const&) = delete;
55  TrackAreaHit(TrackAreaHit&&) = delete;
56  TrackAreaHit& operator=(TrackAreaHit const&) = delete;
57  TrackAreaHit& operator=(TrackAreaHit&&) = delete;
58 
59  // Required functions.
60  void produce(art::Event& e) override;
61 
62  recob::Hit MakeHit(const recob::Wire &wire, const geo::WireID &wireID, const geo::GeometryCore *geo, raw::TDCtick_t startTick, raw::TDCtick_t endTick) const;
63  recob::Hit MakeHit(const raw::RawDigit &digit, const geo::WireID &wireID, const geo::GeometryCore *geo, raw::TDCtick_t startTick, raw::TDCtick_t endTick) const;
64 
65 private:
66 
67  art::InputTag fTrackLabel;
68  art::InputTag fWireLabel;
69  std::vector<art::InputTag> fDigitLabels;
70  art::InputTag fT0Label;
76  bool fUseWires;
77  unsigned fCryostat;
78 
79 };
80 
81 sbn::TrackAreaHit::TrackAreaHit(fhicl::ParameterSet const& p)
82  : EDProducer{p},
83  fTrackLabel(p.get<art::InputTag>("TrackLabel", "pandoraTrack")),
84  fWireLabel(p.get<art::InputTag>("WireLabel", "calowire")),
85  fDigitLabels(p.get<std::vector<art::InputTag>>("DigitLabels", {})),
86  fT0Label(p.get<art::InputTag>("T0Label", "")),
87  fSignalShapingWindow(p.get<float>("SignalShapingWindow")),
88  fTransverseDiffusionScale(p.get<float>("TransverseDiffusionScale")),
89  fLongitudinalDiffusionScale(p.get<float>("LongitudinalDiffusionScale")),
90  fAppendExtraHit(p.get<bool>("AppendExtraHit", false)),
91  fPrependExtraHit(p.get<bool>("PrependExtraHit", false)),
92  fUseWires(p.get<bool>("UseWires", true)),
93  fCryostat(p.get<unsigned>("Cryostat", 0))
94 {
95  produces<std::vector<recob::Hit>>();
96  produces<art::Assns<recob::Track, recob::Hit, recob::TrackHitMeta>>();
97  // produces<art::Assns<recob::Hit, recob::Wire>>();
98 }
99 
100 recob::Hit sbn::TrackAreaHit::MakeHit(const recob::Wire &wire, const geo::WireID &wireID, const geo::GeometryCore *geo, raw::TDCtick_t startTick, raw::TDCtick_t endTick) const {
101  // garbage values for some fields which are not applicable
102  raw::ChannelID_t hitChannel = geo->PlaneWireToChannel(wireID);
103  raw::TDCtick_t hitStartTick = -1000;
104  bool setstartTick = false;
105  raw::TDCtick_t hitEndTick = -1000;
106  bool setendTick = false;
107  float hitPeakTime = (startTick + endTick) / 2.; // recob::Hit time unit is also [ticks]
108  float hitSigmaPeakTime = (endTick - startTick) / 2.;
109  float hitRMS = (endTick - startTick) / 2.;
110  float hitPeakAmplitude = 0.;
111  float hitSigmaPeakAmplitude = 0.;
112  float hitSumADC = 0.; // we're going to set this one
113  float hitIntegral = 0.; // this one too
114  float hitSigmaIntegral = 0.; // TODO: this one?
115  short int hitMultiplicity = 1; // no pulse trains here
116  short int hitLocalIndex = 0;
117  float hitGoodnessOfFit = -999999;
118  short int hitNDF = 0;
119  geo::View_t hitView = geo->View(wireID);
120  geo::SigType_t hitSignalType = geo->SignalType(wireID);
121  geo::WireID hitWire = wireID;
122 
123  //std::cout << "Hit view: " << hitView << " " << " sigType: " << hitSignalType << " wireID: " << wireID << std::endl;
124 
125  const recob::Wire::RegionsOfInterest_t &ROI = wire.SignalROI();
127  raw::TDCtick_t roiStart = range.begin_index();
128  raw::TDCtick_t roiEnd = range.end_index();
129 
130  //std::cout << "Window from: " << startTick << " to " << endTick << std::endl;
131  //std::cout << "ROI from: " << roiStart << " to " << roiEnd << std::endl;
132  // check for overlap
133  if (roiStart <= endTick && startTick <= roiEnd) {
134  // shrink the ROI to the integration window
135  if (roiStart < startTick && startTick <= roiEnd) range.move_head(startTick);
136  if (roiEnd > endTick && endTick >= roiStart) range.move_tail(endTick);
137 
138  // integrate
139  for (float v: range) {
140  hitSumADC += v;
141  hitIntegral += v;
142  }
143 
144  // update start and end time
145  raw::TDCtick_t thisStart = std::max(roiStart, startTick);
146  raw::TDCtick_t thisEnd = std::min(roiEnd, endTick);
147 
148  //std::cout << "Integrating from " << thisStart << " to " << thisEnd << std::endl;
149  //std::cout << "Total integral: " << hitIntegral << std::endl;
150 
151  if (!setstartTick || thisStart < hitStartTick) {
152  hitStartTick = thisStart;
153  setstartTick = true;
154  }
155  if (!setendTick || thisEnd > hitEndTick) {
156  hitEndTick = thisEnd;
157  setendTick = true;
158  }
159  }
160  }
161 
162  // if we didn't integrate anything don't save this hit
163  if (!setstartTick || !setendTick) return recob::Hit();
164 
165  // construct the hit
166  recob::Hit thisHit(
167  hitChannel,
168  hitStartTick,
169  hitEndTick,
170  hitPeakTime,
171  hitSigmaPeakTime,
172  hitRMS,
173  hitPeakAmplitude,
174  hitSigmaPeakAmplitude,
175  hitSumADC,
176  hitIntegral,
177  hitSigmaIntegral,
178  hitMultiplicity,
179  hitLocalIndex,
180  hitGoodnessOfFit,
181  hitNDF,
182  hitView,
183  hitSignalType,
184  hitWire
185  );
186 
187  return thisHit;
188 }
189 
190 recob::Hit sbn::TrackAreaHit::MakeHit(const raw::RawDigit &digit, const geo::WireID &wireID, const geo::GeometryCore *geo, raw::TDCtick_t startTick, raw::TDCtick_t endTick) const {
191 
192  // clamp the tick range inside the digits
193  startTick = std::max(0, startTick);
194  endTick = std::min((int)digit.NADC()-1, endTick);
195 
196  // garbage values for some fields which are not applicable
197  raw::ChannelID_t hitChannel = geo->PlaneWireToChannel(wireID);
198  raw::TDCtick_t hitStartTick = startTick;
199  raw::TDCtick_t hitEndTick = endTick;
200  float hitPeakTime = (startTick + endTick) / 2.; // recob::Hit time unit is also [ticks]
201  float hitSigmaPeakTime = (endTick - startTick) / 2.;
202  float hitRMS = (endTick - startTick) / 2.;
203  float hitPeakAmplitude = 0.;
204  float hitSigmaPeakAmplitude = 0.;
205  float hitSumADC = 0.; // we're going to set this one
206  float hitIntegral = 0.; // this one too
207  float hitSigmaIntegral = 0.; // TODO: this one?
208  short int hitMultiplicity = 1; // no pulse trains here
209  short int hitLocalIndex = 0;
210  float hitGoodnessOfFit = -999999;
211  short int hitNDF = 0;
212  geo::View_t hitView = geo->View(wireID);
213  geo::SigType_t hitSignalType = geo->SignalType(wireID);
214  geo::WireID hitWire = wireID;
215 
216  for (int i_adc = startTick; i_adc <= endTick; i_adc++) {
217  hitSumADC += digit.ADC(i_adc);
218  hitIntegral += digit.ADC(i_adc);
219  }
220 
221  // construct the hit
222  recob::Hit thisHit(
223  hitChannel,
224  hitStartTick,
225  hitEndTick,
226  hitPeakTime,
227  hitSigmaPeakTime,
228  hitRMS,
229  hitPeakAmplitude,
230  hitSigmaPeakAmplitude,
231  hitSumADC,
232  hitIntegral,
233  hitSigmaIntegral,
234  hitMultiplicity,
235  hitLocalIndex,
236  hitGoodnessOfFit,
237  hitNDF,
238  hitView,
239  hitSignalType,
240  hitWire
241  );
242 
243  return thisHit;
244 }
245 
246 void sbn::TrackAreaHit::produce(art::Event& e)
247 {
248  // output data products
249  std::unique_ptr<art::Assns<recob::Track, recob::Hit, recob::TrackHitMeta>> assn(new art::Assns<recob::Track, recob::Hit, recob::TrackHitMeta>);
250  std::unique_ptr<std::vector<recob::Hit>> outHits(new std::vector<recob::Hit>);
251 
252  // If using wires
253  std::unique_ptr<art::Assns<recob::Hit, recob::Wire>> wireAssn(new art::Assns<recob::Hit, recob::Wire>);
254  // If using digits
255  std::unique_ptr<art::Assns<recob::Hit, raw::RawDigit>> digitAssn(new art::Assns<recob::Hit, raw::RawDigit>);
256 
257 
258  art::PtrMaker<recob::Hit> hitPtrMaker{e};
259 
260  // input data
261  art::Handle<std::vector<recob::Track>> track_handle;
262  e.getByLabel(fTrackLabel, track_handle);
263 
264  std::vector<art::Ptr<recob::Track>> tracks;
265  art::fill_ptr_vector(tracks, track_handle);
266 
267  std::vector<art::Ptr<recob::Wire>> wires;
268  std::vector<art::Ptr<raw::RawDigit>> digits;
269 
270  if (fUseWires) {
271  auto const& wire_handle = e.getValidHandle<std::vector<recob::Wire>>(fWireLabel);
272  art::fill_ptr_vector(wires, wire_handle);
273  }
274  else {
275  for (const art::InputTag &l: fDigitLabels) {
276  auto const& digit_handle = e.getValidHandle<std::vector<raw::RawDigit>>(l);
277  art::fill_ptr_vector(digits, digit_handle);
278  }
279  }
280 
281  art::FindManyP<anab::T0> fmT0(tracks, e, fT0Label);
282 
283  const geo::GeometryCore *geo = lar::providerFrom<geo::Geometry>();
284  auto const dclock = art::ServiceHandle<detinfo::DetectorClocksService const>()->DataFor(e);
285  auto const dprop =
286  art::ServiceHandle<detinfo::DetectorPropertiesService const>()->DataFor(e, dclock);
287 
288  // auto const g4param = art::ServiceHandle<sim::LArG4Parameters const>();
289  art::ServiceHandle<sim::LArG4Parameters const> g4param;
290 
291  std::set<unsigned> channels;
292 
293  for (unsigned i = 0; i < tracks.size(); i++) {
294  const recob::Track &track = *tracks[i];
295 
296  // Look up if the track was shifted by some T0
297  double track_t0 = 0.;
298  if (!fT0Label.empty()) {
299  const std::vector<art::Ptr<anab::T0>> &t0 = fmT0.at(i);
300  if (t0.size()) {
301  track_t0 = t0.at(0)->Time() / 1e3 /* ns -> us */;
302  }
303  // std::cout << "T0: " << t0.at(0)->Time() << " corr: " << track_t0 << std::endl;
304  }
305 
306  // get the cryostat
307  geo::CryostatID cid(fCryostat);
308  for (auto const &planeID: geo->IteratePlaneIDs(cid)) {
309  int lastWire = -100000;
310  for (size_t j = 0; j < track.NumberTrajectoryPoints()-1; j++) {
311  // go to the next valid point
312  j = track.NextValidPoint(j);
313  // break if bad/at end of trajectory
314  if (!(j < track.NumberTrajectoryPoints()-1) || j == recob::TrackTrajectory::InvalidIndex) {
315  break;
316  }
317 
318  // get the next valid point as well -- if the next valid point is at the end, break
319  size_t next_point_ind = track.NextValidPoint(j+1);
320  // break if bad/at end of trajectory
321  if (!(next_point_ind < track.NumberTrajectoryPoints()) || next_point_ind == recob::TrackTrajectory::InvalidIndex) {
322  break;
323  }
324 
325  recob::Track::Point_t thispoint_p = track.LocationAtPoint(j);
326  recob::Track::Point_t nextpoint_p = track.LocationAtPoint(next_point_ind);
327  TVector3 thispoint (thispoint_p.X(), thispoint_p.Y(), thispoint_p.Z());
328  TVector3 nextpoint (nextpoint_p.X(), nextpoint_p.Y(), nextpoint_p.Z());
329 
330  // if we're not in the TPC cooresponding to this plane, continue
331  if (!geo->TPC(planeID).ContainsPosition(thispoint)) continue;
332 
333  // calculate overlap with wires
334  double thiswirecoord = geo->WireCoordinate(thispoint_p, planeID);
335  double nextwirecoord = geo->WireCoordinate(nextpoint_p, planeID);
336 
337  int wireStart = std::nearbyint((thiswirecoord >= nextwirecoord) ? std::floor(thiswirecoord) : std::ceil(thiswirecoord));
338  int wireEnd = std::nearbyint((thiswirecoord >= nextwirecoord) ? std::floor(nextwirecoord) : std::ceil(nextwirecoord));
339 
340  // if we're not crossing a wire continue
341  if (wireStart == wireEnd) continue;
342 
343  // check the validity of the range of wires
344  if (!(wireStart >= 0 && wireStart < (int)geo->Plane(planeID).Nwires())) {
345  std::cout << "At end of trajectory: " <<
346  "Can't find wire for track trajectory position at: " <<
347  thispoint.X() << " " << thispoint.Y() << " " << thispoint.Z() <<
348  ". Returned start wire is " << wireStart << " (max: " << geo->Plane(planeID).Nwires() << ")" << std::endl;
349  break;
350  }
351  if (!(wireEnd >= 0 && wireEnd <= (int)geo->Plane(planeID).Nwires())) {
352  std::cout << "At end of trajectory: " <<
353  "Can't find wire for track trajectory position at: " <<
354  nextpoint.X() << " " << nextpoint.Y() << " " << nextpoint.Z() <<
355  ". Returned end wire is " << wireEnd << " (max: " << geo->Plane(planeID).Nwires() << ")" << std::endl;
356  break;
357  }
358 
359  // if this wire is the same as the last skip it
360  if (wireStart == lastWire) {
361  if (wireStart < wireEnd) wireStart ++;
362  else wireStart --;
363  }
364 
365  // again continue if this wouldn't cross a new wire
366  if (wireStart == wireEnd) continue;
367 
368  // get the integration window
369  float x = thispoint.X();
370  recob::Track::Vector_t dir_v = track.DirectionAtPoint(j);
371  TVector3 dir(dir_v.X(), dir_v.Y(), dir_v.Z());
372 
373  // Get time from X [ticks]
374  //
375  // Undo any T0 correction to the track to get back to the hits
376  float time = dprop.ConvertXToTicks(x, planeID) + track_t0 * geo->TPC(planeID).DriftDir()[0] / dclock.TPCClock().TickPeriod();
377 
378  // get the geometric time window [ticks]
379  //
380  // First get the projected length in the direction towards the wireplane
381  //
382  // Effective pitch as in the Calorimetry module
383  double angleToVert = geo->WireAngleToVertical(geo->View(planeID), planeID) - 0.5*::util::pi<>();
384  double cosgamma = std::abs(std::sin(angleToVert)*dir.Y() + std::cos(angleToVert)*dir.Z());
385  double effpitch = geo->WirePitch() / cosgamma;
386 
387  // Add in the contribution from diffusion
388  float xdrift = abs(x - geo->TPC(planeID).PlaneLocation(0)[0]); // Copied from G4 / DriftIonizationElectrons
389  float tdrift = xdrift / dprop.DriftVelocity();
390  effpitch += fTransverseDiffusionScale * sqrt(2*tdrift*g4param->TransverseDiffusion());
391 
392  double proj_length = abs(effpitch * dir.X() / sqrt(1 - dir.X() * dir.X()));
393  // if the projected length is too big, clamp it to the track length
394  proj_length = std::min(proj_length, abs(track.Length() * dir.X()));
395 
396  // convert the length to a window in ticks
397  double window = (proj_length / dprop.DriftVelocity()) / dclock.TPCClock().TickPeriod();
398 
399  // add in the window from signal shaping [ticks]
400  window += fSignalShapingWindow;
401  // And longitudinal Diffsion
402  window += (fLongitudinalDiffusionScale*sqrt(2*tdrift*g4param->LongitudinalDiffusion()) / dprop.DriftVelocity()) / dclock.TPCClock().TickPeriod();
403 
404  // convert to a TDCTick range
405  raw::TDCtick_t startTick = std::nearbyint(std::floor(time - window / 2.));
406  raw::TDCtick_t endTick = std::nearbyint(std::ceil(time + window / 2.));
407 
408  int incl = wireStart < wireEnd ? 1 : -1;
409  for (int wire = wireStart; wire != wireEnd; wire += incl) {
410  //std::cout << "Got wire: " << wire << std::endl;
411  geo::WireID wireID {planeID, (geo::WireID::WireID_t) wire};
412  lastWire = wire;
413 
414  // Get the channel of this wire
415  unsigned channel = geo->PlaneWireToChannel(wireID);
416 
417  // If we have already seen this channel, ignore it.
418  //
419  // This can happen in ICARUS because TPC channels are duplicated across
420  // multiple "logical" TPC's in planes 1 and 2. We don't want to
421  // double-count the charge on those channels
422  if (channels.count(channel)) continue;
423 
424  channels.insert(channel);
425 
426  // Make the hit -- using wires or digits
427 
428  recob::Hit thisHit;
429  int assoc_ind;
430  if (fUseWires) {
431  // First find the corresponding recob::Wire
432  int wire_ind = -1;
433  for (unsigned i_rwire = 0; i_rwire < wires.size(); i_rwire++) {
434  if (channel == wires[i_rwire]->Channel()) {
435  wire_ind = (int)i_rwire;
436  break;
437  }
438  }
439  assoc_ind = wire_ind;
440 
441  // make the hit
442  thisHit = MakeHit(*wires.at(wire_ind), wireID, geo, startTick, endTick);
443  }
444  else {
445  // Find the digits
446  int digit_ind = -1;
447  for (unsigned i_digit = 0; i_digit < digits.size(); i_digit++) {
448  if (channel == digits[i_digit]->Channel()) {
449  digit_ind = (int)i_digit;
450  break;
451  }
452  }
453  assoc_ind = digit_ind;
454 
455  // Make the hit
456  thisHit = MakeHit(*digits.at(digit_ind), wireID, geo, startTick, endTick);
457  }
458 
459  // if invalid hit, ignore it
460  if (thisHit.WireID().Wire == geo::WireID::InvalidID) continue;
461 
462  // construct the track meta object
463  recob::TrackHitMeta thisHitMeta(j);
464 
465  // save to output data
466  outHits->push_back(thisHit);
467 
468  // add to the association
469  art::Ptr<recob::Hit> thisHitPtr = hitPtrMaker(outHits->size()-1);
470  assn->addSingle(tracks[i], thisHitPtr, thisHitMeta);
471  if (fUseWires) {
472  wireAssn->addSingle(thisHitPtr, wires[assoc_ind]);
473  }
474  else {
475  digitAssn->addSingle(thisHitPtr, digits[assoc_ind]);
476  }
477  }
478  }
479  }
480  }
481 
482  e.put(std::move(outHits));
483  e.put(std::move(assn));
484  if (fUseWires) {
485  e.put(std::move(wireAssn));
486  }
487  else {
488  e.put(std::move(digitAssn));
489  }
490 
491 }
492 
493 DEFINE_ART_MODULE(sbn::TrackAreaHit)
geo::Length_t WireCoordinate(double YPos, double ZPos, geo::PlaneID const &planeid) const
Returns the index of the nearest wire to the specified position.
Store parameters for running LArG4.
Data product for reconstructed trajectory in space.
Vector DriftDir() const
Returns the direction of the drift (vector pointing toward the planes).
Definition: TPCGeo.h:773
art::InputTag fTrackLabel
Utilities related to art service access.
PlaneGeo const & Plane(unsigned int const p, unsigned int const tpc=0, unsigned int const cstat=0) const
Returns the specified wire.
Collection of charge vs time digitized from a single readout channel.
Definition: RawDigit.h:69
ClusterModuleLabel join with tracks
short ADC(int i) const
ADC vector element number i; no decompression is applied.
Definition: RawDigit.h:208
process_name opflash particleana ie x
enum geo::_plane_proj View_t
Enumerate the possible plane projections.
geo::WireID WireID() const
Definition: Hit.h:233
Declaration of signal hit object.
Point_t const & LocationAtPoint(size_t i) const
pdgs p
Definition: selectors.fcl:22
fUseWires(p.get< bool >("UseWires", true))
recob::Hit MakeHit(const recob::Wire &wire, const geo::WireID &wireID, const geo::GeometryCore *geo, raw::TDCtick_t startTick, raw::TDCtick_t endTick) const
fAppendExtraHit(p.get< bool >("AppendExtraHit", false))
size_t NumberTrajectoryPoints() const
Various functions related to the presence and the number of (valid) points.
Class to keep data related to recob::Hit associated with recob::Track.
Definition of basic raw digits.
const range_list_t & get_ranges() const
Returns the internal list of non-void ranges.
static constexpr WireID_t InvalidID
Special code for an invalid ID.
Definition: geo_types.h:577
fT0Label(p.get< art::InputTag >("T0Label",""))
WireID_t Wire
Index of the wire within its plane.
Definition: geo_types.h:580
process_name use argoneut_mc_hitfinder track
Data related to recob::Hit associated with recob::Track.The purpose is to collect several variables t...
Definition: TrackHitMeta.h:43
fTransverseDiffusionScale(p.get< float >("TransverseDiffusionScale"))
SigType_t SignalType(geo::PlaneID const &pid) const
Returns the type of signal on the channels of specified TPC plane.
geo::Length_t WirePitch(geo::PlaneID const &planeid) const
Returns the distance between two consecutive wires.
TrackAreaHit(fhicl::ParameterSet const &p)
int TDCtick_t
Type representing a TDC tick.
Definition: RawTypes.h:25
tracking::Vector_t Vector_t
IteratorBox< plane_id_iterator,&GeometryCore::begin_plane_id,&GeometryCore::end_plane_id > IteratePlaneIDs() const
Enables ranged-for loops on all plane IDs of the detector.
Access the description of detector geometry.
T abs(T value)
Collection of exceptions for Geometry system.
double Length(size_t p=0) const
Access to various track properties.
enum geo::_plane_sigtype SigType_t
size_t NADC() const
Number of elements in the compressed ADC sample vector.
Definition: RawDigit.h:207
const RegionsOfInterest_t & SignalROI() const
Returns the list of regions of interest.
Definition: Wire.h:228
Data product for reconstructed trajectory in space.
Description of geometry of one entire detector.
View_t View(geo::PlaneID const &pid) const
Returns the view (wire orientation) on the channels of specified TPC plane.
fLongitudinalDiffusionScale(p.get< float >("LongitudinalDiffusionScale"))
Provides recob::Track data product.
tuple dir
Definition: dropbox.py:28
std::vector< art::InputTag > fDigitLabels
raw::ChannelID_t PlaneWireToChannel(WireID const &wireid) const
Returns the ID of the TPC channel connected to the specified wire.
fPrependExtraHit(p.get< bool >("PrependExtraHit", false))
size_t NextValidPoint(size_t index) const
static constexpr size_t InvalidIndex
Value returned on failed index queries.
unsigned int Nwires() const
Number of wires in this plane.
Definition: PlaneGeo.h:269
tracking::Point_t Point_t
do i e
Class holding the regions of interest of signal from a channel.
Definition: Wire.h:118
Range class, with range and data.
void produce(art::Event &e) override
unsigned int WireID_t
Type for the ID number.
Definition: geo_types.h:561
Declaration of basic channel signal object.
TrackAreaHit & operator=(TrackAreaHit const &)=delete
Vector_t DirectionAtPoint(size_t i) const
TPCGeo const & TPC(unsigned int const tpc=0, unsigned int const cstat=0) const
Returns the specified TPC.
2D representation of charge deposited in the TDC/wire plane
Definition: Hit.h:48
unsigned int ChannelID_t
Type representing the ID of a readout channel.
Definition: RawTypes.h:28
Class defining a sparse vector (holes are zeroes)
const double * PlaneLocation(unsigned int p) const
Definition: TPCGeo.cxx:382
bool ContainsPosition(geo::Point_t const &point, double wiggle=1.0) const
Returns whether this volume contains the specified point.
double WireAngleToVertical(geo::View_t view, geo::TPCID const &tpcid) const
Returns the angle of the wires in the specified view from vertical.
fSignalShapingWindow(p.get< float >("SignalShapingWindow"))
art framework interface to geometry description
BEGIN_PROLOG could also be cout
Track from a non-cascading particle.A recob::Track consists of a recob::TrackTrajectory, plus additional members relevant for a &quot;fitted&quot; track:
The data type to uniquely identify a cryostat.
Definition: geo_types.h:190
art::InputTag fWireLabel