ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CexmcProductionModel.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file CexmcProductionModel.hh
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 /*
27  * =============================================================================
28  *
29  * Filename: CexmcProductionModel.hh
30  *
31  * Description: interface to production model
32  *
33  * Version: 1.0
34  * Created: 03.11.2009 16:50:53
35  * Revision: none
36  * Compiler: gcc
37  *
38  * Author: Alexey Radkov (),
39  * Company: PNPI
40  *
41  * =============================================================================
42  */
43 
44 #ifndef CEXMC_PRODUCTION_MODEL_HH
45 #define CEXMC_PRODUCTION_MODEL_HH
46 
47 #include <G4Types.hh>
48 #include <G4String.hh>
49 #include <G4ios.hh>
50 #include <G4ParticleDefinition.hh>
51 #include "CexmcAngularRange.hh"
53 #include "CexmcHistoManager.hh"
54 #include "CexmcException.hh"
55 #include "CexmcCommon.hh"
56 
58 
59 
61 {
62  public:
63  explicit CexmcProductionModel( const G4String & name = "unspecified",
64  G4bool fermiMotionIsOn = false );
65 
66  virtual ~CexmcProductionModel();
67 
68  public:
69  void ApplyFermiMotion( G4bool on, G4bool fromMessenger = true );
70 
71  void SetAngularRange( G4double top, G4double bottom,
72  G4int nmbOfDivs );
73 
74  void SetAngularRanges( const CexmcAngularRangeList & angularRanges_ );
75 
76  void AddAngularRange( G4double top, G4double bottom,
77  G4int nmbOfDivs );
78 
80  const CexmcProductionModelData & productionModelData_ );
81 
82  void PrintInitialData( void ) const;
83 
84  const CexmcAngularRangeList & GetAngularRanges( void ) const;
85 
87 
89 
90  G4bool IsFermiMotionOn( void ) const;
91 
92  void SetTriggeredAngularRanges( G4double opCosThetaSCM );
93 
94  const G4String & GetName( void ) const;
95 
96  public:
98 
100 
101  G4ParticleDefinition * GetOutputParticle( void ) const;
102 
104 
105  protected:
106  virtual void FermiMotionStatusChangeHook( void );
107 
108  private:
110  G4double bottom, G4int nmbOfDivs = 1 ) const;
111 
113  G4double bottom ) const;
114 
115  protected:
117 
119 
121 
123 
125 
127 
128  protected:
130 
132 
134 
136 
137  private:
139 };
140 
141 
143  G4bool fromMessenger )
144 {
145  if ( fromMessenger )
147 
148  fermiMotionIsOn = on;
149 
151 }
152 
153 
155  const CexmcAngularRangeList & angularRanges_ )
156 {
157  angularRangesRef = angularRanges_;
159 #ifdef CEXMC_USE_ROOT
160  CexmcHistoManager::Instance()->SetupARHistos( angularRanges );
161 #endif
162 }
163 
164 
166  const CexmcProductionModelData & productionModelData_ )
167 {
168  productionModelData = productionModelData_;
169 }
170 
171 
172 inline void CexmcProductionModel::PrintInitialData( void ) const
173 {
174  const char * fermiMotionMsg( "Fermi motion in the target is off" );
175  if ( fermiMotionIsOn )
176  fermiMotionMsg = "Fermi motion in the target is on";
177 
178  G4cout << CEXMC_LINE_START << fermiMotionMsg << G4endl;
179  G4cout << CEXMC_LINE_START << "Angular ranges:" << angularRanges;
180 }
181 
182 
183 inline const CexmcAngularRangeList &
185 {
186  return angularRanges;
187 }
188 
189 
190 inline const CexmcAngularRangeList &
192 {
193  return triggeredAngularRanges;
194 }
195 
196 
197 inline const CexmcProductionModelData &
199 {
200  return productionModelData;
201 }
202 
203 
205 {
206  return fermiMotionIsOn;
207 }
208 
209 
210 inline const G4String & CexmcProductionModel::GetName( void ) const
211 {
212  return name;
213 }
214 
215 
217  void ) const
218 {
219  return incidentParticle;
220 }
221 
222 
224  const
225 {
226  return nucleusParticle;
227 }
228 
229 
231  const
232 {
233  return outputParticle;
234 }
235 
236 
238  void ) const
239 {
240  return nucleusOutputParticle;
241 }
242 
243 
245  G4double top, G4double bottom, G4int nmbOfDivs ) const
246 {
247  return top > bottom && top <= 1.0 && top > -1.0 && bottom < 1.0 &&
248  bottom >= -1.0 && nmbOfDivs >= 1;
249 }
250 
251 
252 #endif
253