EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MaterialEffects.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file MaterialEffects.h
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  Material& 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