2 # File: geometry_icarus.fcl
3 # Purpose: Configuration of LArSoft geometry and geometry service for ICARUS.
9 # Unless there are special needs, the geometry configuration should be included
10 # via a configuration bundle.
11 # The default one is called `icarus_geometry_services`.
12 # To use it in a complete configuration:
16 # @table::icarus_geometry_services # from geometry_icarus.fcl
20 # To add it to a preexisting configuration, overwriting any existing geometry
25 # @table::icarus_geometry_services # from geometry_icarus.fcl
32 # Currently the following configuration is provided:
34 # * `icarus_geometry_services`: current default configuration, the "standard"
35 # of the experiment with a concrete overburden
37 # Since the documentation is often not updated, check the definitions below
38 # to see which are the current defaults.
44 # Some older configurations are still kept (but not officially supported).
45 # See the "Legacy configurations" section below.
51 # A special policy in ICARUS is to have a copy of the channel mapping algorithm
52 # configuration in the `Geometry` service configuration.
53 # This is required by the off-art geometry loading utilities in ICARUS.
54 # One day LArSoft will also support something like that and that will become
55 # the only location of the channel mapping configuration.
61 # 20200709 (petrillo@slac.stanford.edu)
62 # adopted split wire geometry fixed by
63 # Alessandro Menegolli (alessandro.menegolli@unipv.it)
64 # 20220505 (petrillo@slac.stanford.edu)
65 # geometry default changed to include overburden
66 # 20220523 (petrillo@slac.stanford.edu)
67 # new geometry (20220518) with CRT changes;
68 # no configuration for no-overburden detector;
69 # legacy (`icarus_v3`) configurations added;
70 # configurations renamed ("icarus_standard_geometry")
76 ################################################################################
78 # Basic definitions for ICARUS configurations; no serviceable parts here!
83 Name:
"icarus_v2" # see ICARUS wiki
for a list
89 ################################################################################
91 ### Split first induction plane wires (9 m)
93 ################################################################################
94 ### Complete geometry (including CRT) with two logical TPCs per drift volume and
95 ### 9 meter long wires on each half of the first induction planes.
96 ### This reflects the actual configuration of the ICARUS detector.
98 ### Default for this configuration is defined below:
99 ### `icarus_split_induction_geometry_services`.
103 # ExptGeoHelperInterface
105 icarus_standard_geometry_helper: {
106 service_provider: IcarusGeometryHelper
108 tool_type:
"ICARUSsplitInductionChannelMapSetupTool"
112 FirstInductionPreChannels: 0
113 FirstInductionPostChannels: 96 # 32 ghost, then 64
virtual
118 CollectionEvenPreChannels: 64 # 64 wireless
119 CollectionEvenPostChannels: 96 # 64 wireless, then 32 ghost
123 SecondInductionOddPostChannels: 96 # 64 wireless, then 32 ghost
131 } # icarus_standard_geometry_helper
134 ################################################################################
136 ### "Standard" configuration (`icarus_standard_geometry_services`).
138 ### Includes an overburden and two logical TPC for each physical one
139 ### ("split wires" configuration).
141 ### This is the most accurate description of ICARUS detector as of June 2022.
143 ### Override a geometry configuration by:
147 ### @table::icarus_standard_geometry_services
153 # Geometry service configuration:
155 icarus_standard_geometry: {
159 GDML:
"icarus_complete_20220518_overburden.gdml"
160 ROOT:
"icarus_complete_20220518_overburden.gdml"
162 ChannelMapping: @local::icarus_standard_geometry_helper.Mapper
164 } # icarus_standard_geometry
167 # geometry configuration bundle
169 icarus_standard_geometry_services: {
171 Geometry: @local::icarus_standard_geometry
172 ExptGeoHelperInterface: @local::icarus_standard_geometry_helper
173 GeometryConfigurationWriter: {}
175 } # icarus_standard_geometry_services
178 ################################################################################
180 ### Default ICARUS geometry configuration
182 ### Complete geometry (including CRT) with one TPC per drift volume and 18 meter
183 ### long wires on first induction plane.
184 ### Options are avaialble for the presence of overburden; the geometry global
185 ### default includes a choice for that option: see `icarus_geometry_services`.
187 ################################################################################
188 ### Default ICARUS geometry configuration
189 ### (`icarus_geometry_services`)
191 ### This configuration includes 3-m overburden and long first induction wires
192 ### (18 m) as of now.
194 ### Override a geometry configuration by:
198 ### @table::icarus_geometry_services
204 # geometry configuration bundle
206 icarus_geometry_services: @local::icarus_standard_geometry_services
209 # Geometry service configuration:
211 icarus_geometry: @local::icarus_geometry_services.Geometry
212 icarus_geo: @local::icarus_geometry # backward compatibility
214 icarus_geometry_helper: @local::icarus_geometry_services.ExptGeoHelperInterface
217 ################################################################################
218 ### Legacy configurations
219 ################################################################################
221 # Legacy configurations are not officially supported, but are provided here
222 # nevertheless. A legacy configuration bundle is called
223 # `icarus_geometry_services[_<variant>]_legacy_<DetectorName>`, where
224 # <DetectorName> is the geometry tag (e.g. `icarus_v2`), and variants may also
225 # be available (e.g. "no_overburden").
227 # Legacy configurations are hard-coded and should not depend from the content
230 ################################################################################
231 ### Base legacy configuration, only used for FHiCL stability; i.e., if changed,
232 ### all existing legacy configurations need to explicitly revert the change.
234 icarus_legacy_base_geometry_helper: {
235 service_provider: IcarusGeometryHelper
237 tool_type:
"ICARUSsplitInductionChannelMapSetupTool"
241 FirstInductionPreChannels: 0
242 FirstInductionPostChannels: 96 # 32 ghost, then 64
virtual
247 CollectionEvenPreChannels: 64 # 64 wireless
248 CollectionEvenPostChannels: 96 # 64 wireless, then 32 ghost
252 SecondInductionOddPostChannels: 96 # 64 wireless, then 32 ghost
259 } # icarus_legacy_base_geometry_helper
261 icarus_legacy_base_geometry: {
270 ChannelMapping: @local::icarus_legacy_base_geometry_helper.Mapper
272 } # icarus_legacy_base_geometry
274 icarus_legacy_base_geometry_services: {
275 Geometry: @local::icarus_legacy_base_geometry
276 ExptGeoHelperInterface: @local::icarus_legacy_base_geometry_helper
277 GeometryConfigurationWriter: {}
279 } # icarus_legacy_base_geometry_services
282 ### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
283 ### icarus_geometry_services_legacy_icarus_v3:
284 ### geometry tagged as `icarus_v3` for samples produced with v09_52_00
287 ### Also versions with explicit overburden specification.
289 icarus_geometry_services_no_overburden_legacy_icarus_v3: @local::icarus_legacy_base_geometry_services
290 icarus_geometry_services_no_overburden_legacy_icarus_v3.Geometry.Name: icarus_v3
291 icarus_geometry_services_no_overburden_legacy_icarus_v3.Geometry.GDML:
"icarus_complete_20210527_no_overburden.gdml"
292 icarus_geometry_services_no_overburden_legacy_icarus_v3.Geometry.ROOT:
"icarus_complete_20210527_no_overburden.gdml"
294 icarus_geometry_services_overburden_legacy_icarus_v3: @local::icarus_legacy_base_geometry_services
295 icarus_geometry_services_overburden_legacy_icarus_v3.Geometry.Name: icarus_v3
296 icarus_geometry_services_overburden_legacy_icarus_v3.Geometry.GDML:
"icarus_complete_20210527_overburden.gdml"
297 icarus_geometry_services_overburden_legacy_icarus_v3.Geometry.ROOT:
"icarus_complete_20210527_overburden.gdml"
299 icarus_geometry_services_legacy_icarus_v3:
300 @local::icarus_geometry_services_no_overburden_legacy_icarus_v3
304 ### icarus_geometry_services_legacy_icarus_v2:
305 ### geometry tagged as `icarus_v2` for samples produced with v09_24_02_02
308 ### Also versions with explicit overburden specification.
310 icarus_geometry_services_no_overburden_legacy_icarus_v2: @local::icarus_legacy_base_geometry_services
311 icarus_geometry_services_no_overburden_legacy_icarus_v2.Geometry.Name: icarus_v2
312 icarus_geometry_services_no_overburden_legacy_icarus_v2.Geometry.GDML:
"icarus_complete_20210311_no_overburden_rotUV.gdml"
313 icarus_geometry_services_no_overburden_legacy_icarus_v2.Geometry.ROOT:
"icarus_complete_20210311_no_overburden_rotUV.gdml"
315 icarus_geometry_services_overburden_legacy_icarus_v2: @local::icarus_legacy_base_geometry_services
316 icarus_geometry_services_overburden_legacy_icarus_v2.Geometry.Name: icarus_v2
317 icarus_geometry_services_overburden_legacy_icarus_v2.Geometry.GDML:
"icarus_complete_20210311_rotUV.gdml"
318 icarus_geometry_services_overburden_legacy_icarus_v2.Geometry.ROOT:
"icarus_complete_20210311_rotUV.gdml"
320 icarus_geometry_services_legacy_icarus_v2:
321 @local::icarus_geometry_services_no_overburden_legacy_icarus_v2
325 ### icarus_geometry_services_legacy_icarus_splitwires:
326 ### geometry tagged as `icarus_splitwires` for samples produced with v09_17_02
329 ### Also versions with explicit overburden specification.
331 icarus_geometry_services_no_overburden_legacy_icarus_splitwires: @local::icarus_legacy_base_geometry_services
332 icarus_geometry_services_no_overburden_legacy_icarus_splitwires.Geometry.Name: icarus_splitwires
333 icarus_geometry_services_no_overburden_legacy_icarus_splitwires.Geometry.GDML:
"icarus_complete_20201107_no_overburden.gdml"
334 icarus_geometry_services_no_overburden_legacy_icarus_splitwires.Geometry.ROOT:
"icarus_complete_20201107_no_overburden.gdml"
336 icarus_geometry_services_overburden_legacy_icarus_splitwires: @local::icarus_legacy_base_geometry_services
337 icarus_geometry_services_overburden_legacy_icarus_splitwires.Geometry.Name: icarus_splitwires
338 icarus_geometry_services_overburden_legacy_icarus_splitwires.Geometry.GDML:
"icarus_complete_20201107.gdml"
339 icarus_geometry_services_overburden_legacy_icarus_splitwires.Geometry.ROOT:
"icarus_complete_20201107.gdml"
341 icarus_geometry_services_legacy_icarus_splitwires:
342 @local::icarus_geometry_services_no_overburden_legacy_icarus_splitwires
345 ################################################################################
347 ### These are old names for the configuration presets.
349 icarus_split_induction_overburden_geometry: @local::icarus_standard_geometry
350 icarus_split_induction_geometry_helper: @local::icarus_standard_geometry_helper
351 icarus_split_induction_overburden_geometry_services: @local::icarus_standard_geometry_services
353 ################################################################################
BEGIN_PROLOG vertical distance to the surface virtual then then wireless then ghost then ghost then wireless CollectionOddPostChannels
BEGIN_PROLOG icarus_geometry_template
process_name vertical distance to the surface vertical distance to the surface DisableWiresInG4
BEGIN_PROLOG vertical distance to the surface virtual then SecondInductionEvenPreChannels
BEGIN_PROLOG vertical distance to the surface virtual then then wireless then ghost then ghost CollectionOddPreChannels
double distance(geo::Point_t const &point, CathodeDesc_t const &cathode)
Returns the distance of a point from the cathode.
BEGIN_PROLOG vertical distance to the surface virtual then then wireless SecondInductionEvenPostChannels
BEGIN_PROLOG vertical distance to the surface virtual then then wireless then ghost SecondInductionOddPreChannels
BEGIN_PROLOG vertical distance to the surface Name
if &&[-z"$BASH_VERSION"] then echo Attempting to switch to bash bash shellSwitch exit fi &&["$1"= 'shellSwitch'] shift declare a IncludeDirectives for Dir in