All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
decodePMT_icarus.fcl
Go to the documentation of this file.
1 #
2 # File: decodePMT_icarus.fcl
3 # Purpose: PMT readout fragment decoding for studies in ICARUS.
4 # Author: Gianluca Petrillo (petrillo@slac.stanford.edu)
5 # Date: May 12, 2021
6 #
7 #
8 # PMT waveform decoding is performed, extensive debugging messages are
9 # included in the `debug.log` log file, and ROOT trees are produced for studies.
10 # This configuration, as is, is not meant for production.
11 #
12 #
13 # Input
14 # ------
15 #
16 # * artDAQ fragments from all 24 PMT readout boards, named
17 # `daq:ContainerCAENV1730`
18 # * trigger fragment `daq:ICARUSTriggerUDP` (will be decoded as well)
19 # * DAQ configuration as FHiCL in the art/ROOT input file
20 #
21 # This configuration requires a data fragment for each PMT readout board
22 # which is mentioned in `physics.producers.daqPMT.DecoderTool.BoardSetup`,
23 # which by default is all 24. If the input run misses some PMT readout boards,
24 # use `decodePMT_icarus_incomplete.fcl` instead.
25 #
26 #
27 # Output
28 # -------
29 #
30 # Only new data products are written in the art/ROOT output file, including:
31 #
32 # * `daqPMT` (std::vector<raw::OpDetWaveform>): decoded waveforms,
33 # with our best reconstruction for their time stamps in LArSoft reference
34 #
35 #
36 # The `Trees-<InputFile>*.root` file (from `TFileService`) includes ROOT tree
37 # `PMTfragments`.
38 #
39 #
40 #
41 # Service configuration
42 # ----------------------
43 #
44 # * `DetectorClocksService` is essential to assign a correct waveform timestamp
45 # * `Geometry` service bundle is required by `DetectorClocksService`
46 # * `IICARUSChannelMap` to relate PMT fragment IDs to channels
47 # * `TFileService` used to write trees (not needed if all trees are disabled)
48 #
49 #
50 
51 
52 # ------------------------------------------------------------------------------
55 
56 #include "rootoutput_icarus.fcl"
57 #include "decoderdefs_icarus.fcl"
58 
59 # ------------------------------------------------------------------------------
60 process_name: DecodePMT
61 
62 
63 # ------------------------------------------------------------------------------
64 services: {
65 
66  @table::icarus_art_services
67  message: @local::icarus_message_services_interactive_debug
68 
69  @table::icarus_geometry_services
71  IICARUSChannelMap: @local::icarus_channelmappinggservice
72 
73  TFileService: { fileName: "Trees-%ifb_%tc-%p.root" }
74 }
75 
76 
77 # ------------------------------------------------------------------------------
78 physics: {
79 
80  producers: {
81 
82  triggerconfig: @local::extractTriggerConfig
83  pmtconfig: @local::extractPMTconfig
84 
85  daqTrigger: @local::decodeTriggerV2
86 
87  daqPMT: @local::decodePMT
88 
89  }
90 
91  decoding: [ triggerconfig, pmtconfig, daqTrigger, daqPMT ]
92  streams: [ rootoutput ]
93 }
94 
95 
96 # ------------------------------------------------------------------------------
97 outputs: {
98  rootoutput: {
99  @table::icarus_rootoutput
100  dataTier: "decoded"
101  fileProperties: { maxInputFiles: 1 }
102  checkFileName: false
103  compressionLevel: 501
104 
105  outputCommands: [ "drop *_*_*_*", "keep *_*_*_DecodePMT" ]
106  } # rootoutput
107 } # outputs
108 
109 
110 # ------------------------------------------------------------------------------
111 
112 physics.producers.daqTrigger.DecoderTool.TrigConfigLabel: triggerconfig # required
113 physics.producers.daqPMT.PMTconfigTag: pmtconfig # required
114 physics.producers.daqPMT.TriggerTag: daqTrigger # required
115 
116 # services.Geometry.Name: icarus_splitwires # for runs < 548x
117 
118 #
119 # customization of PMT decoding
120 #
121 
122 physics.producers.daqPMT.SurviveExceptions: false
123 physics.producers.daqPMT.DiagnosticOutput: true
124 physics.producers.daqPMT.PacketDump: false
125 physics.producers.daqPMT.RequireKnownBoards: true
126 physics.producers.daqPMT.RequireBoardConfig: true
127 physics.producers.daqPMT.DataTrees: [ "PMTfragments" ]
128 
129 #
130 # customization of trigger decoding
131 #
132 
133 physics.producers.daqTrigger.DecoderTool.DiagnosticOutput: true
134 physics.producers.daqTrigger.DecoderTool.Debug: false
135 
136 
137 # ------------------------------------------------------------------------------
process_name pmtconfig
BEGIN_PROLOG triggeremu_data_config_icarus settings PMTADCthresholds sequence::icarus_stage0_multiTPC_TPC physics sequence::icarus_stage0_EastHits_TPC physics sequence::icarus_stage0_WestHits_TPC physics producers purityana0 caloskimCalorimetryCryoE physics caloskimCalorimetryCryoW physics sequence::physics pathW services
services DetectorClocksService
process_name drop raw::OpDetWaveforms_DataApr2016RecoStage1_saturation_ * physics
process_name can override from command line with o or output dataTier
Definition: runPID.fcl:28
BEGIN_PROLOG extractTriggerConfig
BEGIN_PROLOG gatesFromTracksW gatesFromTracksE streams
process_name daqTrigger
outputs out1 outputCommands
process_name daqPMT
Definition: decoder.fcl:42
BEGIN_PROLOG icarus_detectorclocks
BEGIN_PROLOG sequence::SlidingWindowTriggerPatternsWindowPair END_PROLOG trigslidewindowOR6m output outputs
BEGIN_PROLOG sequence::SlidingWindowTriggerPatternsOppositeWindows END_PROLOG process_name