GENFIT Rev: NoNumberAvailable
Loading...
Searching...
No Matches
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
23
24#ifndef genfit_MaterialEffects_h
25#define genfit_MaterialEffects_h
26
27#include "RKTools.h"
29
30#include <iostream>
31#include <vector>
32
33#include <TVector3.h>
34
35
36namespace genfit {
37
51
52 private:
53
55 virtual ~MaterialEffects();
56
58
59
60public:
61
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 void setMagCharge(double magCharge) {mag_charge_ = magCharge;}
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 Material& 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
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);
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
189 double matZ_;
190 double matA_;
192 double mEE_; // mean excitation energy
193
194 int pdg_;
195 double charge_;
196 double mag_charge_; // in units of e+
197 double mass_;
198
200
202
203 unsigned int debugLvl_;
204
205 // ClassDef(MaterialEffects, 1);
206
207};
208
209} /* End of namespace genfit */
211
212#endif // genfit_MaterialEffects_h
Abstract base class for geometry interfacing.
void setMscModel(const std::string &modelName)
Select the multiple scattering model that will be used during track fit.
void setNoEffects(bool opt=true)
void setMagCharge(double magCharge)
static MaterialEffects * getInstance()
void setNoiseBetheBloch(bool opt=true)
void noiseBetheBloch(M7x7 &noise, double mom, double betaSquare, double gamma, double gammaSquare) const
calculation of energy loss straggeling
void setDebugLvl(unsigned int lvl=1)
void setEnergyLossBrems(bool opt=true)
static MaterialEffects * instance_
void setEnergyLossBetheBloch(bool opt=true)
void stepper(const RKTrackRep *rep, M1x7 &state7, const double &mom, double &relMomLoss, const int &pdg, Material &currentMaterial, StepLimits &limits, bool varField=true)
Returns maximum length so that a specified momentum loss will not be exceeded.
void ignoreBoundariesBetweenEqualMaterials(bool opt=true)
AbsMaterialInterface * materialInterface_
depending on this number a specific msc model is chosen in the noiseCoulomb function.
void getParticleParameters()
sets charge_, mass_
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 init(AbsMaterialInterface *matIfc)
set the material interface here. Material interface classes must be derived from AbsMaterialInterface...
void getMomGammaBeta(double Energy, double &mom, double &gammaSquare, double &gamma, double &betaSquare) const
double dEdxBrems(double mom) const
Returns dEdx.
void noiseCoulomb(M7x7 &noise, const M1x3 &direction, double momSquare, double betaSquare) const
calculation of multiple scattering
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 setNoiseCoulomb(bool opt=true)
double momentumLoss(double stepSign, double mom, bool linear)
Returns momentum loss.
void setNoiseBrems(bool opt=true)
double dEdx(double Energy)
Calculate dEdx for a given energy.
AbsTrackRep with 5D track parameterization in plane coordinates: (q/p, u', v', u, v)
Definition RKTrackRep.h:72
Helper to store different limits on the stepsize for the RKTRackRep.
Definition StepLimits.h:54
Defines for I/O streams used for error and debug printing.
RKMatrix< 1, 7 > M1x7
Definition RKTools.h:68
RKMatrix< 7, 7 > M7x7
Definition RKTools.h:71
RKMatrix< 1, 3 > M1x3
Definition RKTools.h:66