Geant4  10.01.p02
CexmcSetup.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 /*
27  * =============================================================================
28  *
29  * Filename: CexmcSetup.hh
30  *
31  * Description: physical setup
32  *
33  * Version: 1.0
34  * Created: 10.10.2009 23:15:21
35  * Revision: none
36  * Compiler: gcc
37  *
38  * Author: Alexey Radkov (),
39  * Company: PNPI
40  *
41  * =============================================================================
42  */
43 
44 #ifndef CEXMC_SETUP_HH
45 #define CEXMC_SETUP_HH
46 
48 #include <G4AffineTransform.hh>
49 #include <G4ThreeVector.hh>
50 #include <G4RotationMatrix.hh>
51 #include <G4String.hh>
53 
54 class G4GDMLParser;
55 class G4LogicalVolume;
56 class G4VPhysicalVolume;
57 
58 
60 {
61  public:
63  {
68  };
69 
71  {
74  crystalHeight( 0 ), crystalLength( 0 )
75  {}
76 
78 
80 
82 
84 
86  };
87 
88  public:
89  explicit CexmcSetup( const G4String & gdmlFile = "default.gdml",
90  G4bool validateGDMLFile = true );
91 
92  G4VPhysicalVolume * Construct( void );
93 
94  public:
95  const G4AffineTransform & GetTargetTransform( void ) const;
96 
97  const G4AffineTransform & GetCalorimeterLeftTransform( void ) const;
98 
99  const G4AffineTransform & GetCalorimeterRightTransform( void ) const;
100 
101  void ConvertToCrystalGeometry( const G4ThreeVector & src,
102  G4int & row, G4int & column, G4ThreeVector & dst ) const;
103 
104  const CalorimeterGeometryData & GetCalorimeterGeometry( void ) const;
105 
106  const G4LogicalVolume * GetVolume( SpecialVolumeType volume ) const;
107 
108  G4bool IsRightDetector( const G4VPhysicalVolume * pVolume ) const;
109 
110  G4bool IsRightCalorimeter( const G4VPhysicalVolume * pVolume ) const;
111 
112  private:
113  void SetupSpecialVolumes( const G4GDMLParser & gdmlParser );
114 
115  void ReadTransforms( const G4GDMLParser & gdmlParser );
116 
117  void ReadCalorimeterGeometryData( const G4LogicalVolume * lVolume );
118 
119  void ReadRightDetectors( void );
120 
121  private:
122  static void AssertAndAsignDetectorRole(
123  CexmcDetectorRole & detectorRole, CexmcDetectorRole value );
124 
125  static void RotateMatrix( const G4ThreeVector & pos,
126  G4RotationMatrix & rm );
127 
128  private:
130 
132 
134 
136 
138 
140 
142 
144 
146 
148 
150 
152 
154 
156 
158 };
159 
160 
162 {
163  return targetTransform;
164 }
165 
166 
168  void ) const
169 {
171 }
172 
173 
175  void ) const
176 {
178 }
179 
180 
183 {
184  return calorimeterGeometry;
185 }
186 
187 
189  SpecialVolumeType volume ) const
190 {
191  switch ( volume )
192  {
193  case Monitor :
194  return monitorVolume;
195  case VetoCounter :
196  return vetoCounterVolume;
197  case Calorimeter :
198  return calorimeterVolume;
199  case Target :
200  return targetVolume;
201  default :
202  return NULL;
203  }
204 }
205 
206 
208  const G4VPhysicalVolume * pVolume ) const
209 {
210  if ( pVolume == rightVetoCounter || pVolume == rightCalorimeter )
211  return true;
212 
213  return false;
214 }
215 
216 
218  const G4VPhysicalVolume * pVolume ) const
219 {
220  if ( pVolume == rightCalorimeter )
221  return true;
222 
223  return false;
224 }
225 
226 
227 #endif
228 
G4VPhysicalVolume * rightVetoCounter
Definition: CexmcSetup.hh:147
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
G4bool validateGDMLFile
Definition: CexmcSetup.hh:133
void ConvertToCrystalGeometry(const G4ThreeVector &src, G4int &row, G4int &column, G4ThreeVector &dst) const
Definition: CexmcSetup.cc:417
void SetupSpecialVolumes(const G4GDMLParser &gdmlParser)
Definition: CexmcSetup.cc:117
CalorimeterGeometryData calorimeterGeometry
Definition: CexmcSetup.hh:157
CexmcSetup(const G4String &gdmlFile="default.gdml", G4bool validateGDMLFile=true)
Definition: CexmcSetup.cc:71
const G4AffineTransform & GetCalorimeterLeftTransform(void) const
Definition: CexmcSetup.hh:167
int G4int
Definition: G4Types.hh:78
G4bool calorimeterGeometryDataInitialized
Definition: CexmcSetup.hh:137
G4AffineTransform calorimeterRightTransform
Definition: CexmcSetup.hh:155
G4VPhysicalVolume * rightCalorimeter
Definition: CexmcSetup.hh:149
const G4LogicalVolume * GetVolume(SpecialVolumeType volume) const
Definition: CexmcSetup.hh:188
static void RotateMatrix(const G4ThreeVector &pos, G4RotationMatrix &rm)
Definition: CexmcSetup.cc:484
G4LogicalVolume * calorimeterVolume
Definition: CexmcSetup.hh:143
bool G4bool
Definition: G4Types.hh:79
G4AffineTransform calorimeterLeftTransform
Definition: CexmcSetup.hh:153
G4String gdmlFile
Definition: CexmcSetup.hh:131
void ReadCalorimeterGeometryData(const G4LogicalVolume *lVolume)
Definition: CexmcSetup.cc:363
void ReadRightDetectors(void)
Definition: CexmcSetup.cc:440
G4LogicalVolume * monitorVolume
Definition: CexmcSetup.hh:139
static void AssertAndAsignDetectorRole(CexmcDetectorRole &detectorRole, CexmcDetectorRole value)
Definition: CexmcSetup.cc:474
G4bool IsRightCalorimeter(const G4VPhysicalVolume *pVolume) const
Definition: CexmcSetup.hh:217
G4bool IsRightDetector(const G4VPhysicalVolume *pVolume) const
Definition: CexmcSetup.hh:207
G4bool calorimeterRegionInitialized
Definition: CexmcSetup.hh:135
const G4AffineTransform & GetCalorimeterRightTransform(void) const
Definition: CexmcSetup.hh:174
G4LogicalVolume * targetVolume
Definition: CexmcSetup.hh:145
const CalorimeterGeometryData & GetCalorimeterGeometry(void) const
Definition: CexmcSetup.hh:182
void ReadTransforms(const G4GDMLParser &gdmlParser)
Definition: CexmcSetup.cc:337
G4VPhysicalVolume * world
Definition: CexmcSetup.hh:129
const G4AffineTransform & GetTargetTransform(void) const
Definition: CexmcSetup.hh:161
G4VPhysicalVolume * Construct(void)
Definition: CexmcSetup.cc:81
double G4double
Definition: G4Types.hh:76
G4LogicalVolume * vetoCounterVolume
Definition: CexmcSetup.hh:141
G4AffineTransform targetTransform
Definition: CexmcSetup.hh:151
static const G4double pos