Implemented changes of James Lord. Compiling was possible, but no testing was done so far.
1638 lines
99 KiB
TeX
1638 lines
99 KiB
TeX
\documentclass[twoside]{dis04}
|
|
\usepackage{epsfig}
|
|
%\def\runauthor{Kamil Sedl\'{a}k}
|
|
\def\runauthor{PSI}
|
|
% for the H1 collaboration}
|
|
\def\shorttitle{musrSim}
|
|
\begin{document}
|
|
|
|
%\newcommand{\xgmy}{\ensuremath{x^{\mathrm{jets}}_\gamma} }
|
|
%\newcommand{\GeV}{\ensuremath{\mathrm{GeV}} }
|
|
%\newcommand{\pb}{\ensuremath{\mathrm{pb}} }
|
|
%\newcommand{\gevsq}{\ensuremath{\mathrm{GeV}^2} }
|
|
%\newcommand{\Etone}{\ensuremath{E^*_{T\, 1}} }
|
|
%\newcommand{\Ettwo}{\ensuremath{E^*_{T\, 2}} }
|
|
%\newcommand{\Etmy}{\ensuremath{E^*_T} }
|
|
%\newcommand{\etaone}{\ensuremath{\eta^*_{1}} }
|
|
%\newcommand{\etatwo}{\ensuremath{\eta^*_{2}} }
|
|
%\newcommand{\etamy}{\ensuremath{\eta^*} }
|
|
%\newcommand{\ycut}{\ensuremath{y_c} }
|
|
\newcommand{\musr}{\ensuremath{\mu}SR}
|
|
|
|
\title{Manual of musrSim}
|
|
%\title{GEANT Simulation Program for the
|
|
%$\mathbf{\mu}$SR Instruments}
|
|
|
|
\author{Kamil Sedl\'ak$^1$, Toni Shiroka$^1$, Zaher Salman$^1$, Jose Rodriguez$^1$, Tom Lancaster$^2$, Thomas Prokscha$^1$, Taofiq Para\"{\i}so$^1$, Robert Scheuermann$^1$, James S. Lord$^3$}
|
|
|
|
\address{{$^1$ Laboratory for Muon Spin Spectroscopy, Paul Scherrer Institut, CH-5232 Villigen PSI, Switzerland}\\
|
|
$^2$ Clarendon Laboratory, Department of Physics, Oxford University, Parks Road, Oxford OX1 3PU, UK\\
|
|
$^3$ ISIS Facility, Rutherford Appleton Laboratory, Chilton, Oxon OX11 0QX, U.K.}
|
|
%\address{{\rm (on behalf of the H1 collaboration)}\\
|
|
%Institute of Physics AS\,CR\\
|
|
%%Academy of Sciences of the Czech Republic
|
|
%Na Slovance 2, 182 21 Praha 8, Czech Republic\\
|
|
%E-mail: ksedlak@fzu.cz}
|
|
|
|
\maketitle
|
|
|
|
\abstracts{
|
|
``musrSim'' is a simulation program based on Geant4,
|
|
optimised for the $\mu$SR instruments.
|
|
This document describes some of the commands used in the user macros
|
|
of the simulation program for the $\mu$SR instruments based on the {\sc
|
|
Geant4}. The root output variables are also described.
|
|
}
|
|
|
|
%========================================================================================================
|
|
\section{Scope of the musrSim program}
|
|
The program ``musrSim'' is a relatively general program that can be used to simulate
|
|
the response of a $\mu$SR~\cite{Blundel:1999} instruments (detectors) to muons and their decay particles
|
|
(electrons, positrons and gammas), optionally including ``optical photons''.
|
|
Even though musrSim is tailored to the needs of
|
|
the $\mu$SR technique~\cite{shirokaGeant}, it has been used also
|
|
in the studies of beam-line elements like spin rotators, as well as
|
|
in the detector development
|
|
studies without any muons involved, e.g.\ to test the response of an APD-based
|
|
scintillator counters to the irradiation of Sr radioactive source~\cite{FirstExperience}.
|
|
It should be straightforward to apply musrSim also to the low energy particle-physics
|
|
experiments with muons.
|
|
|
|
The program is based on the Geant4~\cite{geant} and Root~\cite{root} libraries.
|
|
Geant4 is Monte Carlo toolkit used (not only) in particle physics to simulate
|
|
the passage of particles through detectors.
|
|
Root is an analysis tool that allows one to manipulate and analyse the simulated data,
|
|
namely to plot histograms and other graphical output.
|
|
|
|
The simulation of an instrument consists of two steps -- simulation of the instrument
|
|
response, which is done by ``musrSim'' program, and the subsequent analysis of the
|
|
simulated output by either ``musrSimAna'' program (in case of \musr instruments) or
|
|
by Root (if a special analysis is required, e.g.\ for non-\musr apparatus).
|
|
The reason for this spit is purely
|
|
practical -- while it takes a lot of computer time to simulate large statistics data
|
|
with musrSim, the subsequent analysis of the simulated data is relatively quick
|
|
and allows the user to optimise and test different options of the analysis
|
|
(e.g.\ different thresholds in positron counters, different logic in connecting
|
|
veto and coincidence detectors, different rate of incoming muons, ...).
|
|
The ``musrSimAna'' program is described in a separate manual.
|
|
|
|
The aim of the musrSim is to provide an easy-to-use simulation program, which does
|
|
not require a deep knowledge of Geant4 in order to simulate a ($\mu$SR) detector.
|
|
In our view, the main advantages of musrSim are:
|
|
\begin{itemize}
|
|
\item Simple way how to define or modify the instrument geometry, including
|
|
the sample environment, collimators and other parts.
|
|
\item Limited (ideally no) need to modify and/or recompile the source code,
|
|
because the parameters defining the instrument geometry, initial muon beam,
|
|
electromagnetic fields, and other parameters are defined in
|
|
a text file (the so called ``macro file'').
|
|
\item Implementation of the $\mu$SR-specific classes (muon spin rotation
|
|
in magnetic fields, muonium formation and decay, ...).
|
|
\item Possibility to read in the output files of the TURTLE~\cite{turtle}
|
|
program for the beam-line simulation.
|
|
\item Simple way how to define (overlapping) electromagnetic fields.
|
|
\item Output in the Root tree.
|
|
\item Possibility to analyse the output with a general ``musrSimAna'' program.
|
|
\item Possibility to use musrSim easily for calculating muon stopping profile
|
|
(also in e.g.\ sample cells) or in developments of detector components
|
|
(e.g.\ light propagation in the scintillator of a positron/muon counter
|
|
and the subsequent light collection in a photomultiplier tube or APD).
|
|
\end{itemize}
|
|
%
|
|
On the other hand, there are also some drawbacks and limitations:
|
|
\begin{itemize}
|
|
\item The user has to have an installation of Geant4 and Root before installing musrSim.
|
|
\item It is supposed the user will analyse the data with Root, therefore
|
|
Root has to be installed.
|
|
\item At present time the program does not simulate any muon-spin related
|
|
physics processes happening in the sample, except for the muon
|
|
spin rotation.
|
|
\item The simulation of one event takes much more time than the measurement
|
|
of a real event. The simulation time depends on the
|
|
complexity of the instrument geometry and on the presence of
|
|
electromagnetic fields. To simulate one million of muons
|
|
in the case of the PSI high-field instrument took about 10 hours
|
|
of a computer time of a desktop PC.
|
|
\end{itemize}
|
|
|
|
%=============================================================================================
|
|
\section{How to install and run musrSim}
|
|
To install and run musrSim, one has to install Geant4 and Root first.
|
|
The present version of musrSim has been tested with Geant version 4.9.4,
|
|
and with Root version 5.24.00. While the version of Root should not be critical,
|
|
the users of musrSim are encouraged to always use the latest version of Geant4
|
|
due to continuous improvements of this package. A novice
|
|
user of Geant4 may consider reading 30 pages of chapter~2 of the
|
|
Geant4 User's Guide for Application Developers, called
|
|
``Getting Started with Geant4 - Running a Simple Example''.
|
|
|
|
Once Geant4 has been successfully installed and some of the default Geant4 examples
|
|
has been run, the musrSim installation package can be downloaded from the web page
|
|
http://lmu.web.psi.ch/simulation/index.html.
|
|
Usually the ``env.sh'' script has to be run to set-up the environment variables
|
|
appropriately before the musrSim (and/or any other Geant4 application) can be compiled
|
|
and run.
|
|
The simulation is started by executing:
|
|
|
|
{\bf $>$ musrSim \emph{RUNNUMBER}.mac} \\
|
|
where \emph{RUNNUMBER}.mac is a ``macro file'' containing the information about
|
|
the instrument setup. The string \emph{RUNNUMBER} is an integer representing the run number.
|
|
|
|
In order to simulate a new instrument, the user has to define the following blocks of information
|
|
in the macro file:
|
|
%
|
|
\begin{itemize}
|
|
\item Define the geometry (the so-called ``volumes'') of the new instrument.
|
|
Note that in Geant4 volumes can be included inside other volumes
|
|
(a ``daughter'' volume is positioned inside its ``mother'' volume),
|
|
and it is therefore necessary to distinguish between the global (world)
|
|
coordinates and the coordinates of the daughter volumes (local coordinates).
|
|
It is not allowed to overlap the volumes (with the exception of the
|
|
daughter and mother volume, in which case the daughter volume has to be fully
|
|
contained within its mother volume).
|
|
\item Define the electric and magnetic fields.
|
|
\item Define physics processes relevant for your case.
|
|
\item Define the initial muon parameters (more generally -- initial particle parameters).
|
|
\item Define some other parameters influencing the execution of the simulation.
|
|
\item Define which variables should be written out to the output Root tree.
|
|
\item In case it is required to visualise the geometry, define the visualisation attributes.
|
|
\end{itemize}
|
|
|
|
By default, the output of the simulation is written out in the subdirectory ``data'' with
|
|
the name ``musr\_RUNNUMBER.root''. The default ``data'' subdirectory can be changed
|
|
(see Chapter~\ref{sec:otherParameters}). The simulated data are stored in a Root tree,
|
|
which is some kind of a table with many variables for every simulated event, inside
|
|
the musr\_RUNNUMBER.root file.
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{How to stop musrSim}
|
|
The execution of musrSim stops as soon as one of the following condition is fulfilled:
|
|
\begin{itemize}
|
|
\item Number of simulated events reaches the number of required events defined by
|
|
command ``{\bf /run/beamOn \emph{nrOfEvents}}'' (see Chapter~\ref{sec:otherParameters}).
|
|
\item Time for which the simulation is running exceeds the maximum allowed time defined
|
|
by command ``{\bf /musr/command maximumRunTimeAllowed \emph{timeMax}}''
|
|
(see Chapter~\ref{sec:otherParameters}).
|
|
\item Within a few seconds after a file ``RUNNUMBER.stop'' is created in the
|
|
directory, in which the musrSim program was started. This allows the user
|
|
to stop the simulation gently at any time.
|
|
\end{itemize}
|
|
If the musrSim program is killed in any other way, the output Root file does not close properly, and
|
|
subsequently can not be analysed. The simulated data are lost.
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Conventions}
|
|
The default units of the musrSim in both the macro file (RUNNUMBER.mac) and in the Root tree
|
|
are summarised in table~\ref{tab:units}.
|
|
\begin{table}[htb]\centering
|
|
\renewcommand{\arraystretch}{1.05}
|
|
\begin{tabular}{lp{5mm}l}
|
|
\hline
|
|
\lower 1mm \hbox{\textbf{Quantity}} && \lower 1mm \hbox{\textbf{Default unit}} \\[5pt]
|
|
\hline
|
|
Length && mm \\
|
|
Time && $\mu$s (sometimes ns) \\
|
|
Energy && MeV \\
|
|
Momentum && MeV/c\\
|
|
Magnetic field && tesla \\
|
|
Electric field && keV/mm \\
|
|
Angle && degree \\
|
|
\hline
|
|
\end{tabular}
|
|
\caption{The default units of musrSim.}
|
|
\label{tab:units}
|
|
\end{table}
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Tips and tricks}
|
|
\begin{itemize}
|
|
\item Visualise your instrument geometry during its construction.
|
|
\item Check the output file for error messages, especially for volume overlaps.
|
|
\item Note the the dimensions in volume definitions are often half-lengths, not
|
|
the lengths (e.g.\ half-lengths of the box edges).
|
|
\item The order of some commands in macro file matters -- e.g.\ one has to define
|
|
a mother volume before the daughter volume, etc.
|
|
\item There are some special volume names, namely \emph{World},
|
|
\emph{Target} (same as \emph{target}), \emph{M0}, \emph{M1}, \emph{M2} and
|
|
volumes starting with keywords \emph{Shield} (same as \emph{shield}), and
|
|
volumes containing string \emph{save}. All these volume influence the
|
|
behaviour of the simulation, so understand how they act (see different chapters
|
|
of this manual) before you use them.
|
|
\item When implementing a new magnetic or electric field always check that fields at
|
|
a few random space points correspond to the field you expect to observe
|
|
(use command /musr/command globalfield printFieldValueAtPoint~).
|
|
\end{itemize}
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Detector construction}
|
|
The user must first define the instrument geometry in the macro file. It should be relatively
|
|
easy to understand how this is done from the example macro files distributed with musrSim
|
|
program.
|
|
|
|
An important parameter to note in the following description of ``/musr/command construct''
|
|
command is the \emph{idNumber} -- an integer number uniquely identifying every volume.
|
|
The ID volume numbers are later on used also in the musrSimAna program, when some identification
|
|
of a volume becomes necessary (i.e.\ volumes are described by \emph{idNumber} rather than
|
|
by their \emph{name} command later on).
|
|
|
|
Another crucial parameter in ``/musr/command construct'' command
|
|
is \emph{sensitiveClass}, which defines whether the volume
|
|
is sensitive (i.e.\ a signal can be detected in the volume) or not (i.e.\ the volume
|
|
is just a dead material influencing the penetrating particles but not detecting them).
|
|
|
|
There are some special kind of volumes, which are defined by the name (or part of the name).
|
|
The user can (but does not have) to use them.
|
|
The first of them is the volume named ``Target'' (or ``target''). It is expected, that
|
|
this is the sample, and the quantities {\tt muTargetTime, muTargetPolX, muTargetPolY, muTargetPolZ,
|
|
muTargetMomX, muTargetMomY, muTargetMomZ},
|
|
will be saved when a muon enters this volumes for the first time in a given event.
|
|
|
|
The second special kind of volumes are the volumes named ``M0'', ``M1'' and ``M3'' (or ``m0'',
|
|
``m1'' and ``m3''). Typically these volumes can be trigger detectors.
|
|
The quantities {\tt muM0Time, muM0PolX, muM0PolY, muM0PolZ}
|
|
will be saved when a muon enters the volume called ``M0'' (or ``m0'') for the first time
|
|
(similarly for ``M1'' and ``M2'').
|
|
Note that it is not expected that {\tt muM0Time} should be used in the analysis of the
|
|
simulation -- one should use the {\tt det\_time\_start} quantity, which corresponds
|
|
to the measured time in the experiment.
|
|
|
|
The third class of special volumes has names starting with the string ``save''.
|
|
Their purpose in the simulation is usually to check positions
|
|
and momenta of particles at some position of the detector, even if the particle does not deposit any energy in
|
|
the given ``save'' volume. Save volumes can therefore be made of vacuum.
|
|
See section\ref{sec:rootVariables} for further details on what is saved in the Root tree.
|
|
|
|
The last special class of volumes has names starting with the string ``kill'',
|
|
``shield'' or ``Shield''.
|
|
If a particle enters the ``kill \ldots'' volume, it is removed from further simulation.
|
|
The same is true for the ``shield \ldots'' or ``Shield \ldots'' volumes for
|
|
any particle apart for a muon.
|
|
The motivation for this kind of volumes was to speed up the simulation by removing tracks
|
|
that are unlikely to hit any detector. The ``kill'', ``shield'' and ``Shield'' volumes should be use with
|
|
care.
|
|
|
|
\begin{description}
|
|
|
|
\item{\bf /musr/command construct \emph{solid} \emph{name} \emph{dimensions} ... \emph{material}
|
|
\emph{x} \emph{y} \emph{z} \emph{motherVolume} \emph{matrixName}
|
|
\emph{sensitiveClass} \emph{idNumber} }\\
|
|
This command defines a volume in {\sc Geant4} (It comprises three steps of {\sc Geant4}: defines a solid,
|
|
logical volume and physical volume. Details can be found in {\sc Geant4} manual). \\
|
|
\begin{itemize}
|
|
\item \emph{solid} (string) can be one of the G4VSolid.cc particular types, presently ``tubs'', ``cons'',
|
|
``box'', ``trd'', ``sphere'', ``para'', ``polycone''
|
|
or it can be one of the specifically implemented solids by our program as ``uprofile''
|
|
(an U-profiled bar), ``alcSupportPlate'' (shape specific to ALC support plate), ``tubsbox''
|
|
(a tube with a rectangular hole along its axis), ``tubsboxsegm''
|
|
(a volume that looks like an intersection of tube and box) and
|
|
``trd90y'' (a trd volume rotated by 90 degrees around $y$ axis in addition
|
|
to the rotation requested by \emph{matrixName}),
|
|
``cylpart'' (cylinder from which a box has been subtracted)
|
|
``GPDcollimator'' (collimator used at GPD instrument). Not all G4VSolids defined
|
|
in Geant4 are
|
|
presently supported, but it is relatively easy to implement a new kind of solids
|
|
in the musrDetectorConstruction.cc class.
|
|
|
|
The ``polycone'' in Geant4 can be defined in two ways, which have to be
|
|
distinguished in the musrSim macro file:
|
|
``polyconeA'' corresponds to \\
|
|
G4Polycone(solidName, phiStart, phiTotal, numZPlanes, zPlane[ ], rInner[ ], rOuter[ ])\\
|
|
while ``polyconeB'' corresponds to \\
|
|
G4Polycone(solidName, phiStart, phiTotal, numRZ, r[ ], z[ ]),\\
|
|
where \emph{zPlane}, \emph{rInner}, \emph{rOuter}, \emph{r}, \emph{z} are arrays, which
|
|
have to be defined by the command ``/musr/command arrayDef''.
|
|
\item \emph{name} (string) stands for the name of the volume. As the command
|
|
``/musr/command construct'' constructs
|
|
three kinds of Geant4 classes/volumes (the solid, logical volume and physical
|
|
volume), there are three names of the concrete volume used internally inside
|
|
musrSim: sol\_\emph{name}, log\_\emph{name} and phys\_\emph{name}.
|
|
The main volume, inside which all other volumes are positioned, has to be called ``World''.
|
|
\item \emph{dimensions} (floats) define the size of the required solid. They are kept equivalent to the
|
|
dimensions of solids as used in {\sc Geant4}. For example the ``box'' is defined
|
|
by its {\bf halflengths} along $x$, $y$ and $z$ coordinates. Note that the number of
|
|
\emph{dimensions} varies for each type of solid. The units are mm for lengths
|
|
and degrees for angles.
|
|
\item \emph{material} (float) one of the materials defined in {\sc Geant4}, namely in the file
|
|
\$G4INSTALL/source/materials/src/G4NistMaterialBuilder.cc (e.g. ``G4\_Galactic'' for
|
|
vacuum, ``G4\_Cu'' for copper, ``G4\_AIR'' for air,
|
|
``G4\_PLASTIC\_SC\_VINYLTOLUENE'' for a scintillator, ...).
|
|
One can also define a new material inside the function
|
|
musrDetectorConstruction::DefineMaterials(). Presently ``Mylar'', ``Brass''
|
|
``Steel'', ``Macor'', ``MCPglass'', ``MgO'', ``SiO2'', ``Al2O3'', ``K2O'' and ``B2O3'' are defined there.
|
|
\item \emph{x, y, z} (floats) -- coordinates of the volume, used to position the volume within
|
|
its mother volume (as used by the G4PVPlacement).
|
|
Thus these coordinates are interpreted in the local coordinate system of the \emph{motherVolume}.
|
|
\item \emph{motherVolume} (string) -- name of the mother volume, in which the given volume should be
|
|
positioned. Note that the mother volume has to be defined first (before its
|
|
daughter), and that the name of mother starts with a string {\bf log\_}\emph{mothername},
|
|
following the naming convention defined above.
|
|
When the ``World'' volume is defined, its \emph{motherVolume} should be set to ``no\_logical\_volume''.
|
|
\item \emph{matrixName} (string) -- name of the rotation matrix that will be used to position
|
|
the volume inside its mother volume (as used by the G4PVPlacement).
|
|
Use string ``norot'' if no rotation is required for the given volume.
|
|
Otherwise the rotation matrix has to be defined by the command line
|
|
``/musr/command rotation'' {\bf before} the given volume is defined.
|
|
\item \emph{sensitiveClass} (string) -- specifies whether the volume is sensitive detector or
|
|
just a piece of a ``dead'' material.
|
|
Use the string ``dead'' for the latter,
|
|
and the string ``musr/ScintSD'' for a scintillator (a sensitive volume, i.e.\
|
|
a volume where hits are observed). No other detector type
|
|
(other than ``dead'' and ``musr/ScintSD'') is supported at the moment, but
|
|
the program might be extended in the future (e.g. to properly include also the
|
|
semiconductor tracking detectors, etc.).
|
|
\item \emph{idNumber} (int) -- serves as a unique identifier of the volume. It is primarily
|
|
used in the output Root tree to identify the volume: 1) in which a muon stopped
|
|
(tree variable ``muDecayDetID''),
|
|
2) in which hits were deposited in case of sensitive volume
|
|
(the variable ``det\_ID[det\_n]'').
|
|
\end{itemize}
|
|
|
|
\item{\bf /musr/command rotation \emph{matrixName} $\alpha$ $\beta$ $\gamma$} \\
|
|
{\bf /musr/command rotation \emph{matrixName} \emph{vx} \emph{vy} \emph{vz} \emph{angle}}\\
|
|
These commands define a rotation matrix of the name \emph{matrixName} that can be used
|
|
during the definition of the detector geometry (see the command ``/musr/command construct'').
|
|
It can be defined either by the Euler angles (if there are three float parameters behind the
|
|
\emph{matrixName}) or by the vector \emph{(vx,vy,vz)} and an \emph{angle} of rotation around this
|
|
vector (if the fourth float parameter behind the \emph{matrixName} is non-zero).
|
|
All angles are specified in degrees.
|
|
|
|
\item{\bf /musr/command arrayDef \emph{arrayName} \emph{N} \emph{x$_1$} \emph{x$_2$} \ldots \emph{x$_N$}} \\
|
|
Defines an array with an assigned name \emph{arrayName}, which has \emph{N} elements.
|
|
|
|
\item{\bf /musr/command region define \emph{regionName} \emph{logicalVolume}}\\
|
|
The ``G4Region'' can be created using this command, and a logical volume of the
|
|
name \emph{logicalVolume} will be assigned to it. If the G4Region of the name
|
|
\emph{regionName} does not exist (i.e.\ the command ``/musr/command region define''
|
|
is called for the first time for this particular \emph{regionName}), the G4Region will
|
|
be created first, otherwise the logical volume \emph{logicalVolume} will be just assigned
|
|
to the already existing G4Region. \\
|
|
G4Region can be useful namely for setting some special Geant4 parameters (production cuts)
|
|
just in some part of the detector (e.g.\ where a finer simulation is needed).
|
|
See Geant4 manual for more details.
|
|
|
|
\item{\bf /musr/command region setProductionCut \emph{regionName} \emph{gammaCut} \emph{electronCut} \emph{positronCut}}\\
|
|
Set the so-called ``production cuts'' in the G4Region called \emph{regionName}.
|
|
The variables \emph{gammaCut, electronCut} and \emph{positronCut} are given in mm.
|
|
\end{description}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Electric and magnetic fields}
|
|
\begin{description}
|
|
\item{\bf /musr/command globalfield \emph{fieldName} \emph{half\_x} \emph{half\_y} \emph{half\_z} uniform
|
|
\emph{X} \emph{Y} \emph{Z} \emph{logicalVolume} \emph{Bx} \emph{By} \emph{Bz} \emph{Ex} \emph{Ey} \emph{Ez}} \\
|
|
or \\
|
|
{\bf /musr/command globalfield \emph{fieldName} \emph{X} \emph{Y} \emph{Z} fromfile
|
|
\emph{fieldTableType} \emph{fieldInputFileName} \emph{logicalVolume} \emph{fieldValue}
|
|
\emph{[fieldValueFinal]} \emph{[fieldNrOfSteps]}} \\
|
|
This command specifies the electric and/or magnetic fields, which are (in some sense)
|
|
independent of any logical volume and can overlap with each other.
|
|
In the case of tabulated field read in from an external field map file, the
|
|
field values used internally by the Geant4 are linearly interpolated using
|
|
eight (3D) or four (2D) grid points surrounding the point of interest.
|
|
%
|
|
\begin{itemize}
|
|
\item \emph{fieldName} (string) -- name of the field (important mainly for the user and
|
|
print-out messages of the musrSim.
|
|
\item \emph{half\_x}, \emph{half\_y}, \emph{half\_z} (floats) -- the (half) dimensions
|
|
of the box, within which the uniform field is defined. Used only for the uniform fields.
|
|
\item {\bf uniform / fromfile} -- specifies whether the field is uniform within
|
|
some volume or whether it is read in from an external file as a field-map.
|
|
\item \emph{X}, \emph{Y}, \emph{Z} (floats) -- position of the centre of the field
|
|
in the {\bf global} coordinate system. IMPORTANT: For some technical internal
|
|
Geant4 reasons, this {\bf POSITION HAS TO LAY WITHIN THE \emph{logicalVolume}!}
|
|
Note that the logical volume may be positioned somewhere deep in a volume
|
|
structure, not directly within the ``World'' volume, and
|
|
therefore the (local) coordinates in the definition of the logical volume
|
|
do not have to match the (global) coordinates \emph{X}, \emph{Y} and \emph{Z}.
|
|
\item \emph{logicalVolume} (string) -- specifies the logical volume, to which
|
|
the field is ``assigned''. One may ask, why a logical volume is needed for a field
|
|
``independent'' of any Geant4 volume? The reason is purely technical - the
|
|
logical volume is used to allow the field to be rotated the same way as
|
|
the assigned logical volume.
|
|
The field can be smaller or larger than the logical
|
|
volume, to which it is assigned.
|
|
The field extending out of the logical volume will
|
|
also be used in the Geant4 calculations (will be not truncated).
|
|
The only limitation is that the centre
|
|
of the volume has to lay within the assigned logical volume (see above).
|
|
Sometimes it might be useful to create a very small volume (e.g. of the order of 0.01\,mm)
|
|
to position a rotated field into a (differently rotated or unrotated)
|
|
larger volume. The volume can also be made of vacuum (i.e.\ G4\_Galactic).
|
|
\item \emph{Bx}, \emph{By}, \emph{Bz}, \emph{Ex}, \emph{Ey}, \emph{Ez} (float) -- the vector
|
|
of the uniform electromagnetic field. The units are tesla, for the first three
|
|
components, and kilovolt/mm for the last three components.
|
|
Used only for the uniform fields.
|
|
\item \emph{fieldTableType} (string) -- specifies the format in which the field map is
|
|
written in the file. In general, the field is specified in a grid of
|
|
three space coordinates $x$, $y$ and $z$ (3D).
|
|
Sometimes it is convenient to use the symmetry of the field
|
|
and to reduce the field description to $R$ and $z$ (2D) only.
|
|
In the following, we use the following terms: \\
|
|
\emph{nx, ny, nz} -- the number of divisions of the grid in
|
|
\emph{x, y, z}.\\
|
|
\emph{nR, nz} -- the number of divisions of the grid in \emph{R, z}.\\
|
|
\emph{length unit} -- the unit in which the grid coordinates are specified, usually
|
|
cm or m.\\
|
|
\emph{field normalisation factor} -- a multiplicative factor applied to the values
|
|
of the field map to normalise the field (usually to 1\,tesla or to 1\,kV/mm in the
|
|
centre of the field map).\\
|
|
\emph{minimumx, maximumx, minimumy, maximumy, minimumz, maximumz} -- the
|
|
minimum and maximum value in x, y and z coordinates. These values can be usually easily
|
|
calculated from the field map itself, however the field can also be specified
|
|
in a compact format in which case the $x$, $y$ and $z$ coordinates are removed from
|
|
the field map file,
|
|
and the maxima and minima of coordinates have to be specified.\\
|
|
The following formats are supported:\\
|
|
{\bf 3DB, 3DE} -- magnetic or electric field specified in $x$, $y$ and $z$
|
|
coordinate system. The first line of the file has to contain
|
|
the information about \emph{nx, ny, nz, length unit} and
|
|
\emph{field normalisation factor}. Optionally, a compact form
|
|
of the field map can be specified, in which case
|
|
\emph{minimumx, maximumx, minimumy, maximumy, minimumz, maximumz}
|
|
has to be added to the first line of the file.
|
|
The next few lines of the field map file beginning with
|
|
the character ``\%'' are comments.
|
|
The following lines specify the \emph{x, y, z, Field\_x, Field\_y, Field\_z}
|
|
values (non-compact format) or \emph{Field\_x, Field\_y, Field\_z} values
|
|
(compact format).\\
|
|
{\bf 3DBOpera, 3DEOpera} -- 3D magnetic field in the form of OPERA output.
|
|
It is expected that the \emph{length unit} is 1\,m, and
|
|
the \emph{field normalisation factor} is 1. (Note that this default
|
|
normalisation is different from 2DBOpera and 2DBOperaXY options).
|
|
However, a different \emph{field normalisation factor} can be specified
|
|
in the field map file using the keyword ``fieldNormalisation \emph{number}''
|
|
before the line started with 0.\\
|
|
It is expected that the first loop goes over the $z$ coordinate of the field map,
|
|
then (after $z$ changed from minimum to maximum) it is looped over the $y$ coordinate,
|
|
and the highest-level loop goes over $x$ coordinate. However, if the order
|
|
of looping is reversed in the field map, it can be specified using the
|
|
keyword ``variableIncreasingOrder xyz'' placed in the field map before
|
|
the line started with 0.\\
|
|
The \emph{length unit} can be changed to 1\,cm by specifying ``[CENTIMETRE]''
|
|
after the ``0'' character in the field map file.\\
|
|
It is expected that the field map is defined in the full volume of the field.
|
|
Sometimes (due to the symmetry of the field), it is enough to define the
|
|
field in just one octant of the Cartesian coordinate system (e.g. for positive
|
|
$x$, $y$ and $z$). In such cases, the user can specify this in the field map
|
|
file using the keyword ``symmetryType \emph{number}'', where the \emph{number}
|
|
specifies how the field should be extrapolated to other octants.
|
|
The ``symmetryType 1'' case can be used for a field between two electrodes
|
|
(e.g.\ of a spin rotator), where the electrodes are parallel with the $(y,z)$ plane
|
|
(i.e.\ the main component of the field is along the $x$ axis).
|
|
In this case: if the field at point $(x,y,z)$ is $(F_x,F_y,F_z)$, the field in
|
|
different octants will look be: \\
|
|
$(x,y,z) \rightarrow (F_x,F_y,F_z)$;\\
|
|
$(x,y,-z) \rightarrow (F_x,F_y,-F_z)$;\\
|
|
$(x,-y,z) \rightarrow (F_x,-F_y,F_z)$;\\
|
|
$(x,-y,-z) \rightarrow (F_x,-F_y,-F_z)$;\\
|
|
$(-x,y,z) \rightarrow (F_x,-F_y,-F_z)$;\\
|
|
$(-x,y,-z) \rightarrow (F_x,-F_y,F_z)$;\\
|
|
$(-x,-y,z) \rightarrow (F_x,F_y,-F_z)$;\\
|
|
$(-x,-y,-z) \rightarrow (F_x,F_y,F_z)$. \\
|
|
Similar case is the ``symmetryType 2'', where the main field component is along the
|
|
$y$ axis.
|
|
These two symmetry types are realised as electric and magnetic fields
|
|
in a spin rotator oriented along the z axis.\\
|
|
Example of the beginning of the 3DBOpera-type field map file:\\
|
|
2 2 55\\
|
|
1 X\\
|
|
2 Y\\
|
|
3 Z\\
|
|
4 BX\\
|
|
5 BY\\
|
|
6 BZ\\
|
|
7 DUMMY\\
|
|
fieldNormalisation -22.5733634\\
|
|
symmetryType 2\\
|
|
0 [METRE]\\
|
|
-0.2 -0.2 -1.35 0. 0. 0. 0.\\
|
|
-0.2 -0.2 -1.30 0. -0.0002 0. 0.\\
|
|
-0.2 -0.2 -1.25 0. -0.0002 0. 0.\\
|
|
-0.2 -0.2 -1.20 0. -0.005 0. 0.\\
|
|
...\\
|
|
|
|
{\bf 2DB, 2DE} -- magnetic or electric field specified in $R$ and $z$
|
|
coordinate system. The first line of the file has to contain
|
|
the information about \emph{nR, nz, length unit} and
|
|
\emph{field normalisation factor}. The compact form of the field
|
|
map (see 3DB case) is not supported.
|
|
The next few lines of the field map file beginning with
|
|
the character ``\%'' are comments.
|
|
The following lines specify the \emph{R, z, Field\_R} \emph{Field\_z}
|
|
values.\\
|
|
{\bf 2DBOpera} -- 2D magnetic field in the form of OPERA output.
|
|
It is expected that the \emph{length unit} is 1\,cm, and
|
|
the \emph{field normalisation factor} is 0.00001 (Note that this default
|
|
normalisation is different from 3DBOpera option).
|
|
See example of {\bf 3DBOpera} for the usage of keyword
|
|
``fieldNormalisation \emph{number}''.
|
|
The data in the field map OPERA file are ordered as
|
|
\emph{R, dummy, z, Field\_R, Field\_z, dummy}\\
|
|
{\bf 2DBOperaXY} -- same as 2DBOpera except that the
|
|
data in the field map OPERA file are ordered as
|
|
\emph{R, z, dummy, Field\_R, Field\_z, dummy}\\
|
|
\item \emph{fieldInputFileName} (string) -- Name of the field map file.
|
|
\item \emph{fieldValue} (float) -- the value of the field at some reference point
|
|
(usually in the centre of the field). It acts as an multiplicative
|
|
factor. The units are tesla for the magnetic field and kV/mm
|
|
for the electric field.
|
|
\item \emph{[fieldValueFinal]} and \emph{[fieldNrOfSteps]} (floats)
|
|
-- these optional parameters allow the user to ramp up (down) the field
|
|
during a single run. The \emph{fieldValue} serves as the initial field value,
|
|
the \emph{[fieldValueFinal]} is the final value and \emph{[fieldNrOfSteps]}
|
|
specifies number of steps, in which the rump up/down will happen.
|
|
\end{itemize}
|
|
|
|
\item{\bf /musr/command globalfield \emph{fieldName} \emph{X} \emph{Y} \emph{Z} quadrupole
|
|
\emph{halfLength} \emph{fieldRadius} \emph{fringeFactor} \emph{logicalVolume}
|
|
\emph{gradientValue} \emph{[gradientValueFinal]} \emph{[gradientNrOfSteps]} }\\
|
|
Set up the field of a quadrupole magnet including the Enge function approximation of the
|
|
fringe fields. The unit of \emph{gradientValue} is T/m.
|
|
The description is similar to the uniform field and to the tabulated fields.
|
|
See ``musrDetectorConstruction.cc'' and ``BLEngeFunction.hh'' for the details.
|
|
|
|
\item{\bf /musr/command globalfield setparameter \emph{parameterName} \emph{parameterValue} }\\
|
|
Set up some accuracy parameters used internally by Geant4 when calculating the motion
|
|
of charged particles in the magnetic field.\\
|
|
\emph{parameterName} (string) -- one of the following parameters: ``SetDeltaIntersection''
|
|
``SetDeltaOneStep'', ``SetMinimumEpsilonStep'', ``SetMaximumEpsilonStep'',
|
|
``SetLargestAcceptableStep'' and ``SetMaxLoopCount''. The exact meaning of
|
|
these parameters can be found in Geant4 manual.
|
|
|
|
\item{\bf /musr/command globalfield printparameters} \\
|
|
Print out the accuracy parameters (see ``/musr/command globalfield setparameter'').
|
|
|
|
\item{\bf /musr/command globalfield printFieldValueAtPoint \emph{x} \emph{y} \emph{z}} \\
|
|
Print out the field value at the point $(x, y, z)$ (given in the global
|
|
coordinate system).
|
|
|
|
\item{\bf /musr/command globalfield printFieldDerivativeAtPoint \emph{x} \emph{y} \emph{z}} \\
|
|
Print out the values of the derivative of the magnetic field at the point $(x, y, z)$
|
|
(given in the global coordinate system).
|
|
\end{description}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Physics processes}
|
|
|
|
\begin{description}
|
|
\item{\bf /musr/command process addDiscreteProcess \emph{particle} \emph{process}}\\
|
|
{\bf /musr/command process addProcess \emph{particle} \emph{process} \emph{ordAtRestDoIt} \emph{ordAlongSteptDoIt} \emph{ordPostStepDoIt}}\\
|
|
Adds processes for particles. \\
|
|
\emph{particle} (string) -- name of the particle to which a process is applied.\\
|
|
\emph{process} (string) -- name of the process to be assigned.\\
|
|
\emph{ordAtRestDoIt, ordAlongSteptDoIt, ordPostStepDoIt} (int) -- priority switches.\\
|
|
See the file musrPhysicsList.cc for the list of defined processes (e.g. G4eMultipleScattering,
|
|
G4eIonisation, ...) and Geant4 manual for the detail description of the processes.
|
|
|
|
\item{\bf /musr/command process SetLossFluctuations\_OFF \emph{particle} \emph{process}}\\
|
|
Switches off the statistical fluctuations in the ionisation losses. Can be usefull
|
|
for some technical studies. Presently works only for \emph{G4eIonisation} and
|
|
for \emph{G4MuIonisation}.
|
|
|
|
% There is one special process, combined from G4MultipleScattering and G4CoulombScattering,
|
|
% defined by the following command:\\
|
|
%{\bf /musr/command process addProcess \emph{particle} MultipleAndCoulombScattering \emph{ordAtRestDoIt} \emph{ordAlongSteptDoIt} \emph{ordPostStepDoIt} \emph{G4Region1} [\emph{G4Region2}] [\emph{G4Region3}]}\\
|
|
% The G4MultipleScattering (rough but very fast approximation of scattering) will be applied
|
|
% elsewhere in the detector, except for the \emph{G4Region1} (and eventually \emph{G4Region2}
|
|
% and \emph{G4Region3}), where more precise but very slow process G4CoulombScattering
|
|
% will be applied instead of G4MultipleScattering. Note that up to three
|
|
% G4Regions are supported at the moment, but this limitation is not intrinsic to {\sc Geant4}
|
|
% and it can be therefore changed in musrPhysicsList.cc, if needed. The G4Regions have to
|
|
% be defined in the detector construction phase by the command ``/musr/command region define ...''.
|
|
|
|
\end{description}
|
|
|
|
%=============================================================================================
|
|
\section{Initial (muon) beam parameters}
|
|
%
|
|
In historical versions of musrSim
|
|
it had been implicitly assumed that the (muon) beam was oriented along the $z$-axis. Many
|
|
variables defined below are therefore related to this $z$-axis (e.g.\ beam tilt, vertex sigma, ...).
|
|
However, later on we implemented a possibility to change the direction of the initial beam
|
|
to a random vector by the command ``/gun/direction''. It now works like this:
|
|
the primary particles are first generated using all parameters of /gun/* commands
|
|
as if the beam went along the $z$-axis, and just in the last moment before Geant4 starts
|
|
to track them, they are (optionally) rotated to the direction defined by the /gun/direction command.
|
|
This way the smearing of the vertex as well as beam tilt/pitch are propagated through the rotation.
|
|
|
|
\begin{description}
|
|
\item{\bf /gun/primaryparticle \emph{primaryParticleName}}\\
|
|
(default: /gun/primaryparticle mu+)\\
|
|
Set the primary particle type, if it is not positive muon. For example, the negative muons
|
|
are specified by ``/gun/primaryparticle mu-''.
|
|
|
|
\item{\bf /gun/meanarrivaltime \emph{meanArrivalTime}}\\
|
|
(default: /gun/meanarrivaltime 33.33333 microsecond)\\
|
|
Set mean arrival time difference between two subsequent muons (at continuous beam).
|
|
The output variable ``timeToNextEvent'' is subsequently randomly generated using
|
|
the value of \emph{meanArrivalTime} and filled into the Root tree.
|
|
|
|
\item{\bf /gun/starttime \emph{t0} \emph{unit}}\\
|
|
By default, muons are generated at time = 0. The time of generation of muons can be
|
|
set randomly according to the Gaussian or uniform distribution using variables
|
|
``/gun/starttime'' and ``/gun/starttimesigma''. See the description of the
|
|
``/gun/vertexsigma'' to understand how the choice is done. This command appears
|
|
useful for the simulation of the laser-induced muon beam at ISIS,
|
|
however it might be confusing or misleading when used together with
|
|
the /gun/meanarrivaltime command. It is therefore recommended not to use it
|
|
unless necessary.
|
|
|
|
\item{\bf /gun/starttimesigma \emph{t0} \emph{unit}}\\
|
|
See the description of ``/gun/starttime'' command.
|
|
|
|
\item{\bf /gun/vertex \emph{x0} \emph{y0} \emph{z0} \emph{unit}}\\
|
|
(default: /gun/vertex 0 0 -100 mm) \\
|
|
Set mean values of the $x$, $y$ and $z$ coordinates of the generated particles (muons).
|
|
The smearing around these mean values can be set by /gun/vertexsigma and
|
|
restricted by /gun/vertexboundary and/or /gun/boxboundary (see below).\\
|
|
(Applicable also to TURTLE input).
|
|
|
|
\item{\bf /gun/vertexsigma \emph{xSigma} \emph{ySigma} \emph{zSigma} \emph{unit}}\\
|
|
(default: /gun/vertexsigma 0 0 0 mm) \\
|
|
If {\it xSigma} $>0$ ... set $\sigma_x$, i.e. the standard deviation (RMS), of the $x$ coordinate
|
|
of the generated particles (muons) to $\sigma_x=xSigma$. The $x$ coordinate of the initial
|
|
muon is then generated according to the Gaussian distribution with the mean value of $x0$
|
|
and the standard deviation of {\it xSigma}. \\
|
|
If {\it xSigma} $<0$ ... the $x$ coordinate of the initial
|
|
muon is generated {\bf uniformly} in the interval of ($x0-$ {\it xSigma}, $x0+$ {\it xSigma}).\\
|
|
If {\it xSigma} $= 0$ ... no smearing on the $x$ coordinate is applied.\\
|
|
Similar is true for {\it ySigma} and {\it zSigma}. \\
|
|
(Ignored by the TURTLE input).
|
|
|
|
\item{\bf /gun/vertexboundary \emph{R\_max} \emph{z\_min} \emph{z\_max} \emph{unit}}\\
|
|
Set maximum allowed radius, and minimum and maximum z coordinate of the generated particles (muons).
|
|
This command might be useful especially if the user wants to restrict the
|
|
area, in which initial particles are created, e.g.\ to force the initial muons
|
|
to be created inside the beam pipe.
|
|
|
|
If the particles (muons) are read in from an external TURTLE file,
|
|
only the restriction on the maximum radius \emph{R\_max}
|
|
is applied on the initial particles, while \emph{z\_min} and \emph{z\_max} are ignored.
|
|
|
|
\item{\bf /gun/vertexrelativer \emph{relativeRMaxAllowed} \emph{unit}}\\
|
|
Set maximum allowed radius of the beam relative to x0 and y0,
|
|
i.e.\ relative to the centre of the beam. This command might be useful when the beam
|
|
centre is not created at x0=y0=0, but the user wishes to restrict the beam
|
|
within a symmetric cone around x0 and y0. \\
|
|
(Ignored by the TURTLE input).
|
|
|
|
\item{\bf /gun/boxboundarycentre \emph{xMaxSource0} \emph{yMaxSource0} \emph{xMaxSource0} \emph{unit}} \\
|
|
See below ``/gun/boxboundary''.
|
|
|
|
\item{\bf /gun/boxboundary \emph{xMaxSource} \emph{yMaxSource} \emph{xMaxSource} \emph{unit}} \\
|
|
Define a box, within which the generated particles (muons) are created.
|
|
The variables \emph{xMaxSource0}, \emph{yMaxSource0} and \emph{xMaxSource0} define the
|
|
centre of the box, the variables \emph{xMaxSource}, \emph{yMaxSource} and \emph{xMaxSource} define the
|
|
halfwidth, halfheight and halflength of the box. \\
|
|
This command can be useful for the laser-induced muon beam at ISIS.\\
|
|
(Ignored by the TURTLE input).
|
|
|
|
\item{\bf /gun/kenergy \emph{kineticEnergy} \emph{unit}}\\
|
|
Set the mean kinetic energy of the initial particles (muons).\\
|
|
(Ignored by the TURTLE input).
|
|
|
|
\item{\bf /gun/momentum \emph{momentum} \emph{unit}}\\
|
|
Set the mean momentum of the initial particles (muons).\\
|
|
(Ignored by the TURTLE input).
|
|
|
|
\item{\bf /gun/momentumsmearing \emph{momentumSigma} \emph{unit}}\\
|
|
Set $\sigma$, i.e. the standard deviation (RMS), of the momentum spread, which
|
|
is applied randomly to each generated initial particle (muon). It is the magnitude
|
|
of the momentum, which is smeared. \\
|
|
(Ignored by the TURTLE input. However,
|
|
a similar command ``/gun/turtleMomentumBite'' can be used for the TURTLE input file.)
|
|
|
|
\item{\bf /gun/momentumboundary \emph{p\_min} \emph{p\_max} \emph{dummy} \emph{unit}}\\
|
|
Set a boundary for the minimum and maximum momentum of the initial particles (muons).
|
|
The third argument \emph{dummy} is ignored.\\
|
|
(Presently ignored by the TURTLE input).
|
|
|
|
\item{\bf /gun/tilt \emph{xangle0} \emph{yangle0} \emph{dummy} \emph{unit}}\\
|
|
The ``beam tilt'' is understood as a constant angle tilt that is applied to
|
|
all initial particles (muons) regardless on their distance from the centre of the beam.\\
|
|
(Applicable also to TURTLE input).
|
|
|
|
\item{\bf /gun/tiltsigma \emph{xangleSigma} \emph{yangleSigma} \emph{dummy} \emph{unit}}\\
|
|
Gaussian smearing of the tilt angle.\\
|
|
(Presently ignored by the TURTLE input).
|
|
|
|
\item{\bf /gun/pitch \emph{pitch} \emph{unit}}\\
|
|
The ``beam pitch'' is understood as a variable angle applied to the initial particles
|
|
(muons), which is directly proportional to the distance from the beam axis.
|
|
The particles closer to the beam axis become smaller pitch than particles further away
|
|
from the beam axis.
|
|
The angle given as \emph{pitch} will be applied to a particle generated 1\,mm away from the
|
|
beam centre, i.e. the particle generated 7\,mm away from the beam axis will be assigned
|
|
the angle of $7\cdot pitch$.
|
|
The pitch allows the user to focus or defocus the initial particle
|
|
beam. Particles will be focused for positive pitch and defocused for the negative pitch.\\
|
|
(Applicable also to TURTLE input).
|
|
|
|
\item{\bf /gun/muonPolarizVector \emph{xpolaris} \emph{ypolaris} \emph{zpolaris}}\\
|
|
Set polarisation of the initial particle (muon) in a form of a vector
|
|
$P=(xpolaris,ypolaris,zpolaris)$. The polarisation vector does not have to be normalised,
|
|
the normalisation will be done internally by the program.
|
|
However note that if the magnitude of P is set to less than 1e-8, the user can
|
|
achieve an unpolarised muon beam. See the source code of musrPrimaryGeneratorAction.cc
|
|
if you need to use unpolarised beam by this parameter, because there is some trick
|
|
based on the magnitude of P.\\
|
|
(Applicable also to TURTLE input).
|
|
|
|
\item{\bf /gun/muonPolarizFraction \emph{polarisFraction}}\\
|
|
Set the fraction of the muon polarisation. The variable \emph{polarisFraction}
|
|
has to be set in the range of -1 to 1. \\
|
|
If \emph{polarisFraction} is set to 1, all muons are polarised in the direction
|
|
of polarisation vector defined by ``/gun/muonPolarizVector''.\\
|
|
If \emph{polarisFraction} is set to 0, half of the muons are polarised in the direction
|
|
of polarisation vector, the second half is polarised in the opposite direction, so
|
|
in the end the muon beam should act as unpolarised.\\
|
|
If \emph{polarisFraction} is set to -1, all muons are polarised in the direction
|
|
opposite to the polarisation vector.\\
|
|
{\bf If \emph{polarisFraction} is set to 0.9, then 95\% of the muons is polarised
|
|
in in the direction of polarisation vector, and 5\% of them is polarised in the
|
|
opposite direction!}.\\
|
|
{\bf This command is ignored if magnitude of polarisation vector defined by
|
|
``/gun/muonPolarizVector'' is smaller than 1e-8!} \\
|
|
(Applicable also to TURTLE input).
|
|
|
|
\item{\bf /gun/direction \emph{xDirection} \emph{yDirection} \emph{zDirection}}\\
|
|
Set initial beam direction as a vector (without units).
|
|
The vector does not have to be normalised to 1. Both beam direction
|
|
and beam spot are rotated.
|
|
See comments at the beginning of this chapter.\\
|
|
(Applicable also to TURTLE input).
|
|
|
|
\item{\bf /gun/decaytimelimits \emph{muDecayTimeMin} \emph{muDecayTimeMax} \emph{muMeanLife} \emph{unit}}\\
|
|
(default: /gun/decaytimelimits $-1$ $-1$ 2197.03\,ns ) \\
|
|
If {\it muDecayTimeMax} is less or equal to zero, this command is ignored,
|
|
and the muon decay time is set internally by {\sc Geant4}.
|
|
Otherwise the muon will be forced to decay within a time interval given by
|
|
{\it muDecayTimeMin} and {\it muDecayTimeMax}, and the mean muon lifetime will
|
|
be set to {\it muMeanLife}. In such case {\it muDecayTimeMin}
|
|
has to be equal or larger than 0 and {\it muDecayTimeMax} has to be
|
|
larger {\bf or equal} to {\it muDecayTimeMin}.\\
|
|
(Applicable also to TURTLE input).
|
|
|
|
\item{\bf /gun/turtlefilename \emph{turtleFileName}}\\
|
|
Set the filename of the TURTLE input file. If this variable is set, TURTLE file
|
|
will be used to initiate muons. Otherwise the muons would be generated randomly.
|
|
If the end of the TURTLE file is reached (because the user requested to simulate
|
|
more events than saved in the TURTLE file), the TURTLE file be be rewind to its
|
|
beginning. Note that this does not mean that the same events will be simulated
|
|
after the rewind, because the random seed will be set differently than at the
|
|
beginning of the simulation. The muons initialised
|
|
at the same position and with the same momentum will have completely different
|
|
(random) multiple scattering, penetration depths, decay times,
|
|
decay positron energies and angles, ..., and therefore will be (almost completely)
|
|
different events not affecting the statistical quality of the simulation.
|
|
|
|
\item{\bf /gun/turtleZ0position \emph{z0\_InitialTurtle} \emph{unit}}\\
|
|
Set the z-position which has been used to generate the TURTLE file.\\
|
|
If this value differs from the $z0$ value of the ``/gun/vertex'' command,
|
|
than the particle initial position is linearly extrapolated from $z0\_InitialTurtle$
|
|
to the point corresponding to $z0$, using the direction of its momenta.\\
|
|
MORE DETAILS:\\
|
|
When running TURTLE (e.g. when generating the TURTLE file using the TURTLE program),
|
|
the user has to specify the $z$ position, at which the TURTLE particles (muons) would be exported.
|
|
Sometimes this $z$ position does not correspond to the point of origin of the musrSim
|
|
geometry. In such case, the variable \emph{z0\_InitialTurtle} should be set to the
|
|
value, that in musrSim coordinate system corresponds to the point, at which the TURTLE
|
|
file was exported. For example -- if the TURTLE file was exported just after the last
|
|
quadrupole of a beam-pipe, and in the simulation the edge of the last quadrupole corresponds
|
|
to -100\,cm, than the \emph{z0\_InitialTurtle} should be also set to -100\,cm.\\
|
|
|
|
\item{\bf /gun/turtleInterpretAxes \emph{axesWithSign}}\\
|
|
Normally it is expected that the coordinates in TURTLE are x, xprime, y and yprime.
|
|
One can specify whether the x and y axes of the position in TURTLE should be interpreted differently.
|
|
The following options are supported for \emph{axesWithSign}: x-y, -xy, -x-y, yx, y-x, -yx, -y-x .\\
|
|
Example: the option y-x means that first four coordinates in the TURTLE input file
|
|
are interpreted as y, yprime, -x, -xprime.
|
|
|
|
\item{\bf /gun/turtleMomentumBite \emph{turtleMomentumP0} \emph{turtleSmearingFactor} \emph{dummy} }\\
|
|
Modify the smearing of the momentum bite specified in the TURTLE input file.
|
|
Normally the muon momentum is defined already in the TURTLE input file. This command allows the user
|
|
to modify the momentum smearing (momentum bite) of the muon beam.
|
|
The variable \emph{turtleMomentumP0} will be taken as the mean momentum (in MeV/c), around which
|
|
the momentum will be increased/decreased. It does not have to be the real mean value of the initial muon momentum distribution.
|
|
The variable \emph{turtleSmearingFactor} is the smearing factor in per cent, by which the momentum bite
|
|
will be increased/decreased around the \emph{turtleMomentumP0}. The following equation is used to change the
|
|
muon momentum: $p_{new}$ = {\it turtleMomentumP0} - ({\it turtleMomentumP0}-$p_{TURTLE}$)$\cdot$0.01$\cdot${\it turtleSmearingFactor}.\\
|
|
This means that:\\
|
|
{\it turtleSmearingFactor} = 100 ... the muon beam momentum will not be modified.\\
|
|
{\it turtleSmearingFactor} = 0 ~~... the muon beam momentum will be set to the constant value of {\it turtleMomentumP0}.\\
|
|
{\it turtleSmearingFactor} = 200 ... the muon beam will have two times broader distribution compared to the original TURTLE file.
|
|
|
|
\item{\bf /gun/turtleMomentumScalingFactor \emph{scalingFactor} }\\
|
|
Modify the turtle momentum by this scaling factor -- e.g.\ if the user wants to shift
|
|
the mean momentum from 28\,MeV/c to 14\,MeV/c, this scaling factor has to be set to 0.5.
|
|
Note that also the momentum bite will be reduced by the same scaling factor.
|
|
This scaling is done before the command ``/gun/turtleMomentumBite'' (if both are
|
|
requested).
|
|
|
|
\item{\bf /gun/turtleFirstEventNr \emph{lineNumberOfTurtleFile} }\\
|
|
Set the line number that should be taken as the first event from the TURTLE input file.
|
|
This option is needed when the user wants to reproduce the simulation of an event
|
|
using the same random number generator and TURTLE initial particle as in some previous
|
|
run, however he wants to skip some (uninteresting) events at the beginning of the simulation.
|
|
|
|
\item{\bf /gps/*} \\
|
|
In most cases, musrSim uses the so called ``G4ParticleGun'' to generate the primary
|
|
particles (muons). The commands for G4ParticleGun were summarised previously,
|
|
they start with /gun/ keyword.\\
|
|
However, there is an alternative particle generator
|
|
called ``GPS (General Particle Source)'', which is useful when simulating
|
|
the decays of radioactive atoms and for other purposes.
|
|
Whenever the /gps/ keyword is used, the ``G4ParticleGun'' is not initiated
|
|
(and all /gun/* commands are ignored).
|
|
The description of GPS can be found at http://reat.space.qinetiq.com/gps/~,
|
|
some of the useful commands are:\\
|
|
/gps/particle ion\\
|
|
/gps/ion 38 90 0 0\\
|
|
/gps/position 0 0 0\\
|
|
/gps/energy 0 keV\\
|
|
/gps/ang/maxtheta 2 deg\\
|
|
/gps/ang/maxphi 2 deg\\
|
|
|
|
\end{description}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Optical photons}
|
|
\label{sec:opticalPhotons}
|
|
Normally the simulation of ``detected signal'' stops at the level of the deposited energy in
|
|
a sensitive volume (e.g.\ in a scintillator tile). However, in some special cases, one would
|
|
like to know how the light is propagated through the scintillators. In such case simulation
|
|
of optical photons is possible. Note that the optical photon in Geant are treated as a class
|
|
of particles distinct from higher energy gamma particles -- and there is no smooth transition
|
|
between the two. Some additional material properties
|
|
of an active detector and of the detector surface have to be defined for optical photons.
|
|
We strongly recommend the users willing to simulate optical photons to read the
|
|
chapter ``Optical Photon Processes'' in~\cite{geantUserManual} to understand the rest of
|
|
this chapter.
|
|
|
|
The simulation of optical photons will significantly (in some cases dramatically)
|
|
reduce the speed of the program. The output of the optical photon simulation is stored
|
|
in variables starting with the string ``odet\_''. The user has to specify several parameters
|
|
in order to simulate optical photons:
|
|
%
|
|
\begin{description}
|
|
\item{\bf /musr/command G4OpticalPhotons \emph{true}}\\
|
|
Specifies to musrSim whether optical photons should be simulated or not.
|
|
If this parameter is set to \emph{false}, anything connected with optical photons
|
|
will be ignored internally in musrSim, and the user therefore does not have to
|
|
comment out other parameters connected with optical photons in the macro file.
|
|
|
|
\item{\bf /musr/command materialPropertiesTable \emph{MPT\_name} \emph{property} \emph{n}
|
|
\emph{E(1)} ... \emph{E(n)} \emph{val(1)} ... \emph{val(n)} } \\
|
|
Defines some optical \emph{property} of a given material (e.g.\ absorption lenght,
|
|
refractive index, scintillation yield, ...) to a material property table.
|
|
\emph{MPT\_name} stands for the material property table name. The table has
|
|
\emph{n} different values \emph{val(1)} ... \emph{val(n)} for the same number
|
|
of optical photon energies \emph{E(1)} ... \emph{E(n)} expressed in MeV.
|
|
If \emph{n}=0, the \emph{property} is called ``constant property''.
|
|
Some of the possible \emph{property} keywords are: ABSLENGTH, RINDEX, FASTCOMPONENT, SLOWCOMPONENT,
|
|
SCINTILLATIONYIELD, and some of the constant \emph{properties} are SCINTILLATIONYIELD, RESOLUTIONSCALE,
|
|
FASTTIMECONSTANT, SLOWTIMECONSTANT, and YIELDRATIO. See other \emph{property} keywords
|
|
in chapter ``Optical Photon Processes'' in~\cite{geantUserManual}.\\
|
|
\begin{description}
|
|
\item{\bf SCINTILLATIONYIELD} ... no. of photons per 1\,MeV of deposited energy.
|
|
\item{\bf RESOLUTIONSCALE} ... intrinsic resolution -- normally 1, larger than
|
|
1 for crystals with impurities, smaller than 1 when Fano factor plays a role.
|
|
\item{\bf YIELDRATIO} ... relative strength of the fast component as a fraction
|
|
of total scintillation yield.
|
|
\end{description}
|
|
|
|
\item {\bf /musr/command setMaterialPropertiesTable \emph{MPT\_name} \emph{material\_name}} \\
|
|
Assigns a material property table defined by ``/musr/command materialPropertiesTable''
|
|
to a given material.
|
|
|
|
\item {\bf /musr/command opticalSurface \emph{surface\_name} \emph{phys\_volName1} \emph{phys\_volName2} \emph{surfaceType} \emph{surfaceFinish} \emph{surfaceModel} \emph{MPT\_name}}\\
|
|
Defines ``border surface'' (G4LogicalBorderSurface, see subsection ``Boundary Process''
|
|
of chapter ``Optical Photon Processes'' in ~\cite{geantUserManual}).
|
|
|
|
\begin{description}
|
|
\item{\bf surface\_name} name of the newly defined surface.
|
|
\item{\bf phys\_volName1, phys\_volName2} names of the physics volume in question (it is an ordered pair!).
|
|
\item{\bf surfaceType} one of the following: dielectric\_dielectric, dielectric\_metal, dielectric\_LUT, firsov, x\_ray.
|
|
\item{\bf surfaceFinish} surface finish properties, such as: polished, ground, etchedair, ...
|
|
\item{\bf surfaceModel} one of the following: glisur, unified, LUT.
|
|
\item{\bf MPT\_name} optional ``material properties table name'' which should be assigned to the surface.
|
|
E.g.\ REFLECTIVITY or EFFICIENCY for a given surface may be assigned this way.
|
|
\end{description}
|
|
|
|
\item {\bf /musr/command OPSA \emph{subcommand} \emph{parameters ...}}\\
|
|
Different commands related to Optical Photon Signal Analysis (OPSA):\\
|
|
\begin{description}
|
|
\item{\bf signalSeparationTime \emph{timeSeparation}} \\
|
|
If two subsequent optical photons arrive to the same active detector
|
|
in time smaller than \emph{timeSeparation}, they will form
|
|
the same ``optical photon signal''. Otherwise (i.e.\ if there is no photon
|
|
detected for time larger than \emph{timeSeparation}) the next arriving photon
|
|
will start a new ``optical photon signal''. See the similarity
|
|
to the command ``/musr/command signalSeparationTime \emph{timeSeparation}''
|
|
for the deposited energy signals.
|
|
\item{\bf OPSAhist \emph{nBins} \emph{min} \emph{max}} \\
|
|
Defines ``OPSA'' histograms -- i.e.\ histograms that
|
|
contain the time distribution of the arrival of optical photons.\\
|
|
\emph{nBins} ... number of bins of the histogram\\
|
|
\emph{min} ... minimum of the x-axis of the histogram\\
|
|
\emph{max}... maximum of the x-axis the histogram\\
|
|
|
|
In fact three kinds of histograms are created -- see command
|
|
``/musr/command OPSA eventsForOPSAhistos \emph{eventID} \emph{detID}''.
|
|
|
|
\item{\bf eventsForOPSAhistos \emph{eventID} \emph{detID}}\\
|
|
Defines event number and detector ID, for which histograms of the
|
|
OPSA will be stored. If \emph{detID} is set to zero, all detectors will be
|
|
stored for the given event.
|
|
|
|
The naming convention for the histograms is the following:
|
|
OPSAhist\_\emph{eventID}\_\emph{detID}\_\emph{n} ,\\
|
|
where \emph{n} is the number of the ``optical photon signal'' in the
|
|
event \emph{eventID} in the detector \emph{detID}.\\
|
|
There are other two histograms, namely
|
|
``OPSAshape\_\emph{eventID}\_\emph{detID}\_\emph{n}'', which shows
|
|
the signal from OPSAhist convoluted with the response function
|
|
of the optical detection device as e.g.\ G-APD, and
|
|
``OPSA\_CFD\_\emph{eventID}\_\emph{detID}\_\emph{n}'', which shows
|
|
the signal from OPSAshape after the constant fraction discriminator.
|
|
|
|
There are two special cases:\\
|
|
\emph{eventID} = -1 ... OPSA histograms for all events will be summed into
|
|
a signle histogram.\\
|
|
\emph{eventID} = -2 ... OPSA histograms will be created for all events
|
|
(all histograms saved individually).
|
|
\item{\bf pulseShapeArray \emph{pulseShapeFileName}}\\
|
|
\emph{pulseShapeFileName} is the name of the file that contains response
|
|
function (pulse shape) of a single cell (single photon) detected by
|
|
the photosensitive detector. The data format is very strict:\\
|
|
\% ... comments \\
|
|
first column ... time in picoseconds (it has to be: 0, 1, 2, ... iPSmax
|
|
where iPSmax is smaller than 10000)\\
|
|
second column ... amplitude of the APD response function\\
|
|
{\bf Internally in musrSim, the data read from this file are interpolated to the
|
|
centres of the bins of the histograms defined by
|
|
``/musr/command OPSA OPSAhist ''}.
|
|
|
|
\item{\bf CFD \emph{a1} \emph{delay} \emph{timeShiftOffset}}\\
|
|
\item{\bf minNrOfDetectedPhotons}\\
|
|
\item{\bf photonFractions}\\
|
|
\end{description}
|
|
|
|
\end{description}
|
|
|
|
|
|
\subsection*{Tips and tricks for optical photons}
|
|
\begin{itemize}
|
|
\item One has to assign a non-zero EFFICIENCY and a REFLECTIVITY smaller than 1 to a boundary surface
|
|
between the scintillator and sensitive device (e.g.\ an APD).
|
|
\item To get a perfectly reflecting surface, one can use REFLECTIVITY=1; EFFICIENCY=0;
|
|
\emph{surfaceType}=dielectric\_metal, \emph{surfaceFinish}=polished, \emph{surfaceModel}=unified.
|
|
|
|
\end{itemize}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Some other parameters}
|
|
\label{sec:otherParameters}
|
|
%
|
|
\begin{description}
|
|
\item{\bf /run/beamOn \emph{nrOfEvents}}\\
|
|
Specify how many events will be simulated in this run/job.\\
|
|
\emph{nrOfEvents} (int) -- number of events to be simulated.\\
|
|
(This is a default Geant4 command, which has to be specified in any simulation run).
|
|
|
|
\item{\bf /musr/command rootOutputDirectoryName \emph{dirName}} \\
|
|
(default: /musr/command rootOutputDirectoryName data )\\
|
|
Specify the (sub)directory to which the output file will be written out.
|
|
|
|
\item{\bf /musr/command logicalVolumeToBeReweighted mu \emph{logicalVolume} \emph{weight} }\\
|
|
(default: not defined; no reweighting is done unless explicitly requested by this command.) \\
|
|
Events can be reweighted by this command. If muon {\bf stops and decays} in the
|
|
volume \emph{logicalVolume}, the event will be reweighted using the requested \emph{weight}.
|
|
Namely, only each $n^{th}$ event will be stored in the output Root tree ($n=$\emph{weight})
|
|
with the Root tree output variable
|
|
``weight'' set to \emph{weight}, while other (non-$n^{th}$) events
|
|
will be aborted. (The decision which event is to be stored and which to be aborted is
|
|
done at random). This reweighting might be useful in the cases when the user wants to speed-up the
|
|
simulation (respectively to reduce the number of fully simulated events), while keeping
|
|
the high number of events interesting for the analysis. For example, one can set
|
|
the reweighting of events in which muons stop in the collimator. The user should then
|
|
use the \emph{weight} stored in the Root tree when analysing the simulated data (i.e. when
|
|
filling histograms).
|
|
Compared to the simulation with no weighting applied, the histograms with weighted events
|
|
will have larger errors, but the distributions should not differ more then within the
|
|
statistical errors.\\
|
|
Note that the \emph{weight} parameter is integer, and ``mu'' stands for ``muons''
|
|
(at the moment reweighting based on electrons or positrons is not supported).
|
|
|
|
\item{\bf /musr/command SetUserLimits \emph{logicalVolume} \emph{ustepMax} \emph{utrakMax} \emph{utimeMax} \emph{uekinMin} \emph{urangMin}}\\
|
|
Set the so-called user limits (G4UserLimits) in a volume \emph{logicalVolume}.
|
|
The five last parameters correspond to the Geant4 methods
|
|
``SetMaxAllowedStep'', ``SetUserMaxTrackLength'', ``SetUserMaxTime'',
|
|
``SetUserMinEkine'' and ``SetUserMinRange''.
|
|
{\bf NOTE THAT G4StepLimiter AND/OR G4UserSpecialCuts HAS TO BE DEFINED FOR THE
|
|
REQUIRED PARTICLE TYPES BEFORE CALLING THIS COMMAND!}\\
|
|
(E.g.:\ ``/musr/command process addProcess mu+ G4StepLimiter -1 -1 5'')\\
|
|
See chapter ``5.7. User Limits'' (namely ``5.7.2. Processes co-working with G4UserLimits'')
|
|
of the Geant User Manual for more details about this issue.
|
|
|
|
The user can set G4UserLimits to logical volume and/or to a region.
|
|
{\bf At the moment, ``/musr/command SetUserLimits'' in musrSim supports the G4UserLimits
|
|
in logical volumes only, not in the G4Regions.}
|
|
User limits assigned to logical volume do not propagate to daughter volumes,
|
|
while User limits assigned to region propagate to daughter volumes unless
|
|
daughters belong to another region. If both logical volume and associated
|
|
region have user limits, those of logical volume win.
|
|
|
|
|
|
\item{\bf /musr/command storeOnlyEventsWithHits false}\\
|
|
By default, only the events in which at least one hit in an active
|
|
volume (detector) has been recorded are saved to the output Root tree,
|
|
because the events with no hit in any detector will anyway not contribute
|
|
to the real measurement (even not to the pileup background).
|
|
However, the user has a possibility to use this command
|
|
to store all events for some technical study, e.g. to learn where
|
|
the muons stop in collimators, etc.
|
|
|
|
\item{\bf /musr/command storeOnlyEventsWithHitInDetID \emph{volumeID}}\\
|
|
This command is similar to the previous one. Only the events,
|
|
in which there was at least one hit in the volume with the
|
|
\emph{volumeID} will be saved into the output Root tree.
|
|
This command might be useful in some technical studies, it might
|
|
introduce some bias in a physics study.
|
|
|
|
\item{\bf /musr/command storeOnlyTheFirstTimeHit true}\\
|
|
This command specifies that only the hit that happens first will be
|
|
saved, while all the other hits will be ignored.
|
|
This command might be useful in some technical studies, it would
|
|
be harmful in most physics studies.
|
|
|
|
\item{\bf /musr/command killAllPositrons true}\\
|
|
It might be useful in some technical studies to abandon all positron
|
|
tracks (to ignore all positrons). For example if the user wants
|
|
to study where the muon hit detectors and where do they stop and
|
|
decay, this command might help him to get rid of all hits
|
|
caused by the decay positron. This command would be
|
|
harmful in most physics studies.
|
|
|
|
\item{\bf /musr/command killAllElectrons true}\\
|
|
See ``/musr/command killAllPositrons true'' for the explanation.
|
|
|
|
\item{\bf /musr/command killAllGammas true}\\
|
|
See ``/musr/command killAllPositrons true'' for the explanation.
|
|
|
|
\item{\bf /musr/command killAllNeutrinos false}\\
|
|
By default the neutrino tracks are ``killed'' in the musrSim to
|
|
speed up the simulation, because
|
|
the neutrinos anyway do not interact with the detectors.
|
|
(This ``killing'' of neutrinos does not affect the muon decay in
|
|
any way).
|
|
However, it might be useful not to kill the neutrinos when the
|
|
user wants to display the complete muon decay event.
|
|
This command allows one not to kill the neutrinos.
|
|
|
|
\item{\bf /musr/command getDetectorMass \emph{logicalVolume}}\\
|
|
This command prints out the mass of a given volume (detector)
|
|
including all its daughter volumes (components).
|
|
|
|
\item{\bf /musr/command signalSeparationTime \emph{timeSeparation}}\\
|
|
There is some time for each detectors, during which it can not distinguish
|
|
two subsequent hits. The command mimics such feature.
|
|
If there are two energy deposits that happen in the same
|
|
active volume (detector) within the time \emph{timeSeparation}
|
|
(in ns), then these two energy deposits are summed up into
|
|
a single hit. Otherwise they will form two different hits.
|
|
This is true regardless on whether the two energy deposits were
|
|
induced by the same particle or by different particles.
|
|
Presently the parameter \emph{timeSeparation} is common to all
|
|
scintillator detectors in the system, which means it is not
|
|
possible to set different \emph{timeSeparation} for a slow
|
|
and fast scintillator detectors of the instrument.
|
|
|
|
\item{\bf /musr/command maximumNrOfStepsPerTrack \emph{n}}\\
|
|
Maximum number of steps allowed for a single track.
|
|
If the number of steps per track exceeds \emph{n}, the track is killed,
|
|
and the simulation proceeds with the next track.
|
|
|
|
\item{\bf /musr/command maximumTimePerEvent \emph{time}}\\
|
|
Maximum time (in seconds) allowed for the simulation of a single event.
|
|
If this time is exceeded, the event is killed and the simulation
|
|
of the next event starts. The default value is 60 seconds.
|
|
The variable \emph{time} is integer!
|
|
|
|
\item{\bf /musr/command maximumRunTimeAllowed \emph{timeMax}}\\
|
|
If a musrSim job is run on a pc farm with a time limit on the job execution,
|
|
and the job exceeds the time limit, the simulation will be killed.
|
|
The output Root tree will be not closed properly, and the
|
|
information stored in the Root vector ``geantParametersD''
|
|
will be not saved. To avoid the hard abort,
|
|
the job will be terminated gently if its physical execution time
|
|
exceeds \emph{timeMax}.
|
|
Note that the units of \emph{timeMax} are seconds,
|
|
and the default value is set to 85000\,s (23\,hours, 37\,minutes).\\
|
|
(Note that the simulation can also be terminated gently by creating a file
|
|
``RUNNUMBER.stop'' in the working directory, where RUNNUMBER matches the
|
|
run number specified in the name of the macro file.)
|
|
\end{description}
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Output root tree variables}
|
|
\label{sec:rootVariables}
|
|
The value of -999 or -1000 indicates that the given variable could not be filled
|
|
(was undefined in a given event).
|
|
For example if the variable ``muTargetTime'' is set to -1000 it means that the initial muon missed the sample,
|
|
and therefore no time can be assigned to the sample hit.
|
|
|
|
The user can choose which variables should not be stored in the output file using the command
|
|
\begin{description}
|
|
\item{\bf /musr/command rootOutput \emph{variableName} off} \\
|
|
The \emph{variableName} is identical with the variable names stored in the Root tree
|
|
(see below). Presently the exception is ``save'' volume, for which all variables
|
|
will be stored in the Root tree, if such a ``save'' volume is requested.
|
|
Another exception are the Root tree variables ``nFieldNomVal'' and ``fieldNomVal[nFieldNomVal]'',
|
|
which are both suppressed using the keyword ``fieldNomVal''.
|
|
The last exceptions are the variables ``fieldIntegralBx'',
|
|
``fieldIntegralBy'', ``fieldIntegralBz'', ``fieldIntegralBz1'',
|
|
``fieldIntegralBz2'', ``fieldIntegralBz3'', which are usually not required
|
|
in an analysis program, and they are therefore not written out to the Root tree by default.
|
|
This can be changed using the command ``/musr/command rootOutput \emph{variableName} on''.
|
|
\end{description}
|
|
|
|
The list of variables that can be stored in the Root tree:
|
|
\begin{description}
|
|
\item{\bf runID} (Int\_t) -- run ID number.
|
|
\item{\bf eventID} (Int\_t) -- event ID number.
|
|
\item{\bf timeToNextEvent} (Double\_t) -- time difference between two subsequent events (at continuous beam facility) (in $\mu$s).
|
|
This time difference is generated randomly using the ``meanArrivalTime'' defined in ``/gun/meanarrivaltime meanArrivalTime''.
|
|
\item{\bf weight} (Double\_t) -- event weight.
|
|
\item{\bf BFieldAtDecay\_Bx, BFieldAtDecay\_By, BFieldAtDecay\_Bz, BFieldAtDecay\_B3, BFieldAtDecay\_B4, BFieldAtDecay\_B5} (Double\_t) --
|
|
value of the 6 coordinates of the electromagnetic field at the position and time where and when the muon decayed.
|
|
The first three coordinates correspond to the magnetic field (in tesla), the last three to the electric field
|
|
(in kV/mm).
|
|
\item{\bf muIniTime} (Double\_t) -- time when the initial muon was generated (in $\mu$s).
|
|
\item{\bf muIniPosX, muIniPosY, muIniPosZ} (Double\_t) -- initial position where muon was generated (in mm).
|
|
\item{\bf muIniMomX, muIniMomY, muIniMomZ} (Double\_t) -- initial momentum of the muon when it was generated (in MeV/c).
|
|
\item{\bf muIniPolX, muIniPolY, muIniPolZ} (Double\_t) -- initial polarisation of the muon when it was generated.
|
|
\item{\bf muDecayDetID} (Int\_t) -- ID number of the detector in which the muon stopped and decayed.
|
|
\item{\bf muDecayTime} (Double\_t) -- the time at which the muon decayed (in $\mu$s).
|
|
\item{\bf muDecayPosX, muDecayPosY, muDecayPosZ} (Double\_t) -- the position where the muon stopped and decayed (in mm).
|
|
\item{\bf muDecayPolX, muDecayPolY, muDecayPolZ} (Double\_t) -- polarisation of the muon when it stopped and decayed.
|
|
\item{\bf muTargetTime} (Double\_t) -- time at which the muon entered the volume whose name starts by ``target'' -- usually the sample (in $\mu$s).
|
|
\item{\bf muTargetPolX, muTargetPolY, muTargetPolZ} (Double\_t) -- polarisation of the muon when it entered the volume whose name is ``target'' -- usually the sample.
|
|
\item{\bf muTargetMomX, muTargetMomY, muTargetMomZ} (Double\_t) -- momentum of the muon when it entered the volume whose name is ``target'' -- usually the sample.
|
|
\item{\bf muM0Time} (Double\_t) -- time at which the muon entered the detector called ``M0'' or ``m0'' (in $\mu$s).
|
|
\item{\bf muM0PolX, muM0PolY, muM0PolZ} (Double\_t) -- polarisation of the muon when it entered the detector called ``M0'' or ``m0''.
|
|
\item{\bf muM1Time} (Double\_t) -- time at which the muon entered the detector called ``M1'' or ``m1'' (in $\mu$s).
|
|
\item{\bf muM1PolX, muM1PolY, muM1PolZ} (Double\_t) -- polarisation of the muon when it entered the detector called ``M1'' or ``m1''.
|
|
\item{\bf muM2Time} (Double\_t) -- time at which the muon entered the detector called ``M2'' or ``m2'' (in $\mu$s).
|
|
\item{\bf muM2PolX, muM2PolY, muM2PolZ} (Double\_t) -- polarisation of the muon when it entered the detector called ``M2'' or ``m2''.
|
|
\item{\bf posIniMomX, posIniMomY, posIniMomZ} (Double\_t) -- Initial momentum of the decay positron (in MeV/c).
|
|
\item{\bf nFieldNomVal} (Int\_t) -- number of the elementary fields that make together the global field.
|
|
\item{\bf fieldNomVal[nFieldNomVal]} (array of Double\_t) -- nominal values of all elementary fields.
|
|
(They are usually constant, but sometimes they may vary from event to event).
|
|
\item{\bf BxIntegral, ByIntegral, BzIntegral, BzIntegral1, BzIntegral2, BzIntegral3} (Double\_t) --
|
|
calculates the field integrals along the muon path and path lengths defined as
|
|
\begin{eqnarray}
|
|
\mathrm{BxIntegral} & = & \int_{\mu\ \mathrm{path}} B_x(s)\, ds \\
|
|
\mathrm{ByIntegral} & = & \int_{\mu\ \mathrm{path}} B_y(s)\, ds \\
|
|
\mathrm{BzIntegral} & = & \int_{\mu\ \mathrm{path}} B_z(s)\, ds \\
|
|
\mathrm{BzIntegral1} & = & \int_{Z_0}^{Z_{decay}} B_z(z)\, dz \\
|
|
\mathrm{BzIntegral2} & = & \int_{\mu\ \mathrm{path}} ds \\
|
|
\mathrm{BzIntegral3} & = & \int_{Z_0}^{Z_{decay}} dz
|
|
\end{eqnarray}
|
|
The units are tesla$\cdot$m (for the first four variables) and mm (for the last two variables).
|
|
To calculate the integrals properly, the user must force Geant to use very small step size
|
|
(e.g.\ by using something like ``/musr/command globalfield setparameter SetLargestAcceptableStep 2''),
|
|
and probably also to generate the muons well outside the magnetic field and put target such
|
|
that muons stop at $z=0$.
|
|
|
|
Note that these variables are by default not calculated (and not stored) and therefore the user has
|
|
to switch the calculation on by ``/musr/command rootOutput fieldIntegralBx on'' in the macro file.
|
|
\item{\bf nOptPhot} (Int\_t) -- total number of optical photons generated in the current event.
|
|
\item{\bf det\_n} (Int\_t) -- number of ``detector hits'' in this event. Note that more then 1 detector
|
|
might be hit, and even the same detector might be hit more than once. The hit might be induced by just one
|
|
particle, by more then one particle originating from the same particle initially hitting the detector,
|
|
or from more ``independent'' particles.
|
|
For example, the decay positron can emit an Bremsstrahlung photon in the sample and then both the Bremsstrahlung
|
|
photon and positron hit the same positron counter at approximately the same time.
|
|
\item{\bf det\_ID[det\_n]} (array of Int\_t) -- ID number of the detector where the given hit occurred.
|
|
\item{\bf det\_edep[det\_n]} (array of Double\_t) -- energy deposited in the given hit (in MeV).
|
|
\item{\bf det\_edep\_el[det\_n]} (array of Double\_t) -- energy deposited in the given hit due to electron-based interactions (in MeV).
|
|
\item{\bf det\_edep\_pos[det\_n]} (array of Double\_t) -- energy deposited in the given hit due to positron-based interactions (in MeV).
|
|
\item{\bf det\_edep\_gam[det\_n]} (array of Double\_t) -- energy deposited in the given hit due to photon-based interactions (in MeV).
|
|
\item{\bf det\_edep\_mup[det\_n]} (array of Double\_t) -- energy deposited in the given hit due to muon-based interactions (in MeV).
|
|
\item{\bf det\_nsteps[det\_n]} (array of Int\_t) -- number of ``steps'' (in {\sc Geant4} terminology) that were
|
|
integrated together in the given hit. (The det\_edep[] energy is the sum of the energy deposits during all these steps).
|
|
\item{\bf det\_length[det\_n]} (array of Double\_t) -- the length of the trajectory of the particle (particles) that contributed to
|
|
the given hit (in mm).
|
|
\item{\bf det\_time\_start[det\_n], det\_time\_end[det\_n]} (array of Double\_t) -- the initial and final time belonging of the hit.
|
|
It should be the ``global time'' of the track when the first and last hit occurred (in $\mu$s).
|
|
\item{\bf det\_x[det\_n], det\_y[det\_n], det\_z[det\_n]} (array of Double\_t) -- the coordinates of the first step of the given hit.
|
|
\item{\bf det\_kine[det\_n]} (array of Double\_t) -- should be kinetic energy of the first particle contributing
|
|
to the hit, but it is not clear how to interpret this variable, so check the
|
|
code for the exact meaning (in MeV).
|
|
\item{\bf det\_Vrtx*****[det\_n]} -- All the variables starting with ``det\_Vrtx'' refer to the particle with the first (in time) energy deposit
|
|
belonging to the given hit. (Note that the hit might be induced by more than one particle.) The vertex, at which
|
|
the particle was created, may or may not be positioned within the sensitive volume, in which the hit is observed.
|
|
\item{\bf det\_VrtxKine[det\_n]} (array of Double\_t) -- the kinetic energy of the first (in time) particle belonging to the hit.
|
|
\item{\bf det\_VrtxX[det\_n], det\_VrtxY[det\_n], det\_VrtxZ[det\_n]} (array of Double\_t) -- the position of the vertex of
|
|
the first particle that belongs to the given hit (in mm).
|
|
\item{\bf det\_VrtxVolID[det\_n]} (array of Int\_t) -- ID of the detector in which the vertex (see above) was created.
|
|
\item{\bf det\_VrtxProcID[det\_n]} (array of Int\_t) -- ID of the physics process in which the vertex (see above) was created.
|
|
\item{\bf det\_VrtxTrackID[det\_n]} (array of Int\_t) -- track ID of the first particle that belongs to the given hit.
|
|
If the track ID is negative, there were more than just one track contributing to this hit. The absolute value
|
|
of det\_VrtxTrackID[det\_n] corresponds to the first (in time) track.
|
|
\item{\bf det\_VrtxParticleID[det\_n]} (array of Int\_t) -- particle ID of the first particle that belongs to the given hit.
|
|
\item{\bf det\_Vvv*****[det\_n]} -- similar to the variables det\_Vrtx*****[det\_n] above, but if the first particle
|
|
belonging to the hit was created inside of the logical volume where the hit occurs, then it's track is followed
|
|
to its mother track (even several times) until the track (particle) is found that has been created outside the
|
|
given volume. This way one can better investigate which (hopefully) single particle caused the hit. Even though
|
|
even in this case it is not guaranteed that only a single particle gave origin to the hit, it is quite likely, though,
|
|
that it was in fact just a single particle. If the
|
|
\item{\bf odet\_n} (Int\_t) -- number of ``optical photon signals'' in this event. Note that there can be several optical photon signals
|
|
per detector. In principle, the optical photons contributing to the same signal may originate from more than
|
|
one charged particle. Ideally, there should be the same number of optical photon signals as there are
|
|
``detector hits'', i.e.\ odet\_n = det\_n. However, detector hits are treated independently of the
|
|
optical photon signals, and they do not have to match perfectly.
|
|
\item{\bf odet\_ID[odet\_n]} (array of Int\_t) -- ID number of the detector where the given optical photon signal occurred.
|
|
The detection of optical photons happens at the boundary of surfaces, and it is assigned to the volume ID \emph{to} which
|
|
the photon enters (and not \emph{from} which it comes). This e.g.\ allows one to attach more APDs to one scintillator,
|
|
in which case odet\_ID[] will correspond to the volume IDs of individual APDs.
|
|
\item{\bf odet\_nPhot[odet\_n]} (array of Int\_t) -- number of photons detected in the given optical photon signal.
|
|
\item{\bf odet\_timeFirst[odet\_n], odet\_timeSecond[odet\_n], odet\_timeThird[odet\_n], odet\_timeLast[odet\_n]} (array of Double\_t)
|
|
-- times, when the the first, second, third and last photons, contributing to the given signal, were detected.
|
|
\item{\bf odet\_timeA[odet\_n], odet\_timeB[odet\_n]} (array of Double\_t)
|
|
-- time, when the $n^{th}$ photon was detected, where $n$ for \emph{odet\_timeA[i]} is given as \emph{OPSA\_fracA}
|
|
multiplied by \emph{odet\_nPhot[i]}. Similarly for \emph{odet\_timeB[i]}.
|
|
The variables \emph{OPSA\_fracA} and \emph{OPSA\_fracB} are defined by the ``/musr/command OPSA photonFractions'' command
|
|
(see chapter~\ref{sec:opticalPhotons}).
|
|
\item{\bf odet\_timeC[odet\_n]} (array of Double\_t)
|
|
-- time, when the shape of the signal becomes larger than the threshold ``OPSA\_C\_threshold'' defined by
|
|
the ``/musr/command OPSA photonFractions'' command (see chapter~\ref{sec:opticalPhotons}).
|
|
\item{\bf odet\_timeD[odet\_n]} (array of Double\_t)
|
|
-- time, when the shape of the {\bf normalised} signal becomes larger than the threshold ``OPSA\_D\_threshold'' defined by
|
|
the ``/musr/command OPSA photonFractions'' command (see chapter~\ref{sec:opticalPhotons}). The normalisation is done
|
|
to 1.
|
|
\item{\bf odet\_timeCFD[odet\_n]} (array of Double\_t)
|
|
-- time as from the ``Constant Fraction Discriminator''.
|
|
\item{\bf odet\_timeMean[odet\_n]} (array of Double\_t)
|
|
-- mean time of the arriving photons (calculated from the OPSAhist defined by the command ``/musr/command OPSA OPSAhist ''.
|
|
\item{\bf save\_n} (Int\_t) -- number of special kind of ``save'' volume that were hit in this event. The ``save volume'' is
|
|
any volume whose name starts with letters ``save''. Their purpose in the simulation is usually to check positions
|
|
and momenta of particles at some position of the detector, even if the particle does not deposit any energy in
|
|
the given ``save'' volume. Save volumes can therefore be made of vacuum.
|
|
\item{\bf save\_detID[save\_n]} (array of Int\_t) -- ID number of the save volume.
|
|
\item{\bf save\_particleID[save\_n]} (array of Int\_t) -- particle ID of the particle that entered the save volume.
|
|
\item{\bf save\_time[save\_n]} (array of Double\_t) -- time when the particle entered in the volume (in $\mu$s).
|
|
\item{\bf save\_x[save\_n], save\_y[save\_n], save\_z[save\_n]} (array of Double\_t) -- position of the particle where it
|
|
entered the save volume (``GetPreStepPoint()'') (in mm).
|
|
\item{\bf save\_px[save\_n], save\_py[save\_n], save\_pz[save\_n]} (array of Double\_t) -- momentum of the particle when it
|
|
entered the save volume (in MeV/c).
|
|
\item{\bf save\_polx[save\_n], save\_poly[save\_n], save\_polz[save\_n]} (array of Double\_t) -- polarisation of the particle when it
|
|
entered the save volume.
|
|
\item{\bf save\_ke[save\_n]} (array of Double\_t) -- kinetic energy of the particle when it
|
|
entered the save volume (in MeV).
|
|
\end{description}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Other outputs of the simulation}
|
|
The output of the simulation is stored in the file ``data/musr\_RUNNUMBER.root''. There are four
|
|
kind of objects stored in this file:
|
|
%
|
|
\begin{description}
|
|
\item{\bf Tree ``t1''} -- tree containing simulated information for all events.
|
|
\item{\bf Vector ``geantParametersD''} -- vector containing information valid for the whole run,
|
|
e.g.\ the run number of the given run, number of generated events, ...
|
|
\item{\bf Histogram ``hGeantParameters''} -- contains the same information as ``geantParametersD'',
|
|
but in the form of histogram. The (only) reason for storing the same information in two different ways
|
|
(TVector and histogram TH1D) is the feature of the root ``hadd'' command, used for merging two or more different
|
|
simulated results into one file. The command ``hadd'' will sum-up variables stored in ``hGeantParameters'',
|
|
while it will do nothing for variables stored in ``geantParametersD''.
|
|
Both ways are useful for different type of information.
|
|
\item{\bf Other histograms} -- some other histograms can be filled during the simulation for debugging purposes.
|
|
These are typically not interesting for the analysis of the results of the simulation.
|
|
\end{description}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Visualisation}
|
|
|
|
\begin{description}
|
|
\item{\bf /musr/command visattributes \emph{volumeName} \emph{colour}}\\
|
|
{\bf /musr/command visattributes \emph{materialName} \emph{colour}}\\
|
|
In case of visualisation,
|
|
one can set the colour of a logical volume \emph{volumeName} or of all volumes made
|
|
of the material with the name \emph{materialName}. The distinction between the
|
|
two options is by the first four letters of the \emph{volumeName} -- if it contains
|
|
the string ``log\_'', it is considered as \emph{volumeName}, otherwise it is
|
|
considered to be a material with \emph{materialName}.
|
|
|
|
Presently the following colours are predefined: ``invisible'', ``white'', ``black'',
|
|
``red'', ``darkred'', ``green'',
|
|
``blue'', ``lightblue'', ``darkblue'', ``blue\_style'', ``fblue\_style'',
|
|
``yellow'', ``gray'', ``cyan'', ``magenta'',
|
|
``oxsteel'', ``MCP\_style'', ``MACOR\_style'', ``SCINT\_style'',
|
|
``dSCINT\_style'', ``VTBB\_style'', ``Grid\_style'' and ``RA\_style''.
|
|
|
|
New colours can be easily added, if needed, in the member function
|
|
``musrDetectorConstruction::SetColourOfLogicalVolume''.
|
|
|
|
\end{description}
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Upgrading Geant4 version}
|
|
\begin{description}
|
|
\item{\bf Geant 4.9.1 and older} - copy the file ``src/G4DecayWithSpin.cc\_for\_Geant4.9.1\_and\_older''
|
|
to the file ``src/G4DecayWithSpin.cc''.
|
|
Also copy ``src/G4EqEMFieldWithSpin.cc\_for\_Geant4.9.1\_and\_older'' to ``src/G4EqEMFieldWithSpin.cc''.
|
|
\item{\bf Geant 4.9.2.p02} -- (only this particular Geant version!) copy the file
|
|
``src/G4EqEMFieldWithSpin.cc\_for\_Geant4.9.2p02\_only'' to the file ``src/G4EqEMFieldWithSpin.cc''.
|
|
\item{\bf Geant 4.9.2 and older} - copy the file ``src/musrPhysicsList.cc\_Geant4.9.2p02\_and\_older''
|
|
to the file ``src/musrPhysicsList.cc''.
|
|
\item{\bf Geant 4.9.3}
|
|
From the point of view of musrSim, the largest change in version 4.9.3 with respect to 4.9.2
|
|
is the different treatment of the physics processes, therefore the musrPhysicsList.cc had to be
|
|
modified, and also the physics processes listed in the *.mac file have to be changed!
|
|
Note that using Geant~4.9.3 with old *.mac files will formally run OK, but the results of the
|
|
simulation (slightly) differ from the same simulation based on Geant~4.9.2. However after
|
|
updating the *.mac file, the simulation done with Geant~4.9.3 more or less reproduces results
|
|
obtained with Geant~4.9.2.
|
|
\end{description}
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Example 1 -- Electrons passing through two scintillator tiles (101.mac)}
|
|
One of the easiest example to illustrate the basic features of the musrSim (and/or Geant4) is to
|
|
shoot electrons into a scintillator block, and to observe the energy deposited inside it.
|
|
Figure~\ref{vis101}
|
|
%
|
|
\begin{figure}[tb]\centering
|
|
\epsfig{file=pict/vis_101_c.eps,width=8cm,%\linewidth,%
|
|
%bbllx=83pt,bblly=330pt,bburx=538pt,bbury=513pt,
|
|
clip=}
|
|
\caption{A simple simulation of an electron passing through two
|
|
scintillator tiles.}
|
|
\label{vis101}
|
|
\end{figure}
|
|
%
|
|
illustrates a simple geometry made of an electron source and two blocks
|
|
of scintillator tiles with the dimensions of $3 \times 3 \times 2\,$mm,
|
|
which is defined in the macro file ``101.mac''.
|
|
The primary particles are electrons with the energy of 2.15\,MeV shot
|
|
into the first scintillator. There the electron can be scattered, and therefore
|
|
it may or may not hit the second scintillator. We have used the command\\[2ex]
|
|
{\tt /musr/command storeOnlyEventsWithHitInDetID 11}\\[2ex]
|
|
and therefore only the events, in which there was some energy deposited
|
|
in the second collimator, will be saved into the output Root file.
|
|
|
|
To run this example, do the following:
|
|
\begin{enumerate}
|
|
\item Change to the directory {\tt musrSim/run/}
|
|
\item If the subdirectory {\tt data} does not exist, create it.
|
|
\item Run your Geant4 initialisation script (typically something like \\
|
|
{\tt source /home/install/geant4.9.4/env.sh}\\
|
|
where the path to the {\tt env.sh} script depends on the directory where Geant4
|
|
is installed on your computer.
|
|
\item Execute the command {\tt musrSim 101.mac}
|
|
\item The example file {\tt 101.mac} will try to visualise the events using the
|
|
Dawn graphics program. To simulate some data (without the visualisation),
|
|
uncomment the line {\tt /vis/disable}, comment the line
|
|
{\tt /control/execute visDawn101.mac} and change number of generated events
|
|
to e.g.\ 1000 (by command {\tt /run/beamOn 1000}).
|
|
\item Look at the output using Root, e.g.\ by commands \\
|
|
{\tt \$ root} \\
|
|
{\tt root [0] TFile* f2=new TFile("data/musr\_101.root") } \\
|
|
{\tt root [1] .ls } \\
|
|
{\tt root [2] t1->Print() } \\
|
|
{\tt root [3] t1->Draw("det\_edep","det\_ID==10") } \emph{\small //energy deposited in the first scintillator}\\
|
|
{\tt root [4] t1->Draw("det\_edep","det\_ID==11") } \emph{\small //energy deposited in the second scintillator}\\
|
|
{\tt root [5] t1->Draw("det\_time\_start[0]-det\_time\_start[1]")} \emph{\small //T.O.F. between the two scint.} \\
|
|
{\tt root [6] .q}\\
|
|
Note that the hits in one event are ordered according to the deposited energy, and therefore the
|
|
first hit sometimes corresponds to the hit in scintillator counter 10, sometimes to the hit in counter 11.
|
|
Therefore the histogram created by the command {\tt t1->Draw("det\_time\_start[0]-det\_time\_start[1]")}
|
|
has two peaks -- at a positive and at a negative time.
|
|
\end{enumerate}
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Example 2 -- Sr decay electrons passing through two scintillator tiles (102.mac)}
|
|
This example is very similar to the previous one. The only difference is that initial
|
|
particles are decay electrons from a $^{90}$Sr source. Because $^{90}$Sr decays to $^{90}$Y,
|
|
which in turn also decays emitting an electron, we have in fact two decay electrons per event
|
|
(two emission spectra from the strontium source).
|
|
The data for the strontium and yttrium decay are taken
|
|
from the Geant4 data files, namely\\
|
|
{\tt /home/install/data\_geant4.9.4/RadioactiveDecay3.3/z38.a90}~~~~ and\\
|
|
{\tt /home/install/data\_geant4.9.4/RadioactiveDecay3.3/z39.a90}. \\
|
|
There is, however, one problem in musrSim -- it has to handle times with picoseond precision,
|
|
and the \emph{double} precision used in the c{\tt ++} program is then not enough to deal with
|
|
the $^{90}$Sr decay time of 29 years.
|
|
For this reason, one has to modify the decay times in the two data files, i.e.\
|
|
in the file {\tt z38.a90}, one should replace the line\\
|
|
\hspace*{1cm}{\tt P~~~~~~~0.0000~~~9.0820e+08}\\
|
|
by the line\\
|
|
\hspace*{1cm}{\tt P~~~~~~~0.0000~~~9.0820e-08}\\[2ex]
|
|
and in the file {\tt z39.a90}, one should replace the lines\\
|
|
\hspace*{1cm}{\tt P~~~~~~~0.0000~~~2.3080e+05}\\
|
|
\hspace*{1cm}{\tt P~~~~~682.0300~~~1.1480e+04}\\
|
|
by the lines\\
|
|
\hspace*{1cm}{\tt P~~~~~~~0.0000~~~2.3080e-05}\\
|
|
\hspace*{1cm}{\tt P~~~~~682.0300~~~1.1480e-04}\\
|
|
This way, the decay times are reasonably short, and musrSim can handle them.
|
|
|
|
Another complication comes from the fact, that the decay electrons are emitted
|
|
isotropically from the Sr source. In principle, it is possible to restrict the
|
|
emission angles in the GPS (General Particle Source), but we have not done this
|
|
intentionally, because we did not want to exclude events in which the decay electron
|
|
enters a counter after scattering in the air. In the end only a very small fraction
|
|
of events hits the second counter, and is written out to the output file.
|
|
(In any case -- the events in which electron does not enter any counter are simulated in a much
|
|
shorter time than the ``interesting'' events.)
|
|
|
|
The example {\tt 102.mac} is based on the results published in~\cite{FirstExperience}.
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Example 3 -- Simulation of the light transport (103.mac)}
|
|
This example is similar to example~1, and extended by the simulation of light (``optical
|
|
photons''). The light simulation slows down the execution of musrSim dramatically.
|
|
|
|
The simulation of light is a new feature in musrSim, and it is being tested. Once
|
|
this is finished, we will improve this example. However, it seems to be running fine
|
|
in its current implementation, so you can start using it. A lot of useful information
|
|
about the optical photons is given in chapter ``Optical Photon Processes'' in
|
|
the Geant4 User Manual~\cite{geantUserManual}.\\
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Example 4 -- GPD instrument (201.mac)}
|
|
%
|
|
The General Purpose Decay-Channel Spectrometer (GPD)
|
|
instrument~\cite{GPD} at PSI, more or less as implemented in reality in the year 2010, is exemplified in
|
|
run {\tt 201.mac}. GPD instrument is optimised for the measurements of pressured samples
|
|
in a special pressure cells.
|
|
The detector system is relatively simple -- it consist of a rectangular muon counter (10x10x2\,mm),
|
|
two backward positron counters, three forward positron counters, cylindrical sample in a cylindrical
|
|
sample holder, two lead collimators, one copper collimator, GPD magnet, and some additional ``dead'' material.
|
|
The GPD geometry is illustrated in Fig.~\ref{fig:vis_201_1}-\ref{fig:vis_201_4},
|
|
where some of the elements present in the simulation (beampipe, magnet, aluminium profiles) are not displayed
|
|
for simplicity.
|
|
The most important parameters of the simulation are summarised in table~\ref{dimensions}.
|
|
%
|
|
\begin{figure}[tbp]\centering
|
|
\epsfig{file=pict/vis_201_1.eps,width=0.5\linewidth,%
|
|
bbllx=70pt,bblly=270pt,bburx=455pt,bbury=640pt,clip=}
|
|
\caption{3D view at the GPD detector system (run 201). Blue colour indicates the positron counters,
|
|
magenta stands for collimators, red is the muon counter. GPD magnet, some Aluminium U-profiles and beampipe
|
|
are not shown in the plot, however they are included in the simulation.}
|
|
\label{fig:vis_201_1}
|
|
\end{figure}
|
|
%
|
|
%
|
|
\begin{figure}[tbp]\centering
|
|
\epsfig{file=pict/vis_201_2.eps,width=0.8\linewidth,%
|
|
bbllx=90pt,bblly=310pt,bburx=450pt,bbury=525pt,clip=}
|
|
\caption{Side view of the GPD detector.}
|
|
\label{fig:vis_201_2}
|
|
\end{figure}
|
|
%
|
|
%
|
|
\begin{figure}[tbp]\centering
|
|
\epsfig{file=pict/vis_201_3.eps,width=0.4\linewidth,%
|
|
bbllx=210pt,bblly=320pt,bburx=380pt,bbury=525pt,clip=}
|
|
\caption{Front view of the GPD detector.}
|
|
\label{fig:vis_201_3}
|
|
\end{figure}
|
|
%
|
|
%
|
|
\begin{figure}[tbp]\centering
|
|
\epsfig{file=pict/vis_201_4.eps,width=0.9\linewidth,%
|
|
bbllx=70pt,bblly=309pt,bburx=485pt,bbury=513pt,clip=}
|
|
\caption{Top view of the GPD detector.}
|
|
\label{fig:vis_201_4}
|
|
\end{figure}
|
|
%
|
|
|
|
|
|
\begin{table}[htbp]\centering
|
|
\renewcommand{\arraystretch}{1.05}
|
|
\begin{tabular}{|l|c|c|}
|
|
\hline
|
|
\lower 1mm \hbox{\textbf{Component}} & \lower 1mm \hbox{\textbf{Dimension}} & \lower 1mm \hbox{\textbf{Material}} \\[5pt]
|
|
\hline
|
|
positron counter scintillator & $26 \times 90 \times 5$\,mm & plastic vinyltoluene \\
|
|
middle forw. positron counter scint. & $14 \times 90 \times 5$\,mm & plastic vinyltoluene \\
|
|
muon counter & $10 \times 10 \times 2$\,mm & plastic vinyltoluene \\
|
|
sample & R=3.5\,mm, L=14\,mm & Cu \\
|
|
sample cell & R=12\,mm, L=100\,mm & Cu \\
|
|
Cu collimator & $80 \times 120 \times (\sim 20 - 30)$\,mm & Cu \\
|
|
Cu collimator opening & $5 \times 12$\,mm & \\
|
|
Pb collimator & $140 \times 140 \times 30$ & Pb \\
|
|
Pb collimator opening & $4 \times 10$\,mm & \\
|
|
Collimator 1 & R=100\,mm, L=30\,mm & Pb \\
|
|
Collimator 1 opening & R$_{opening}$=8\,mm & \\
|
|
distance sample -- Pb collimator & 90\,mm (centre -- centre) & \\
|
|
distance sample -- collimator1 & 250\,mm (centre -- centre) & \\
|
|
distance sample -- beampipe window & 600\,mm & \\ \hline
|
|
muon initial momentum & $100 \pm 3$\,MeV/c & \\
|
|
muon initial $z$-coordinate & -1.0\,m with respect to sample & \\
|
|
muon initial $x$ and $y$ coordinate & Gaussian smearing, $\sigma_x=\sigma_y=25$\,mm & \\
|
|
magnetic field & 300 gauss & \\
|
|
\hline
|
|
\end{tabular}
|
|
\caption{Main parameters of the simulation.}
|
|
\label{dimensions}
|
|
\end{table}
|
|
%
|
|
A non-standard feature of this simulation is the muon momentum, which is $~sim$100\,MeV/c.
|
|
The copper collimator used in GPD has a bit complicate shape, which required to use subtraction
|
|
of logical volumes in Geant\,4. This operation can not be specified through the macro file,
|
|
and therefore a special kind of volume called {\tt GPDcollimator} has been hard-coded into
|
|
the source code (namely in the routine {\tt musrDetectorConstruction.cc}), and it is
|
|
then activated in the macro file using the command \\[2ex]
|
|
{\tt /musr/command construct GPDcollimator \ldots}\\[2ex]
|
|
%
|
|
The results of this GPD simulation are described in the \emph{musrSimAna} manual~\cite{musrSimAna}.
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Example 5 -- GPS instrument}
|
|
For the details about the GPS simulation see the documents
|
|
``Simulation of the GPS μSR instrument 1--4'' (currently saved as
|
|
/afs/psi.ch/project/lmu/Facility/musr\_simulations/documentation/GPS/*.pdf).
|
|
\begin{itemize}
|
|
\item {\tt 50121.mac} -- GPS as installed in reality in 2011.
|
|
\item {\tt 50131.mac} -- GPS planned upgrade; bottle-shaped forward veto.
|
|
\item {\tt 50161.mac, 50171.mac, 50181.mac} -- GPS planned upgrade; pyramidal forward veto.
|
|
\end{itemize}
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Other Examples}
|
|
During the years a lot of ``*.mac'' files were created and used.
|
|
Most of these files are stored in the file ``run\_many\_files.tar.gz''.
|
|
It is not guaranteed that all the ``*.mac'' files stored there are
|
|
compatible with the newest version of musrSim/Geant4. However,
|
|
they can be still useful, at least as a source of inspiration.
|
|
See the file ``README.TXT'' for a short description of what the purpose
|
|
of the different files was.
|
|
|
|
Sometimes the runs need additional input files (e.g.\ a field map
|
|
,TURTLE file, ...). These files are too large to be stored in the svn repository,
|
|
and typically can be found in subdirectories of the high field project:
|
|
/afs/psi.ch/project/HighFieldMuSR/.
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\clearpage
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
|
|
%
|
|
%\begin{figure}\centering
|
|
%\epsfig{file=pict/HiFi_01.eps,width=\linewidth,%
|
|
%bbllx=56pt,bblly=288pt,bburx=505pt,bbury=555pt,clip=}
|
|
%\caption{The cross-section of the first version of the High Field \musr\ apparatus including
|
|
%an example interaction. Only the inner part of the apparatus is shown. The picture was generated
|
|
%using GEANT package.}
|
|
%\label{HiFi_01}
|
|
%\end{figure}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\section{Conclusions}
|
|
Please let us know your comments and suggestions for further improvement/development of the
|
|
musrSim program.
|
|
|
|
|
|
%\section{Appendix A: Steering file for the simulation}
|
|
%\begin{verbatim}
|
|
%# Macro file for seg06.cc
|
|
%# set detector parameters
|
|
%# This line fills some space
|
|
%# This line fills some space
|
|
%/run/beamOn 2
|
|
%\end{verbatim}
|
|
|
|
|
|
\begin{thebibliography}{0}
|
|
|
|
\bibitem{Blundel:1999} S.J.~Blundel, Contemp. Phys. 40 (1999) 175.
|
|
|
|
\bibitem{geant} S.~Agostinelli {\it et al.}, Nucl. Instr. and Meth. A 506 (2003) 250.\\ %-303. \\
|
|
J.~Allison, et al., IEEE Trans. Nucl.\ Sci.\ 53 (2006) 270. %-278.
|
|
\bibitem{root} R.~Brun, F.~Rademakers ``ROOT - An Object Oriented Data Analysis Framework'',
|
|
%Proceedings AIHENP'96 Workshop, Lausanne, Sep. 1996,
|
|
Nucl. Inst. and Meth. in Phys. Res. A 389 (1997) 81.%-86.
|
|
See also http://root.cern.ch/.
|
|
|
|
\bibitem{geantUserManual} Geant4 User Manual
|
|
|
|
\bibitem{turtle}
|
|
K.L.~Brown, Ch.~Iselin, D.C.~Carey, {\it``Decay Turtle''}, CERN 74-2 (1974). \\
|
|
U.~Rohrer, {\it ``Compendium of Decay Turtle Enhancements''},
|
|
http://pc532.psi.ch/turtcomp.htm
|
|
|
|
\bibitem{shirokaGeant}
|
|
T.~Shiroka {\it et al.} ``GEANT4 as a simulation framework in muSR'',
|
|
Physica {\bf B~404}, (2009) 966-969
|
|
%
|
|
|
|
\bibitem{GPD}
|
|
http://lmu.web.psi.ch/facilities/gpd/gpd.html
|
|
|
|
\bibitem{musrSimAna}
|
|
K.~Sedlak, ``Manual of musrSimAna''.
|
|
|
|
\bibitem{FirstExperience}
|
|
A.~Stoykov {\it et al.} ``First experience with G-APD in $\mu$SR instrumentation'',
|
|
Nucl. Inst. and Meth. in Phys. Res. A {\bf 610} (2009), 374-377.
|
|
|
|
\end{thebibliography}
|
|
|
|
\end{document} |