GENFIT  Rev:NoNumberAvailable
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
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 <TVector3.h>
34 
35 
36 namespace genfit {
37 
51 
52  private:
53 
55  virtual ~MaterialEffects();
56 
58 
59 
60 public:
61 
62  static MaterialEffects* getInstance();
63  static void destruct();
64 
66  void init(AbsMaterialInterface* matIfc);
67  bool isInitialized() { return materialInterface_ != nullptr; }
68 
69  void setNoEffects(bool opt = true) {noEffects_ = opt;}
70 
71  void setEnergyLossBetheBloch(bool opt = true) {energyLossBetheBloch_ = opt; noEffects_ = false;}
72  void setNoiseBetheBloch(bool opt = true) {noiseBetheBloch_ = opt; noEffects_ = false;}
73  void setNoiseCoulomb(bool opt = true) {noiseCoulomb_ = opt; noEffects_ = false;}
74  void setEnergyLossBrems(bool opt = true) {energyLossBrems_ = opt; noEffects_ = false;}
75  void setNoiseBrems(bool opt = true) {noiseBrems_ = opt; noEffects_ = false;}
77 
83  void setMscModel(const std::string& modelName);
84 
85 
87  double effects(const std::vector<RKStep>& steps,
88  int materialsFXStart,
89  int materialsFXStop,
90  const double& mom,
91  const int& pdg,
92  M7x7* noise = nullptr);
93 
99  void stepper(const RKTrackRep* rep,
100  M1x7& state7,
101  const double& mom, // momentum
102  double& relMomLoss, // relative momloss for the step will be added
103  const int& pdg,
104  MaterialProperties& currentMaterial,
105  StepLimits& limits,
106  bool varField = true);
107 
108  void setDebugLvl(unsigned int lvl = 1);
109 
110 
111  void drawdEdx(int pdg = 11);
112 
113  private:
114 
116  void getParticleParameters();
117 
118  void getMomGammaBeta(double Energy,
119  double& mom, double& gammaSquare, double& gamma, double& betaSquare) const;
120 
122 
125  double momentumLoss(double stepSign, double mom, bool linear);
126 
128  double dEdx(double Energy) const;
129 
130 
132  double dEdxBetheBloch(double betaSquare, double gamma, double gammasquare) const;
133 
135 
143  void noiseBetheBloch(M7x7& noise, double mom, double betaSquare, double gamma, double gammaSquare) const;
144 
146 
153  void noiseCoulomb(M7x7& noise,
154  const M1x3& direction, double momSquare, double betaSquare) const;
155 
157 
161  double dEdxBrems(double mom) const;
162 
164 
166  void noiseBrems(M7x7& noise, double momSquare, double betaSquare) const;
167 
168 
169 
171 
177 
179 
180  const double me_; // electron mass (GeV)
181 
182  double stepSize_; // stepsize
183 
184  // cached values for energy loss and noise calculations
185  double dEdx_; // Runkge Kutta dEdx
186  double E_; // Runge Kutta Energy
187  double matDensity_;
188  double matZ_;
189  double matA_;
191  double mEE_; // mean excitation energy
192 
193  int pdg_;
194  int charge_;
195  double mass_;
196 
198 
200 
201  unsigned int debugLvl_;
202 
203  // ClassDef(MaterialEffects, 1);
204 
205 };
206 
207 } /* End of namespace genfit */
210 #endif // genfit_MaterialEffects_h
Helper to store different limits on the stepsize for the RKTRackRep.
Definition: StepLimits.h:54
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.
static MaterialEffects * instance_
double dEdxBrems(double mom) const
Returns dEdx.
void setDebugLvl(unsigned int lvl=1)
void setNoiseBetheBloch(bool opt=true)
void ignoreBoundariesBetweenEqualMaterials(bool opt=true)
Abstract base class for geometry interfacing.
Stepper and energy loss/noise matrix calculation.
void getParticleParameters()
sets charge_, mass_
double momentumLoss(double stepSign, double mom, bool linear)
Returns momentum loss.
void setNoEffects(bool opt=true)
void noiseBrems(M7x7 &noise, double momSquare, double betaSquare) const
calculation of energy loss straggeling
double dEdx(double Energy) const
Calculate dEdx for a given energy.
void setEnergyLossBrems(bool opt=true)
void getMomGammaBeta(double Energy, double &mom, double &gammaSquare, double &gamma, double &betaSquare) const
AbsMaterialInterface * materialInterface_
depending on this number a specific msc model is chosen in the noiseCoulomb function.
void setNoiseCoulomb(bool opt=true)
void noiseCoulomb(M7x7 &noise, const M1x3 &direction, double momSquare, double betaSquare) const
calculation of multiple scattering
void setMscModel(const std::string &modelName)
Select the multiple scattering model that will be used during track fit.
void init(AbsMaterialInterface *matIfc)
set the material interface here. Material interface classes must be derived from AbsMaterialInterface...
AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v) ...
Definition: RKTrackRep.h:71
Material properties needed e.g. for material effects calculation.
void setEnergyLossBetheBloch(bool opt=true)
void drawdEdx(int pdg=11)
void setNoiseBrems(bool opt=true)
static MaterialEffects * getInstance()
void noiseBetheBloch(M7x7 &noise, double mom, double betaSquare, double gamma, double gammaSquare) const
calculation of energy loss straggeling
double dEdxBetheBloch(double betaSquare, double gamma, double gammasquare) const
Uses Bethe Bloch formula to calculate dEdx.
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.
Defines for I/O streams used for error and debug printing.