36 fClusterFromTrack(clusterFromTrack),
37 fMuonEndTimeCut(p.
get<
int>(
"MuonEndTimeCut")),
38 fMuonBodyTimeCut(p.
get<
int>(
"MuonBodyTimeCut")),
39 fMuonEndSphereRadius(p.
get<
int>(
"MuonEndSphereRadius")),
40 fMuonBodyCylinderRadius(p.
get<
int>(
"MuonBodyCylinderRadius")),
41 fFiducialVolume(p.
get<
fhicl::ParameterSet>(
"FiducialVolume")),
42 fFVMinX(fFiducialVolume.
get<
int>(
"MinX")),
43 fFVMaxX(fFiducialVolume.
get<
int>(
"MaxX")),
44 fFVMinY(fFiducialVolume.
get<
int>(
"MinY")),
45 fFVMaxY(fFiducialVolume.
get<
int>(
"MaxY")),
46 fFVMinZ(fFiducialVolume.
get<
int>(
"MinZ")),
47 fFVMaxZ(fFiducialVolume.
get<
int>(
"MaxZ")),
85 TVector3 w0(r0.Z(), r0.Dot(w), 0);
86 TVector3 w1( p.Z(), p.Dot(w), 0);
106 double wHitZ = r0.Z();
107 double wHitW = r0.Dot(w);
110 std::vector<TVector3>
const & trackTrajPoints = t->
Trajectory();
111 int min_square_distance = -1;
112 for (TVector3 trajPoint : trackTrajPoints) {
113 double wTrajZ = trajPoint.Z();
114 double wTrajW = trajPoint.Dot(w);
115 double square_distance =
std::pow((wTrajZ - wHitZ), 2) +
std::pow((wTrajW - wHitW), 2);
119 if (min_square_distance < 0 || square_distance < min_square_distance) {
120 min_square_distance = square_distance;
152 std::vector<art::Ptr<rb::Track>> tracks;
157 for (
size_t trackId=0; trackId<tracks.size(); ++trackId) {
168 double trackMinTNS = track->
MinTNS();
169 double trackMaxTNS = track->
MaxTNS();
172 unsigned int idxStartCellHit = 0;
175 double hitTNS = hit->
TNS();
178 if (hitTNS < trackMinTNS) {
179 idxStartCellHit =
idx;
184 if (std::find(trackHits.begin(), trackHits.end(), hit) != trackHits.end()) {
185 idxStartCellHit =
idx;
189 bool kPassedHitTrackEndTime = hitTNS <= (trackMaxTNS +
fMuonEndTimeCut);
195 if (!kPassedHitTrackEndTime && !kPassedHitTrackBodyTime) {
200 if (!kPassedHitTrackEndSpace && !kPassedHitTrackBodySpace) {
212 if (kPassedHitTrackBodyTime && kPassedHitTrackBodySpace) {
void SetVetoRegion(int muonEndTimeCut, int muonBodyTimeCut, int muonEndSphereRadius, int muonBodyCylinderRadius)
unsigned short Plane() const
Vertical planes which measure X.
bool PointIsContained(const TVector3 &p)
Track enters the detector and stops inside.
void SortByTime(std::vector< art::Ptr< rb::CellHit > > &c)
Sort c in time order (earliest to latest).
const PlaneGeo * Plane(unsigned int i) const
virtual TVector3 Start() const
TrackActivityRemover(sn::HitVetoMap &vetoMap, fhicl::ParameterSet const &p, art::ServiceHandle< geo::Geometry > &geom, art::FindOneP< rb::Cluster > &clusterFromTrack)
Horizontal planes which measure Y.
art::FindOneP< rb::Cluster > & fClusterFromTrack
sn::HitVetoMap & fVetoMap
int fMuonBodyTimeCut
Min. time difference between hit and track to reject [ns].
unsigned short Cell() const
void SortTracksByTime(std::vector< art::Ptr< rb::Track >> &t)
Sort t in time order (earliest to latest).
Track starts inside the detector and exits.
double DistanceHitToTrackBody(const art::Ptr< rb::CellHit > &h, const art::Ptr< rb::Track > &t)
const Cut kContained([](const caf::SRProxy *sr){return(sr->slc.boxmin.Z() > 100 && sr->slc.boxmax.Z()< 800);})
2 di-block era contained-type event selector
void AddHit(rawdata::RawDigit h)
sn::TrackType GetTrackType(const art::Ptr< rb::Track > &track)
int fMuonEndSphereRadius
Min. distance of hit from track end to reject [cm].
art::ServiceHandle< geo::Geometry > & fGeom
int fMuonBodyCylinderRadius
Min. distance of hit from track to reject [cm].
int fMuonEndTimeCut
Min. time difference between hit and track end to reject [ns].
double DistanceHitToPoint(const art::Ptr< rb::CellHit > &h, const TVector3 &p)
std::vector< TVector3 > const & Trajectory() const
return a constant reference to the track trajectory points
const Cut kThroughGoing([](const caf::SRProxy *sr){return(sr->slc.boxmin.Z()< 100 && sr->slc.boxmax.Z() > 800);})
2 di-block era through-going-type event selector
void remove(std::vector< art::Ptr< rb::CellHit >> &hits, art::Handle< std::vector< rb::Track >> &hdlTracks)
TVector3 Stop() const
Position of the final trajectory point.
void fill_ptr_vector(std::vector< Ptr< T >> &ptrs, H const &h)
Encapsulate the geometry of one entire detector (near, far, ndos)