SNGenvertex Manager Configuration
1 Introduction
This file holds some vertex generators related to SuperNEMO detector geometry.
2 Manager configuration
2.1 Logging priority
#@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning")
2.2 Vertices list of files
The following code defines the location of several vertices files. All of them are defined in Section 3.
#@description Names of the files configuring the list of registered vertex generators vg_list : string[4] as path = \ "@configuration:scin_vg.lis" \ "@configuration:tracker_vg.lis" \ "@configuration:source_vg.lis" \ "@configuration:hall_vg.lis"
3 Vertex configuration
This section defines several vertices configuration :
- Scintillator vertices: to generate external events coming from calorimeter walls,
- Tracker vertices: to generate events from the internal drift chamber either on wires surface or inside gas tracking,
- Source vertices: to produce 2β events or to simulate source contamination.
- External vertices: to generate events from outside the detector like neutrons
3.1 Scintillator vertices
Insert preamble
#@description A list of vertex generators #@key_label "name" #@meta_label "type"
Generate vertex in the bulk volume of the wrapper for the main calorimeter's scintillator blocks:
[name="calo_wrapper_bulk" type="genvtx::box_model_vg"] #@config Vertex generation from the bulk of the main calorimeter wrapper #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) #origin : string = "category=calorimeter_wrapper module={*} side={1} column={0;1;2;4;19} row={0;1;2;12;13}" origin : string = "category='calorimeter_wrapper' module={*} side={*} column={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
Generate vertex in the bulk volume of the wrapper for the X-calorimeter's scintillator blocks:
[name="xcalo_wrapper_bulk" type="genvtx::box_model_vg"] #@config Vertex generation from the bulk of the X-wall calorimeter wrapper #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='xcalo_wrapper' module={*} side={*} column={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
Generate vertex in the bulk volume of the wrapper for the γ veto calorimeter's scintillator blocks:
[name="gveto_wrapper_bulk" type="genvtx::box_model_vg"] #@config Vertex generation from the bulk of the gamma veto wrapper #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='gveto_wrapper' module={*} side={*} wall={*} column={*}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
Generate vertex from the surface of the main calorimeter's scintillator blocks:
[name="calo_wrapper_surface" type="genvtx::box_model_vg"] #@config Vertex generation from the surface of the main calorimeter wrapper #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='calorimeter_wrapper' module={*} side={*} column={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "surface" #@description Surface mode box top face activation mode.surface.top : boolean = true
Generate vertex from the surface of the X-calorimeter's scintillator blocks:
[name="xcalo_wrapper_surface" type="genvtx::box_model_vg"] #@config Vertex generation from the surface of the X-wall calorimeter wrapper #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='xcalo_wrapper' module={*} side={*} column={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "surface" #@description Surface mode box top face activation mode.surface.top : boolean = true
Generate vertex from the surface of the γ veto's scintillator blocks:
[name="gveto_wrapper_surface" type="genvtx::box_model_vg"] #@config Vertex generation from the surface of the gamma veto wrapper #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='gveto_wrapper' module={*} side={*} wall={*} column={*}" #@description Generation mode ("surface" or "bulk") mode : string = "surface" #@description Surface mode box top face activation mode.surface.top : boolean = true
Generate vertex in the PMT glass
[name="pmt_glass_bulk" type="genvtx::polycone_model_vg"] #@config Vertex generation from the bulk of the PMT glass wrapper #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='calorimeter_pmt_glass' module={*} side={*} column={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk" #@description Generation within polycone material mode.bulk.body : boolean = true #@description Generate vertex on all polycone frustrum polycone.all_frustrum : boolean = true
3.2 Tracker vertices
Insert preamble
#@description A list of vertex generators #@key_label "name" #@meta_label "type"
3.2.1 Vertices on tracker wires
Generate vertex from the bulk volume of the anode wires:
[name="anode_wire_bulk" type="genvtx::cylinder_model_vg"] #@config Vertex generation from the bulk volume of the anode wires #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='drift_cell_anodic_wire' module={*} side={*} layer={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
Generate vertex on the surface of the anode wires:
[name="anode_wire_surface" type="genvtx::cylinder_model_vg"] #@config Vertex generation from the surface of the anode wires #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='drift_cell_anodic_wire' module={*} side={*} layer={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "surface" #@description Surface mode box side face activation mode.surface.side : boolean = true #@description Surface mode box bottom face activation mode.surface.bottom : boolean = false #@description Surface mode box top face activation mode.surface.top : boolean = false
Generate vertex on the surface of the field wires:
[name="field_wire_surface" type="genvtx::cylinder_model_vg"] #@config Vertex generation from the surface of the field wires #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='drift_cell_field_wire' module={*} side={*} layer={*} row={*} set={*} wire={*}" #@description Generation mode ("surface" or "bulk") mode : string = "surface" #@description Surface mode box side face activation mode.surface.side : boolean = true #@description Surface mode box bottom face activation mode.surface.bottom : boolean = false #@description Surface mode box top face activation mode.surface.top : boolean = false
Generate vertex from the bulk volume of the field wires:
[name="field_wire_bulk" type="genvtx::cylinder_model_vg"] #@config Vertex generation from the bulk volume of the anode wires #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='drift_cell_field_wire' module={*} side={*} layer={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
3.2.2 Vertices within tracker volumes (wires included)
- Generator using category list
This vertex generator is quite classical in the way that it uses the category file list and especially, the
drift_cell_core
category. This means that vertices are going to be generated in the cell core, wires included, but not inside the gap between foil and first tracker layer as well as not within the gap between the main calorimeter walls and the last tracker layer. In order to get a full coverage of tracker gaz, you may have a look to the next section.[name="tracker_drift_cell_bulk" type="genvtx::box_model_vg"] #@config Vertex generation from the core of Geiger cell #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='drift_cell_core' module={*} side={*} layer={*} row={*}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
- Vertex generator using hardcoded geometry position
The following vertex generator defines a box which dimensions are hardcoded by following the dimensions between source foil and calroimeter walls. This means that any change in the geometry setup like an increase of source foil thickness will need to update this box dimensions. Nevertheless, this vertex generator allows to shoot events from the full tracker volumes so basically where tracker gaz will remain.
To calculate the box size and the box placement, the following dimensions have been used :
- tracker volume is a box of 405×5008×3030 mm,
- the source core model has a thickness of 58 mm,
- the source foil thickness is 167 µm.
[name="tracker_volume_box" type="genvtx::box_vg"] #@config Vertex generation from the tracker gaz #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Generation mode ("surface" or "bulk") mode : string = "bulk" #@description Box x size box.x : real as length = 433.9165 mm #@description Box y size box.y : real as length = 5008.0 mm #@description Box z size box.z : real as length = 3030.0 mm
Then we define 2 placements : one for the front part (\(x>0\)) of the tracker and another one for the back part (\(x<0\)).
[name="tracker_front_volume_bulk" type="genvtx::placement_vg"] #@config Vertex generation from the front tracker volume #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Vertex generator name to place vertex_generator.name : string = "tracker_volume_box" #@description Placement along x-axis placement.x : real as length = 217.04175 mm #@description Placement along y-axis placement.y : real as length = 0.0 mm #@description Placement along z-axis placement.z : real as length = 0.0 mm
[name="tracker_back_volume_bulk" type="genvtx::placement_vg"] #@config Vertex generation from the front tracker volume #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Vertex generator name to place vertex_generator.name : string = "tracker_volume_box" #@description Placement along x-axis placement.x : real as length = -217.04175 mm #@description Placement along y-axis placement.y : real as length = 0.0 mm #@description Placement along z-axis placement.z : real as length = 0.0 mm
We finally define a combined vertex generator in order to mix the two previous vertex generators:
[name="tracker_volume_bulk" type="genvtx::combined_vg"] #@config Vertex generation from the bulk volume of the tracker #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry version requirement (not working with version lower than 2.0) geometry.setup_requirement : string = "snemo::demonstrator(>=3)" #@description Vertex generator names generators : string[2] = "tracker_front_volume_bulk" "tracker_back_volume_bulk" #@description Absolute weight of different generators generators.tracker_front_volume_bulk.absolute_weight : real = 1.0 generators.tracker_back_volume_bulk.absolute_weight : real = 1.0
- Vertex generator with validator
We finally use a rejection method based on changes from https://nemo.lpc-caen.in2p3.fr/changeset/15140/genvtx/trunk. The idea is to shoot vertex within SuperNEMO module and then reject the ones not inside
tracking_gas
.[name="tracker_gas_bulk" type="genvtx::box_model_vg"] #@config Vertex generation from 'tracking_gas' material #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry version requirement (not working with version lower than 3.0) geometry.setup_requirement : string = "snemo::demonstrator(>=3)" #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='module' module={*}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
- Vertex validation
Here starts the validation configuration. We first add a support to vertex validation
#@description Vertex validation support vertex_validation_support : boolean = true
we define the logging level
#@description Maximum number of tries for the rejection method validation.logging.priority : string = @variant(core:logging_priority|"warning")
and we activate it
#@description Vertex validation activation validation.activation : boolean = true
We also defines the maximum number of tries for the rejection process; above this number the vertex generator throws an error.
#@description Maximum number of tries for the rejection method validation.maximum_number_of_tries : integer = 1000
We finally define the validation id which refers to the
cut
identifiant with which the validator is registered. Here we want to only keep vertex within thetracking_gas
material so we use ain_materials_vertex_validator
#@description Vertex validation id validation.validator_id : string = "genvtx::in_materials_vertex_validator"
and we define the set of materials to be used
#@description List of materials to be used validation.validator_params.materials.ref : string[1] = "tracking_gas"
We can also set the logging priority and the maximum depth to look inside
# #@description Logging level for validator # validation.validator_params.max_depth : integer = 100 #@description Logging level for validator validation.validator_params.logging.priority : string = @variant(core:logging_priority|"warning")
- Vertex validation
3.3 Source vertices
Since there are two types of source strips namely "internal" and "external" with
different size and then different isotope mass, we first define independent
vertices for each of this model and then use a genvtx::combined_vg
model to
combine with appropriate weights. These vertices are only available with
SuperNEMO geometry version greater than 2.0.
Insert preamble
#@description A list of vertex generators #@key_label "name" #@meta_label "type"
3.3.1 Internal source strips
Generate vertex from the bulk volume of the source foil:
[name="source_strips_internal_bulk" type="genvtx::box_model_vg"] #@config Vertex generation from the bulk volume of the inner source strips #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry version requirement (not working with version lower than 2.0) geometry.setup_requirement : string = "snemo::demonstrator(>=3)" #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='source_strip' module={*} strip=[1;34]" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
Generate vertex from the surface of the source foil:
[name="source_strips_internal_surface" type="genvtx::box_model_vg"] #@config Vertex generation from the surface of the inner source strips #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry version requirement (not working with version lower than 2.0) geometry.setup_requirement : string = "snemo::demonstrator(>=3)" #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='source_strip' module={*} strip=[1;34]" #@description Generation mode ("surface" or "bulk") mode : string = "surface" #@description Surface mode box back face activation mode.surface.back : boolean = true #@description Surface mode box front face activation mode.surface.front : boolean = true
3.3.2 External source strips
Generate vertex from the bulk volume of the source foil:
[name="source_strips_external_bulk" type="genvtx::box_model_vg"] #@config Vertex generation from the bulk volume of the outer source strips #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry version requirement (not working with version lower than 2.0) geometry.setup_requirement : string = "snemo::demonstrator(>=3)" #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='source_strip' module={*} strip={0;35}" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"
Generate vertex from the surface of the source foil:
[name="source_strips_external_surface" type="genvtx::box_model_vg"] #@config Vertex generation from the surface of the outer source strips #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry version requirement (not working with version lower than 2.0) geometry.setup_requirement : string = "snemo::demonstrator(>=3)" #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='source_strip' module={*} strip={0;35}" #@description Generation mode ("surface" or "bulk") mode : string = "surface" #@description Surface mode box back face activation mode.surface.back : boolean = true #@description Surface mode box front face activation mode.surface.front : boolean = true
3.3.3 Combined vertex
Generate vertex from both the bulk volume of all the source foils:
[name="source_strips_bulk" type="genvtx::combined_vg"] #@config Vertex generation from the bulk volume of the source strips #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry version requirement (not working with version lower than 2.0) geometry.setup_requirement : string = "snemo::demonstrator(>=3)" #@description Vertex generator names generators : string[2] = "source_strips_external_bulk" "source_strips_internal_bulk" #@description Absolute weight of different generators generators.source_strips_external_bulk.absolute_weight : real = 0.054 generators.source_strips_internal_bulk.absolute_weight : real = 1.0
Generate vertex from the surface of all the source foils:
[name="source_strips_surface" type="genvtx::combined_vg"] #@config Vertex generation from the surface of the source strips #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Geometry version requirement (not working with version lower than 2.0) geometry.setup_requirement : string = "snemo::demonstrator(>=3)" #@description Vertex generator names generators : string[2] = \ "source_strips_internal_surface" \ "source_strips_external_surface" #@description Absolute weight of different generators generators.source_strips_external_surface.absolute_weight : real = 0.054 generators.source_strips_internal_surface.absolute_weight : real = 1.0
3.4 External vertices
Insert preamble
#@description A list of vertex generators #@key_label "name" #@meta_label "type"
Generate vertex from the surface of the hall walls
[name="experimental_hall_surface" type="genvtx::box_model_vg"] #@config Vertex generation from the surface of the experimental hall #@description Logging priority logging.priority : string = @variant(core:logging_priority|"notice") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='hall'" #@description Generation mode ("surface" or "bulk") mode : string = "surface" #@description Surface mode box back face activation mode.surface.back : boolean = true #@description Surface mode box front face activation mode.surface.front : boolean = true #@description Surface mode box bottom face activation mode.surface.bottom : boolean = true #@description Surface mode box top face activation mode.surface.top : boolean = true #@description Surface mode box left face activation mode.surface.left : boolean = true #@description Surface mode box right face activation mode.surface.right : boolean = true
Generate vertex from the volume of the hall
[name="experimental_hall_bulk" type="genvtx::box_model_vg"] #@config Vertex generation from the volume of the experimental hall #@description Logging priority logging.priority : string = @variant(core:logging_priority|"notice") #@description Geometry origin of vertex in term of geometry category and addresses (geom ID) origin : string = "category='hall'" #@description Generation mode ("surface" or "bulk") mode : string = "bulk"