LDMX Software
tracking::dqm::RawSiStripDQM Class Reference

DQM for silicon strip data read from the DAQ: raw hits, pedestal subtracted hits, the waveforms assembled from them and their pulse fits. More...

#include <RawSiStripDQM.h>

Public Member Functions

 RawSiStripDQM (const std::string &name, framework::Process &process)
 
void configure (framework::config::Parameters &parameters) override
 Callback for the EventProcessor to configure itself from the given set of parameters.
 
void analyze (const framework::Event &event) override
 Process the event and make histograms or summaries.
 
- Public Member Functions inherited from framework::Analyzer
 Analyzer (const std::string &name, Process &process)
 Class constructor.
 
virtual void process (Event &event) final
 Processing an event for an Analyzer is calling analyze.
 
virtual void beforeNewRun (ldmx::RunHeader &run_header) final
 Don't allow Analyzers to add parameters to the run header.
 
- Public Member Functions inherited from framework::EventProcessor
 DECLARE_FACTORY (EventProcessor, EventProcessor *, const std::string &, Process &)
 declare that we have a factory for this class
 
 EventProcessor (const std::string &name, Process &process)
 Class constructor.
 
virtual ~EventProcessor ()=default
 Class destructor.
 
virtual void onNewRun (const ldmx::RunHeader &run_header)
 Callback for the EventProcessor to take any necessary action when the run being processed changes.
 
virtual void onFileOpen (EventFile &event_file)
 Callback for the EventProcessor to take any necessary action when a new event input ROOT file is opened.
 
virtual void onFileClose (EventFile &event_file)
 Callback for the EventProcessor to take any necessary action when a event input ROOT file is closed.
 
virtual void onProcessStart ()
 Callback for the EventProcessor to take any necessary action when the processing of events starts, such as creating histograms.
 
virtual void onProcessEnd ()
 Callback for the EventProcessor to take any necessary action when the processing of events finishes, such as calculating job-summary quantities.
 
template<class T >
const T & getCondition (const std::string &condition_name)
 Access a conditions object for the current event.
 
TDirectory * getHistoDirectory ()
 Access/create a directory in the histogram file for this event processor to create histograms and analysis tuples.
 
void setStorageHint (framework::StorageControl::Hint hint)
 Mark the current event as having the given storage control hint from this module_.
 
void setStorageHint (framework::StorageControl::Hint hint, const std::string &purposeString)
 Mark the current event as having the given storage control hint from this module and the given purpose string.
 
int getLogFrequency () const
 Get the current logging frequency from the process.
 
int getRunNumber () const
 Get the run number from the process.
 
std::string getName () const
 Get the processor name.
 
void createHistograms (const std::vector< framework::config::Parameters > &histos)
 Internal function which is used to create histograms passed from the python configuration @parma histos vector of Parameters that configure histograms to create.
 

Private Member Functions

std::vector< TH1 * > getHists (const std::vector< std::string > &names)
 histograms by name, looked up once per event
 

Private Attributes

std::string raw_hits_collection_
 
std::string subtracted_hits_collection_
 
std::string waveforms_collection_
 
std::string fitted_hits_collection_
 
std::string input_pass_name_
 
int n_hybrids_ {0}
 
std::vector< std::string > raw_adc_names_
 per-hybrid histogram names, built once
 
std::vector< std::string > subtracted_adc_names_
 
std::vector< std::string > pchannel_names_
 
std::vector< std::string > peak_names_
 
std::map< int, std::string > fit_amplitude_names_
 fit amplitude histogram name by layer id
 

Additional Inherited Members

- Protected Member Functions inherited from framework::EventProcessor
void abortEvent ()
 Abort the event immediately.
 
- Protected Attributes inherited from framework::EventProcessor
HistogramPool histograms_
 helper object for making and filling histograms
 
NtupleManagerntuple_ {NtupleManager::getInstance()}
 Manager for any ntuples.
 
logging::logger the_log_
 The logger for this EventProcessor.
 

Detailed Description

DQM for silicon strip data read from the DAQ: raw hits, pedestal subtracted hits, the waveforms assembled from them and their pulse fits.

Definition at line 17 of file RawSiStripDQM.h.

Constructor & Destructor Documentation

◆ RawSiStripDQM()

tracking::dqm::RawSiStripDQM::RawSiStripDQM ( const std::string & name,
framework::Process & process )
inline

Definition at line 19 of file RawSiStripDQM.h.

20 : framework::Analyzer(name, process) {};
Base class for a module which does not produce a data product.
virtual void process(Event &event) final
Processing an event for an Analyzer is calling analyze.

Member Function Documentation

◆ analyze()

void tracking::dqm::RawSiStripDQM::analyze ( const framework::Event & event)
overridevirtual

Process the event and make histograms or summaries.

Parameters
eventThe Event to analyze

Implements framework::Analyzer.

Definition at line 39 of file RawSiStripDQM.cxx.

39 {
40 // direct fills, ~1e5 samples per event
41 if (event.exists(raw_hits_collection_, input_pass_name_)) {
42 const auto& hits{event.getCollection<ldmx::RawSiStripHit>(
43 raw_hits_collection_, input_pass_name_)};
44 histograms_.fill("n_raw_hits", hits.size());
45 auto* read_error{histograms_.get("raw_read_error")};
46 const auto raw_adc{getHists(raw_adc_names_)};
47 for (const auto& hit : hits) {
48 read_error->Fill(hit.getReadError());
49 if (hit.getHybridId() >= n_hybrids_) continue;
50 for (short adc : hit.getSamples()) {
51 raw_adc[hit.getHybridId()]->Fill(adc);
52 }
53 }
54 }
55
56 if (event.exists(subtracted_hits_collection_, input_pass_name_)) {
57 const auto& hits{event.getCollection<ldmx::RawSiStripHit>(
58 subtracted_hits_collection_, input_pass_name_)};
59 const auto subtracted_adc{getHists(subtracted_adc_names_)};
60 for (const auto& hit : hits) {
61 if (hit.getHybridId() >= n_hybrids_) continue;
62 for (short adc : hit.getSamples()) {
63 subtracted_adc[hit.getHybridId()]->Fill(adc);
64 }
65 }
66 }
67
68 if (event.exists(waveforms_collection_, input_pass_name_)) {
69 const auto& waveforms{event.getCollection<ldmx::SiStripWaveform>(
70 waveforms_collection_, input_pass_name_)};
71 histograms_.fill("n_waveforms", waveforms.size());
72 for (const auto& waveform : waveforms) {
73 histograms_.fill("waveform_n_triggers", waveform.getNTriggers());
74 histograms_.fill("waveform_peak_trigger", waveform.peakTrigger());
75 if (waveform.getHybridId() >= n_hybrids_) continue;
76 histograms_.fill(pchannel_names_[waveform.getHybridId()],
77 waveform.getPchannel());
78 histograms_.fill(peak_names_[waveform.getHybridId()],
79 waveform.peakAmplitude());
80 }
81 }
82
83 // fit results live in their own collection, converged fits only
84 if (!event.exists(fitted_hits_collection_, input_pass_name_)) return;
85 const auto& fitted_hits{event.getCollection<ldmx::FittedSiStripHit>(
86 fitted_hits_collection_, input_pass_name_)};
87 histograms_.fill("n_fitted_hits", fitted_hits.size());
88 for (const auto& hit : fitted_hits) {
89 histograms_.fill("fit_t0", hit.getT0());
90 if (hit.getNDF() > 0) {
91 histograms_.fill("fit_chi2_ndf", hit.getReducedChi2());
92 }
93 auto name{fit_amplitude_names_.find(hit.getLayerID())};
94 if (name != fit_amplitude_names_.end()) {
95 histograms_.fill(name->second, hit.getAmplitude());
96 }
97 }
98}
HistogramPool histograms_
helper object for making and filling histograms
bool exists(const std::string &name, const std::string &passName, bool unique=true) const
Check for the existence of an object or collection with the given name and pass name in the event.
Definition Event.cxx:105
void fill(const std::string &name, const T &val)
Fill a 1D histogram.
TH1 * get(const std::string &name)
get a histogram from this pool by name
Result of fitting a pulse shape to the ADC samples of a single readout strip.
Implementation of a raw digitized hit from a silicon strip detector.
Full multi-trigger waveform for one silicon strip channel.
std::map< int, std::string > fit_amplitude_names_
fit amplitude histogram name by layer id
std::vector< TH1 * > getHists(const std::vector< std::string > &names)
histograms by name, looked up once per event
std::vector< std::string > raw_adc_names_
per-hybrid histogram names, built once

References framework::Event::exists(), framework::HistogramPool::fill(), fit_amplitude_names_, framework::HistogramPool::get(), getHists(), framework::EventProcessor::histograms_, and raw_adc_names_.

◆ configure()

void tracking::dqm::RawSiStripDQM::configure ( framework::config::Parameters & parameters)
overridevirtual

Callback for the EventProcessor to configure itself from the given set of parameters.

The parameters a processor has access to are the member variables of the python class in the sequence that has class_name equal to the EventProcessor class name.

For an example, look at MyProcessor.

Parameters
parametersParameters for configuration.

Reimplemented from framework::EventProcessor.

Definition at line 9 of file RawSiStripDQM.cxx.

9 {
10 raw_hits_collection_ = parameters.get<std::string>("raw_hits_collection");
11 subtracted_hits_collection_ =
12 parameters.get<std::string>("subtracted_hits_collection");
13 waveforms_collection_ = parameters.get<std::string>("waveforms_collection");
14 fitted_hits_collection_ =
15 parameters.get<std::string>("fitted_hits_collection");
16 input_pass_name_ = parameters.get<std::string>("input_pass_name");
17 n_hybrids_ = parameters.get<int>("n_hybrids");
18 const auto layer_ids{parameters.get<std::vector<int>>("layer_ids")};
19
20 for (int h{0}; h < n_hybrids_; ++h) {
21 const std::string suffix{"_h" + std::to_string(h)};
22 raw_adc_names_.push_back("raw_adc" + suffix);
23 subtracted_adc_names_.push_back("subtracted_adc" + suffix);
24 pchannel_names_.push_back("waveform_pchannel" + suffix);
25 peak_names_.push_back("waveform_peak" + suffix);
26 }
27 for (int layer : layer_ids) {
28 fit_amplitude_names_[layer] = "fit_amplitude_l" + std::to_string(layer);
29 }
30}
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Definition Parameters.h:78

References fit_amplitude_names_, framework::config::Parameters::get(), and raw_adc_names_.

◆ getHists()

std::vector< TH1 * > tracking::dqm::RawSiStripDQM::getHists ( const std::vector< std::string > & names)
private

histograms by name, looked up once per event

Definition at line 32 of file RawSiStripDQM.cxx.

33 {
34 std::vector<TH1*> hists;
35 for (const auto& name : names) hists.push_back(histograms_.get(name));
36 return hists;
37}

References framework::HistogramPool::get(), and framework::EventProcessor::histograms_.

Referenced by analyze().

Member Data Documentation

◆ fit_amplitude_names_

std::map<int, std::string> tracking::dqm::RawSiStripDQM::fit_amplitude_names_
private

fit amplitude histogram name by layer id

Definition at line 45 of file RawSiStripDQM.h.

Referenced by analyze(), and configure().

◆ fitted_hits_collection_

std::string tracking::dqm::RawSiStripDQM::fitted_hits_collection_
private

Definition at line 35 of file RawSiStripDQM.h.

◆ input_pass_name_

std::string tracking::dqm::RawSiStripDQM::input_pass_name_
private

Definition at line 36 of file RawSiStripDQM.h.

◆ n_hybrids_

int tracking::dqm::RawSiStripDQM::n_hybrids_ {0}
private

Definition at line 37 of file RawSiStripDQM.h.

37{0};

◆ pchannel_names_

std::vector<std::string> tracking::dqm::RawSiStripDQM::pchannel_names_
private

Definition at line 42 of file RawSiStripDQM.h.

◆ peak_names_

std::vector<std::string> tracking::dqm::RawSiStripDQM::peak_names_
private

Definition at line 43 of file RawSiStripDQM.h.

◆ raw_adc_names_

std::vector<std::string> tracking::dqm::RawSiStripDQM::raw_adc_names_
private

per-hybrid histogram names, built once

Definition at line 40 of file RawSiStripDQM.h.

Referenced by analyze(), and configure().

◆ raw_hits_collection_

std::string tracking::dqm::RawSiStripDQM::raw_hits_collection_
private

Definition at line 32 of file RawSiStripDQM.h.

◆ subtracted_adc_names_

std::vector<std::string> tracking::dqm::RawSiStripDQM::subtracted_adc_names_
private

Definition at line 41 of file RawSiStripDQM.h.

◆ subtracted_hits_collection_

std::string tracking::dqm::RawSiStripDQM::subtracted_hits_collection_
private

Definition at line 33 of file RawSiStripDQM.h.

◆ waveforms_collection_

std::string tracking::dqm::RawSiStripDQM::waveforms_collection_
private

Definition at line 34 of file RawSiStripDQM.h.


The documentation for this class was generated from the following files: