ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtFindVertex.h
Go to the documentation of this file.
1 #ifndef ATFINDVERTEX_H
2 #define ATFINDVERTEX_H
3 // IWYU pragma: no_include <ext/alloc_traits.h>
4 
5 #include "AtTrack.h"
6 
7 #include <Math/Vector3D.h> // for DisplacemenXYZVectorD
8 #include <Math/Vector3Dfwd.h> // for XYZVector
9 #include <Rtypes.h>
10 
11 #include <algorithm> // for max
12 #include <utility> // for pair
13 #include <vector> // for vector
14 
16 
17 struct tracksFromVertex {
19  std::vector<AtTrack> tracks;
20 };
21 
22 class AtFindVertex {
23 
24 public:
25  AtFindVertex(Double_t lineDistThreshold = 15);
26  virtual ~AtFindVertex();
27 
28  void FindVertex(std::vector<AtTrack> tracks, Int_t nbTracksPerVtx);
29  void FindVertexSingleLine(std::vector<AtTrack> tracks);
30  void FindVertexMultipleLines(std::vector<AtTrack> tracks, Int_t nbTracksPerVtx);
31  XYZVector ClosestPoint2Lines(std::vector<Double_t> line1, std::vector<Double_t> line2);
32  std::vector<XYZVector> ClosestPointProjOnLines(std::vector<Double_t> line1, std::vector<Double_t> line2);
33  std::vector<std::vector<Int_t>> SortTrackSameVtx(std::vector<std::vector<Double_t>> lines);
34  std::vector<XYZVector> CoGVtx(std::vector<std::vector<Int_t>> vtxCand, std::vector<std::vector<Double_t>> lines,
35  std::vector<Double_t> wlines);
36  std::vector<std::pair<Int_t, XYZVector>>
37  CoGVtxSingleTrack(std::vector<std::vector<Double_t>> lines, std::vector<Int_t> itracks);
38  XYZVector ptOnLine(std::vector<Double_t> line, XYZVector pointToProj);
39  Double_t distPtLine(XYZVector dir, XYZVector ptLine, XYZVector pt);
40  Double_t distLines(std::vector<Double_t> line1, std::vector<Double_t> line2);
41  Double_t angLines(std::vector<Double_t> line1, std::vector<Double_t> line2);
42  Bool_t checkExclusivity(std::vector<Int_t> v1, std::vector<Int_t> v2);
43 
44  void SetTracksVertex(tracksFromVertex val) { fTracksFromVertex.push_back(val); }
45 
46  void SetLineDistThreshold(Double_t val) { fLineDistThreshold = val; }
47 
48  void SetBeam(XYZVector pos, XYZVector dir)
49  {
50  fBeamPoint = pos;
51  fBeamDir = dir;
52  fBeamLine.resize(6);
53  fBeamLine[0] = fBeamPoint.X();
54  fBeamLine[1] = fBeamPoint.Y();
55  fBeamLine[2] = fBeamPoint.Z();
56  fBeamLine[3] = fBeamDir.X();
57  fBeamLine[4] = fBeamDir.Y();
58  fBeamLine[5] = fBeamDir.Z();
59  }
60 
61  std::vector<tracksFromVertex> GetTracksVertex() { return fTracksFromVertex; }
62 
63 private:
64  std::vector<tracksFromVertex> fTracksFromVertex;
65 
66  Double_t fLineDistThreshold;
67  XYZVector fBeamPoint;
68  XYZVector fBeamDir;
69  std::vector<Double_t> fBeamLine;
70  std::vector<std::vector<Double_t>> fLineCand;
71 };
72 
73 #endif //#ifndef AtFindVertex_H
AtFindVertex::checkExclusivity
Bool_t checkExclusivity(std::vector< Int_t > v1, std::vector< Int_t > v2)
AtFindVertex::SortTrackSameVtx
std::vector< std::vector< Int_t > > SortTrackSameVtx(std::vector< std::vector< Double_t >> lines)
AtFindVertex::angLines
Double_t angLines(std::vector< Double_t > line1, std::vector< Double_t > line2)
AtFindVertex::AtFindVertex
AtFindVertex(Double_t lineDistThreshold=15)
tracksFromVertex::vertex
XYZVector vertex
Definition: AtFindVertex.h:23
XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtFindVertex.h:20
AtFindVertex::distLines
Double_t distLines(std::vector< Double_t > line1, std::vector< Double_t > line2)
AtFindVertex::distPtLine
Double_t distPtLine(XYZVector dir, XYZVector ptLine, XYZVector pt)
AtFindVertex::SetLineDistThreshold
void SetLineDistThreshold(Double_t val)
Definition: AtFindVertex.h:46
AtFindVertex::SetBeam
void SetBeam(XYZVector pos, XYZVector dir)
Definition: AtFindVertex.h:48
tracksFromVertex
Definition: AtFindVertex.h:22
AtFindVertex::ptOnLine
XYZVector ptOnLine(std::vector< Double_t > line, XYZVector pointToProj)
AtFindVertex::CoGVtxSingleTrack
std::vector< std::pair< Int_t, XYZVector > > CoGVtxSingleTrack(std::vector< std::vector< Double_t >> lines, std::vector< Int_t > itracks)
AtFindVertex::SetTracksVertex
void SetTracksVertex(tracksFromVertex val)
Definition: AtFindVertex.h:44
AtFindVertex::ClosestPoint2Lines
XYZVector ClosestPoint2Lines(std::vector< Double_t > line1, std::vector< Double_t > line2)
AtFindVertex::GetTracksVertex
std::vector< tracksFromVertex > GetTracksVertex()
Definition: AtFindVertex.h:61
tracksFromVertex::tracks
std::vector< AtTrack > tracks
Definition: AtFindVertex.h:24
AtTrack.h
AtFindVertex::FindVertexSingleLine
void FindVertexSingleLine(std::vector< AtTrack > tracks)
AtFindVertex::FindVertexMultipleLines
void FindVertexMultipleLines(std::vector< AtTrack > tracks, Int_t nbTracksPerVtx)
AtFindVertex::CoGVtx
std::vector< XYZVector > CoGVtx(std::vector< std::vector< Int_t >> vtxCand, std::vector< std::vector< Double_t >> lines, std::vector< Double_t > wlines)
AtFindVertex
Definition: AtFindVertex.h:27
AtFindVertex::FindVertex
void FindVertex(std::vector< AtTrack > tracks, Int_t nbTracksPerVtx)
AtFindVertex::ClosestPointProjOnLines
std::vector< XYZVector > ClosestPointProjOnLines(std::vector< Double_t > line1, std::vector< Double_t > line2)
AtFindVertex::~AtFindVertex
virtual ~AtFindVertex()