diff --git a/NPSimulation/EventGenerator/EventGeneratorCosmic.cc b/NPSimulation/EventGenerator/EventGeneratorCosmic.cc index c5ce9d1a05d13a97bf1b57b263fa18f5616dd150..8da25d58d72ce30198c2973522626874695e7572 100644 --- a/NPSimulation/EventGenerator/EventGeneratorCosmic.cc +++ b/NPSimulation/EventGenerator/EventGeneratorCosmic.cc @@ -23,6 +23,12 @@ #include<limits> #include <cstdlib> +#include "TROOT.h" // to use gROOT point +#include "TMath.h" +#include "TRandom.h" +#include "TFormula.h" +#include "TF1.h" + // G4 headers #include "G4ParticleTable.hh" #include "G4IonTable.hh" @@ -123,6 +129,21 @@ void EventGeneratorCosmic::ReadConfiguration(NPL::InputParser parser){ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + + G4double CosmicAngle; + G4double H = 1500*mm; + G4double R = 500*mm; + G4double x0 =0; + G4double m_y0 = 0; + G4double z0 = 0; + G4double momentum_x = 0; + G4double momentum_z = 0; + G4double randomize1=0, randomize2=0 ; + G4double momentum_y = 0; + G4double angle = 0; + TF1* cosSq= new TF1("cosSq2", "TMath::Power(cos(x),2)", 0, (TMath::Pi())/2); + void EventGeneratorCosmic::GenerateEvent(G4Event*){ for(auto& par : m_Parameters) { @@ -141,14 +162,7 @@ void EventGeneratorCosmic::GenerateEvent(G4Event*){ } } - - - G4double cos_theta_min = cos(par.m_HalfOpenAngleMin); - G4double cos_theta_max = cos(par.m_HalfOpenAngleMax); - G4double cos_theta = cos_theta_min + (cos_theta_max - cos_theta_min) * RandFlat::shoot(); - G4double theta = acos(cos_theta) ; - //G4double phi = RandFlat::shoot() * 2 * pi ; - + G4double particle_energy = par.m_EnergyLow ;//+ RandFlat::shoot() * (par.m_EnergyHigh - par.m_EnergyLow) ; event_ID++; @@ -158,19 +172,10 @@ void EventGeneratorCosmic::GenerateEvent(G4Event*){ - G4double angle = RandFlat::shoot()*2*pi; - G4double angle2 = (.5-RandFlat::shoot())*pi; - G4double momentum_y = RandFlat::shoot() ; - G4double CosmicAngle = acos(sqrt(momentum_y)); - G4double H = 600; - G4double R = 300; - G4double x0 =0; - G4double z0 = 0; - G4double momentum_x = 0; - G4double momentum_z = 0; - - G4double randomize = .5-RandFlat::shoot(); - + angle = RandFlat::shoot()*2*pi; + CosmicAngle = cosSq2->GetRandom(); + randomize1 = RandFlat::shoot() ; + randomize2 = RandFlat::shoot() ; /* //Putting a cylinder if(randomize>0){ //top @@ -191,23 +196,26 @@ void EventGeneratorCosmic::GenerateEvent(G4Event*){ } */ - // Begin Constrain to pass in a circle with radius 3R + // Begin Constrain to pass in a square with L = 3* R + x0 = R*(randomize1-0.5)*3; + z0 = R*(randomize2-0.5)*3; + momentum_y = cos(CosmicAngle); momentum_x = cos(angle)*sin(CosmicAngle); momentum_z = sin(angle)*sin(CosmicAngle); - x0 = cos(angle2*2)*R*(0.5-randomize)*3-momentum_x*( H/2 / momentum_y);// *( H/2 / momentum_y) this is to have the origin always with par.m_y0 = H/2; - z0 = sin(angle2*2)*R*(0.5-randomize)*3-momentum_z*( H/2 / momentum_y); - par.m_y0 = H/2; // momentum_y*( H/2 / momentum_y); - // End Constrain to pass in a circle with radius 3R + x0 = x0-momentum_x*( H/2 / momentum_y);// *( H/2 / momentum_y) this is to have the origin always with par.m_y0 = H/2; + z0 = z0-momentum_z*( H/2 / momentum_y); + par.m_y0 = H/2; // momentum_y*( H/2 / momentum_y); + // End Constrain to pass in a square with L = 3* R momentum_y = -momentum_y; - Particle particle(par.m_particle, theta,particle_energy,G4ThreeVector(momentum_x, momentum_y, momentum_z),G4ThreeVector(x0, par.m_y0, z0)); + Particle particle(par.m_particle, 0,particle_energy,G4ThreeVector(momentum_x, momentum_y, momentum_z),G4ThreeVector(x0, par.m_y0, z0)); m_ParticleStack->AddParticleToStack(particle);