FairRoot/PandaRoot
MaterialEffects.h
Go to the documentation of this file.
1 /* Copyright 2008-2014, 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 */
19 
24 #ifndef genfit_MaterialEffects_h
25 #define genfit_MaterialEffects_h
26 
27 #include "RKTools.h"
28 #include "AbsMaterialInterface.h"
29 
30 #include <iostream>
31 #include <vector>
32 
33 #include <TObject.h>
34 #include <TVector3.h>
35 
36 
37 namespace genfit {
38 
51 class MaterialEffects : public TObject {
52 
53  private:
54 
56  virtual ~MaterialEffects();
57 
59 
60 
61 public:
62 
63  static MaterialEffects* getInstance();
64  static void destruct();
65 
67  void init(AbsMaterialInterface* matIfc);
68  bool isInitialized() { return materialInterface_ != nullptr; }
69 
70  void setNoEffects(bool opt = true) {noEffects_ = opt;}
71 
72  void setEnergyLossBetheBloch(bool opt = true) {energyLossBetheBloch_ = opt; noEffects_ = false;}
73  void setNoiseBetheBloch(bool opt = true) {noiseBetheBloch_ = opt; noEffects_ = false;}
74  void setNoiseCoulomb(bool opt = true) {noiseCoulomb_ = opt; noEffects_ = false;}
75  void setEnergyLossBrems(bool opt = true) {energyLossBrems_ = opt; noEffects_ = false;}
76  void setNoiseBrems(bool opt = true) {noiseBrems_ = opt; noEffects_ = false;}
78 
84  void setMscModel(const std::string& modelName);
85 
86 
88  double effects(const std::vector<RKStep>& steps,
89  int materialsFXStart,
90  int materialsFXStop,
91  const double& mom,
92  const int& pdg,
93  M7x7* noise = nullptr);
94 
100  void stepper(const RKTrackRep* rep,
101  M1x7& state7,
102  const double& mom, // momentum
103  double& relMomLoss, // relative momloss for the step will be added
104  const int& pdg,
105  MaterialProperties& currentMaterial,
106  StepLimits& limits,
107  bool varField = true);
108 
109  void setDebugLvl(unsigned int lvl = 1);
110 
111 
112  void drawdEdx(int pdg = 11);
113 
114  private:
115 
117  void getParticleParameters();
118 
119  void getMomGammaBeta(double Energy,
120  double& mom, double& gammaSquare, double& gamma, double& betaSquare) const;
121 
123 
126  double momentumLoss(double stepSign, double mom, bool linear);
127 
129  double dEdx(double Energy) const;
130 
131 
133  double dEdxBetheBloch(double betaSquare, double gamma, double gammasquare) const;
134 
136 
144  void noiseBetheBloch(M7x7& noise, double mom, double betaSquare, double gamma, double gammaSquare) const;
145 
147 
154  void noiseCoulomb(M7x7& noise,
155  const M1x3& direction, double momSquare, double betaSquare) const;
156 
158 
162  double dEdxBrems(double mom) const;
163 
165 
167  void noiseBrems(M7x7& noise, double momSquare, double betaSquare) const;
168 
169 
170 
172 
178 
180 
181  const double me_; // electron mass (GeV)
182 
183  double stepSize_; // stepsize
184 
185  // cached values for energy loss and noise calculations
186  double dEdx_; // Runkge Kutta dEdx
187  double E_; // Runge Kutta Energy
188  double matDensity_;
189  double matZ_;
190  double matA_;
192  double mEE_; // mean excitation energy
193 
194  int pdg_;
195  int charge_;
196  double mass_;
197 
199 
201 
202  unsigned int debugLvl_;
203 
204  // ClassDef(MaterialEffects, 1);
205 
206 };
207 
208 } /* End of namespace genfit */
211 #endif // genfit_MaterialEffects_h
Helper to store different limits on the stepsize for the RKTRackRep.
Definition: StepLimits.h:54
double momentumLoss(double stepSign, double mom, bool linear)
Returns momentum loss.
void noiseBetheBloch(M7x7 &noise, double mom, double betaSquare, double gamma, double gammaSquare) const
calculation of energy loss straggeling
Abstract base class for geometry interfacing.
double effects(const std::vector< RKStep > &steps, int materialsFXStart, int materialsFXStop, const double &mom, const int &pdg, M7x7 *noise=nullptr)
Calculates energy loss in the traveled path, optional calculation of noise matrix.
void noiseCoulomb(M7x7 &noise, const M1x3 &direction, double momSquare, double betaSquare) const
calculation of multiple scattering
Material properties needed e.g. for material effects calculation.
Double_t mom
Definition: plot_dirc.C:14
void ignoreBoundariesBetweenEqualMaterials(bool opt=true)
double dEdxBetheBloch(double betaSquare, double gamma, double gammasquare) const
Uses Bethe Bloch formula to calculate dEdx.
void noiseBrems(M7x7 &noise, double momSquare, double betaSquare) const
calculation of energy loss straggeling
void setEnergyLossBrems(bool opt=true)
void stepper(const RKTrackRep *rep, M1x7 &state7, const double &mom, double &relMomLoss, const int &pdg, MaterialProperties &currentMaterial, StepLimits &limits, bool varField=true)
Returns maximum length so that a specified momentum loss will not be exceeded.
void setEnergyLossBetheBloch(bool opt=true)
void setNoEffects(bool opt=true)
Stepper and energy loss/noise matrix calculation.
void getMomGammaBeta(double Energy, double &mom, double &gammaSquare, double &gamma, double &betaSquare) const
static MaterialEffects * getInstance()
void setNoiseBrems(bool opt=true)
double M1x7[1 *7]
Definition: RKTools.h:36
AbsMaterialInterface * materialInterface_
depending on this number a specific msc model is chosen in the noiseCoulomb function.
void getParticleParameters()
sets charge_, mass_
void init(AbsMaterialInterface *matIfc)
set the material interface here. Material interface classes must be derived from AbsMaterialInterface...
void setNoiseBetheBloch(bool opt=true)
static void destruct()
static MaterialEffects * instance_
void setNoiseCoulomb(bool opt=true)
void setMscModel(const std::string &modelName)
Select the multiple scattering model that will be used during track fit.
double M1x3[1 *3]
Definition: RKTools.h:33
AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v) ...
void setDebugLvl(unsigned int lvl=1)
double M7x7[7 *7]
Definition: RKTools.h:39
double noise
double dEdxBrems(double mom) const
Returns dEdx.
void drawdEdx(int pdg=11)
Matrix inversion tools.
Definition: AbsBField.h:29
double dEdx(double Energy) const
Calculate dEdx for a given energy.