Skip to content
45 changes: 45 additions & 0 deletions include/WCSimGenerator_NiBall.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#ifndef WCSimGenerator_NiBall_hh
#define WCSimGenerator_NiBall_hh 1

#include "G4ReactionProductVector.hh"
#include "G4ThreeVector.hh"
#include <vector>
#include "WCSimDetectorConstruction.hh"
#include "TF2.h"
#include "TGraph.h"
#include "TMath.h"


using namespace std;

class WCSimDetectorConstruction;

class WCSimGenerator_NiBall
{
public:
WCSimGenerator_NiBall(WCSimDetectorConstruction* myDC);
~WCSimGenerator_NiBall();
void Initialize();

G4ThreeVector GetRandomVertex(G4int tSymNumber);
int GetNiGammaMode() { return fNiGammaMode; }
int GetNiGammaMultiplicity() { return fNiGammaMultiplicity; }
double * GetNiGammaEnergy() { return fNiGammaEnergy; }
double * GetNiGammaPosition() { return fNiGammaPosition;}

void SettingNiBall(double fNiBallPosition[3], double rn[6]);

private:

int fNiGammaMode;
int fNiGammaMultiplicity;
double fNiGammaEnergy[4];
double fNiGammaPosition[3];
WCSimDetectorConstruction* myDetector;

// Constants of gamma production as taken from SK
static G4double NiBallBR[37];
static G4int NiBallMulti[37];
static G4double NiBallEnergy[4][37];
};
#endif
21 changes: 21 additions & 0 deletions include/WCSimPrimaryGeneratorAction.hh
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <fstream>

#include "WCSimRootOptions.hh"
#include "WCSimGenerator_NiBall.hh"
#include "TFile.h"
#include "TTree.h"
#include "TNRooTrackerVtx.hh"
Expand Down Expand Up @@ -84,8 +85,18 @@ class WCSimPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
G4String vectorFileName;
G4bool GenerateVertexInRock;
G4bool usePoissonPMT;
G4bool useNiBallEvt; // Pablo: Ni ball calibration
G4double poissonPMTMean;

// Variables for Ni ball
WCSimGenerator_NiBall* myNiBallGenerator;
double fNiBallPosition[3];
double fNiGammaDirection[3];
double rn[4];
G4double niball_X;
G4double niball_Y;
G4double niball_Z;

// These go with jhfNtuple
//G4int mode;
InteractionType_t mode;
Expand Down Expand Up @@ -155,9 +166,19 @@ class WCSimPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
inline G4bool IsGeneratingVertexInRock() { return GenerateVertexInRock; }
inline void SetGenerateVertexInRock(G4bool choice) { GenerateVertexInRock = choice; }

inline void SetNiBallX(G4double choice) { niball_X = choice; }
inline G4double GetNiBallX() { return niball_X; }
inline void SetNiBallY(G4double choice) { niball_Y = choice; }
inline G4double GetNiBallY() { return niball_Y; }
inline void SetNiBallZ(G4double choice) { niball_Z = choice; }
inline G4double GetNiBallZ() { return niball_Z; }

inline void SetPoissonPMT(G4bool choice) { usePoissonPMT = choice; }
inline G4bool IsUsingPoissonPMT(){ return usePoissonPMT; }

inline void SetNiBallEvtGenerator(G4bool choice) { useNiBallEvt = choice; }
inline G4bool IsUsingNiBallEvtGenerator() { return useNiBallEvt; }

inline void SetPoissonPMTMean(G4double val){ poissonPMTMean = val; }
inline G4double GetPoissonPMTMean(){ return poissonPMTMean; }
};
Expand Down
3 changes: 3 additions & 0 deletions include/WCSimPrimaryGeneratorMessenger.hh
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ class WCSimPrimaryGeneratorMessenger: public G4UImessenger
G4UIcmdWithAString* fileNameCmd;
G4UIcmdWithABool* poisCmd;
G4UIcmdWithADouble* poisMeanCmd;
G4UIcmdWithADouble* niball_x_Cmd;
G4UIcmdWithADouble* niball_y_Cmd;
G4UIcmdWithADouble* niball_z_Cmd;

};

Expand Down
167 changes: 167 additions & 0 deletions macros/NiBall.mac
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
# Sample setup macro with no visualization

/run/verbose 1
/tracking/verbose 0
/hits/verbose 0

## select the geometry
# Default config if you do nothing is currently SuperK
#

#/WCSim/WCgeom nuPRISM

#Select which PMT to use
#/WCSim/nuPRISM/SetPMTType PMT8inch
#/WCSim/nuPRISM/SetPMTPercentCoverage 40
#Set height of nuPRISM inner detector
#/WCSim/nuPRISM/SetDetectorHeight 6. m
#Set vertical position of inner detector, in beam coordinates
#/WCSim/nuPRISM/SetDetectorVerticalPosition 0. m
#Set diameter of inner detector
#/WCSim/nuPRISM/SetDetectorDiameter 8. m
# Set Gadolinium doping (concentration is in percent)
#/WCSim/DopingConcentration 0.1
#/WCSim/DopedWater false
#/WCSim/Construct

#Use mPMTs settings (uncomment/delete the above)
#/WCSim/WCgeom nuPRISM_mPMT
#/WCSim/WCgeom nuPRISMBeamTest_mPMT
/WCSim/WCgeom nuPRISMShort_mPMT
# Set Gadolinium doping (concentration is in percent)
#/WCSim/DopingConcentration 0.1
#/WCSim/DopedWater false
/WCSim/Construct
## OR for single mPMT mode or updating mPMT parameters:
#/control/execute macros/mPMT_nuPrism1.mac ## mPMT options: mPMT_nuPrism1.mac and 2.mac

#Added for the PMT QE option 08/17/10 (XQ)
# 1. Stacking only mean when the photon is generated
# the QE is applied to reduce the total number of photons
# 2. Stacking and sensitivity detector
# In the stacking part, the maximum QE is applied to reduce
# the total number of photons
# On the detector side, the rest of QE are applied according to QE/QE_max
# distribution. This option is in particular important for the WLS
# 3. The third option means all the QE are applied at the detector
# Good for the low energy running.
# 4. Switch off the QE, ie. set it at 100%

/WCSim/PMTQEMethod Stacking_Only
#/WCSim/PMTQEMethod Stacking_And_SensitiveDetector
#/WCSim/PMTQEMethod SensitiveDetector_Only
#/WCSim/PMTQEMethod DoNotApplyQE

#turn on or off the collection efficiency
/WCSim/PMTCollEff on

# command to choose save or not save the pi0 info 07/03/10 (XQ)
/WCSim/SavePi0 false

#choose the Trigger & Digitizer type (and options)
/DAQ/Digitizer SKI
/DAQ/Trigger NDigits

#grab the other DAQ options (thresholds, timing windows, etc.)
/control/execute macros/daq.mac


# default dark noise frequency (and conversion factor) is PMT property (NEW), set in the code.
# Below gives possibility to overwrite nominal values, eg. to switch OFF the Dark Noise.
#/DarkRate/SetDarkRate 0 kHz #Turn dark noise off
#/DarkRate/SetDarkRate 4.2 kHz #This is the value for SKI set in SKDETSIM.
#/DarkRate/SetDarkRate 8.4 kHz #For 20 inch HPDs and Box and Line PMTs, based on High QE 20in R3600 dark rate from EGADS nov 2014
#/DarkRate/SetDarkRate 3.0 kHz #For 12 inch HPDs and Box and Line PMTs, based on High QE 20in R3600 dark rate from EGADS nov 2014

# command to multiply the dark rate.
# Convert dark noise frequency before digitization to after digitization by setting suitable factor
# Again, this is now a PMT property and can be overridden here
#/DarkRate/SetConvert 1.367 #For Normal PMT
#/DarkRate/SetConvert 1.119 #For HPDs
#/DarkRate/SetConvert 1.126 #For Box and Line PMTs

# Select which time window(s) to add dark noise to
#/DarkRate/SetDarkMode 0 to add dark noise to a time window starting at
#/DarkRate/SetDarkLow to /DarkRate/SetDarkHigh [time in ns]
#/DarkRate/SetDarkMode 1 adds dark noise hits to a window of
#width /DarkRate/SetDarkWindow [time in ns] around each hit
#i.e. hit time ± (/DarkRate/SetDarkWindow) / 2
/DarkRate/SetDarkMode 1
/DarkRate/SetDarkHigh 100000
/DarkRate/SetDarkLow 0
/DarkRate/SetDarkWindow 4000

#Uncomment one of the lines below if you want to use the OGLSX or RayTracer visualizer
#/control/execute macros/visOGLSX.mac
#/control/execute macros/visRayTracer.mac
#/control/execute macros/visOGLQT.mac ## NEW

## select the input nuance-formatted vector file
## you can of course use your own
#/mygen/generator muline
#/mygen/vecfile inputvectorfile
#/mygen/vecfile h2o.2km.001-009x3_G4.kin
#/mygen/vecfile mu+.out

# Or you can use the G4 Particle Gun
# for a full list of /gun/ commands see:
# http://geant4.web.cern.ch/geant4/G4UsersDocuments/UsersGuides/ForApplicationDeveloper/html/Control/UIcommands/_gun_.html
#/mygen/generator gun
#/gun/particle e-
#/gun/particle pi0
#/gun/energy 500 MeV
#/gun/direction 1 0 0
#/gun/position 0 0 0

# Or you can use the G4 General Particle Source
# you can do a lot more with this than a monoenergetic, monodirectional, single-particle gun
# for a full list of /gps/ commands see:
# https://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/ForApplicationDeveloper/html/ch02s07.html
#/mygen/generator gps
#/gps/particle e-
#/gps/energy 500 MeV
#/gps/direction 1 0 0
#/gps/position 0 0 0

# Or you can use the laser option
# This is equivalent to the gps command, except that the gps particle energies are saved ignoring their mass
# for a full list of /gps/ commands see:
# https://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/ForApplicationDeveloper/html/ch02s07.html
# It is used for laser calibration simulation
#/mygen/generator laser
#/gps/particle opticalphoton
#/gps/energy 2.505 eV
#/gps/direction 1 0 0
#/gps/position 0 0 0
#/gps/number 1000
#/gps/ang/type iso
#/gps/ang/mintheta 0 deg
#/gps/ang/maxtheta 30 deg
#/gps/ang/minphi 0 deg
#/gps/ang/maxphi 360 deg

# Nickel calibration
# For the time being set the coordinates for the center position of the ball in cm.
# In future modify to select the calibration port and the Z-position of the ball.
/mygen/generator niball
/mygen/niball_x 120.0
/mygen/niball_y -300.0
/mygen/niball_z 975.0
#Clear the source and tell GPS to make multiple vertices
/gps/source/clear

##### NEW
/Tracking/fractionOpticalPhotonsToDraw 0.0

## change the name of the output root file, default = wcsim.root
/WCSimIO/RootFile wcsim_niball_output.root

## Boolean to select whether to save the NEUT RooTracker vertices in the output file, provided you used
## a NEUT vector file as input
/WCSimIO/SaveRooTracker 0

## set a timer running on WCSimRunAction
#/WCSimIO/Timer false

/run/beamOn 1000
#exit
Loading