Belle II Software  release-08-01-10
AbsTrackRep.h
1 /* Copyright 2008-2010, Technische Universitaet Muenchen,
2  Authors: Christian Hoeppner & Sebastian Neubert & Johannes Rauch
3 
4  This file is part of GENFIT.
5 
6  GENFIT is free software: you can redistribute it and/or modify
7  it under the terms of the GNU Lesser General Public License as published
8  by the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  GENFIT is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public License
17  along with GENFIT. If not, see <http://www.gnu.org/licenses/>.
18 */
23 #ifndef genfit_AbsTrackRep_h
24 #define genfit_AbsTrackRep_h
25 
26 #include "SharedPlanePtr.h"
27 //#include "MaterialInfo.h"
28 #include "Material.h"
29 
30 #include <TVector3.h>
31 #include <TObject.h>
32 #include <TVectorD.h>
33 #include <TMatrixD.h>
34 #include <TMatrixDSym.h>
35 
36 
37 namespace genfit {
38 
42 struct MatStep {
43  Material material_;
44  double stepSize_;
45 
46  MatStep() {
47  stepSize_ = 0;
48  }
49 
50 };
51 
52 class StateOnPlane;
54 class AbsMeasurement;
55 
66 class AbsTrackRep : public TObject {
67 
68  public:
69 
70  AbsTrackRep();
71  AbsTrackRep(int pdgCode, char propDir = 0);
72 
73  virtual ~AbsTrackRep() {;}
74 
76  virtual AbsTrackRep* clone() const = 0;
77 
87  virtual double extrapolateToPlane(
88  StateOnPlane& state,
89  const genfit::SharedPlanePtr& plane,
90  bool stopAtBoundary = false,
91  bool calcJacobianNoise = false) const = 0;
92 
102  virtual double extrapolateToLine(StateOnPlane& state,
103  const TVector3& linePoint,
104  const TVector3& lineDirection,
105  bool stopAtBoundary = false,
106  bool calcJacobianNoise = false) const = 0;
107 
120  virtual double extrapolateToLine(StateOnPlane& state,
121  const TVector3& point1,
122  const TVector3& point2,
123  TVector3& poca,
124  TVector3& dirInPoca,
125  TVector3& poca_onwire,
126  bool stopAtBoundary = false,
127  bool calcJacobianNoise = false) const {
128  TVector3 wireDir(point2 - point1);
129  wireDir = wireDir.Unit();
130  double retval = this->extrapolateToLine(state, point1, wireDir, stopAtBoundary, calcJacobianNoise);
131  poca = this->getPos(state);
132  dirInPoca = this->getMom(state);
133  dirInPoca = dirInPoca.Unit();
134 
135  poca_onwire = point1 + wireDir*((poca - point1)*wireDir);
136 
137  return retval;
138  }
139 
149  virtual double extrapolateToPoint(StateOnPlane& state,
150  const TVector3& point,
151  bool stopAtBoundary = false,
152  bool calcJacobianNoise = false) const = 0;
153 
163  virtual double extrapolateToPoint(StateOnPlane& state,
164  const TVector3& point,
165  const TMatrixDSym& G, // weight matrix (metric)
166  bool stopAtBoundary = false,
167  bool calcJacobianNoise = false) const = 0;
168 
178  virtual double extrapolateToCylinder(StateOnPlane& state,
179  double radius,
180  const TVector3& linePoint = TVector3(0.,0.,0.),
181  const TVector3& lineDirection = TVector3(0.,0.,1.),
182  bool stopAtBoundary = false,
183  bool calcJacobianNoise = false) const = 0;
184 
194  virtual double extrapolateToCone(StateOnPlane& state,
195  double radius,
196  const TVector3& linePoint = TVector3(0.,0.,0.),
197  const TVector3& lineDirection = TVector3(0.,0.,1.),
198  bool stopAtBoundary = false,
199  bool calcJacobianNoise = false) const = 0;
200 
210  virtual double extrapolateToSphere(StateOnPlane& state,
211  double radius,
212  const TVector3& point = TVector3(0.,0.,0.),
213  bool stopAtBoundary = false,
214  bool calcJacobianNoise = false) const = 0;
215 
225  virtual double extrapolateBy(StateOnPlane& state,
226  double step,
227  bool stopAtBoundary = false,
228  bool calcJacobianNoise = false) const = 0;
229 
232  const AbsMeasurement* measurement,
233  bool stopAtBoundary = false,
234  bool calcJacobianNoise = false) const;
235 
237  virtual unsigned int getDim() const = 0;
238 
240  virtual TVector3 getPos(const StateOnPlane& state) const = 0;
241 
243  virtual TVector3 getMom(const StateOnPlane& state) const = 0;
244 
246  TVector3 getDir(const StateOnPlane& state) const {return getMom(state).Unit();}
247 
249  virtual void getPosMom(const StateOnPlane& state, TVector3& pos, TVector3& mom) const = 0;
250 
252  void getPosDir(const StateOnPlane& state, TVector3& pos, TVector3& dir) const {getPosMom(state, pos, dir); dir.SetMag(1.);}
253 
255  virtual TVectorD get6DState(const StateOnPlane& state) const;
256 
258  virtual TMatrixDSym get6DCov(const MeasuredStateOnPlane& state) const = 0;
259 
261  virtual void getPosMomCov(const MeasuredStateOnPlane& state, TVector3& pos, TVector3& mom, TMatrixDSym& cov) const = 0;
262 
264  virtual void get6DStateCov(const MeasuredStateOnPlane& state, TVectorD& stateVec, TMatrixDSym& cov) const;
265 
267  virtual double getMomMag(const StateOnPlane& state) const = 0;
269  virtual double getMomVar(const MeasuredStateOnPlane& state) const = 0;
270 
272  int getPDG() const {return pdgCode_;}
273 
275  double getPDGCharge() const;
276 
281  virtual double getCharge(const StateOnPlane& state) const = 0;
283  virtual double getQop(const StateOnPlane& state) const = 0;
285  double getMass(const StateOnPlane& state) const;
286 
288  char getPropDir() const {return propDir_;}
289 
291  virtual void getForwardJacobianAndNoise(TMatrixD& jacobian, TMatrixDSym& noise, TVectorD& deltaState) const = 0;
292 
294  virtual void getBackwardJacobianAndNoise(TMatrixD& jacobian, TMatrixDSym& noise, TVectorD& deltaState) const = 0;
295 
297  virtual std::vector<genfit::MatStep> getSteps() const = 0;
298 
300  virtual double getRadiationLenght() const = 0;
301 
303  // should keep this up to date with the time of flight.
304  virtual double getTime(const StateOnPlane&) const = 0;
305 
310  void calcJacobianNumerically(const genfit::StateOnPlane& origState,
311  const genfit::SharedPlanePtr destPlane,
312  TMatrixD& jacobian) const;
313 
315  bool switchPDGSign();
316 
318  virtual void setPosMom(StateOnPlane& state, const TVector3& pos, const TVector3& mom) const = 0;
320  virtual void setPosMom(StateOnPlane& state, const TVectorD& state6) const = 0;
322  virtual void setPosMomErr(MeasuredStateOnPlane& state, const TVector3& pos, const TVector3& mom, const TVector3& posErr, const TVector3& momErr) const = 0;
324  virtual void setPosMomCov(MeasuredStateOnPlane& state, const TVector3& pos, const TVector3& mom, const TMatrixDSym& cov6x6) const = 0;
326  virtual void setPosMomCov(MeasuredStateOnPlane& state, const TVectorD& state6, const TMatrixDSym& cov6x6) const = 0;
327 
329  virtual void setChargeSign(StateOnPlane& state, double charge) const = 0;
331  virtual void setQop(StateOnPlane& state, double qop) const = 0;
333  virtual void setTime(StateOnPlane& state, double time) const = 0;
334 
336  void setPropDir(int dir) {
337  if (dir>0) propDir_ = 1;
338  else if (dir<0) propDir_ = -1;
339  else propDir_ = 0;
340  };
341 
344 
346  virtual bool isSameType(const AbsTrackRep* other) = 0;
347 
349  virtual bool isSame(const AbsTrackRep* other) = 0;
350 
351  virtual void setDebugLvl(unsigned int lvl = 1) {debugLvl_ = lvl;}
352 
353  virtual void Print(const Option_t* = "") const;
354 
355  protected:
356 
358  AbsTrackRep(const AbsTrackRep&);
361 
362 
364  int pdgCode_;
366  char propDir_;
367 
368  unsigned int debugLvl_;
369 
370  public:
371  ClassDef(AbsTrackRep,1)
372 
373 };
374 
375 } /* End of namespace genfit */
378 #endif // genfit_AbsTrackRep_h
Contains the measurement and covariance in raw detector coordinates.
Abstract base class for a track representation.
Definition: AbsTrackRep.h:66
virtual void setTime(StateOnPlane &state, double time) const =0
Set time at which the state was defined.
double extrapolateToMeasurement(StateOnPlane &state, const AbsMeasurement *measurement, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
extrapolate to an AbsMeasurement
Definition: AbsTrackRep.cc:50
virtual unsigned int getDim() const =0
Get the dimension of the state vector used by the track representation.
virtual void setPosMomCov(MeasuredStateOnPlane &state, const TVector3 &pos, const TVector3 &mom, const TMatrixDSym &cov6x6) const =0
Set position, momentum and covariance of state.
virtual double extrapolateToLine(StateOnPlane &state, const TVector3 &linePoint, const TVector3 &lineDirection, bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to the POCA to a line, and returns the extrapolation length and,...
virtual TVectorD get6DState(const StateOnPlane &state) const
Get the 6D state vector (x, y, z, p_x, p_y, p_z).
Definition: AbsTrackRep.cc:59
virtual bool isSameType(const AbsTrackRep *other)=0
check if other is of same type (e.g. RKTrackRep).
virtual double getTime(const StateOnPlane &) const =0
Get the time corresponding to the StateOnPlane. Extrapolation.
bool switchPDGSign()
try to multiply pdg code with -1. (Switch from particle to anti-particle and vice versa).
Definition: AbsTrackRep.cc:183
virtual double extrapolateToPoint(StateOnPlane &state, const TVector3 &point, bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to the POCA to a point, and returns the extrapolation length and,...
char getPropDir() const
Get propagation direction. (-1, 0, 1) -> (backward, auto, forward).
Definition: AbsTrackRep.h:288
virtual TVector3 getMom(const StateOnPlane &state) const =0
Get the cartesian momentum vector of a state.
virtual double extrapolateToPoint(StateOnPlane &state, const TVector3 &point, const TMatrixDSym &G, bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to the POCA to a point in the metric of G, and returns the extrapolation lengt...
AbsTrackRep & operator=(const AbsTrackRep &)
protect from calling assignment operator from outside the class. Use clone() instead!
double getPDGCharge() const
Get the charge of the particle of the pdg code.
Definition: AbsTrackRep.cc:93
double getMass(const StateOnPlane &state) const
Get tha particle mass in GeV/c^2.
Definition: AbsTrackRep.cc:100
virtual double getMomMag(const StateOnPlane &state) const =0
get the magnitude of the momentum in GeV.
virtual double getCharge(const StateOnPlane &state) const =0
Get the (fitted) charge of a state.
virtual double getQop(const StateOnPlane &state) const =0
Get charge over momentum.
void getPosDir(const StateOnPlane &state, TVector3 &pos, TVector3 &dir) const
Get cartesian position and direction vector of a state.
Definition: AbsTrackRep.h:252
char propDir_
propagation direction (-1, 0, 1) -> (backward, auto, forward)
Definition: AbsTrackRep.h:366
virtual void setPosMom(StateOnPlane &state, const TVectorD &state6) const =0
Set position and momentum of state.
virtual double extrapolateToLine(StateOnPlane &state, const TVector3 &point1, const TVector3 &point2, TVector3 &poca, TVector3 &dirInPoca, TVector3 &poca_onwire, bool stopAtBoundary=false, bool calcJacobianNoise=false) const
Resembles the interface of GFAbsTrackRep in old versions of genfit.
Definition: AbsTrackRep.h:120
virtual void setChargeSign(StateOnPlane &state, double charge) const =0
Set the sign of the charge according to charge.
virtual void setQop(StateOnPlane &state, double qop) const =0
Set charge/momentum.
virtual void setPosMom(StateOnPlane &state, const TVector3 &pos, const TVector3 &mom) const =0
Set position and momentum of state.
int pdgCode_
Particle code.
Definition: AbsTrackRep.h:364
virtual double extrapolateToSphere(StateOnPlane &state, double radius, const TVector3 &point=TVector3(0., 0., 0.), bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to the sphere surface, and returns the extrapolation length and,...
virtual double getMomVar(const MeasuredStateOnPlane &state) const =0
get the variance of the absolute value of the momentum .
virtual void getForwardJacobianAndNoise(TMatrixD &jacobian, TMatrixDSym &noise, TVectorD &deltaState) const =0
Get the jacobian and noise matrix of the last extrapolation.
virtual double extrapolateToCone(StateOnPlane &state, double radius, const TVector3 &linePoint=TVector3(0., 0., 0.), const TVector3 &lineDirection=TVector3(0., 0., 1.), bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to the cone surface, and returns the extrapolation length and,...
virtual bool isSame(const AbsTrackRep *other)=0
check if other is of same type (e.g. RKTrackRep) and has same pdg code.
virtual double extrapolateBy(StateOnPlane &state, double step, bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state by step (cm) and returns the extrapolation length and, via reference,...
virtual double extrapolateToPlane(StateOnPlane &state, const genfit::SharedPlanePtr &plane, bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to plane, and returns the extrapolation length and, via reference,...
void switchPropDir()
Switch propagation direction. Has no effect if propDir_ is set to 0.
Definition: AbsTrackRep.h:343
int getPDG() const
Get the pdg code.
Definition: AbsTrackRep.h:272
TVector3 getDir(const StateOnPlane &state) const
Get the direction vector of a state.
Definition: AbsTrackRep.h:246
virtual double getRadiationLenght() const =0
Get the accumulated X/X0 (path / radiation length) of the material crossed in the last extrapolation.
void setPropDir(int dir)
Set propagation direction. (-1, 0, 1) -> (backward, auto, forward).
Definition: AbsTrackRep.h:336
virtual void setPosMomErr(MeasuredStateOnPlane &state, const TVector3 &pos, const TVector3 &mom, const TVector3 &posErr, const TVector3 &momErr) const =0
Set position and momentum and error of state.
virtual TVector3 getPos(const StateOnPlane &state) const =0
Get the cartesian position of a state.
virtual void getBackwardJacobianAndNoise(TMatrixD &jacobian, TMatrixDSym &noise, TVectorD &deltaState) const =0
Get the jacobian and noise matrix of the last extrapolation if it would have been done in opposite di...
void calcJacobianNumerically(const genfit::StateOnPlane &origState, const genfit::SharedPlanePtr destPlane, TMatrixD &jacobian) const
Calculate Jacobian of transportation numerically.
Definition: AbsTrackRep.cc:105
virtual double extrapolateToCylinder(StateOnPlane &state, double radius, const TVector3 &linePoint=TVector3(0., 0., 0.), const TVector3 &lineDirection=TVector3(0., 0., 1.), bool stopAtBoundary=false, bool calcJacobianNoise=false) const =0
Extrapolates the state to the cylinder surface, and returns the extrapolation length and,...
virtual void setPosMomCov(MeasuredStateOnPlane &state, const TVectorD &state6, const TMatrixDSym &cov6x6) const =0
Set position, momentum and covariance of state.
virtual void get6DStateCov(const MeasuredStateOnPlane &state, TVectorD &stateVec, TMatrixDSym &cov) const
Translates MeasuredStateOnPlane into 6D state vector (x, y, z, p_x, p_y, p_z) and 6x6 covariance.
Definition: AbsTrackRep.cc:77
virtual TMatrixDSym get6DCov(const MeasuredStateOnPlane &state) const =0
Get the 6D covariance.
virtual void getPosMomCov(const MeasuredStateOnPlane &state, TVector3 &pos, TVector3 &mom, TMatrixDSym &cov) const =0
Translates MeasuredStateOnPlane into 3D position, momentum and 6x6 covariance.
virtual std::vector< genfit::MatStep > getSteps() const =0
Get stepsizes and material properties of crossed materials of the last extrapolation.
virtual AbsTrackRep * clone() const =0
Clone the trackRep.
virtual void getPosMom(const StateOnPlane &state, TVector3 &pos, TVector3 &mom) const =0
Get cartesian position and momentum vector of a state.
#StateOnPlane with additional covariance matrix.
A state with arbitrary dimension defined in a DetPlane.
Definition: StateOnPlane.h:47
Defines for I/O streams used for error and debug printing.
std::shared_ptr< genfit::DetPlane > SharedPlanePtr
Shared Pointer to a DetPlane.
Simple struct containing MaterialProperties and stepsize in the material.
Definition: AbsTrackRep.h:42