Loading MathJax...

SN@ilWare Simulation Configuration

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.

1

At the time of writing this document, emacs version is 24.2.


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

Emacs lisp function can be run using ALT-x command and typing the function name.


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

Table 1: Libraries to be used by modules.
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)
      

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 in trackfit::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
        
    • 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
        

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")
      

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
      

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"
      

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
    • Logging priority
      #@description Logging flag
      TOFD.logging.priority : string = @variant(core:logging_priority|"error")
      
  • Δvertex driver
    • Logging priority
      #@description Logging flag
      DVD.logging.priority : string = @variant(core:logging_priority|"error")
      
  • θ driver
    • Logging priority
      #@description Logging flag
      AMD.logging.priority : string = @variant(core:logging_priority|"error")
      

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

Table 2: Modules used by the analysis process.
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

Table 3: Modules used by the particle tracking process.
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

Table 4: Modules used by the fitting process.
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

Table 5: Modules used by the clustering process.
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

Table 6: Modules used by the calibration process.
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

Table 7: Modules used by the simulation process.
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)

Table 8: Full chain processing.
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)

Table 9: Full chain processing without selection.
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

Table 11: Reformating data.
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"
      
  • 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 having

    • a 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 with range_associated_calorimeter_hits mode enabled and then use the multi_or cut from i_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 or xcalo 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 having

    • a 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 having

    • a 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.

3

For such processing you will need additional libraries see 2.3.


File under version control - commit 17f7cf0 - 2015-10-24