ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
CCalDetectorConstruction.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file CCalDetectorConstruction.cc
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
//
27
// File: CCalDetectorConstruction.cc
28
// Description: CCalDetectorConstruction user action class to construct
29
// detector geometry
31
#include "
CCalDetectorConstruction.hh
"
32
33
//#define debug
34
35
#ifdef debug
36
#include "
G4Timer.hh
"
37
#endif
38
39
#include "
CCalMaterialFactory.hh
"
40
#include "
CCalRotationMatrixFactory.hh
"
41
#include "
CCalSensAssign.hh
"
42
#include "
CCalMagneticField.hh
"
43
#include "
CCalG4Hall.hh
"
44
#include "
CCalutils.hh
"
45
46
#include "
CCalSensitiveConfiguration.hh
"
47
#include "
CCalEcalOrganization.hh
"
48
#include "
CCalHcalOrganization.hh
"
49
50
#include "
G4SystemOfUnits.hh
"
51
#include "
G4SDManager.hh
"
52
#include "
G4FieldManager.hh
"
53
#include "
G4ChordFinder.hh
"
54
#include "
G4Mag_UsualEqRhs.hh
"
55
#include "
G4PropagatorInField.hh
"
56
#include "
G4TransportationManager.hh
"
57
58
#include "
G4ClassicalRK4.hh
"
59
#include "
G4SimpleRunge.hh
"
60
#include "
G4ExplicitEuler.hh
"
61
#include "
G4ImplicitEuler.hh
"
62
#include "
G4SimpleHeum.hh
"
63
#include "
G4HelixExplicitEuler.hh
"
64
#include "
G4HelixImplicitEuler.hh
"
65
#include "
G4HelixSimpleRunge.hh
"
66
#include "
G4CashKarpRKF45.hh
"
67
#include "
G4RKG3_Stepper.hh
"
68
69
CCalDetectorConstruction::CCalDetectorConstruction
() {}
70
71
CCalDetectorConstruction::~CCalDetectorConstruction
() {}
72
73
G4VPhysicalVolume
*
CCalDetectorConstruction::Construct
() {
74
76
//Instantiate for the first time the materials and rotations
77
#ifdef debug
78
G4cout
<<
"Retrieving materials...."
<<
G4endl
;
79
#endif
80
CCalMaterialFactory::getInstance
(
"material.cms"
);
81
82
#ifdef debug
83
G4cout
<<
"Retrieving rotation matrices....."
<<
G4endl
;
84
#endif
85
CCalRotationMatrixFactory::getInstance
(
"rotation.cms"
);
86
87
//-------------------------------------------------------------------------
88
// Magnetic field
89
//-------------------------------------------------------------------------
90
91
static
G4bool
fieldIsInitialized =
false
;
92
//And finally that it was not initialized previously
93
if
(!fieldIsInitialized) {
94
CCalMagneticField
* ccalField=
new
CCalMagneticField
(
"fmap.tb96"
);
95
G4double
field = ccalField->
GetConstantFieldvalue
();
96
if
(field == 0) {
97
ccalField = NULL;
98
G4cout
<<
"***************************"
<< G4endl
99
<<
"* *"
<< G4endl
100
<<
"* Magnetic Field is off *"
<< G4endl
101
<<
"* *"
<< G4endl
102
<<
"***************************"
<<
G4endl
;
103
}
else
{
104
G4cout
<<
"***************************"
<< G4endl
105
<<
"* *"
<< G4endl
106
<<
"* Magnetic Field is on *"
<< G4endl
107
<<
"* *"
<< G4endl
108
<<
"***************************"
<< G4endl << G4endl
109
<<
" Field Value "
<<
tab
<< field <<
G4endl
;
110
}
111
G4FieldManager
* fieldMgr
112
=
G4TransportationManager::GetTransportationManager
()->
GetFieldManager
();
113
fieldMgr->
SetDetectorField
(ccalField);
114
G4Mag_UsualEqRhs
*fEquation =
new
G4Mag_UsualEqRhs
(ccalField);
115
116
G4MagIntegratorStepper
*pStepper =
new
G4ClassicalRK4
(fEquation);
117
//pStepper = new G4ExplicitEuler( fEquation );
118
//pStepper = new G4ImplicitEuler( fEquation );
119
//pStepper = new G4SimpleRunge( fEquation );
120
//pStepper = new G4SimpleHeum( fEquation );
121
//pStepper = new G4HelixExplicitEuler( fEquation );
122
//pStepper = new G4HelixImplicitEuler( fEquation );
123
//pStepper = new G4HelixSimpleRunge( fEquation );
124
//pStepper = new G4CashKarpRKF45( fEquation );
125
//pStepper = new G4RKG3_Stepper( fEquation );
126
127
G4ChordFinder
*pChordFinder =
new
G4ChordFinder
(ccalField,
128
1.
e
-1*
mm
, pStepper);
129
pChordFinder->
SetDeltaChord
(1.0
e
-3*
mm
);
130
fieldMgr->
SetChordFinder
(pChordFinder);
131
fieldMgr->
SetDeltaOneStep
(1.0
e
-3*
mm
);
132
fieldMgr->
SetDeltaIntersection
(1.0
e
-4*
mm
);
133
G4PropagatorInField
* fieldPropagator
134
=
G4TransportationManager::GetTransportationManager
()
135
->
GetPropagatorInField
();
136
fieldPropagator->
SetMinimumEpsilonStep
(1.
e
-5*
mm
);
137
fieldPropagator->
SetMaximumEpsilonStep
(1.
e
-2*
mm
);
138
fieldIsInitialized =
true
;
139
}
140
141
#ifdef debug
142
G4cout
<<
tab
<<
"CCalDetectorConstruction: Starting timer!!!"
143
<<
G4endl
;
144
G4Timer
timer;
145
timer.
Start
();
146
#endif
147
148
//HCAL Test Beam 96
149
CCalG4Hall
* testBeamHCal96 =
new
CCalG4Hall
(
"HcalTB96"
);
150
testBeamHCal96->
constructHierarchy
();
151
#ifdef debug
152
timer.
Stop
();
153
G4cout
<<
tab
<<
"CCalDetectorConstruction: Total time to "
154
<<
"construct the geometry: "
<< timer <<
G4endl
;
155
#endif //debug
156
G4VPhysicalVolume
*
volume
= testBeamHCal96->
PhysicalVolume
(0);
157
158
//Addsenistive detector types
159
//G4bool result;
160
G4int
sensitive;
161
sensitive =
CCalSensitiveConfiguration::getInstance
()->
162
getSensitiveFlag(
"HadronCalorimeter"
);
163
if
(sensitive>0)
/*result =*/
CCalSensAssign::getInstance
()->
164
addCaloSD(
"HadronCalorimeter"
,
new
CCalHcalOrganization
);
165
sensitive =
CCalSensitiveConfiguration::getInstance
()->
166
getSensitiveFlag(
"CrystalMatrixModule"
);
167
if
(sensitive>0)
/*result =*/
CCalSensAssign::getInstance
()->
168
addCaloSD(
"CrystalMatrix"
,
new
CCalEcalOrganization
);
169
170
//Assign the sensitive detectors
171
/*result =*/
CCalSensAssign::getInstance
()->
assign
();
172
173
//Create the stacking manager required by Calorimeter
174
/*result =*/
CCalSensAssign::getInstance
()->
stackingAction
();
175
176
return
volume
;
177
178
}
geant4
tree
geant4-10.6-release
examples
advanced
composite_calorimeter
src
CCalDetectorConstruction.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:56
using
1.8.2 with
ECCE GitHub integration