ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CexmcSetup.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file CexmcSetup.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: 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 
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