Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-31 09:21:53

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 /*
0027  * =============================================================================
0028  *
0029  *       Filename:  CexmcPrimaryGeneratorAction.cc
0030  *
0031  *    Description:  primary particle position, direction, energy etc.
0032  *
0033  *        Version:  1.0
0034  *        Created:  11.10.2009 14:43:03
0035  *       Revision:  none
0036  *       Compiler:  gcc
0037  *
0038  *         Author:  Alexey Radkov (), 
0039  *        Company:  PNPI
0040  *
0041  * =============================================================================
0042  */
0043 
0044 #include <G4Event.hh>
0045 #include <G4ParticleTable.hh>
0046 #include <globals.hh>
0047 #include <Randomize.hh>
0048 #include "CexmcPrimaryGeneratorAction.hh"
0049 #include "CexmcPrimaryGeneratorActionMessenger.hh"
0050 #include "CexmcParticleGun.hh"
0051 #include "CexmcCommon.hh"
0052 
0053 
0054 CexmcPrimaryGeneratorAction::CexmcPrimaryGeneratorAction(
0055                                     CexmcPhysicsManager *  physicsManager ) :
0056     particleGun( NULL ), fwhmPosX( 0 ), fwhmPosY( 0 ), fwhmDirX( 0 ),
0057     fwhmDirY( 0 ), messenger( NULL )
0058 {
0059     particleGun = new CexmcParticleGun( physicsManager );
0060     messenger = new CexmcPrimaryGeneratorActionMessenger( this );
0061 }
0062 
0063 
0064 CexmcPrimaryGeneratorAction::~CexmcPrimaryGeneratorAction()
0065 {
0066     delete particleGun;
0067     delete messenger;
0068 }
0069 
0070 
0071 void  CexmcPrimaryGeneratorAction::GeneratePrimaries( G4Event *  event )
0072 {
0073     particleGun->PrepareForNewEvent();
0074 
0075     const G4ThreeVector &  origPos( particleGun->GetOrigPosition() );
0076     const G4ThreeVector &  origDir( particleGun->GetOrigDirection() );
0077     G4double               origMomentumAmp( particleGun->GetOrigMomentumAmp() );
0078 
0079     G4double       randPosX( G4RandGauss::shoot( origPos.x(),
0080                                             fwhmPosX * CexmcFwhmToStddev ) );
0081     G4double       randPosY( G4RandGauss::shoot( origPos.y(),
0082                                             fwhmPosY * CexmcFwhmToStddev ) );
0083     G4ThreeVector  newPos( randPosX, randPosY, origPos.z() );
0084 
0085     G4double       randAngleX( G4RandGauss::shoot( origDir.x(),
0086                                             fwhmDirX * CexmcFwhmToStddev ) );
0087     G4double       randAngleY( G4RandGauss::shoot( origDir.y(),
0088                                             fwhmDirY * CexmcFwhmToStddev ) );
0089     G4ThreeVector  newAngle( randAngleX, randAngleY, origDir.z() );
0090 
0091     G4double       newMomentumAmp( G4RandGauss::shoot( origMomentumAmp,
0092                                             fwhmMomentumAmp * origMomentumAmp *
0093                                             CexmcFwhmToStddev ) );
0094 
0095     particleGun->SetParticlePosition( newPos );
0096     particleGun->SetParticleMomentumDirection( newAngle );
0097     particleGun->SetParticleMomentum( newMomentumAmp );
0098 
0099     particleGun->GeneratePrimaryVertex( event );
0100 }
0101 
0102 
0103 CexmcParticleGun *  CexmcPrimaryGeneratorAction::GetParticleGun( void )
0104 {
0105     return particleGun;
0106 }
0107