
///\file "B2/.README.txt"
///\brief Example B2 README page

/*! \page ExampleB2 Example B2

This example simulates a simplified fixed target experiment.

\section B2_s1 GEOMETRY DEFINITION
 
   The setup consists of a target followed by six chambers of increasing
   transverse size at defined instances from the target. These chambers are 
   located in a region called the Tracker region. 
   Their shape are cylinders, constructed as simple cylinders
   (in B2aDetectorConstruction) and as parametrised volumes 
   (in B2bDetectorConstruction), see also B2bChamberParameterisation class.

   In addition, a global, uniform, and transverse magnetic field can be 
   applied using G4GlobalMagFieldMessenger, instantiated in 
   B2aDetectorConstruction::ConstructSDandField with a non zero field value, 
   or via interactive commands.
   For example:
\verbatim
/globalField/setValue 0.2 0 0 tesla
\endverbatim
   An instance of the B2TrackerSD class is created and associated with each 
   logical chamber volume (in B2a) and with the one G4LogicalVolume associated 
   with G4PVParameterised (in B2b). 

   One can change the materials of the target and the chambers
   interactively via the commands defined in B2aDetectorMessenger
   (or B2bDetectorMessenger). For example:
\verbatim
/B2/det/setTargetMaterial G4_WATER
/B2/det/setChamberMaterial G4_Ar
\endverbatim
 
\section B2_s2 PHYSICS LIST

   The particle's type and the physic processes which will be available
   in this example are set in the FTFP_BERT physics list. This physics list 
   requires data files for electromagnetic and hadronic processes.
   See more on installation of the datasets in
   <a href="http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/InstallationGuide/html/ch03s03.html">
   Geant4 Installation Guide, Chapter 3.3: Note On Geant4 Datasets </a>.
   The following datasets: G4LEDATA, G4LEVELGAMMADATA, G4SAIDXSDATA and
   G4ENSDFSTATEDATA are mandatory for this example.
 
   In addition, the build-in interactive command:
\verbatim
/process/(in)activate processName
\endverbatim
   allows the user to activate/inactivate the processes one by one.

\section B2_s3 ACTION INITALIZATION

   A newly introduced class, B2ActionInitialization,
   instantiates and registers to Geant4 kernel all user action classes.
   
   While in sequential mode the action classes are instatiated just once,
   via invoking the method:
     B2ActionInitialization::Build()
   in multi-threading mode the same method is invoked for each thread worker
   and so all user action classes are defined thread-local.

   A run action class is instantiated both thread-local 
   and global that's why its instance is created also in the method
      B2ActionInitialization::BuildForMaster()
   which is invoked only in multi-threading mode.

\section B2_s4 PRIMARY GENERATOR

   The primary generator action class employs the G4ParticleGun. 
   The primary kinematics consists of a single particle which starts at the world boundary
   and hits the target perpendicular to the entrance face. The type of the particle
   and its energy can be changed via the G4 built-in commands of 
   the G4ParticleGun class.
   Note that this particular case of starting a primary particle on the world boundary
   requires shooting in a direction towards inside the world.
  
\section B2_s5 RUNS and EVENTS
 
   A run is a set of events.
 
   The user has control:
      - at Begin and End of each run (class B2RunAction)
      - at Begin and End of each event (class B2EventAction)
      - at Begin and End of each track (class TrackingAction, not used here)
      - at End of each step (class SteppingAction, not used here)

   The event number is written to the log file every requested number 
   of events in B2EventAction::BeginOfEventAction() and 
   B2EventAction::EndOfEventAction(). 
   Moreover, for the first 100 events and every 100 events thereafter 
   information about the number of stored trajectories in the event 
   is printed as well as the number of hits stored in the G4VHitsCollection. 
  
   The run number is printed at B2RunAction::BeginOfRunAction(), where the 
   G4RunManager is also informed how to SetRandomNumberStore for storing 
   initial random number seeds per run or per event.         

 \section B2_s6 USER LIMITS
 
   This example also illustrates how to introduce tracking constraints
   like maximum step length, minimum kinetic energy etc. via the G4UserLimits
   class and associated G4StepLimiter and G4UserSpecialCuts processes.    
   See B2aDetectorConstruction (or B2bDetectorConstruction).

   The maximum step limit in the tracker region can be set by the interactive
   command (see B2aDetectorMessenger, B2bDetectorMessenger classes). 
   For example:

\verbatim
/B2/det/stepMax 1.0 mm
\endverbatim

\section B2_s7 DETECTOR RESPONSE
 
   A HIT is a step per step record of all the information needed to
   simulate and analyse the detector response.
 
   In this example the Tracker chambers are considered to be the detector.
   Therefore, the chambers are declared 'sensitive detectors' (SD) in
   the B2aDetectorConstruction (or B2bDetectorConstruction) class.
   They are associated with an instance of the B2TrackerSD class.
 
   Then, a Hit is defined as a set of 4 informations per step, inside
   the chambers, namely:
     - the track identifier (an integer),
     - the chamber number,
     - the total energy deposit in this step, and
     - the position of the energy deposit.

   A given hit is an instance of the class B2TrackerHit which is created
   during the tracking of a particle, step by step, in the method
   B2TrackerSD::ProcessHits(). This hit is inserted in a HitsCollection. 

   The HitsCollection is printed at the end of each event (via the method
   B2TrackerSD::EndOfEvent()), under the control of the command:
\verbatim
/hits/verbose 2
\endverbatim

<hr>

 The following paragraphs are common to all basic examples

\section B2_A VISUALISATION

   The visualization manager is set via the G4VisExecutive class
   in the main () function in exampleB2a.cc (or exampleB2b.cc).   
   The initialisation of the drawing is done via a set of /vis/ commands
   in the macro vis.mac. This macro is automatically read from
   the main function when the example is used in interactive running mode.

   By default, vis.mac opens an OpenGL viewer (/vis/open OGL).
   The user can change the initial viewer by commenting out this line
   and instead uncommenting one of the other /vis/open statements, such as
   HepRepFile or DAWNFILE (which produce files that can be viewed with the
   HepRApp and DAWN viewers, respectively).  Note that one can always
   open new viewers at any time from the command line.  For example, if
   you already have a view in, say, an OpenGL window with a name
   "viewer-0", then
\verbatim
/vis/open DAWNFILE
\endverbatim
   then to get the same view
\verbatim
/vis/viewer/copyView viewer-0
\endverbatim
   or to get the same view *plus* scene-modifications
\verbatim
/vis/viewer/set/all viewer-0
\endverbatim
   then to see the result
\verbatim
/vis/viewer/flush
\endverbatim

   The DAWNFILE, HepRepFile drivers are always available
   (since they require no external libraries), but the OGL driver requires
   that the Geant4 libraries have been built with the OpenGL option.

   For more information on visualization, including information on how to
   install and run DAWN, OpenGL and HepRApp, see the visualization tutorials,
   for example,\n
   - <a href="http://geant4.slac.stanford.edu/Presentations/vis/G4OpenGLTutorial/G4OpenGLTutorial.html">
     OpenGL Tutorial </a>
   - <a href="http://geant4.slac.stanford.edu/Presentations/vis/G4DAWNTutorial/G4DAWNTutorial.html">
     DAWN Tutorial </a>
   - <a href="http://geant4.slac.stanford.edu/Presentations/vis/G4HepRAppTutorial/G4HepRAppTutorial.html">
     HepRApp Tutorial </a>

   The tracks are automatically drawn at the end of each event, accumulated
   for all events and erased at the beginning of the next run.

\section B2_B USER INTERFACES
 
   The user command interface is set via the G4UIExecutive class
   in the main () function in exampleB2a.cc 
   The selection of the user command interface is then done automatically 
   according to the Geant4 configuration or it can be done explicitly via 
   the third argument of the G4UIExecutive constructor (see exampleB2a.cc). 
 
\section B2_C HOW TO RUN
 
   - Execute exampleB2a in the 'interactive mode' with visualization
\verbatim
% exampleB2a
and type in the commands from run1.mac line by line:  
Idle> /tracking/verbose 1 
Idle> /run/beamOn 1
Idle> ...
Idle> exit
\endverbatim                
      or
\verbatim
Idle> /control/execute run1.mac
....
Idle> exit
\endverbatim                

   - Execute exampleB2a in the 'batch' mode from macro files 
   (without visualization)
\verbatim
% exampleB2a run2.mac
% exampleB2a exampleB2.in > exampleB2.out
\endverbatim                

*/
