Skip to content
Snippets Groups Projects
Commit 088e64dc authored by Unknown's avatar Unknown
Browse files

No commit message

No commit message
parent e3d544cb
No related branches found
No related tags found
No related merge requests found
...@@ -37,7 +37,8 @@ ...@@ -37,7 +37,8 @@
// ROOT headers // ROOT headers
#include"TRandom3.h" #include"TRandom3.h"
#include "Randomize.hh"
using namespace CLHEP;
using namespace std; using namespace std;
...@@ -59,7 +60,7 @@ public: ...@@ -59,7 +60,7 @@ public:
virtual void SetTargetCoordinate(G4double, G4double, G4double) {}; virtual void SetTargetCoordinate(G4double, G4double, G4double) {};
// Used to simulate beam emmitance effect // Used to simulate beam emmitance effect
void RandomGaussian2D(double MeanX,double MeanY,double SigmaX,double SigmaY,double &X,double &Y); void RandomGaussian2D(double MeanX,double MeanY,double SigmaX,double SigmaY,double &X,double &Y, double NumberOfSigma=7);
private: // Random Engine used by RandomGaussian2D private: // Random Engine used by RandomGaussian2D
TRandom3 m_RandomEngine ; TRandom3 m_RandomEngine ;
......
...@@ -174,19 +174,20 @@ void EventGeneratorBeam::GenerateEvent(G4Event* anEvent, G4ParticleGun* particle ...@@ -174,19 +174,20 @@ void EventGeneratorBeam::GenerateEvent(G4Event* anEvent, G4ParticleGun* particle
G4double Beam_phiY = 0 ; G4double Beam_phiY = 0 ;
//shoot inside the target with correlated angle //shoot inside the target with correlated angle
if (m_TargetRadius != 0) { if (m_TargetRadius != 0)
while (sqrt(x0*x0 + y0*y0) > m_TargetRadius) {
{ while (sqrt(x0*x0 + y0*y0) > m_TargetRadius)
RandomGaussian2D(0 , 0 , m_SigmaX , m_SigmaThetaX , x0 , Beam_thetaX ); {
RandomGaussian2D(0 , 0 , m_SigmaY , m_SigmaPhiY , y0 , Beam_phiY ); RandomGaussian2D(0 , 0 , m_SigmaX , m_SigmaThetaX , x0 , Beam_thetaX );
} RandomGaussian2D(0 , 0 , m_SigmaY , m_SigmaPhiY , y0 , Beam_phiY );
} }
}
else else
{ {
RandomGaussian2D( 0 , 0 , 0 , m_SigmaThetaX , x0 , Beam_thetaX ); RandomGaussian2D( 0 , 0 , 0 , m_SigmaThetaX , x0 , Beam_thetaX );
RandomGaussian2D( 0 , 0 , 0 , m_SigmaPhiY , y0 , Beam_phiY ); RandomGaussian2D( 0 , 0 , 0 , m_SigmaPhiY , y0 , Beam_phiY );
} }
m_InitConditions->SetICIncidentEmittanceTheta(Beam_thetaX / deg); m_InitConditions->SetICIncidentEmittanceTheta(Beam_thetaX / deg);
m_InitConditions->SetICIncidentEmittancePhi(Beam_phiY / deg); m_InitConditions->SetICIncidentEmittancePhi(Beam_phiY / deg);
......
...@@ -39,19 +39,47 @@ VEventGenerator::~VEventGenerator() ...@@ -39,19 +39,47 @@ VEventGenerator::~VEventGenerator()
{ {
} }
void VEventGenerator::RandomGaussian2D(double MeanX,double MeanY,double SigmaX,double SigmaY,double &X,double &Y) void VEventGenerator::RandomGaussian2D(double MeanX,double MeanY,double SigmaX,double SigmaY,double &X,double &Y,double NumberOfSigma)
{ {
if(SigmaX!=0)
if(SigmaX!=0)
{
X=100*SigmaX;
while(X>NumberOfSigma*SigmaX)
// X = m_RandomEngine.Gaus( MeanX , SigmaX) ;
X = RandGauss::shoot( MeanX , SigmaX);
G4cout << MeanX << " " << SigmaX << G4endl ;
double a = NumberOfSigma * SigmaX/2 ;
double b = NumberOfSigma * SigmaY/2 ;
double SigmaYPrim = b * sqrt( 1 - X*X / (a*a) ) ;
SigmaYPrim = 2*SigmaYPrim / NumberOfSigma ;
// Y = m_RandomEngine.Gaus( MeanY , SigmaYPrim) ;
Y = RandGauss::shoot( MeanY , SigmaYPrim) ;
}
else
{
X= MeanX;
Y = m_RandomEngine.Gaus( MeanY , SigmaY) ;
}
/* if(SigmaX!=0)
{ {
X = m_RandomEngine.Gaus( MeanX , SigmaX) ; X = m_RandomEngine.Gaus( MeanX , SigmaX) ;
double NumberOfSigma ; double NumberOfSigma ;
double a = SigmaX / 2. ;
NumberOfSigma = ( X / SigmaX ) ; double b = SigmaY / 2. ;
NumberOfSigma = TMath::Floor( sqrt(NumberOfSigma*NumberOfSigma) + 1) ;
NumberOfSigma = ( X / a ) ;
NumberOfSigma = TMath::Floor( sqrt(NumberOfSigma*NumberOfSigma)+1) ;
double SigmaYPrim = sqrt( NumberOfSigma*SigmaY *NumberOfSigma*SigmaY * ( 1 - X*X / (SigmaX*NumberOfSigma*SigmaX*NumberOfSigma)) ) ; double SigmaYPrim = NumberOfSigma*b * sqrt( 1 - X*X / (a*NumberOfSigma*a*NumberOfSigma) ) ;
SigmaYPrim = SigmaYPrim / NumberOfSigma ; SigmaYPrim = 2*SigmaYPrim / NumberOfSigma ;
Y = m_RandomEngine.Gaus( MeanY , SigmaYPrim) ; Y = m_RandomEngine.Gaus( MeanY , SigmaYPrim) ;
...@@ -61,6 +89,6 @@ void VEventGenerator::RandomGaussian2D(double MeanX,double MeanY,double SigmaX,d ...@@ -61,6 +89,6 @@ void VEventGenerator::RandomGaussian2D(double MeanX,double MeanY,double SigmaX,d
{ {
X= MeanX; X= MeanX;
Y = m_RandomEngine.Gaus( MeanY , SigmaY) ; Y = m_RandomEngine.Gaus( MeanY , SigmaY) ;
} }*/
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment