Geant4-11
G4MoleculeGunMessenger.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// Author: Mathieu Karamitros
27
28// The code is developed in the framework of the ESA AO7146
29//
30// We would be very happy hearing from you, send us your feedback! :)
31//
32// In order for Geant4-DNA to be maintained and still open-source,
33// article citations are crucial.
34// If you use Geant4-DNA chemistry and you publish papers about your software,
35// in addition to the general paper on Geant4-DNA:
36//
37// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178
38//
39// we would be very happy if you could please also cite the following
40// reference papers on chemistry:
41//
42// J. Comput. Phys. 274 (2014) 841-882
43// Prog. Nucl. Sci. Tec. 2 (2011) 503-508
44
45#ifndef MOLECULEGUNMESSENGER_HH_
46#define MOLECULEGUNMESSENGER_HH_
47
48#include "G4UImessenger.hh"
49#include "G4ThreeVector.hh"
50#include "G4memory.hh"
51#include "G4MoleculeGun.hh"
52#include <vector>
53
58class G4UIdirectory;
60class G4MoleculeShoot;
61
62//------------------------------------------------------------------------------
63
65{
66public:
69 G4shared_ptr<G4MoleculeShoot>);
71 virtual void SetNewValue(G4UIcommand * command, G4String newValue);
72 virtual G4String GetCurrentValue(G4UIcommand * command);
73
74 inline G4shared_ptr<G4MoleculeShoot>& GetShoot() {
75 return fpShoot;
76 }
77
78protected:
85 G4shared_ptr<G4MoleculeShoot> fpShoot;
86};
87
88//------------------------------------------------------------------------------
89
91{
92
93public:
96
97 virtual void SetNewValue(G4UIcommand * command, G4String newValue);
98 virtual G4String GetCurrentValue(G4UIcommand * command);
99
100 const std::vector<G4MoleculeShootMessenger*>&
102 {
103 return fMultipleGun;
104 }
105
106protected:
109
110 template<typename T>
112 {
113 G4shared_ptr<G4MoleculeShoot> moleculeShoot(new TG4MoleculeShoot<T>());
116 this,
117 moleculeShoot);
118 fMultipleGun.push_back(shoot);
120 return shoot;
121 }
122
123 std::vector<G4MoleculeShootMessenger*> fMultipleGun;
124};
125
126#endif /* MOLECULEGUNMESSENGER_HH_ */
G4UIcmdWithAString * fpGunNewGunType
const std::vector< G4MoleculeShootMessenger * > & GetShootMessengers() const
virtual G4String GetCurrentValue(G4UIcommand *command)
G4MoleculeGunMessenger(G4MoleculeGun *)
G4MoleculeShootMessenger * CreateNewType(const G4String &name)
std::vector< G4MoleculeShootMessenger * > fMultipleGun
virtual void SetNewValue(G4UIcommand *command, G4String newValue)
void AddMoleculeShoot(G4shared_ptr< G4MoleculeShoot >)
G4UIcmdWithAString * fpGunType
virtual void SetNewValue(G4UIcommand *command, G4String newValue)
virtual G4String GetCurrentValue(G4UIcommand *command)
G4UIcmdWithADoubleAndUnit * fpGunTime
G4MoleculeShootMessenger(const G4String &name, G4MoleculeGunMessenger *, G4shared_ptr< G4MoleculeShoot >)
G4UIcmdWith3VectorAndUnit * fpGunRdnmPosition
G4UIcmdWith3VectorAndUnit * fpGunPosition
G4shared_ptr< G4MoleculeShoot > fpShoot
G4UIcmdWithAString * fpGunSpecies
G4UIcmdWithAnInteger * fpGunN
G4shared_ptr< G4MoleculeShoot > & GetShoot()
ThreeVector shoot(const G4int Ap, const G4int Af)
const char * name(G4int ptype)