SN@ilWare Simulation Configuration
- 1. Introduction
- 2. Pipeline general configuration
- 3. Modules
- 3.1. I/O modules
- 3.2. Utility modules
- 3.3. Simulation module
- 3.4. Event header module
- 3.5. Calibration modules
- 3.6. Tracker clustering modules
- 3.7. Tracker fitting module
- 3.8. Charged particle tracking module
- 3.9. γ tracking module
- 3.10. Particle identification module
- 3.11. Topology module
- 3.12. Chain modules
- 3.13. Miscellaneous
- 4. Services
- 5. Running SN@ilWare processing chain
1 Introduction
This file contains a SN@ilWare configuration to run SuperNEMO simulations. The
current version is hosted at
https://github.com/xgarrido/snemo_simulation_configuration under git
version
control. You can clone this repository by doing
git clone https://github.com/xgarrido/snemo_simulation_configuration snemo_configuration
This will create a directory snemo_configuration
in the working directory
containing all the source files needed to configure and to setup SN@ilWare
programs.
The configuration files are organised using org-babel and its ability to execute
source code. It requires then a recent installation of emacs1 which bundles
org
. Without entering into too much details regarding org-babel
abilities,
the basic idea is to give a "literate" way to navigate through the different
sections, each of them representing a configuration file. Moreover, using org
folding/unfolding capability, item can be hide and the user can focus on
relevant parts.
To export the different configuration files, you can run org-babel-tangle
which will tangle each code block into the given file2 or use the associated
Makefile. The author recommends to use the Makefile since the tangling process
is asynchronous and thus, does not freeze your emacs (org-babel-tangle
"occupies" emacs during its execution).
2 Pipeline general configuration
SN@ilWare implements the concept of data processing pipeline. An event record object is passed through a chain of data processing modules, each of them being responsible for a given task. Modules and services are declared in Section 3 and Section 4. For more details on running SuperNEMO simulations and the concept behind modules/services see these mandatory presentations given by F. Mauger.
2.1 Module manager
This file is the main and central piece of code for loading all modules/services
needed by dpp_processing
binary. It provides links to module files and
service files.
2.1.1 Logging priority
#@description Module manager logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Embedded module factory debug flag factory.debug : boolean = false #@description Embedded module factory 'no preload' flag factory.no_preload : boolean = false
2.1.2 Service manager configuration
#@description The configuration file of the embedded service manager service_manager.configuration : string[1] as path = \ "@configuration:service_manager.conf"
2.1.3 Configuration files for modules
#@description The configuration files for modules modules.configuration_files : string[12] as path = \ "@configuration:io_modules.conf" \ "@configuration:utl_modules.conf" \ "@configuration:simulation_modules.conf" \ "@configuration:event_header_modules.conf" \ "@configuration:calibration_modules.conf" \ "@configuration:tracker_clustering_modules.conf" \ "@configuration:tracker_fitting_modules.conf" \ "@configuration:particle_tracking_modules.conf" \ "@configuration:gamma_tracking_modules.conf" \ "@configuration:pid_modules.conf" \ "@configuration:chain_modules.conf" \ "@configuration:topology_modules.conf"
2.2 Service manager
2.2.1 Logging priority
#@description Service manager logging priority logging.priority : string = @variant(core:logging_priority|"warning")
2.2.2 Name & description
#@description The name of the service manager name : string = "sn_service_manager" #@description The description of the service manager description : string = "A SuperNEMO service manager"
2.2.3 List of service files
#@description The list of files that describe services services.configuration_files : string[1] as path = \ "@configuration:services.conf"
2.3 DLL loader
2.3.1 Libraries
This part set the different libraries to be loaded at runtime. This is needed
since event data models or algorithms may be defined in other libraries than the
dpp
and inherited libraries. The following table sets a full (and exhaustive)
list of needed libraries
Bayeux_mctools_geant4 | $SNAILWARE_PRO_DIR/bayeux/install/lib64/libBayeux_mctools_geant4.so |
Falaise | $SNAILWARE_PRO_DIR/falaise/install/lib64/libFalaise.so |
Falaise_MTC | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_MockTrackerClusterizer.so |
Falaise_CAT | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_CAT.so |
TrackFit | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libTrackFit.so |
Falaise_TrackFit | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_TrackFit.so |
Falaise_CPT | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_ChargedParticleTracking.so |
GammaTracking | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libGammaTracking.so |
Falaise_GammaTracking | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_GammaTracking.so |
Falaise_GammaClustering | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_GammaClustering.so |
Falaise_PID | $SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_ParticleIdentification.so |
#@description A sample list of setups #@key_label "name" #@meta_label "filename" [name="Bayeux_mctools_geant4" filename="$SNAILWARE_PRO_DIR/bayeux/install/lib64/libBayeux_mctools_geant4.so"] #config The Bayeux_mctools_geant4 library autoload : boolean = true [name="Falaise" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/libFalaise.so"] #config The Falaise library autoload : boolean = true [name="Falaise_MTC" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_MockTrackerClusterizer.so"] #config The Falaise_MTC library autoload : boolean = true [name="Falaise_CAT" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_CAT.so"] #config The Falaise_CAT library autoload : boolean = true [name="TrackFit" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libTrackFit.so"] #config The TrackFit library autoload : boolean = true [name="Falaise_TrackFit" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_TrackFit.so"] #config The Falaise_TrackFit library autoload : boolean = true [name="Falaise_CPT" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_ChargedParticleTracking.so"] #config The Falaise_CPT library autoload : boolean = true [name="GammaTracking" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libGammaTracking.so"] #config The GammaTracking library autoload : boolean = true [name="Falaise_GammaTracking" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_GammaTracking.so"] #config The Falaise_GammaTracking library autoload : boolean = true [name="Falaise_GammaClustering" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_GammaClustering.so"] #config The Falaise_GammaClustering library autoload : boolean = true [name="Falaise_PID" filename="$SNAILWARE_PRO_DIR/falaise/install/lib64/Falaise/modules/libFalaise_ParticleIdentification.so"] #config The Falaise_PID library autoload : boolean = true
3 Modules
A data processing module is an object that performs some specific action (apply
an algorithm) on event records (see SN@ilWare FAQ for more details). It inherits
the dpp::base_module
mother/interface class. A module class implements a few
mandatory methods :
- constructor
- destructor
initialize
reset
process
The next items hold the configuration for several modules used in SN@ilWare pipeline processing.
3.1 I/O modules
This section defines some I/O output modules to store data record. By default,
all I/O files are saved in /tmp/${USER}/snemo.d
directory.
3.1.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.1.2 Simulation output
[name="io_output_simulated" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_simulated.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
3.1.3 Calibration output
[name="io_output_calibrated" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_calibrated.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
3.1.4 Tracker clustering output
[name="io_output_tracker_clustering" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_tracker_clustering.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
3.1.5 Tracker trajectory output
[name="io_output_tracker_trajectory" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_tracker_trajectory.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
3.1.6 Particle track output
[name="io_output_particle_track" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_particle_track.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
3.1.7 Analysis output
[name="io_output_analysed" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_analysed.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
3.1.8 Selection output
Event header cuts
[name="io_output_header_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_header_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_header_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_header_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
Simulation cuts
[name="io_output_simulated_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_simulated_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_simulated_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_simulated_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
Calibration cuts
[name="io_output_calibrated_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_calibrated_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_calibrated_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_calibrated_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
Tracking cuts
[name="io_output_tracker_clustering_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_tracker_clustering_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_tracker_clustering_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_tracker_clustering_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
Fitting cuts
[name="io_output_tracker_trajectory_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_tracker_trajectory_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_tracker_trajectory_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_tracker_trajectory_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
Particle track cuts
[name="io_output_particle_track_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_particle_track_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_particle_track_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_particle_track_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx"
3.2 Utility modules
Here we define some common and useful tasks such as removing data/MC hits.
3.2.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.2.2 Remove event header
[name="remove_header" type="dpp::utils_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The processor mode mode : string = "remove_banks" #@description The label to be removed mode.remove_banks.labels : string[1] = "EH"
3.2.3 Remove simulated data bank
[name="remove_simulated_data" type="dpp::utils_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The processor mode mode : string = "remove_banks" #@description The label to be removed mode.remove_banks.labels : string[1] = "SD"
3.2.4 Remove calibrated data bank
[name="remove_calibrated_data" type="dpp::utils_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The processor mode mode : string = "remove_banks" #@description The label to be removed mode.remove_banks.labels : string[1] = "CD"
3.2.5 Remove tracker clustering data bank
[name="remove_tracker_clustering_data" type="dpp::utils_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The processor mode mode : string = "remove_banks" #@description The label to be removed mode.remove_banks.labels : string[1] = "TCD"
3.2.6 Remove tracker trajectory data bank
[name="remove_tracker_trajectory_data" type="dpp::utils_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The processor mode mode : string = "remove_banks" #@description The label to be removed mode.remove_banks.labels : string[1] = "TTD"
3.2.7 Remove particle track data bank
[name="remove_particle_track_data" type="dpp::utils_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The processor mode mode : string = "remove_banks" #@description The label to be removed mode.remove_banks.labels : string[1] = "PTD"
3.2.8 Dump module
[name="dump" type="dpp::dump_module"] #@description Output stream output : string = "clog"
3.3 Simulation module
3.3.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type" #@variant_remove_quotes Remove quotes arround string property
3.3.2 G4 simulation
A processor that populate the event record simulated data
bank with Geant4
output (see SN@ilWare FAQ).
[name="simulation" type="mctools::g4::simulation_module"]
- Logging flag
#@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The simulation manager logging priority manager.logging.priority : string = @variant(core:logging_priority|"warning")
- Bank & service labels
#@description The Geometry Service label Geo_label : string = "Geo" #@description The 'Simulated data' bank label in the event record SD_label : string = "SD" #@description Flag to allow cleaning of some former simulated data bank if any (default: 0) erase_former_SD_bank : boolean = false
- Seed values
#@description The simulation manager PRNG seed manager.seed : integer = @variant(core:random_seed_flag/if_random_seed/null_seed|2) #@description The vertex generator PRNG seed manager.vertex_generator_seed : integer = @variant(core:random_seed_flag/if_random_seed/null_seed|4) #@description The event generator PRNG seed manager.event_generator_seed : integer = @variant(core:random_seed_flag/if_random_seed/null_seed|5) #@description The SHPF PRNG seed manager.shpf_seed : integer = @variant(core:random_seed_flag/if_random_seed/null_seed|6) #@description The saving of PRNG seeds manager.output_prng_seeds_file : string as path = @variant(core:output_path)@variant(core:filename|"prng_seeds.save") #@description The saving of PRNG states manager.output_prng_states_file : string as path = @variant(core:output_path)@variant(core:filename|"prng_states.save") #@description The modulo for PRNG states backup manager.prng_states_save_modulo : integer = 10
- Vertex generator
Several common vertex generators are available such as :
- tracker_gas_bulk,
- source_strips_bulk,
- source_strips_surface.
#@description The vertex generator PRNG label manager.vertex_generator_name : string = @variant(simulation:vertex_generator_name|"source_strips_bulk")
- Event generator
Most used event generators are :
- Se82.0nubb,
- Bi214_Po214,
- Tl208,
- multi_particles,
- multi_gamma_particles,
- electron_monokinetic,
- alpha_monokinetic.
#@description The event generator PRNG label manager.event_generator_name : string = @variant(simulation:event_generator_name|"Se82.0nubb")
- G4 manager
The full
geant4
configuration can be found in the sng4_manager file.#@description The simulation manager configuration file manager.configuration_filename : string as path = \ "@configuration:sng4_manager.conf"
3.4 Event header module
After Geant4 simulation, no event header is added and available in the event
record. This module adds some information related either to real data (run
number) or simulated data like genbb
weight in case the total energy of primary
particles has been restricted.
3.4.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.4.2 General informations
[name="add_header" type="snemo::processing::event_header_utils_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The processor mode mode : string = "add_header" #@description The label of the 'Event Header' bank add_header.bank_label : string = "EH" #@description The run number add_header.run_number : integer = 0 #@description The number of the first event number to be set add_header.event_number : integer = 0 #@description The event weight given by GENBB and used for 'energy_range' mode add_header.use_genbb_weight : boolean = true #@description The event label from GENBB settings add_header.use_genbb_label : boolean = true
Among the options offered by event_header_utils_module
, there is a possibility
to give an external file (following datatools::properties
writing conventions)
where additionnal informations can be added. Typical use case is the definition
of some properties/descriptions of simulation runs (see below).
The external_properties_prefix
allows to filter which properties should be
stored. If no external_properties_prefix
field is defined then all the
properties are used and serialized.
#@description The external properties files to be exported in event_header properties add_header.external_properties_path : string as path = \ "@configuration:snsimulation_header.conf" #@description The external properties prefix to export only properties starting with this prefix add_header.external_properties_prefix : string = "analysis"
3.4.3 Analysis informations
- Store the current
git
version of the configuration#@description The version control status analysis.vc_status : string = "git master branch - commit 17f7cf0 - 2015-10-24"
- Set analysis description
#@description The analysis description analysis.description : string = "Sensitivity studies for SuperNEMO demonstrator"
- Set the total number of event simulated
#@description The total number of event simulated analysis.total_number_of_event : real = @variant(simulation:total_number_of_event|1)
- Set the geometrical origin of the vertex
#@description Origin of the vertices analysis.vertex_origin : string = @variant(simulation:vertex_generator|"source_strips_bulk")
- Store the job id
When simulations are done @ Lyon and send to the Grid Engine, every process get a unique job-ID. We store it within the event header in order to get back to the simulation setup if needed.
#@description The job-ID of the process analysis.jobid : integer = 0
3.4.4 Update informations
[name="update_header" type="snemo::processing::event_header_utils_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The processor mode mode : string = "add_header" #@description The label of the 'Event Header' bank add_header.bank_label : string = "EH" #@description Update flag add_header.update : boolean = true #@description The external properties files to be exported in event_header properties add_header.external_properties_path : string as path = \ "@configuration:snsimulation_header.conf" #@description The external properties prefix to export only properties starting with this prefix add_header.external_properties_prefix : string = "analysis"
3.5 Calibration modules
3.5.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.5.2 Tracker simulation to calibration data
This module converts simulated data into calibrated data for SuperNEMO tracker. It is a mock digitization/calibration data module of Monte-Carlo hits. It applies some anode/cathode efficiencies as well as calibration and smearing curves to translate times into longitudinal and transerve positions. Main reference documents for this module can be find in DocDb #786 and #843.
[name="tracker_s2c" type="snemo::processing::mock_tracker_s2c_module"]
- Logging priority
#@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning")
- Data bank labels and hit category
#@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Event Header' bank EH_label : string = "EH" #@description The label of the 'Simulated Data' bank SD_label : string = "SD" #@description The label of the 'Calibrated Data' bank CD_label : string = "CD" #@description The category of hits to be processed as Geiger hits hit_category : string = "gg"
- Random generator
#@description Pseudo-random numbers generator setup random.id : string = "mt19937" random.seed : integer = 12345
- Geiger cells dimensions
#@description Drift cell effective/active diameter cell_diameter : real as length = 44.0 mm #@description Drift cell effective/active length cell_length : real as length = 2900.0 mm
- Anode/cathode efficiencies
#@description anode efficiency base_anode_efficiency : real = 1.0 #@description cathode efficiency base_cathode_efficiency : real = 1.0
- Plasma longitudinal speed
#@description plasma longitudinal speed plasma_longitudinal_speed : real as velocity = 5.0 cm/us
- Longitudinal & transerve reconstruction parameters
#@description Error on reconstructed longitudinal position (from a plot by Irina) sigma_z : real as length = 1.0 cm # (to be confirmed) #@description Error on reconstructed longitudinal position when one cathode signal is missing sigma_z_missing_cathode : real as length = 5.0 cm # (to be confirmed) #@description Error on reconstructed horizontal position (parameters of a fit of data by Irina) sigma_r_a : real as length = 0.425 mm sigma_r_b : real = 0.0083 sigma_r_r0 : real as length = 12.25 mm
- Delayed drift time threshold
# #@description Time threshold to tag Geiger cells as delayed # delayed_drift_time_threshold : real as time = 10 us
3.5.3 Calorimeter simulation to calibration data
This module converts Monte-Carlo hits into calorimeter hits. Like the previous section, it is a mock digitization/calibration of simulation hits. It basicaly aggregates several energy deposits, calculates the total energy deposited and the time of the first energy deposit and finally, it smears the energy and time by some experimental energy/time resolution. There is also a special treatments for the quenching of alpha particles.
[name="calorimeter_s2c" type="snemo::processing::mock_calorimeter_s2c_module"]
- Logging priority
#@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning")
- Data bank labels
#@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Event Header' bank EH_label : string = "EH" #@description The label of the 'Simulated Data' bank SD_label : string = "SD" #@description The label of the 'Calibrated Data' bank CD_label : string = "CD"
- Random generator
#@description Pseudo-random numbers generator setup random.id : string = "mt19937" random.seed : integer = 12345
- Activate α quenching
#@description Alpha quenching boolean alpha_quenching : boolean = true
- Calorimeter regimes
- Hit categories
#@description The categories of hits to be processed as calorimeter hits hit_categories : string[3] = "calo" "xcalo" "gveto"
- α quenching parameters
We do not use these parameters
#@description Alpha quenching parameters calo.alpha_quenching_parameters : real[3] = 77.4 0.639 2.34 xcalo.alpha_quenching_parameters : real[3] = 77.4 0.639 2.34 gveto.alpha_quenching_parameters : real[3] = 77.4 0.639 2.34
- Scintillator relaxation time for time resolution
#@description Time resolution parameters calo.scintillator_relaxation_time : real as time = 6.0 ns xcalo.scintillator_relaxation_time : real as time = 6.0 ns gveto.scintillator_relaxation_time : real as time = 6.0 ns
- Energy resolutions
#@description Optical lines resolutions (FWHM @ 1 MeV) calo.energy.resolution : real as fraction = @variant(detector:calo_energy_resolution|8 %) xcalo.energy.resolution : real as fraction = @variant(detector:xcalo_energy_resolution|12 %) gveto.energy.resolution : real as fraction = @variant(detector:gveto_energy_resolution|15 %)
- Energy thresholds
#@description Optical lines trigger thresholds calo.energy.high_threshold : real as energy = @variant(detector:calo_high_energy_threshold|150 keV) xcalo.energy.high_threshold : real as energy = @variant(detector:xcalo_high_energy_threshold|150 keV) gveto.energy.high_threshold : real as energy = @variant(detector:gveto_high_energy_threshold|150 keV) calo.energy.low_threshold : real as energy = @variant(detector:calo_low_energy_threshold|50 keV) xcalo.energy.low_threshold : real as energy = @variant(detector:xcalo_low_energy_threshold|50 keV) gveto.energy.low_threshold : real as energy = @variant(detector:gveto_low_energy_threshold|50 keV)
- Hit categories
3.6 Tracker clustering modules
3.6.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.6.2 Clustering algorithms
This section holds different modules all related to tracker clustering.
- Mock tracker clustering
This algorithm is too much simple but it can serve as a comparison point with respect to more elaborated algorithms in terms of time processing. It basically associates geiger cells but considering succesive neighbors. It does not use the longitudinal information and then can badly aggregates track belonging to two different particles.
[name="mock_tracker_clustering" type="snemo::reconstruction::mock_tracker_clustering_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Calibrated Data' bank CD_label : string = "CD" #@description The label of the 'Tracker Clustering Data' bank TCD_label : string = "TCD" #@description Tracker Clusterizer logging priority TC.logging.priority : string = @variant(core:logging_priority|"warning") #@description Activation of the clustering of prompt hits TPC.processing_prompt_hits : boolean = true #@description Activation of the clustering of delayed hits TPC.processing_delayed_hits : boolean = true #@description Maximum layer distance between two neighbour hits MTC.max_layer_distance : integer = 2 #@description Maximum row distance between two neighbour hits MTC.max_row_distance : integer = 2 #@description Maximum row+layer distance between two neighbour hits MTC.max_sum_distance : integer = 0
- Cellular Automaton Tracker
This algorithm provides tons of parameters and is based in F. Nova work. A somewhat complete overview of CAT main features can be seen in DocDb #2120.
[name="cat_tracker_clustering" type="snemo::reconstruction::cat_tracker_clustering_module"] #@description Logging support logging.priority : string = @variant(core:logging_priority|"warning") #@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Calibrated Data' bank CD_label : string = "CD" #@description The label of the 'Tracker Clustering Data' bank TCD_label : string = "TCD" #@description Activation of the clustering of prompt hits TPC.processing_prompt_hits : boolean = true #@description Activation of the clustering of delayed hits TPC.processing_delayed_hits : boolean = true # #@description The time width of the window for collecting candidate clusters of delayed hits (in microsecond) # TPC.delayed_hit_cluster_time : real = 10.0 # microsec #@description Pre-clusterizer processing separately both sides of the tracking chamber TPC.split_chamber : boolean = false #@description CAT logging level CAT.level : string = "mute" # #@description Force the CAT algorithm to consider a 25 gauss magnetic field (temporary trick) # CAT.magnetic_field : real = 25 gauss #@description Use calorimeter hits information to help clustering CAT.process_calo_hits : boolean = true #@description Store CAT results as data properties CAT.store_result_as_properties : boolean = false
- SULTAN tracker
Federico Nova recently implements a new way to cluster Geiger cells by translating their intrinsic parameters namely cell position, drift radius and azimuthal position in Legendre phase space. The idea was originally suggested by Yorck Ramachers (see DocDB 2256) and Federico added the ability to fit helix (see DocDB 2977 as well as the original paper).
[name="sultan_tracker_clustering" type="snemo::reconstruction::sultan_tracker_clustering_module"] #@description Logging support logging.priority : string = @variant(core:logging_priority|"warning") #@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Calibrated Data' bank CD_label : string = "CD" #@description The label of the 'Tracker Clustering Data' bank TCD_label : string = "TCD" #@description Activation of the clustering of prompt hits TPC.processing_prompt_hits : boolean = true #@description Activation of the clustering of delayed hits TPC.processing_delayed_hits : boolean = false # #@description The time width of the window for collecting candidate clusters of delayed hits (in microsecond) # TPC.delayed_hit_cluster_time : real = 10.0 # microsec #@description Activation of the clustering of delayed hits TPC.split_chamber : boolean = false #@description Use calorimeter hits information to help clustering SULTAN.process_calo_hits : boolean = true # #@description Clusterize with helix model # SULTAN.clusterize_with_helix_model : boolean = true # #@description Force the SULTAN algorithm to consider a 25 gauss magnetic field (temporary trick) # SULTAN.magnetic_field : real = 25 gauss # #@description To be described # SULTAN.max_time : real = 5000 ms # #@description Use online event display (devel only) # SULTAN.print_event_display : boolean = false # #@description To be described # SULTAN.Emin : real = 120 keV # #@description To be described # SULTAN.Emax : real = 3.3 MeV # #@description To be described # SULTAN.nsigma_r : real = 3.0 # #@description To be described # SULTAN.nsigma_z : real = 4.0 # #@description To be described # SULTAN.nofflayers : integer = 1 # #@description To be described # SULTAN.first_event : integer = -1 # #@description To be described # SULTAN.min_ncells_in_cluster : integer = 7 # #@description To be described # SULTAN.ncells_between_triplet_min : integer = 1 # #@description To be described # SULTAN.ncells_between_triplet_range : integer = 3 # #@description To be described # SULTAN.nsigmas : real = 1.0 # #@description To be described # SULTAN.sigma_z_factor : real = 1.0 # #@description Clusterize with endpoints # SULTAN.use_endpoints : boolean = true # #@description Clusterize with Legendre transform # SULTAN.use_legendre : boolean = false # #@description Use clocks to time different parts of the software # SULTAN.use_clocks : boolean = false
- Tracker Cluster Path notworking
This algorithm has been developped by Warwick group since June 2012 and mainly by K. Bhardwaj.
[name="tcp_tracker_clustering" type="snemo::reconstruction::processing::tracker_clustering_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Event Header' bank EH_label : string = "EH" #@description The label of the 'Calibrated Data' bank CD_label : string = "CD" #@description The label of the 'Tracker Clustering Data' bank TCD_label : string = "TCD" #@description The ID of the tracker hits clustering algorithm algorithm : string = "TCP" #@description The module number module_number : integer = 0 #@description The geometry category of the Geiger drift volume gg_cell_geom_category : string = "drift_cell_core" #@description Activation of the clustering of prompt hits TPC.processing_prompt_hits : boolean = true #@description Activation of the clustering of delayed hits TPC.processing_delayed_hits : boolean = true #@description The time width of the window for collecting candidate clusters of delayed hits (in microsecond) TPC.delayed_hit_cluster_time : real = 10.0 # microsec #@description Activation of the clustering of delayed hits TPC.split_chamber : boolean = true #@description TCP param TCP.gamma : integer = 3 #@description TCP param TCP.lambda : real = 0.1 #@description TCP param TCP.join_threshold : real = 0.70 #@description TCP param TCP.opt_threshold : real = 0.00001 #@description TCP param TCP.lambda_factor : real = 1.05 #@description TCP param TCP.smooth : integer = 0 #@description TCP param TCP.max_iterations : integer = 1000 #@description TCP param TCP.line_search_freq : integer = 2 #@description TCP param TCP.line_search_points : integer = 10 #@description TCP param TCP.check_splits : integer = 1 #@description TCP param TCP.target_cluster : integer = 0 #@description TCP param TCP.max_number_of_clusters_allowed : integer = 3 #@description TCP param TCP.verbose : integer = 0 #@description TCP param TCP.refinement_no : integer = 5 #@description TCP param TCP.line_tolerance : real = 0.39 #@description TCP param TCP.point_tolerance : real = 100
3.7 Tracker fitting module
3.7.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.7.2 Fitting algorithm
As the time of writing this document, there is only one algorithm well integrated into SN@ilWare pipeline. It is based on trackfit originally developped and tested on NEMO3 data. It is quite an agnostic algorithm in the sense that it only asked for cells position and drift radius. Fitting process is done by GSL minimizer to find the global solution given the model: either helix or line models.
[name="trackfit_tracker_fitting" type="snemo::reconstruction::trackfit_tracker_fitting_module"]
- General logging
#@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning")
- Data bank & services labels
#@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Tracker Clustering Data' bank TCD_label : string = "TCD" #@description The label of the 'Tracker Trajectory Data' bank TTD_label : string = "TTD"
- General options
#@description The maximum number of fits to be saved (0 means all will be kept) maximum_number_of_fits : integer = 0
- Trackfit algorithm
#@description The ID of the tracker fitting algorithm algorithm : string = "trackfit"
- Drift time calibration
For time delayed cluster like alpha particle track, a a posteriori drift time calibration has to be done to shift the time origin and then calculates the new cell radius. The
drift_time_calibration
can be anything if it respects some object interface rules defines intrackfit::i_drift_time_calibration
class. Here we use the same model as in Section 3.5.2.#@description Use drift time (re)calibration drift_time_calibration_label : string = "snemo"
- Fit models
#@description Fit models fitting_models : string[2] = "line" "helix"
- Line fit parameters
- Guess parameters
#@description Activate logging messages for line guess driver line.guess.logging.priority : string = @variant(core:logging_priority|"error") #@description Use max radius (cell size) to construct initial guess point (1) or use the effective drift Geiger distance of the hit (0) line.guess.use_max_radius : boolean = false #@description Apply a factor (>0) to the max radius (devel mode) line.guess.max_radius_factor : real = 1.0 #@description Use guess trust (1) or keep all of the guess fits (0) and select later line.guess.use_guess_trust : boolean = false #@description Mode for trusting a fit guess ("counter", "barycenter") line.guess.guess_trust_mode : string = "counter" #@description Fit the delayed geiger cluster line.guess.fit_delayed_clusters : boolean = true
- Fit parameters
#@description 'Line' fit only guess ("BB", "BT", "TB", "TT") #line.only_guess : string[1] = "TT" #@description Store only the N solutions with best line fit #line.store_number_of_solutions : integer = 2 #@description Print the status of the fit stepper at each step (devel only) line.fit.step_print_status : boolean = false #@description Plot the 2D view of the fitted data at each step (devel only) line.fit.step_draw : boolean = false #@description Track fit adds start time as an additionnal parameter to the fit (needs a calibration driver) line.fit.fit_start_time : boolean = false #@description Track fit recomputes the drift distance from drift time (needs a calibration driver) line.fit.using_drift_time : boolean = false #@description Allow a fitted track to begin not tangential to the first hit line.fit.using_first : boolean = false #@description Allow a fitted track to end not tangential to the last hit line.fit.using_last : boolean = false
- Guess parameters
- Helix fit parameters
- Guess parameters
#@description Activate logging messages for helix guess driver trackfit.helix.guess.logging.priority : string = @variant(core:logging_priority|"error") #@description Use max radius (cell size) to construct initial guess point (1) or use the effective drift Geiger distance of the hit (0) trackfit.helix.guess.use_max_radius : boolean = false #@description Apply a factor (>0) to the max radius (devel mode) trackfit.helix.guess.max_radius_factor : real = 1.0 #@description Use guess trust (1) or keep all of the guess fits (0) and select later trackfit.helix.guess.use_guess_trust : boolean = false #@description Mode for trusting a fit guess ("counter", "barycenter") trackfit.helix.guess.guess_trust_mode : string = "counter" #@description Fit the delayed geiger cluster (by default, false since this mode is devoted to line fit) trackfit.helix.guess.fit_delayed_clusters : boolean = false
- Fit parameters
#@description 'Helix' fit only guess ("BBB", "BBT", "BTB", "BTT", "TBB", "TBT", "TTB", "TTT") #trackfit.helix.only_guess : string[1] = "TTT" #@description Store only the N solutions with best helix fit #trackfit.helix.store_number_of_solutions : integer = 2 #@description Print the status of the fit stepper at each step (devel only) trackfit.helix.fit.step_print_status : boolean = false #@description Plot the 2D view of the fitted data at each step (devel only) trackfit.helix.fit.step_draw : boolean = false #@description Track fit recomputes the drift distance from drift time (needs a calibration driver) trackfit.helix.fit.using_drift_time : boolean = false #@description Allow a fitted track to begin not tangential to the first hit trackfit.helix.fit.using_first : boolean = false #@description Allow a fitted track to end not tangential to the last hit trackfit.helix.fit.using_last : boolean = false
- Guess parameters
- Drift time calibration
3.8 Charged particle tracking module
3.8.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.8.2 Charged particle tracking
Given results of the two previous steps i.e. clustering and fitting, the trajectories must be interpreted within SuperNEMO detector geometry. The particle tracking translates trajectory into particle tracks and then determines the track charge (assuming particle comes from the source foil), it extrapolates track intersection with calorimeter walls and finally it associates particle track with calorimeter blocks.
[name="charged_particle_tracking" type="snemo::reconstruction::charged_particle_tracking_module"]
- Logging priority
#@description Logging flag logging.priority : string = @variant(core:logging_priority|"warning")
- Data banks and services labels
#@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Calibrated Data' bank CD_label : string = "CD" #@description The label of the 'Tracker Trajectory Data' bank TTD_label : string = "TTD" #@description The label of the 'Particle Track Data' bank PTD_label : string = "PTD"
- Drivers
The particle track reconstruction is done within several drivers, each one having a dedicated tasks such as to compute track charge or to associate particle track with calorimeter block. The way to perform these "actions" is then decorelated with the pipeline execution. Other algorithms can be implemented but the particle tracking module will stay unchanged.
#@description List of drivers to be used (see description below) drivers : string[4] = "VED" "CCD" "CAD" "AFD"
- Vertex Extrapolation Driver
#@description Vertex Extrapolation Driver logging priority VED.logging.priority : string = @variant(core:logging_priority|"error") #@description Use linear extrapolation (not implemented yet) VED.use_linear_extrapolation : boolean = false
- Charge Computation Driver
#@description Charge Computation Driver logging priority CCD.logging.priority : string = @variant(core:logging_priority|"warning") #@description Charge sign convention CCD.charge_from_source : boolean = true
- Calorimeter Association Driver
#@description Calorimeter Association Driver logging priority CAD.logging.priority : string = @variant(core:logging_priority|"warning") #@description Maximum matching distance for track/calo association CAD.matching_tolerance : real as length = 100 mm #@description Use a simpler approach by looking for gieger cells in front of calo (not implemented yet) CAD.use_last_geiger_cell : boolean = false
- Alpha Finder Driver
#@description Alpha Finder Driver logging priority AFD.logging.priority : string = @variant(core:logging_priority|"warning")
- Vertex Extrapolation Driver
3.9 γ tracking module
3.9.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.9.2 γ clustering
[name="gamma_clustering" type="snemo::reconstruction::gamma_clustering_module"]
- Logging priority
#@description Logging flag logging.priority : string = @variant(core:logging_priority|"warning")
- Data banks and services labels
#@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Particle Track Data' bank PTD_label : string = "PTD"
- Default options
#@description Gamma algorithm logging priority BGB.logging.priority : string = @variant(core:logging_priority|"error") #@description Enable the extrapolation to the source foil BGB.add_foil_vertex_extrapolation : boolean = true #@description Minimal internal probability for foil vertex extrapolation BGB.add_foil_vertex_minimal_probability : real as fraction = 1 %
- Driver
#@description List of drivers to be used (see description below) driver : string = "GC"
- Cluster properties
#@description The time spread between calorimeter hits within a cluster GC.cluster_time_range : real as time = 2.5 ns #@description The geometrical condition to cluster calorimeter hits ("side", "diagonal", "first", "second") GC.cluster_grid_mask : string = "first"
3.9.3 γ tracking
[name="gamma_tracking" type="snemo::reconstruction::gamma_tracking_module"]
- Logging priority
#@description Logging flag logging.priority : string = @variant(core:logging_priority|"warning")
- Data banks and services labels
#@description The label of the Geometry service Geo_label : string = "Geo" #@description The label of the 'Particle Track Data' bank PTD_label : string = "PTD"
- Driver
#@description List of drivers to be used (see description below) driver : string = "GT"
- Default options
#@description Gamma algorithm logging priority BGB.logging.priority : string = @variant(core:logging_priority|"error") #@description Enable the extrapolation to the source foil BGB.add_foil_vertex_extrapolation : boolean = true #@description Minimal internal probability for foil vertex extrapolation BGB.add_foil_vertex_minimal_probability : real as fraction = 1 %
- γ tracking setup
- Logging priority
#@description Logging flag GT.logging.priority : string = @variant(core:logging_priority|"warning")
- Minimal probability
The following value sets the minimal TOF probability to accept a pair of calorimeters.
#@description Minimal TOF probability GT.minimal_probability : real = 1e-5
- Use probability rather than gamma number
The
absolute
variable forces the gamma tracking algorithm to choose the calorimeter assocation in the base of the best probability and not in relation with the number of gammas.#@description Prefer probability rather than size of gamma tracked GT.use_absolute : boolean = false
- Maximum size of the gamma tracked
#@description Maximum size of a gamma tracked GT.maximal_gamma_size : integer = 0
- Logging priority
3.10 Particle identification module
3.10.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.10.2 Module declaration
[name="particle_identification" type="snemo::reconstruction::particle_identification_module"]
- Logging priority
#@description Logging flag logging.priority : string = @variant(core:logging_priority|"warning")
- Data banks and services labels
#@description The label of the Cut service Cut_label : string = "Cuts" #@description The label of the 'Particle Track Data' bank PTD_label : string = "PTD"
- Driver
#@description List of drivers to be used (see description below) drivers : string[1] = "PID"
- PID driver
- Logging priority
#@description Logging priority for PID driver PID.logging.priority : string = @variant(core:logging_priority|"warning")
- PID mode
#@description The PID mode PID.mode.label : boolean = true
- Particle definitions
#@description The list of particle identification definition PID.definitions : string[3] = "electron_definition" \ "gamma_definition" \ "alpha_definition"
- Particle labels
#@description The label associated to 'electron' definition PID.electron_definition.label : string = "electron" #@description The label associated to 'gamma' definition PID.gamma_definition.label : string = "gamma" #@description The label associated to 'alpha' definition PID.alpha_definition.label : string = "alpha"
- Logging priority
3.11 Topology module
3.11.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.11.2 Module declaration
[name="topology_identification" type="snemo::reconstruction::topology_module"]
- Logging priority
#@description Logging flag logging.priority : string = @variant(core:logging_priority|"error")
- Data banks and services labels
#@description The label of the 'Particle Track Data' bank PTD_label : string = "PTD" #@description The label of the 'Topology Data' bank TD_label : string = "TD"
- Drivers
#@description List of drivers to be used (see description below) drivers : string[3] = "TOFD" "DVD" "AMD"
- Time-Of-Flight driver
- Δvertex driver
- θ driver
3.12 Chain modules
This section holds most of the chain module to set "to music" the different
modules and tasks. It also contains the different paths given the selection
requirements. One important point is that module order really matters since a
module, especially chain_module
, needs to know the declaration of all the
modules it contains.
3.12.1 Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
3.12.2 Process after event header selection
[name="process_with_event_header_cuts" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "list_of_ids_cut" #@description The name of the module to be processed when condition is checked then_module : string = "io_output_header_selected" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_header_non_selected"
3.12.3 Analysis chain
io_output_particle_track_selected |
remove_simulated_data |
remove_calibrated_data |
remove_tracker_clustering_data |
remove_tracker_trajectory_data |
io_output_analysed |
[name="analysis_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[6] = \ "io_output_particle_track_selected" \ "remove_simulated_data" \ "remove_calibrated_data" \ "remove_tracker_clustering_data" \ "remove_tracker_trajectory_data" \ "io_output_analysed"
3.12.4 Process after selecting particle track
[name="process_with_particle_track_cuts" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "particle_track_cut" #@description The name of the module to be processed when condition is checked then_module : string = "analysis_chain" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_particle_track_non_selected"
3.12.5 Particle tracking chain
remove_particle_track_data |
charged_particle_tracking |
gamma_clustering |
gamma_tracking |
io_output_particle_track |
process_with_particle_track_cuts |
[name="particle_tracking_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[6] = \ "remove_particle_track_data" \ "charged_particle_tracking" \ "gamma_clustering" \ "gamma_tracking" \ "io_output_particle_track" \ "process_with_particle_track_cuts"
3.12.6 Process after fitting selection
[name="process_with_fitting_cuts" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "tracker_trajectory_cut" #@description The name of the module to be processed when condition is checked then_module : string = "particle_tracking_chain" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_tracker_trajectory_non_selected"
3.12.7 Fitting chain
remove_tracker_trajectory_data |
trackfit_tracker_fitting |
io_output_tracker_trajectory |
process_with_fitting_cuts |
[name="fitting_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[4] = \ "remove_tracker_trajectory_data" \ "trackfit_tracker_fitting" \ "io_output_tracker_trajectory" \ "process_with_fitting_cuts"
3.12.8 Process after clustering selection
[name="process_with_clustering_cuts" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "tracker_clustering_cut" #@description The name of the module to be processed when condition is checked then_module : string = "fitting_chain" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_tracker_clustering_non_selected"
3.12.9 Clustering chain
remove_tracker_clustering_data |
cat_tracker_clustering |
io_output_tracker_clustering |
process_with_clustering_cuts |
[name="clustering_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[4] = \ "remove_tracker_clustering_data" \ "cat_tracker_clustering" \ "io_output_tracker_clustering" \ "process_with_clustering_cuts"
3.12.10 Process after calibration selection
[name="process_with_calibrated_cuts" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "calibrated_cut" #@description The name of the module to be processed when condition is checked then_module : string = "clustering_chain" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_calibrated_non_selected"
3.12.11 Calibration chain
add_header |
tracker_s2c |
calorimeter_s2c |
io_output_calibrated |
process_with_calibrated_cuts |
[name="calibration_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[5] = \ "add_header" \ "tracker_s2c" \ "calorimeter_s2c" \ "io_output_calibrated" \ "process_with_calibrated_cuts"
3.12.12 Process after simulation selection
[name="process_with_simulated_cuts" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "simulated_cut" #@description The name of the module to be processed when condition is checked then_module : string = "calibration_chain" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_simulated_non_selected"
3.12.13 Simulation chain
simulation |
io_output_simulated |
process_with_simulated_cuts |
[name="simulation_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[3] = \ "simulation" \ "io_output_simulated" \ "process_with_simulated_cuts"
3.12.14 Full chain (from simulation → calibration → reconstruction)
simulation_chain |
[name="full_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[1] = \ "simulation_chain"
3.12.15 Minimum bias chain (from simulation → calibration → reconstruction)
simulation |
add_header |
tracker_s2c |
calorimeter_s2c |
cat_tracker_clustering |
trackfit_tracker_fitting |
charged_particle_tracking |
gamma_clustering |
particle_identification |
topology_identification |
io_output_analysed |
[name="minimum_bias_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[11] = \ "simulation" \ "add_header" \ "tracker_s2c" \ "calorimeter_s2c" \ "cat_tracker_clustering" \ "trackfit_tracker_fitting" \ "charged_particle_tracking" \ "gamma_clustering" \ "particle_identification" \ "topology_identification" \ "io_output_analysed"
3.12.16 Channel chain
- 2β selection
[name="io_output_2e_channel_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_2e_channel_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_2e_channel_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_2e_channel_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="process_2e_channel_cut" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "2e::channel_cut" #@description The name of the module to be processed when condition is checked then_module : string = "io_output_2e_channel_selected" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_2e_channel_non_selected"
- 1β selection
[name="io_output_1e_channel_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_1e_channel_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_1e_channel_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_1e_channel_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="process_1e_channel_cut" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "1e::channel_cut" #@description The name of the module to be processed when condition is checked then_module : string = "io_output_1e_channel_selected" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_1e_channel_non_selected"
- 1β/1γ selection
[name="io_output_1e1g_channel_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_1e1g_channel_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_1e1g_channel_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_1e1g_channel_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="process_1e1g_channel_cut" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "1e1g::channel_cut" #@description The name of the module to be processed when condition is checked then_module : string = "io_output_1e1g_channel_selected" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_1e1g_channel_non_selected"
- 1β/1α selection
[name="io_output_1e1a_channel_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_1e1a_channel_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="io_output_1e1a_channel_non_selected" type="dpp::output_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Output file mode files.mode : string = "single" #@description Path to output data file files.single.path : string as path = @variant(core:output_path|"/tmp/${USER}/snemo.d/") #@description Filename to output data file files.single.filename : string = "io_output_1e1a_channel_non_selected.brio" #@description The label of the Context service Ctx_label : string = "Ctx" [name="process_1e1a_channel_cut" type="dpp::if_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the cut service cut_service.label : string = "Cuts" #@description The name of the condition cut condition_cut : string = "1e1a::channel_cut" #@description The name of the module to be processed when condition is checked then_module : string = "io_output_1e1a_channel_selected" #@description The name of the module to be processed when condition is NOT checked else_module : string = "io_output_1e1a_channel_non_selected"
- Full chain
Table 10: Channel chain. minimum_bias_chain process_2e_channel_cut process_1e_channel_cut process_1e1g_channel_cut process_1e1a_channel_cut [name="channel_chain" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[5] = \ "minimum_bias_chain" \ "process_2e_channel_cut" \ "process_1e_channel_cut" \ "process_1e1g_channel_cut" \ "process_1e1a_channel_cut"
3.13 Miscellaneous
remove_header |
add_header |
remove_mc_visu_hits |
remove_simulated_data |
remove_calibrated_data |
remove_tracker_clustering_data |
remove_tracker_trajectory_data |
[name="reformat_data" type="dpp::chain_module"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The list of processing modules to be applied (in this order) modules : string[7] = \ "remove_header" \ "add_header" \ "remove_mc_visu_hits" \ "remove_simulated_data" \ "remove_calibrated_data" \ "remove_tracker_clustering_data" \ "remove_tracker_trajectory_data"
4 Services
A service generally hosts a specific resource that can be shared by many other software components, including other services or data processing modules (see SN@ilWare FAQ).
#@description A sample list of setups #@key_label "name" #@meta_label "type"
4.1 Context service
[name="Ctx" type="dpp::context_service"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description File from which the context is to be loaded at program start load.file : string as path = "/tmp/${USER}/snemo.d/snemo_context.conf" #@description File to store the context at program termination store.file : string as path = "/tmp/${USER}/snemo.d/snemo_context_end.conf" #@description Flag to backup the former context load file backup.file : string as path = "/tmp/${USER}/snemo.d/snemo_context_bak.conf"
4.2 Geometry service
The following code block declares the geometry service to properly load all the geometry and material construction of the detector. This service, only declared here, can be used by several operations like calibration, particle track reconstruction … but all of them will use the same geometry.
[name="Geo" type="geomtools::geometry_service"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Embedded SuperNEMO geometry manager main configuration file manager.configuration_file : string as path = \ "@configuration:sngeometry_manager.conf" #@description Embedded SuperNEMO geometry manager must build its mapping lookup table manager.build_mapping : boolean = true #@description Embedded geometry manager's mapping lookup table does not exclude any geometry category manager.no_excluded_categories : boolean = true
4.3 Cuts service
The cuts package provides some basic classes and utilities to design, create and apply selection cuts on arbitrary data models.
[name="Cuts" type="cuts::cut_service"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The main configuration file for the embedded cut manager cut_manager.config : string as path = "@configuration:cut_manager.conf"
4.3.1 Manager configuration
#@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description Print a final report of cut efficiencies print_report : string = "table" #@description Flag to skip the preloading of pre-registered cuts factory.no_preload : boolean = false #@description A list of files that contains definition of cuts cuts.configuration_files : string[8] as path = \ "@configuration:event_header_cuts.conf" \ "@configuration:simulated_data_cuts.conf" \ "@configuration:calibrated_data_cuts.conf" \ "@configuration:tracker_clustering_data_cuts.conf" \ "@configuration:tracker_trajectory_data_cuts.conf" \ "@configuration:particle_track_data_cuts.conf" \ "@configuration:pid_cuts.conf" \ "@configuration:topology_cuts.conf"
4.3.2 Event header cut
#@description A sample list of setups #@key_label "name" #@meta_label "type"
- List of event ids
0_50
[name="list_of_ids_cut" type="snemo::cut::event_header_cut"] #@description Cut description cut.description : string = "Select event following a list of event ids" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"debug") #@description The label/name of the event header' bank (mandatory) EH_label : string = "EH" #@description Activate list of event ids mode mode.list_of_event_ids : boolean = true #@description Filename with event id list_of_event_ids.file : string as path = "@configuration:test.lis"
4.3.3 Simulated data selection
#@description A sample list of setups #@key_label "name" #@meta_label "type"
- Check bank availability
[name="has_simulated_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of SD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "SD"
- Multiple cuts
This cuts puts together all the previous declared cuts.
Table 12: Multi selection for validating simulation process. has_simulated_data [name="simulated_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[1] = \ "has_simulated_data"
4.3.4 Calibrated data selection
#@description A sample list of setups #@key_label "name" #@meta_label "type"
- Check bank availability
[name="has_calibrated_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of CD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "CD"
- Check calibrated calorimeter availability
[name="has_cd_calorimeter" type="snemo::cut::calibrated_data_cut"] #@description Cut description cut.description : string = "Select calibrated calorimeter hit" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'calibrated data' bank (mandatory) CD_label : string = "CD" #@description Activate the check for a special boolean (flag) property mode.has_hit_category : boolean = true #@description Name of the MC hit category to be checked has_hit_category.category : string = "calorimeter"
[name="!has_cd_calorimeter" type="cuts::not_cut"] #@description The cut to be negated (mandatory) cut : string = "has_cd_calorimeter"
- Select number of calibrated calorimeter hits
[name="cd_calorimeter_cut" type="snemo::cut::calibrated_data_cut"] #@description Cut description cut.description : string = "Select a given number of calibrated calorimeter hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'calibrated data' bank (mandatory) CD_label : string = "CD" #@description Activate the check for multiplicity of calibrated hits mode.range_hit_category : boolean = true #@description Name of the hit category to be checked range_hit_category.category : string = "calorimeter" #@description Minimal number of calibrated hits in the choosen category range_hit_category.min : integer = 2 #@description Maximal number of calibrated hits in the choosen category range_hit_category.max : integer = 2
- Check calibrated tracker availability
[name="has_cd_tracker" type="snemo::cut::calibrated_data_cut"] #@description Cut description cut.description : string = "Select calibrated tracker hit" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'calibrated data' bank (mandatory) CD_label : string = "CD" #@description Activate the check for a special boolean (flag) property mode.has_hit_category : boolean = true #@description Name of the hit category to be checked has_hit_category.category : string = "tracker"
[name="!has_cd_tracker" type="cuts::not_cut"] #@description The cut to be negated (mandatory) cut : string = "has_cd_tracker"
- Select number of calibrated tracker hits
[name="cd_tracker_cut" type="snemo::cut::calibrated_data_cut"] #@description Cut description cut.description : string = "Select a given number of calibrated tracker hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'calibrated data' bank (mandatory) CD_label : string = "CD" #@description Activate the check for multiplicity of calibrated hits mode.range_hit_category : boolean = true #@description Name of the hit category to be checked range_hit_category.category : string = "tracker" #@description Minimal number of calibrated hits in the choosen category range_hit_category.min : integer = 3 #@description Maximal number of calibrated hits in the choosen category #range_hit_category.max : integer = 1
- Remove delayed calibrated tracker hits
[name="has_delayed_tracker_hit" type="snemo::cut::calibrated_data_cut"] #@description Cut description cut.description : string = "Select delayed calibrated tracker hit" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'calibrated data' bank (mandatory) CD_label : string = "CD" #@description Activate the check for delayed trait bit mode.tracker_hit_is_delayed : boolean = true #@description Delayed time of the tracker hit tracker_hit_is_delayed.delay_time : real as time = 15 us
[name="!has_delayed_tracker_hit" type="cuts::not_cut"] #@description The cut to be negated (mandatory) cut : string = "has_delayed_tracker_hit"
- Multiple cuts
This cuts puts together all the previous declared cuts.
Table 13: Multi selection for validating calibration process. has_calibrated_data has_cd_calorimeter cd_calorimeter_cut has_cd_tracker cd_tracker_cut !has_delayed_tracker_hit [name="calibrated_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[6] = \ "has_calibrated_data" \ "has_cd_calorimeter" \ "cd_calorimeter_cut" \ "has_cd_tracker" \ "cd_tracker_cut" \ "!has_delayed_tracker_hit"
4.3.5 Tracker clustering data selection
#@description A sample list of setups #@key_label "name" #@meta_label "type"
- Check bank availability
[name="has_tracker_clustering_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of TCD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "TCD"
- Check if clusters have been performed
[name="has_cluster" type="snemo::cut::tracker_clustering_data_cut"] #@description Cut description cut.description : string = "Check tracker cluster presence" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'tracker clustering data' bank (mandatory) TCD_label : string = "TCD" #@description Activate the check of clusters presence mode.has_cluster : boolean = true
- Select number of cluster
[name="cluster_range_cut" type="snemo::cut::tracker_clustering_data_cut"] #@description Cut description cut.description : string = "Select a given number of tracker clusters" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'tracker clustering data' bank (mandatory) TCD_label : string = "TCD" #@description Activate the check for multiplicity of clusters mode.range_cluster : boolean = true #@description Minimal number of clusters range_cluster.min : integer = 2 #@description Maximal number of clusters range_cluster.max : integer = 4
- Select number of hit within a cluster notused
[name="tcd2_cut" type="snemo::analysis::cut::tracker_clustering_data_cut"] #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'tracker clustering data' bank (mandatory) TCD_label : string = "TCD" #@description Activate the check for multiplicity of clusters mode.range_tracker_hit : boolean = true #@description Minimal number of cells in cluster range_tracker_hit.min : integer = 1 # #@description Maximal number of cells in cluster # range_tracker_hit.max : integer = 100000
- "Selecting" unclustered hits
We define a serie of cut to remove event with too much unclustered hits. We first define a cut to check is there is some unclustered hits. If yes, then we ask tracker cluster solution to have more than 4 unclustered hits. Finally, since we want to remove thess events, we build a
nor_cut
to keep- Check if unclustered hits remain
[name="has_unclustered_hits" type="snemo::cut::tracker_clustering_data_cut"] #@description Cut description cut.description : string = "Check unclustered hits presence" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'tracker clustering data' bank (mandatory) TCD_label : string = "TCD" #@description Activate the check of unclustered hits mode.has_unclustered_hits : boolean = true
- Select number of unclustered hits
[name="unclustered_hits_range_cut" type="snemo::cut::tracker_clustering_data_cut"] #@description Cut description cut.description : string = "Select a given number of unclustered hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'tracker clustering data' bank (mandatory) TCD_label : string = "TCD" #@description Activate the check for multiplicity of unclustered hits mode.range_unclustered_hits : boolean = true #@description Minimal number of unclustured hits range_unclustered_hits.min : integer = 4
- No unclustered hits nor large number of unclustered hits
Table 14: Multi-selection for getting unclustering hits. has_unclustered_hits unclustered_hits_range_cut [name="range_unclustered_hits" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[2] = \ "has_unclustered_hits" \ "unclustered_hits_range_cut"
Now that we have selected tracker clustering solution with large number of unclustered hits, use the negation of this cut to keep event with low number of unclustered hits.
[name="!range_unclustered_hits" type="cuts::not_cut"] #@description Cut description cut.description : string = "Remove event with large number of unclustered hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The name of the cut to be negated cut : string = "range_unclustered_hits"
- Check if unclustered hits remain
- Multiple cuts
Table 15: Multi-selection for validating tracker clustering process. has_tracker_clustering_data has_cluster cluster_range_cut !range_unclustered_hits [name="tracker_clustering_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[4] = \ "has_tracker_clustering_data" \ "has_cluster" \ "cluster_range_cut" \ "!range_unclustered_hits"
4.3.6 Tracker trajectory data selection
#@description A sample list of setups #@key_label "name" #@meta_label "type"
- Check bank availability
[name="has_tracker_trajectory_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of TTD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "TTD"
- Check for default solution
[name="has_solution_cut" type="snemo::cut::tracker_trajectory_data_cut"] #@description Cut description cut.description : string = "Select event with default solution" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'tracker trajectory data' bank (mandatory) TTD_label : string = "TTD" #@description Activate the check for default solution mode.has_solution : boolean = true
- Select only good trajectories
[name="pvalue_range_cut" type="snemo::cut::tracker_trajectory_data_cut"] #@description Cut description cut.description : string = "Select event with good p-value trajectory" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'tracker trajectory data' bank (mandatory) TTD_label : string = "TTD" #@description Activate the check for good p-value trajectories mode.range_pvalue : boolean = true #@description Minimal value for p-value range_pvalue.min : real as fraction = 10 %
- Multiple cuts
Table 16: Multi-selection for validating tracker trajectory process. has_tracker_trajectory_data has_solution_cut pvalue_range_cut [name="tracker_trajectory_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[3] = \ "has_tracker_trajectory_data" \ "has_solution_cut" \ "pvalue_range_cut"
4.3.7 Particle track selection
#@description A sample list of setups #@key_label "name" #@meta_label "type"
- Check bank availability
[name="has_particle_track_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of PTD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "PTD"
- Check if particles have been reconstructed
[name="has_particle" type="snemo::cut::particle_track_data_cut"] #@description Cut description cut.description : string = "Select reconstructed particle" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'calibrated data' bank (mandatory) PTD_label : string = "PTD" #@description Activate the check for a special boolean (flag) property mode.has_particles : boolean = true
- Select number of particles
[name="range_particle" type="snemo::cut::particle_track_data_cut"] #@description Cut description cut.description : string = "Select a number of particle tracks" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'calibrated data' bank (mandatory) PTD_label : string = "PTD" #@description Activate the check for multiplicity of particles trajectories mode.range_particles : boolean = true #@description Minimal number of particle track range_particles.min : integer = 2 #@description Maximal number of particle track range_particles.max : integer = 2
- No isolated calorimeter hits
Remove event with non associated calorimeters hits.
[name="has_non_associated_calorimeter_hits" type="snemo::cut::particle_track_data_cut"] #@description Cut description cut.description : string = "Select event with non associated calorimeter hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the 'particle track data' bank (mandatory) PTD_label : string = "PTD" #@description Activate the check for non associated calorimeter hits mode.has_non_associated_calorimeter_hits : boolean = true
[name="!has_non_associated_calorimeter_hits" type="cuts::not_cut"] #@description The cut to be negated (mandatory) cut : string = "has_non_associated_calorimeter_hits"
- Multiple cuts
Table 17: Multi-selection for validating particle tracking process. has_particle_track_data has_particle range_particle !has_non_associated_calorimeter_hits [name="particle_track_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[4] = \ "has_particle_track_data" \ "has_particle" \ "range_particle" \ "!has_non_associated_calorimeter_hits"
4.3.8 PID selection
The following cut defines what may be called a "particle" i.e. an electron, an
alpha in the context of SuperNEMO. Since these cuts apply on every
particle_track
, they must be cuts from particle_track_cut
type.
- Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
- Generic definition
- \(e^-\) definition
An electron is a
particle_track
havinga negative electric charge
[name="electron::negative_charge" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check negative charged track" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_charge : boolean = true #@description Request negative charged particle has_charge.type : string = "negative"
a vertex on the source foil
[name="electron::foil_vertex" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check if track has foil vertex" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_vertex : boolean = true #@description Request foil vertex has_vertex.type : string = "foil"
an associated calorimeter hit
[name="electron::calorimeter_association" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check if track has associated calorimeter hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_associated_calorimeter_hits : boolean = true
Table 18: Selections used to define an electron track. electron::negative_charge electron::calorimeter_association electron::foil_vertex [name="electron_definition" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[3] = \ "electron::negative_charge" \ "electron::calorimeter_association" \ "electron::foil_vertex"
Addendum
If you want to select only main wall and/or X-wall calorimeter hits for electron, you can declare to
particle_track_cut
cut withrange_associated_calorimeter_hits
mode enabled and then use themulti_or
cut fromi_cut
library. For instance,[name="electron::calo_association" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check if track has a range of associated calorimeter hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.range_associated_calorimeter_hits : boolean = true #@description The calorimeter category to be checked range_associated_calorimeter_hits.category : string = "calo" #@description The minimal number of calorimeter associated range_associated_calorimeter_hits.min : integer = 1 [name="electron::xcalo_association" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check if track has a range of associated calorimeter hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.range_associated_calorimeter_hits : boolean = true #@description The calorimeter category to be checked range_associated_calorimeter_hits.category : string = "xcalo" #@description The minimal number of calorimeter associated range_associated_calorimeter_hits.min : integer = 1
Table 19: Selections used to select electron with calo
orxcalo
associated.electron::calo_association electron::xcalo_association [name="electron::calos_association" type="cuts::multi_or_cut"] #@description Cut description cut.description : string = "Multi-or cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[2] = \ "electron::calo_association" \ "electron::xcalo_association"
- γ definition
A gamma is a
particle_track
havinga neutral electric charge
[name="gamma::neutral_charge" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check neutral charged track" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_charge : boolean = true #@description Request neutral charged particle has_charge.type : string = "neutral"
an associated calorimeter hit
[name="gamma::calo_association" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check if track has associated calorimeter hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_associated_calorimeter_hits : boolean = true
Table 20: Selections used to define a gamma track. gamma::neutral_charge gamma::calo_association [name="gamma_definition" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[2] = \ "gamma::neutral_charge" \ "gamma::calo_association"
- α definition
An alpha is a
particle_track
havinga undefined electric charge i.e. fitted by a line
[name="alpha::undefined_charge" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check undefined charged track" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_charge : boolean = true #@description Request undefined charged particle has_charge.type : string = "undefined"
a delayed cluster
[name="alpha::delayed_cluster" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check delayed cluster" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"error") #@description The running mode of this cut instance mode.has_delayed_cluster : boolean = true
a vertex on the source foil
[name="alpha::foil_vertex" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check if track has foil vertex" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_vertex : boolean = true #@description Request foil vertex has_vertex.type : string = "foil"
no associated calorimeter hits
[name="alpha::calo_association" type="snemo::cut::particle_track_cut"] #@description Cut description cut.description : string = "Check if track has associated calorimeter hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_associated_calorimeter_hits : boolean = true [name="alpha::no_calo_association" type="cuts::not_cut"] #@description Cut description cut.description : string = "Check if track has no associated calorimeter hits" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The name of the cut to be negated cut : string = "alpha::calo_association"
Table 21: Selections used to define an alpha track. alpha::delayed_cluster alpha::undefined_charge alpha::no_calo_association alpha::foil_vertex [name="alpha_definition" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[3] = \ "alpha::delayed_cluster" \ "alpha::undefined_charge" \ "alpha::no_calo_association" \ "alpha::foil_vertex"
4.3.9 Channel selection
The following selections define some basic "standard" channel cuts such as :
- 2 electrons,
- 1 electron,
- 1 electron, \(n\) gammas,
- 2 electron, \(n\) gammas,
- 1 electron, 1 alpha particle
and maybe more in the future.
- Insert preamble
#@description A sample list of setups #@key_label "name" #@meta_label "type"
- 2β selection
Define 2β events channel
generic cuts :
[name="2e::has_particle_track_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of PTD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "PTD" [name="2e::has_particles" type="snemo::cut::particle_track_data_cut"] #@description Cut description cut.description : string = "Select reconstructed particle for 2e topology" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the bank (mandatory) PTD_label : string = "PTD" #@description The running mode of this cut instance mode.has_particles : boolean = true [name="2e::has_pattern_id" type="snemo::cut::topology_data_cut"] #@description Cut description cut.description : string = "Ensure pattern id presence for 2e topology" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_pattern_id : boolean = true
select 2 electrons event topology :
[name="2e::topology_pattern" type="snemo::cut::topology_data_cut"] #@description Cut description cut.description : string = "Select 2 electrons topology pattern" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"error") #@description Activate the check for pattern id label mode.pattern_id : boolean = true #@description Label of the topology pattern id pattern_id.label : string = "2e"
select events with internal probability :
[name="2e::has_internal_probability" type="snemo::cut::channel_2e_cut"] #@description Cut description cut.description : string = "Select events with internal probability" #@description Logging priority' logging.priority : string = @variant(core:logging_priority|"error") #@description Activate the check for internal probability mode.has_internal_probability : boolean = true
select events with good internal probability :
[name="2e::range_internal_probability" type="snemo::cut::channel_2e_cut"] #@description Cut description cut.description : string = "Select good internal probability" #@description Logging priority' logging.priority : string = @variant(core:logging_priority|"error") #@description Activate the check for internal probability value mode.range_internal_probability : boolean = true #@description Minimal value for internal probability range_internal_probability.min : real as fraction = 1 %
The following cut combines all the previous ones to define what 2 electrons events are
Table 22: Definition of 2 electrons channel. 2e::has_particle_track_data 2e::has_particles 2e::has_pattern_id 2e::topology_pattern 2e::has_internal_probability 2e::range_internal_probability [name="2e::channel_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[6] = \ "2e::has_particle_track_data" \ "2e::has_particles" \ "2e::has_pattern_id" \ "2e::topology_pattern" \ "2e::has_internal_probability" \ "2e::range_internal_probability"
- 1β selection
Define 1β events channel
generic cuts :
[name="1e::has_particle_track_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of PTD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "PTD" [name="1e::has_particles" type="snemo::cut::particle_track_data_cut"] #@description Cut description cut.description : string = "Select reconstructed particle for 1e topology" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the bank (mandatory) PTD_label : string = "PTD" #@description The running mode of this cut instance mode.has_particles : boolean = true [name="1e::has_pattern_id" type="snemo::cut::topology_data_cut"] #@description Cut description cut.description : string = "Ensure pattern id presence for 1e topology" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_pattern_id : boolean = true
select 1 electron event topology :
[name="1e::topology_pattern" type="snemo::cut::topology_data_cut"] #@description Cut description cut.description : string = "Select 1 electron topology events" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"error") #@description Activate the check for pattern id label mode.pattern_id : boolean = true #@description Label of the topology pattern id pattern_id.label : string = "1e"
Table 23: Definition of 1 electron channel. 1e::has_particle_track_data 1e::has_particles 1e::has_pattern_id 1e::topology_pattern [name="1e::channel_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[4] = \ "1e::has_particle_track_data" \ "1e::has_particles" \ "1e::has_pattern_id" \ "1e::topology_pattern"
- 1β1γ selection
Define 1β1γ events channel
generic cuts :
[name="1e1g::has_particle_track_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of PTD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "PTD" [name="1e1g::has_particles" type="snemo::cut::particle_track_data_cut"] #@description Cut description cut.description : string = "Select reconstructed particle for 1e1g topology" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the bank (mandatory) PTD_label : string = "PTD" #@description The running mode of this cut instance mode.has_particles : boolean = true [name="1e1g::has_pattern_id" type="snemo::cut::topology_data_cut"] #@description Cut description cut.description : string = "Ensure pattern id presence for 1e1g topology" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_pattern_id : boolean = true
select 1 electron, 1 gamma event topology :
[name="1e1g::topology_pattern" type="snemo::cut::topology_data_cut"] #@description Cut description cut.description : string = "Select 1 electron/1 gamma topology events" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"error") #@description Activate the check for pattern id label mode.pattern_id : boolean = true #@description Label of the topology pattern id pattern_id.label : string = "1e1g"
Table 24: Definition of 1β1γ channel. 1e1g::has_particle_track_data 1e1g::has_particles 1e1g::has_pattern_id 1e1g::topology_pattern [name="1e1g::channel_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[4] = \ "1e1g::has_particle_track_data" \ "1e1g::has_particles" \ "1e1g::has_pattern_id" \ "1e1g::topology_pattern"
- 1β1α selection
Define 1β1α events topology
generic cuts :
[name="1e1a::has_particle_track_data" type="dpp::utils_cut"] #@description Cut description cut.description : string = "Check availabity of PTD" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this utils_cut instance mode : string = "has_bank" #@description The name of the bank to be checked (mandatory) has_bank.name : string = "PTD" [name="1e1a::has_particles" type="snemo::cut::particle_track_data_cut"] #@description Cut description cut.description : string = "Select reconstructed particle for 1e1a topology" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The label/name of the bank (mandatory) PTD_label : string = "PTD" #@description The running mode of this cut instance mode.has_particles : boolean = true [name="1e1a::has_pattern_id" type="snemo::cut::topology_data_cut"] #@description Cut description cut.description : string = "Ensure pattern id presence for 1e1a topology" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The running mode of this cut instance mode.has_pattern_id : boolean = true
select 1 electron, 1 alpha delayed event topology :
[name="1e1a::topology_pattern" type="snemo::cut::topology_data_cut"] #@description Cut description cut.description : string = "Select 1 electron/1 alpha topology events" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"error") #@description Activate the check for pattern id label mode.pattern_id : boolean = true #@description Label of the topology pattern id pattern_id.label : string = "1e1a"
Table 25: Definition of 1β1α channel. 1e1a::has_particle_track_data 1e1a::has_particles 1e1a::has_pattern_id 1e1a::topology_pattern [name="1e1a::channel_cut" type="cuts::multi_and_cut"] #@description Cut description cut.description : string = "Multi-and cut" #@description Logging priority logging.priority : string = @variant(core:logging_priority|"warning") #@description The cuts to be combined cuts : string[4] = \ "1e1a::has_particle_track_data" \ "1e1a::has_particles" \ "1e1a::has_pattern_id" \ "1e1a::topology_pattern"
5 Running SN@ilWare processing chain
Since this configuration will run through the executable bxdpp_processing
from
Bayeux library and not through flsimulate+flreconstruct
binaries from Falaise
library, we should take care of loading the proper libraries. This is
automatically done with the 2.3 code where library paths to be used by
this setup are explicitely set.
Running processing pipeline is done by the bxdpp_processing
program provided
by dpp
library. Its call is pretty simple and only implies to have a module
manager file. Nevertheless, since we do not rely to Falaise i.e. we do not use
flsimulate+flreconstruct
we must set different resource paths (geometry,
materials). This is not user-friendly at all but this is the only way so far.
For example, if you only want to do simulation, you can run the following command
bxdpp_processing \ --module-manager-config ./current/module_manager.conf \ --module simulation \ --dlls-config ./current/dlls.conf \ --datatools::resource_path="falaise@<falaise install dir>/share/Falaise-2.0.0/resources" \ --datatools::resource_path="configuration@<this configuration directory>" \ --max-records 100
An other way to run the previous command without loading the dlls.conf
file
will be to temporarly set the LD_LIBRARY_PATH
variable and to point it to the
Falaise
and Bayeux
libraries path namely
LD_LIBRARY_PATH="<bayeux install dir>/bayeux/install/lib64:<falaise install dir>/falaise/install/lib64" \ bxdpp_processing \ --module-manager-config ./current/module_manager.conf \ --module simulation \ --load-dll Bayeux_mctools_geant4 --load-dll Falaise \ --datatools::resource_path="falaise@<falaise install dir>/share/Falaise-2.0.0/resources" \ --datatools::resource_path="configuration@<this configuration directory>" \ --max-records 100
It will launch 100 simulated events using the simulation_chain
module as
setup in this section.
In the same way you can run the calibration chain by doing
bxdpp_processing \ --module-manager-config ./current/module_manager.conf \ --module calibration \ --dlls-config ./current/dlls.conf \ --datatools::resource_path="falaise@<falaise install dir>/share/Falaise-2.0.0/resources" \ --datatools::resource_path="configuration@<this configuration directory>" \ --input-file /tmp/$USER/io_output_simulated.brio
where file /tmp/$USER/io_output_simulated.brio
is the one produced by the
simulation_chain
module as defined and setup in this section.
All the different process steps can then be run using the dedicated module such
as clustering or fitting Geiger cells. The most complete mode is the
full_chain
module where all process are done from simulation → calibration →
track reconstruction3.