BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
BDSBunchGaussMatrix.cc
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) Royal Holloway,
3University of London 2001 - 2024.
4
5This file is part of BDSIM.
6
7BDSIM is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published
9by the Free Software Foundation version 3 of the License.
10
11BDSIM is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#include "BDSBunchGaussMatrix.hh"
20#include "BDSDebug.hh"
21#include "BDSUtilities.hh"
22
23#include "parser/beam.h"
24
25#include "Randomize.hh"
26#include "CLHEP/RandomObjects/RandMultiGauss.h"
27
28BDSBunchGaussMatrix::BDSBunchGaussMatrix():
29 BDSBunchGaussBase("gaussmatrix")
30{;}
31
33 const GMAD::Beam& beam,
34 const BDSBunchType& distrType,
35 G4Transform3D beamlineTransformIn,
36 const G4double beamlineSIn)
37{
38 BDSBunchGaussBase::SetOptions(beamParticle, beam, distrType, beamlineTransformIn, beamlineSIn);
39
40 sigmaGM[0][0] = beam.sigma11;
41 sigmaGM[0][1] = beam.sigma12;
42 sigmaGM[0][2] = beam.sigma13;
43 sigmaGM[0][3] = beam.sigma14;
44 sigmaGM[0][4] = beam.sigma15;
45 sigmaGM[0][5] = beam.sigma16;
46 sigmaGM[1][1] = beam.sigma22;
47 sigmaGM[1][2] = beam.sigma23;
48 sigmaGM[1][3] = beam.sigma24;
49 sigmaGM[1][4] = beam.sigma25;
50 sigmaGM[1][5] = beam.sigma26;
51 sigmaGM[2][2] = beam.sigma33;
52 sigmaGM[2][3] = beam.sigma34;
53 sigmaGM[2][4] = beam.sigma35;
54 sigmaGM[2][5] = beam.sigma36;
55 sigmaGM[3][3] = beam.sigma44;
56 sigmaGM[3][4] = beam.sigma45;
57 sigmaGM[3][5] = beam.sigma46;
58 sigmaGM[4][4] = beam.sigma55;
59 sigmaGM[4][5] = beam.sigma56;
60 sigmaGM[5][5] = beam.sigma66;
61 if (BDS::IsFinite(beam.sigma55))
62 {finiteSigmaT = true;}
63 if (BDS::IsFinite(beam.sigma66))
64 {finiteSigmaE = true;}
65
66 delete gaussMultiGen;
67 gaussMultiGen = CreateMultiGauss(*CLHEP::HepRandom::getTheEngine(), meansGM, sigmaGM);
68}
Common functionality for a 6D Gaussian distribution.
virtual void SetOptions(const BDSParticleDefinition *beamParticle, const GMAD::Beam &beam, const BDSBunchType &distrType, G4Transform3D beamlineTransformIn=G4Transform3D::Identity, const G4double beamlineS=0)
CLHEP::RandMultiGauss * gaussMultiGen
Randon number generator with sigma matrix and mean.
CLHEP::RandMultiGauss * CreateMultiGauss(CLHEP::HepRandomEngine &anEngine, const CLHEP::HepVector &mu, CLHEP::HepSymMatrix &sigma)
virtual void SetOptions(const BDSParticleDefinition *beamParticle, const GMAD::Beam &beam, const BDSBunchType &distrType, G4Transform3D beamlineTransformIn=G4Transform3D::Identity, const G4double beamlineS=0)
G4bool finiteSigmaE
Flags to ignore random number generator in case of no finite E or T.
Definition BDSBunch.hh:207
G4bool finiteSigmaT
Flags to ignore random number generator in case of no finite E or T.
Definition BDSBunch.hh:208
Wrapper for particle definition.
Improve type-safety of native enum data type in C++.
double sigma45
for the gaussian sigma matrix distribution
Definition beamBase.h:109
double sigma16
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma66
for the gaussian sigma matrix distribution
Definition beamBase.h:111
double sigma35
for the gaussian sigma matrix distribution
Definition beamBase.h:108
double sigma44
for the gaussian sigma matrix distribution
Definition beamBase.h:109
double sigma13
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma34
for the gaussian sigma matrix distribution
Definition beamBase.h:108
double sigma12
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma26
for the gaussian sigma matrix distribution
Definition beamBase.h:107
double sigma25
for the gaussian sigma matrix distribution
Definition beamBase.h:107
double sigma36
for the gaussian sigma matrix distribution
Definition beamBase.h:108
double sigma46
for the gaussian sigma matrix distribution
Definition beamBase.h:109
double sigma14
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma23
for the gaussian sigma matrix distribution
Definition beamBase.h:107
double sigma11
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma22
for the gaussian sigma matrix distribution
Definition beamBase.h:107
double sigma33
for the gaussian sigma matrix distribution
Definition beamBase.h:108
double sigma15
for the gaussian sigma matrix distribution
Definition beamBase.h:106
double sigma55
for the gaussian sigma matrix distribution
Definition beamBase.h:110
double sigma56
for the gaussian sigma matrix distribution
Definition beamBase.h:110
double sigma24
for the gaussian sigma matrix distribution
Definition beamBase.h:107
Beam class.
Definition beam.h:44
G4bool IsFinite(G4double value, G4double tolerance=std::numeric_limits< double >::epsilon())