Produces plots about trigger simulation and trigger efficiency. More...
Classes | |
struct | Config |
Public Types | |
using | Parameters = art::EDAnalyzer::Table< Config > |
Public Member Functions | |
TriggerEfficiencyPlots (Parameters const &config) | |
TriggerEfficiencyPlots (TriggerEfficiencyPlots const &)=delete | |
TriggerEfficiencyPlots (TriggerEfficiencyPlots &&)=delete | |
TriggerEfficiencyPlots & | operator= (TriggerEfficiencyPlots const &)=delete |
TriggerEfficiencyPlots & | operator= (TriggerEfficiencyPlots &&)=delete |
virtual void | analyze (art::Event const &event) override |
Fills the plots. Also extracts the information to fill them with. More... | |
virtual void | endJob () override |
Prints end-of-job summaries. More... | |
Private Types | |
using | microseconds = util::quantities::intervals::microseconds |
using | nanoseconds = util::quantities::intervals::nanoseconds |
using | TrackedTriggerGate_t = icarus::trigger::TrackedOpticalTriggerGate< sbn::OpDetWaveformMeta > |
Reconstituted trigger gate type internally used. More... | |
using | TriggerGateData_t = icarus::trigger::OpticalTriggerGateData_t::GateData_t |
Type of gate data without channel information. More... | |
using | PlotSandbox = icarus::trigger::PlotSandbox |
Import type. More... | |
using | PlotSandboxRefs_t = std::vector< std::reference_wrapper< PlotSandbox const >> |
List of references to plot sandboxes. More... | |
Private Member Functions | |
void | initializePlots (detinfo::DetectorClocksData const &clockData, PlotCategories_t const &categories) |
Initializes all the plot sets, one per threshold. More... | |
void | initializePlotSet (detinfo::DetectorClocksData const &clockData, PlotSandbox &plots) const |
Initializes full set of plots for (ADC threshold + category) into plots . More... | |
void | initializeEfficiencyPerTriggerPlots (detinfo::DetectorClocksData const &clockData, PlotSandbox &plots) const |
Initializes set of plots per complete trigger definition into plots . More... | |
void | initializeEventPlots (PlotSandbox &plots) const |
Initializes a single, trigger-independent plot set into plots . More... | |
bool | shouldPlotEvent (EventInfo_t const &eventInfo) const |
std::vector< std::string > | selectPlotCategories (EventInfo_t const &info, PlotCategories_t const &categories) const |
Returns the names of the plot categories event qualifies for. More... | |
EventInfo_t | extractEventInfo (art::Event const &event, detinfo::DetectorClocksData const &clockData) const |
Extracts from event the relevant information on the physics event. More... | |
geo::TPCGeo const * | pointInTPC (geo::Point_t const &point) const |
Returns the TPC point is within, nullptr if none. More... | |
geo::TPCGeo const * | pointInActiveTPC (geo::Point_t const &point) const |
std::vector< TriggerGateData_t > | combineTriggerPrimitives (art::Event const &event, icarus::trigger::ADCCounts_t const threshold, art::InputTag const &dataTag) const |
Computes the trigger response from primitives with the given threshold . More... | |
void | plotResponses (std::size_t iThr, icarus::trigger::ADCCounts_t const threshold, detinfo::DetectorTimings const &detTimings, PlotSandboxRefs_t const &plots, EventInfo_t const &info, std::vector< TriggerGateData_t > const &primitiveCounts) const |
Adds all the responses (one per threshold) to the plots. More... | |
std::vector< std::vector < TrackedTriggerGate_t > > | ReadTriggerGates (art::Event const &event, art::InputTag const &dataTag) const |
Reads a set of input gates from the event . More... | |
Static Private Member Functions | |
static std::string | thrAndCatName (std::string const &boxName, std::string const &category) |
static std::string | thrAndCatName (PlotSandbox const &box, std::string const &category) |
template<typename TrigGateColl > | |
static auto | computeMaxGate (TrigGateColl const &gates) |
Returns a gate that is Max() of all the specified gates . More... | |
Private Attributes | |
std::vector< art::InputTag > | fGeneratorTags |
Generator data product tags. More... | |
art::InputTag | fDetectorParticleTag |
std::vector< art::InputTag > | fEnergyDepositTags |
Energy deposition data product tags. More... | |
std::map < icarus::trigger::ADCCounts_t, art::InputTag > | fADCthresholds |
ADC thresholds to read, and the input tag connected to their data. More... | |
microseconds | fBeamGateDuration |
Duration of the gate during with global optical triggers are accepted. More... | |
std::vector< unsigned int > | fMinimumPrimitives |
Minimum number of trigger primitives for a trigger to happen. More... | |
nanoseconds | fTriggerTimeResolution |
Trigger resolution in time. More... | |
bool | fPlotOnlyActiveVolume |
Plot only events in active volume. More... | |
std::string const | fLogCategory |
Message facility stream category for output. More... | |
std::string | fLogEventDetails |
Steam where to print event info. More... | |
geo::GeometryCore const & | fGeom |
art::TFileDirectory | fOutputDir |
ROOT directory where all the plots are written. More... | |
std::pair < detinfo::timescales::optical_tick, detinfo::timescales::optical_tick > const | fBeamGateOpt |
Beam gate start and stop tick in optical detector scale. More... | |
std::pair < detinfo::timescales::simulation_time, detinfo::timescales::simulation_time > const | fBeamGateSim |
Beam gate start and stop time in simulation scale. More... | |
std::vector< PlotSandbox > | fThresholdPlots |
All plots, one set per ADC threshold. More... | |
std::unique_ptr< EventIDTree > | fIDTree |
Handler of ROOT tree output. More... | |
std::unique_ptr< PlotInfoTree > | fPlotTree |
Handler of ROOT tree output. More... | |
std::unique_ptr< EventInfoTree > | fEventTree |
Handler of ROOT tree output. More... | |
std::unique_ptr< ResponseTree > | fResponseTree |
Handler of ROOT tree output. More... | |
std::atomic< unsigned int > | nEvents { 0U } |
Count of seen events. More... | |
std::atomic< unsigned int > | nPlottedEvents { 0U } |
Count of plotted events. More... | |
Produces plots about trigger simulation and trigger efficiency.
icarus::trigger::TriggerEfficiencyPlotsBase
(e.g. SlidingWindowTriggerEfficiencyPlots
).This module produces sets of plots based on trigger primitives given in input.
The following documentation mainly deals with the most standard configuration and operations in ICARUS. This module and the ones upstream of it have quite some knobs that can be manipulated to test unorthodox configurations.
This simulation only trigger primitives derived from the optical detector via hardware (V1730B boards). The trigger simulation branches from the standard simulation of optical detector waveforms (icarus::SimPMTIcarus
module). From there, multiple steps are needed.
0
when the waveform is under threshold and 1
when it's above threshold, with the same time discretization as the PMT waveform. Each discriminated waveform spans the whole event readout time and therefore it may merge information from multiple readout waveforms (raw::OpDetWaveform
), but all from the same optical detector channel. This step can be performed with the module icarus::trigger::DiscriminatePMTwaveforms
.1
. This step can be performed with the module icarus::trigger::LVDSgates
.Trigger logic may be complex, being implemented in a FPGA. Many options are available, including:
icarus::trigger::SlidingWindowTrigger
.This module (icarus::trigger::TriggerEfficiencyPlots
) is designed for implementing a trigger logic based on coincidence of trigger primitives, and to plot trigger efficiency and related information based on a requirement of a minimum number of trigger primitives, in that enabling the simulation in the fashion of the first option above. More details on the steps performed by this module are documented later.
For the implementation of sliding window, different logic needs to be implemented, possibly keeping track of the location of each primitive, and different plots are needed as well. This module may provide a template for such implementation, but it hasn't been designed with enough flexibility to accommodate that directly.
See the documentation of icarus::trigger::TriggerEfficiencyPlotsBase.
In this documentation, the "discriminated waveforms" are sometimes called "trigger gates" and sometimes "trigger primitives". Although these concepts are, strictly, different, usually the difference does not affect the meaning and they end up being exchanged carelessly.
This section describes the trigger logic algorithm used in icarus::trigger::TriggerEfficiencyPlots
and its assumptions.
The algorithm treats all the trigger primitives equally, whether they originate from one or from two channels (or 10 or 30), and wherever their channels are in the detector. The trigger primitives are combined in a multi-level gate by adding them, so that the level of the resulting gate describes at any time matches how many trigger primitives are on at that time.
This multi-level gate is set in coincidence with the beam gate by multiplying the multi-level and the beam gates. The beam gate opens at a time configured in DetectorClocks
service provider (detinfo::DetectorClocks::BeamGateTime()
) and has a duration configured in this module (BeamGateDuration
).
At this point, the trigger gate is a multi-level gate suppressed everywhere except than during the beam gate. The algorithm handles multiple trigger definitions, or requirements. Each requirement is simply how many trigger primitives must be open at the same time for the trigger to fire. The values of these requirements are set in the configuration (MinimumPrimitives
). To determine whether a trigger with a given requirement, i.e. with a required minimum number of trigger primitives open at the same time, has fired, the gate is scanned to find the first tick where the level of the gate reaches or passes this minimum required number. If such tick exists, the trigger is considered to have fired, and at that time.
As a consequence, there are for each event as many different trigger responses as how many different requirements are configured in MinimumPrimitives
, times how many ADC thresholds are provided in input, configured in Thresholds
.
While there is a parameter describing the time resolution of the trigger (TriggerTimeResolution
), this is currently only used for aesthetic purposes to choose the binning of some plots: the resolution is not superimposed to the gates (yet).
This algorithm is currently implemented in detinfo::trigger::TriggerEfficiencyPlots::plotResponses()
.
Each event is assigned to a set of categories, and its information contributes to the plots of all those categories. The categories are defined in the PlotCategories
list (hard-coded).
This module uses the following data products as input:
std::vector<icarus::trigger::OpticalTriggerGateData_t>
(labels out of TriggerGatesTag
and Thresholds
): full sets of discriminated waveforms, each waveform possibly covering multiple optical channels, and their associations to optical waveforms. One set per threshold;raw::OpDetWaveform
(currently superfluous);std::vector<simb::MCTruth>
: generator information (from GeneratorTags
; multiple generators are allowed at the same time); it is used mostly to categorize the type of event (background, weak charged current, electron neutrino, etc.);std::vector<simb::MCParticle>
: particles propagating in the detector (from PropagatedParticles
); currently not used;std::vector<sim::SimEnergyDeposit>
: energy deposited in the active liquid argon volume (from EnergyDepositTags
); it is used to quantify the energy available to be detected in the event.The module produces a standard set of plots for each configured ADC threshold and for each event category. The plots are saved via art service TFileService
in a ROOT file and they are organized in nested ROOT directories under the module label directory which is assigned by art:
Thr###
(outer level) describes the ADC threshold on the discriminated waveforms: the threshold is ###
from the baseline;\<Category\>
(inner level) describes the category of events included in the plots (e.g. All
, NuCC
; see PlotCategories
).Each of the inner ROOT directories contains a full set of plots, whose name is the standard plot name followed by its event category and threshold (e.g. Eff_NuCC_Thr15
for the trigger efficiency plot on neutrino charged current events with 15 ADC counts as PMT threshold).
Each set of plots, defined in icarus::trigger::TriggerEfficiencyPlots::initializePlotSet()
(and, within, initializeEventPlots()
and initializeEfficiencyPerTriggerPlots()
), is contributed only by the events in the set category.
There are different "types" of plots. Some do not depend on triggering at all, like the deposited energy distribution. Others cross different trigger definitions, like the trigger efficiency as function of trigger requirement. Others still assume a single trigger definition: this is the case of trigger efficiency plots versus energy. Finally, there are plots that depend on a specific trigger definition and outcome: this is the case of all the plots including only triggering or non-triggering events.
A list of plots follows for each plot type. All the plots are always relative to a specific optical detector channel threshold (ADC) and a broad event category.
These plots are stored directly in a threshold/category folder:
EnergyInSpill
: total energy deposited in the detector during the time the beam gate is open. It is proportional to the amount of scintillation light in the event;EnergyInSpillActive
: energy deposited in the active volume of the detector during the time the beam gate is open; the active volume is defined as the union of all TPC drift voulmes;InteractionType
: code of the interaction type, as in sim::TruthInteractionTypeName
;NeutrinoEnergy
: generated energy of the interacting neutrino;LeptonEnergy
: generated energy of the lepton out of the first neutrino interaction;InteractionVertexYZ
: coordinates of the location of all interactions in the event, in world coordinates, projected on the anode plane.These plots collect information from scenarios with different trigger requirements, but still with the same underlying optical detector channel ADC threshold. They are also stored in the threshold/category folder:
Eff
: trigger efficiency defined as number of triggered events over the total number of events, as function of the minimum number of trigger primitives (MinimumPrimitives
) to define a firing trigger; uncertainties are managed by TEfficiency
.TriggerTick
: distribution of the time of the earliest trigger for the event, as function of the minimum number of trigger primitives (as in Eff
). It may happen that the event is such that there is e.g. a 20-primitive flash, then subsiding, and then another 30-primitive flash. In such a case, in the trigger requirement "≥ 15 primitives" such event will show at the time of the 20-primitive flash, while in the trigger requirement "≥ 25 primitives" it will show at the time of the 30-primitive flash. Each event appears at most once for each trigger requirement, and it may not appear at all if does not fire a trigger.NPrimitives
: the maximum number of primitives "on" at any time. The following plots depend on the full definition of the trigger, including PMT thresholds and other requirements. They are hosted each in a subfolder of the threshold/category folder, with a name encoding the requirement: ReqXX
for trigger with minimum required primitives XX
.
EffVsEnergyInSpill
: trigger efficiency as function of the total energy deposited during the beam gate;EffVsEnergyInSpillActive
: trigger efficiency as function of the energy deposited in the TPC active volumes during the beam gate;EffVsNeutrinoEnergy
, EffVsLeptonEnergy
: trigger efficiency as function of the true energy of the first interacting neutrino, and of the outgoing lepton in the final state of the interaction, respectively;TriggerTick
: time of the earliest trigger. Only triggering events contribute.The parameters are defined in the same way as in the selection plots, unless stated otherwise.
These plots depend on the trigger definition, as the ones in the previous type, and on the actual trigger response. They are hosted each in a subfolder of the threshold/category/requirement folder, with a name encoding the response: triggering
for triggering events, nontriggering
for the others.
Their event pool is filtered to include only the events in the current category which also pass, or do not pass, the trigger requirement.
The plots are:
EnergyInSpill
, EnergyInSpillActive
, InteractionType
, NeutrinoEnergy
,LeptonEnergy
, InteractionVertexYZ
: these are defined in the same way as the selection plotsA terse description of the parameters is printed by running lar --print-description TriggerEfficiencyPlots
.
TriggerGatesTag
(string, mandatory): name of the module instance which produced the trigger primitives to be used as input; it must not include any instance name, as the instance names will be automatically added from Thresholds
parameter. The typical trigger primitives used as input may be LVDS discriminated output (e.g. from icarus::trigger::LVDSgates
module) or combinations of them (e.g. from icarus::trigger::SlidingWindowTrigger
module).Thresholds
(list of integers, mandatory): list of the discrimination thresholds to consider, in ADC counts. A data product containing a digital signal is read for each one of the thresholds, and the tag of the data product is expected to be the module label TriggerGatesTag
with as instance name the value of the threshold (e.g. for a threshold of 60 ADC counts the data product tag might be LVDSgates:60
).GeneratorTags
(list of input tags, default: [ generator ]
): a list of data products containing the particles generated by event generators;DetectorParticleTag
(input tag, default: largeant
): data product containing the list of particles going through the argon in the detector;EnergyDepositTags
(list of input tags, default: [ "largeant:TPCActive" ]
): a list of data products with energy depositions;BeamGateDuration
(time, mandatory): the duration of the beam gate; the time requires the unit to be explicitly specified: use "1.6 us"
for BNB, 9.5 us
for NuMI (also available as BNB_settings.spill_duration
and NuMI_settings.spill_duration
in trigger_icarus.fcl
);MinimumPrimitives
(list of integers, mandatory): a list of alternative requirements for the definition of a trigger; each value is the number of trigger primitives needed to be "on" at the same time for the trigger to fire;TriggerTimeResolution
(time, default: 8 ns
): time resolution for the trigger primitives;EventTreeName
(optional string): if specified, a simple ROOT tree is created with the information from each event (see EventInfoTree
for its structure);EventDetailsLogCategory
(optional string): if specified, information for each single event is output into the specified stream category; if the string is specified empty, the default module stream is used, as determined by LogCategory
parameter;LogCategory
(string, default TriggerEfficiencyPlots
): name of category used to stream messages from this module into message facility.An example job configuration is provided as maketriggerplots_icarus.fcl
.
This module reads trigger gate data products from different ADC thresholds, and for each threahold it combines the data into a trigger response depending on a ADC threshold. It then applies different requirement levels and for each one it fills plots.
All the input sets (each with its own ADC treshold) are treated independently from each other.
We can separate the plots in two categories: the ones which depend on the trigger response, and the ones which do not. The latter include event-wide information like the total energy deposited in the detector by one event. They also include plots that depend on the ADC threshold, e.g. the largest number of trigger primitives available at any time during the event. Therefore there are more precisely three plot categories:
In addition, each event is assigned to event categories. These categories do not depend on trigger primitives. For example, a electron neutrino neutral current interaction event would be assigned to the neutral current neutrino interaction category, to the electron neutrino category, and so on. A set of plot is produced at once for each of the event categories.
This module is designed as follows:
analyze()
);extractEventInfo()
);selectedPlotCategories()
, with the categories efined in PlotCategories
global variable);combineTriggerPrimitives()
):applyBeamGate()
)plotResponses()
for plots, together with the list of all the categories the event belongs:Note that the plots depending on the response may require multiple fillings. For example, the trigger efficiency plot is a single plot in the plot set which requires a filling for every requirement level. In a similar fashion, the plot of trigger time requires one filling for each requirement level that is met.
Plots are written on disk via the standard art service TFileService
, which puts them in a ROOT subdirectory named as the instance of this module being run.
As described above, there are two "dimensions" for the plot sets: there is one plot set for each ADC threshold and for each event category, the total number of plot sets being the product of the options in the two dimensions.
The code is structured to work by threshold by threshold, because the trigger response depends on the threshold but not by the event category: the response is computed once per threshold, then all the plots related to that response (including all the event categories) are filled.
The structure in the file reflects this logic, and there are two levels of ROOT directories inside the one assigned by art to this module:
Thr###
(### being the ADC threshold), which is the "threshold tag";PlotCategory
object (PlotCategory::name()
); this defines the "category tag".In each inner directory, a complete set of plots is contained. The name of each plot is a base name for that plot (e.g. Eff
for the efficiency plot) with the event category tag and the threshold tag appended (separated by an underscore character, "_"
). The title of the plot is also modified to include the description of the plot category (as defined in PlotCategory::description()
) and the ADC threshold. Therefore, within the same module directory, all plot names are different.
When adding a plot, two actions are necessary:
The initialization happens in icarus::trigger::TriggerEfficiencyPlots::initializePlotSet()
method. A request must be issued to the plot sandbox to "make" the plot. In general it can be expected that all the arguments args
in a call plots.make<PlotType>(args)
are forwarded to the constructor of PlotType
, so that to make a new PlotType
object one has to consult only the constructor of that class. Be aware though that the library expects the first argument to be the ROOT name of the new object and the second to be its ROOT title. It is possible to work around this requirement with additional coding.
The method performing the plotting is plotResponses()
. The plots should be filled inside loops going through all plot sets. The existing code already does that in two loops, one for the plots depending on the trigger response requirement, and the other for the plots not depending on it.
For the sake of this module, a plot sandbox is an object similar to a ROOT TDirectory
, which can mangle the objects it contains to change ("process") their name and title, and that interacts properly with art::TFileDirectory
so make TFileService
happy. The processing of the name and title is used to add the category and threshold tags to the plot ROOT name and the corresponding annotations to the plot title, as described above.
Event categories are listed in PlotCategories
: each one is described by a simple object PlotCategory
which contains a name (used in ROOT directories, plot name tags and to univocally identify the category), a description (used in plot titles) and a condition for the event to fulfill in order to qualify for the category. The condition is a function object that accepts an EventInfo_t
object with the relevant event information, and returns its decision (true
if the event belongs to this category).
To add a category, it is enough to append an entry at the end of the PlotCategories
list, taking the existing ones as example.
The condition function adjudicates based on the information in EventInfo_t
. It is likely though that if a new category is needed, the information currently available in EventInfo_t
is not enough to decide the response. In that case, EventInfo_t
must be extended to hold the newly required information. In addition, the method extractEventInfo()
must be modified to set the new information. The documentation of that method expands on this topic.
The trigger logic is hard-coded in analyze()
, but it effectively has a follow up in the plotting code. In fact, in analyze()
the primitives are combined into a single object, but it is in plotResponses()
that this object is interpreted to decide whether the trigger fired according to a requirement.
To implement a radically different trigger logic, several components need to be coordinated:
Because of the design of this module, the first and the third elements are in different places (causing the necessity of the shared data structure that is the second element) and changing one typically imply changing the other.
This module simulates a trigger counting the number of primitives that are "on" and imposing a required minimum on that number for the trigger to fire. This is how this implementation includes those elements:
MinimumPrimitives
).An example of how a different trigger logic could be implemented following a similar model. Let's assume we want a trigger based on two sliding windows. A window is a group of LVDS signals from neighboring channels. We can split the whole optical detector channels into many windows, and we can make the windows overlap: for example, a window includes the first 30 channels behind one anode plane, the second window includes 30 channels starting from the fifteenth, the third window includes 30 channels starting from the thirtieth, and so on. In ICARUS, 30 channels are served in 16 LVDS discriminated waveforms, i.e. 16 trigger primitives. We may require as a loose trigger that any window contains at least 10 primitives on at the same time (that is about 20 PMT channels beyond ADC threshold), and as a tighter trigger that there is a window with at least 8 trigger primitives on, and the corresponding window in the opposite TPC has at least 6 primitives on at the same time. Note that a splitting 7/7 won't do: one of the two windows must have 8 or more primitives on. The input primitives from the point of view of the module now become the "sliding window" combination of the LVDS trigger primitives, as produced e.g. by icarus::trigger::SlidingWindowTrigger
module. How this can be implemented following the pattern of this module:
beginJob()
method we may also prepare the associations (pairing) between opposite windows or just channels;To avoid issues with missing or wrong conversions, this code often uses LArSoft quantities library. A variable with a Quantity
type is represented with a specific unit (e.g. microseconds) and can undergo only limited manipulation. The allowed manipulation should guarantee that the unit of the quantity is correctly preserved. For example, it is not possible to add to a microseconds
interval a pure number (e.g. 9.0
), but rather it is only possible to add time quantities (e.g. another microseconds
variable, or a nanoseconds
variable, or a literal value with unit, like 9.0_ns
), and those quantities are properly converted, with the caveat that rounding errors may happen that a more careful explicit handling could avoid. Also, there are two types of variables that can feature the same unit, intervals and points. A point can't be scaled (e.g. you can't "double" the time the beam gate opens, while you can double the beam gate duration) and it can't be added to another point (the difference between two points is an interval).
To avoid mistakes in the conversion between different time scales, the LArSoft utility library detinfo::DetectorTimings
is used, which is a wrapper of DetectorClocks
service provider that makes the interface to convert times easier and uniform. Here we use it to convert time points from the simulation (which are expressed in nanoseconds and are starting at trigger time) into optical detector readout ticks, and vice versa. The values returned by this library have encoded in them which time scale they belong to, and in which unit they are measured.
Definition at line 1217 of file TriggerEfficiencyPlots_module.cc.
|
private |
Definition at line 1219 of file TriggerEfficiencyPlots_module.cc.
|
private |
Definition at line 1220 of file TriggerEfficiencyPlots_module.cc.
using icarus::trigger::TriggerEfficiencyPlots::Parameters = art::EDAnalyzer::Table<Config> |
Definition at line 1299 of file TriggerEfficiencyPlots_module.cc.
Import type.
Definition at line 1336 of file TriggerEfficiencyPlots_module.cc.
|
private |
List of references to plot sandboxes.
Definition at line 1340 of file TriggerEfficiencyPlots_module.cc.
|
private |
Reconstituted trigger gate type internally used.
Definition at line 1330 of file TriggerEfficiencyPlots_module.cc.
|
private |
Type of gate data without channel information.
Definition at line 1334 of file TriggerEfficiencyPlots_module.cc.
|
explicit |
Definition at line 1508 of file TriggerEfficiencyPlots_module.cc.
|
delete |
|
delete |
|
overridevirtual |
Fills the plots. Also extracts the information to fill them with.
Gate representing the time we expect light from beam interactions.
Definition at line 1594 of file TriggerEfficiencyPlots_module.cc.
|
private |
Computes the trigger response from primitives with the given threshold
.
Definition at line 2181 of file TriggerEfficiencyPlots_module.cc.
|
staticprivate |
Returns a gate that is Max()
of all the specified gates
.
Definition at line 2221 of file TriggerEfficiencyPlots_module.cc.
|
overridevirtual |
Prints end-of-job summaries.
Definition at line 1697 of file TriggerEfficiencyPlots_module.cc.
|
private |
Extracts from event
the relevant information on the physics event.
This returns a EventInfo_t
object filled as completely as possible. The result is used in the context of assigning the `event` to categories.
This method can read any data product in the event, and has access to the module configuration. If information is needed from a data product that is not read yet, the following actions are needed:
Config
structure);TriggerEfficiencyPlots
object;consumes()
or equivalent calls, in TriggerEfficiencyPlots
constructor;For an example of this procedure, see how the configuration parameter DetectorParticleTag
is treated: read by Config::DetectorParticleTag
, stored in fDetectorParticleTag
, declared as "consumed" in TriggerEfficiencyPlots
constructor. Likewise a known list of data products can be used: see GeneratorTags
parameter, read by the sequence Config::GeneratorTags
, stored in the class field fGeneratorTags
, declared as "consumed" in a loop in TriggerEfficiencyPlots
constructor, and read in extractEventInfo()
to be used within it.
Definition at line 2047 of file TriggerEfficiencyPlots_module.cc.
|
private |
Initializes set of plots per complete trigger definition into plots
.
Definition at line 1887 of file TriggerEfficiencyPlots_module.cc.
|
private |
Initializes a single, trigger-independent plot set into plots
.
Definition at line 1943 of file TriggerEfficiencyPlots_module.cc.
|
private |
Initializes all the plot sets, one per threshold.
Definition at line 1708 of file TriggerEfficiencyPlots_module.cc.
|
private |
Initializes full set of plots for (ADC threshold + category) into plots
.
Definition at line 1743 of file TriggerEfficiencyPlots_module.cc.
|
delete |
|
delete |
|
private |
Adds all the responses
(one per threshold) to the plots.
Definition at line 2237 of file TriggerEfficiencyPlots_module.cc.
|
private |
Returns in which TPC point
is within the active volume of; nullptr
if none.
Definition at line 2172 of file TriggerEfficiencyPlots_module.cc.
|
private |
Returns the TPC point
is within, nullptr
if none.
Definition at line 2164 of file TriggerEfficiencyPlots_module.cc.
|
private |
Reads a set of input gates from the event
.
Definition at line 2440 of file TriggerEfficiencyPlots_module.cc.
|
private |
Returns the names of the plot categories event qualifies for.
Definition at line 2033 of file TriggerEfficiencyPlots_module.cc.
|
private |
Returns whether an event with the specified information should be included in the plots at all (it's a filter).
Definition at line 2018 of file TriggerEfficiencyPlots_module.cc.
|
inlinestaticprivate |
Definition at line 1488 of file TriggerEfficiencyPlots_module.cc.
|
inlinestaticprivate |
Definition at line 1491 of file TriggerEfficiencyPlots_module.cc.
|
private |
ADC thresholds to read, and the input tag connected to their data.
Definition at line 1351 of file TriggerEfficiencyPlots_module.cc.
|
private |
Duration of the gate during with global optical triggers are accepted.
Definition at line 1354 of file TriggerEfficiencyPlots_module.cc.
|
private |
Beam gate start and stop tick in optical detector scale.
Definition at line 1386 of file TriggerEfficiencyPlots_module.cc.
|
private |
Beam gate start and stop time in simulation scale.
Definition at line 1391 of file TriggerEfficiencyPlots_module.cc.
|
private |
Input simulated particles.
Definition at line 1346 of file TriggerEfficiencyPlots_module.cc.
|
private |
Energy deposition data product tags.
Definition at line 1348 of file TriggerEfficiencyPlots_module.cc.
|
private |
Handler of ROOT tree output.
Definition at line 1398 of file TriggerEfficiencyPlots_module.cc.
|
private |
Generator data product tags.
Definition at line 1345 of file TriggerEfficiencyPlots_module.cc.
|
private |
Definition at line 1373 of file TriggerEfficiencyPlots_module.cc.
|
private |
Handler of ROOT tree output.
Definition at line 1396 of file TriggerEfficiencyPlots_module.cc.
|
private |
Message facility stream category for output.
Definition at line 1364 of file TriggerEfficiencyPlots_module.cc.
|
private |
Steam where to print event info.
Definition at line 1366 of file TriggerEfficiencyPlots_module.cc.
|
private |
Minimum number of trigger primitives for a trigger to happen.
Definition at line 1357 of file TriggerEfficiencyPlots_module.cc.
|
private |
ROOT directory where all the plots are written.
Definition at line 1376 of file TriggerEfficiencyPlots_module.cc.
|
private |
Plot only events in active volume.
Definition at line 1361 of file TriggerEfficiencyPlots_module.cc.
|
private |
Handler of ROOT tree output.
Definition at line 1397 of file TriggerEfficiencyPlots_module.cc.
|
private |
Handler of ROOT tree output.
Definition at line 1399 of file TriggerEfficiencyPlots_module.cc.
|
private |
All plots, one set per ADC threshold.
Definition at line 1394 of file TriggerEfficiencyPlots_module.cc.
|
private |
Trigger resolution in time.
Definition at line 1359 of file TriggerEfficiencyPlots_module.cc.
|
private |
Count of seen events.
Definition at line 1401 of file TriggerEfficiencyPlots_module.cc.
|
private |
Count of plotted events.
Definition at line 1402 of file TriggerEfficiencyPlots_module.cc.