Skip to content
Snippets Groups Projects
Commit 6ef38183 authored by deserevi's avatar deserevi
Browse files

merge of '634be25985e2d51f636650543cb5f3440985ec04'

     and 'b550f53aaf2bbf99a77df5272fa1b15221230058'
parents 04a8f762 088e64dc
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