DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::sspmodules::SSPLEDCalibWrapper Class Reference

#include <SSPLEDCalibWrapper.hpp>

Collaboration diagram for dunedaq::sspmodules::SSPLEDCalibWrapper:
[legend]

Public Types

using data_t = nlohmann::json

Public Member Functions

 SSPLEDCalibWrapper ()
 SSPLEDCalibWrapper Constructor.
 ~SSPLEDCalibWrapper ()
 SSPLEDCalibWrapper (const SSPLEDCalibWrapper &)=delete
 SSPLEDCalibWrapper is not copy-constructible.
SSPLEDCalibWrapper & operator= (const SSPLEDCalibWrapper &)=delete
 SSPLEDCalibWrapper is not copy-assignable.
 SSPLEDCalibWrapper (SSPLEDCalibWrapper &&)=delete
 SSPLEDCalibWrapper is not move-constructible.
SSPLEDCalibWrapper & operator= (SSPLEDCalibWrapper &&)=delete
 SSPLEDCalibWrapper is not move-assignable.
void init (const appmodel::SSPLEDCalibModule *mcfg)
void conf (const appmodel::SSPLEDCalibModule *mcfg)
void start (const data_t &args)
void stop (const data_t &args)

Private Member Functions

void validate_config (const data_t &args)
void configure_single_pulse ()
void configure_burst_mode ()
void manual_configure_device (const std::vector< const appmodel::SSPRegister * > &hw_conf)

Private Attributes

dunedaq::sspmodules::DeviceInterface * m_device_interface
std::atomic< bool > m_run_marker
std::atomic< bool > m_configure
unsigned int m_board_id { 0 }
unsigned long m_board_ip
unsigned int m_partition_number { 0 }
unsigned int m_timing_address { 0 }
unsigned long m_module_id
bool m_burst_mode = false
bool m_double_pulse = false
bool m_single_pulse = false
unsigned int m_number_channels { 12 }
unsigned int m_channel_mask { 4095 }
unsigned int m_burst_count { 1 }
unsigned int m_double_pulse_delay_ticks { 0 }
unsigned int m_pulse1_width_ticks { 0 }
unsigned int m_pulse2_width_ticks { 0 }
unsigned int m_pulse_bias_percent_270nm { 0 }
unsigned int m_pulse_bias_percent_367nm { 0 }
std::string m_instance_name_for_metrics

Detailed Description

Definition at line 26 of file SSPLEDCalibWrapper.hpp.

Member Typedef Documentation

◆ data_t

Definition at line 40 of file SSPLEDCalibWrapper.hpp.

Constructor & Destructor Documentation

◆ SSPLEDCalibWrapper() [1/3]

dunedaq::sspmodules::SSPLEDCalibWrapper::SSPLEDCalibWrapper ( )

SSPLEDCalibWrapper Constructor.

Parameters
nameInstance name for this CardWrapper instance

Definition at line 29 of file SSPLEDCalibWrapper.cpp.

31 , m_run_marker{ false }
32{
33}
dunedaq::sspmodules::DeviceInterface * m_device_interface

◆ ~SSPLEDCalibWrapper()

dunedaq::sspmodules::SSPLEDCalibWrapper::~SSPLEDCalibWrapper ( )

Definition at line 35 of file SSPLEDCalibWrapper.cpp.

35{}

◆ SSPLEDCalibWrapper() [2/3]

dunedaq::sspmodules::SSPLEDCalibWrapper::SSPLEDCalibWrapper ( const SSPLEDCalibWrapper & )
delete

SSPLEDCalibWrapper is not copy-constructible.

◆ SSPLEDCalibWrapper() [3/3]

dunedaq::sspmodules::SSPLEDCalibWrapper::SSPLEDCalibWrapper ( SSPLEDCalibWrapper && )
delete

SSPLEDCalibWrapper is not move-constructible.

Member Function Documentation

◆ conf()

void dunedaq::sspmodules::SSPLEDCalibWrapper::conf ( const appmodel::SSPLEDCalibModule * mcfg)

Definition at line 81 of file SSPLEDCalibWrapper.cpp.

82{
83 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::conf called." << std::endl;
84
85 try {
87 conf); // This sets up the ethernet interface and make sure that the pdts is synched
89 // m_device_interface->SetRegisterByName("eventDataInterfaceSelect", m_cfg.interface_type);
90 } catch (const std::exception& e) {
91 throw FailedLEDCalibrationConf(ERS_HERE, e);
92 }
93
94 if (conf->get_pulse_mode() == "single") {
95 m_single_pulse = true;
96 TLOG(TLVL_FULL_DEBUG) << "SSPLEDCalibWrapper: I think that you want SSP LED Calib module to be in single pulse..."
97 << std::endl;
98 } else if (conf->get_pulse_mode() == "burst") {
99 m_burst_mode = true;
100 TLOG(TLVL_FULL_DEBUG) << "SSPLEDCalibWrapper: I think that you want SSP LED Calib module to be in BURST MODE..."
101 << std::endl;
102 }
103
104 if ((m_single_pulse && m_burst_mode)) {
105 std::stringstream ss;
106 ss << "ERROR: SOMEHOW ENDED UP WITH SEVERAL PULSE MODES SET ON!!!!" << std::endl;
107 TLOG() << ss.str();
108 throw ConfigurationError(ERS_HERE, ss.str());
109 }
110
111 if (m_burst_mode) {
112 TLOG(TLVL_FULL_DEBUG) << "SSPLEDCalibWrapper: Configuring for BURST MODE..." << std::endl;
113 this->configure_burst_mode();
114 } else if (m_single_pulse) {
115 TLOG(TLVL_FULL_DEBUG) << "SSPLEDCalibWrapper: Configuring for single pulse mode..." << std::endl;
117 } else {
118 std::stringstream ss;
119 ss << "ERROR: SOMEHOW ENDED UP WITH NO PULSE MODES SET ON!!!!" << std::endl;
120 TLOG() << ss.str();
121 throw ConfigurationError(ERS_HERE, ss.str());
122 }
123
124 // if there are "literal" entries in the configuration they are explicit writes to the specified register with given
125 // value these literal entries are paresed and applied last after any other parameters so this method call needs to be
126 // after the other configuration calls
127 this->manual_configure_device(conf->get_hardware_configuration());
128
129 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::conf complete.";
130}
@ TLVL_FULL_DEBUG
#define ERS_HERE
void SetRegisterByName(std::string name, unsigned int value)
void ConfigureLEDCalib(const appmodel::SSPLEDCalibModule *conf)
void manual_configure_device(const std::vector< const appmodel::SSPRegister * > &hw_conf)
void conf(const appmodel::SSPLEDCalibModule *mcfg)
#define TLVL_ENTER_EXIT_METHODS
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:116
#define TLOG(...)
Definition macro.hpp:21

◆ configure_burst_mode()

void dunedaq::sspmodules::SSPLEDCalibWrapper::configure_burst_mode ( )
private

Definition at line 266 of file SSPLEDCalibWrapper.cpp.

267{
268 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::ConfigureBurstMode called.";
269
270 m_device_interface->SetRegister(0x80000464, 0x000002E7); // pdts_cmd_control_1
271 m_device_interface->SetRegister(0x80000940, 0x00030036); // pdts_cmd_delay_0
272 m_device_interface->SetRegister(0x80000944, 0x00030036); // pdts_cmd_delay_1
273 m_device_interface->SetRegister(0x80000948, 0x00030036); // pdts_cmd_delay_2
274 m_device_interface->SetRegister(0x8000094C, 0x00030036); // pdts_cmd_delay_3
275 m_device_interface->SetRegister(0x80000950, 0x00030036); // pdts_cmd_delay_4
276 m_device_interface->SetRegister(0x80000954, 0x00030036); // pdts_cmd_delay_5
277 m_device_interface->SetRegister(0x80000958, 0x00030036); // pdts_cmd_delay_6
278 m_device_interface->SetRegister(0x8000095C, 0x00030036); // pdts_cmd_delay_7
279 m_device_interface->SetRegister(0x80000960, 0x00030036); // pdts_cmd_delay_8
280 m_device_interface->SetRegister(0x80000964, 0x00030036); // pdts_cmd_delay_9
281 m_device_interface->SetRegister(0x80000968, 0x00030036); // pdts_cmd_delay_10
282 m_device_interface->SetRegister(0x8000096C, 0x00030036); // pdts_cmd_delay_11
283 m_device_interface->SetRegister(0x80000970, 0x00030036); // pdts_cmd_delay_12
284 m_device_interface->SetRegister(0x80000974, 0x00030036); // pdts_cmd_delay_13
285 m_device_interface->SetRegister(0x80000978, 0x00030036); // pdts_cmd_delay_14
286 m_device_interface->SetRegister(0x8000097C, 0x00030036); // pdts_cmd_delay_15
287 m_device_interface->SetRegister(0x80000468, 0x80000000); // pdts_cmd_control_2
288 m_device_interface->SetRegister(0x80000520, 0x00000011); // pulser_mode_control
289 m_device_interface->SetRegister(0x80000448, m_burst_count); // cal_count
290
291 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::ConfigureBurstMode completed.";
292}
void SetRegister(unsigned int address, unsigned int value, unsigned int mask=0xFFFFFFFF)

◆ configure_single_pulse()

void dunedaq::sspmodules::SSPLEDCalibWrapper::configure_single_pulse ( )
private

Definition at line 237 of file SSPLEDCalibWrapper.cpp.

238{
239 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::ConfigureSinglePulse called.";
240
241 m_device_interface->SetRegister(0x80000464, 0x000002E7); // pdts_cmd_control_1
242 m_device_interface->SetRegister(0x80000940, 0x00030036); // pdts_cmd_delay_0
243 m_device_interface->SetRegister(0x80000944, 0x00030036); // pdts_cmd_delay_1
244 m_device_interface->SetRegister(0x80000948, 0x00030036); // pdts_cmd_delay_2
245 m_device_interface->SetRegister(0x8000094C, 0x00030036); // pdts_cmd_delay_3
246 m_device_interface->SetRegister(0x80000950, 0x00030036); // pdts_cmd_delay_4
247 m_device_interface->SetRegister(0x80000954, 0x00030036); // pdts_cmd_delay_5
248 m_device_interface->SetRegister(0x80000958, 0x00030036); // pdts_cmd_delay_6
249 m_device_interface->SetRegister(0x8000095C, 0x00030036); // pdts_cmd_delay_7
250 m_device_interface->SetRegister(0x80000960, 0x00030036); // pdts_cmd_delay_8
251 m_device_interface->SetRegister(0x80000964, 0x00030036); // pdts_cmd_delay_9
252 m_device_interface->SetRegister(0x80000968, 0x00030036); // pdts_cmd_delay_10
253 m_device_interface->SetRegister(0x8000096C, 0x00030036); // pdts_cmd_delay_11
254 m_device_interface->SetRegister(0x80000970, 0x00030036); // pdts_cmd_delay_12
255 m_device_interface->SetRegister(0x80000974, 0x00030036); // pdts_cmd_delay_13
256 m_device_interface->SetRegister(0x80000978, 0x00030036); // pdts_cmd_delay_14
257 m_device_interface->SetRegister(0x8000097C, 0x00030036); // pdts_cmd_delay_15
258 m_device_interface->SetRegister(0x80000468, 0x80000000); // pdts_cmd_control_2
259 m_device_interface->SetRegister(0x80000520, 0x00000011); // pulser_mode_control
260 m_device_interface->SetRegister(0x80000448, 0x00000001); // cal_count
261
262 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::ConfigureSinglePulse completed.";
263}

◆ init()

void dunedaq::sspmodules::SSPLEDCalibWrapper::init ( const appmodel::SSPLEDCalibModule * mcfg)

Definition at line 38 of file SSPLEDCalibWrapper.cpp.

39{
40 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::init called." << std::endl;
41
42 m_number_channels = conf->get_number_channels();
43 m_channel_mask = conf->get_channel_mask();
44 m_burst_count = conf->get_burst_count();
45 m_double_pulse_delay_ticks = conf->get_double_pulse_delay_ticks();
46 m_pulse1_width_ticks = conf->get_pulse1_width_ticks();
47 m_pulse2_width_ticks = conf->get_pulse2_width_ticks();
48 m_pulse_bias_percent_270nm = conf->get_pulse_bias_percent_270nm();
49 m_pulse_bias_percent_367nm = conf->get_pulse_bias_percent_367nm();
50
51 m_board_id = conf->get_board_id();
52 m_module_id = conf->get_module_id();
53 m_instance_name_for_metrics = "SSP LED Calib " + std::to_string(m_board_id);
54 m_partition_number = conf->get_partition_number(); // this should be 0-3
55
56 m_timing_address = conf->get_timing_address(); // 0x20 is default for 101, 0x2B for 304, and 0x36 for 603
57 if (m_timing_address > 0xff) {
58 std::stringstream ss;
59 ss << "Error: Incorrect timing address set (" << m_timing_address << ")!" << std::endl;
60 TLOG() << ss.str();
61 throw ConfigurationError(ERS_HERE, ss.str());
62 }
63
64 TLOG_DEBUG(TLVL_WORK_STEPS) << "Board ID is listed as: " << m_board_id << std::endl
65 << "Partition Number is: " << m_partition_number << std::endl
66 << "Timing Address is: " << m_timing_address << std::endl
67 << "Module ID is: " << m_module_id << std::endl;
68
69 try {
70 m_device_interface = new dunedaq::sspmodules::DeviceInterface();
73 } catch (const std::exception& e) {
74 throw FailedLEDCalibrationInit(ERS_HERE, e);
75 }
76
77 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::init complete.";
78}

◆ manual_configure_device()

void dunedaq::sspmodules::SSPLEDCalibWrapper::manual_configure_device ( const std::vector< const appmodel::SSPRegister * > & hw_conf)
private

Definition at line 295 of file SSPLEDCalibWrapper.cpp.

296{
297 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::ConfigureDevice called.";
298 TLOG(TLVL_FULL_DEBUG) << "SSPLEDCalibWrapper: Processing the Hardware Configuration list..." << std::endl;
299 for (auto regValuesIter : hw_conf) {
300 std::string m_name = regValuesIter->get_name();
301 unsigned int regAddr = regValuesIter->get_address();
302 unsigned int regVal = regValuesIter->get_value();
303 unsigned int regMask = regValuesIter->get_mask();
304 m_device_interface->SetRegister(regAddr, regVal, regMask);
305 }
306 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::ConfigureDevice complete.";
307} // NOLINT(readability/fn_size)

◆ operator=() [1/2]

SSPLEDCalibWrapper & dunedaq::sspmodules::SSPLEDCalibWrapper::operator= ( const SSPLEDCalibWrapper & )
delete

SSPLEDCalibWrapper is not copy-assignable.

◆ operator=() [2/2]

SSPLEDCalibWrapper & dunedaq::sspmodules::SSPLEDCalibWrapper::operator= ( SSPLEDCalibWrapper && )
delete

SSPLEDCalibWrapper is not move-assignable.

◆ start()

void dunedaq::sspmodules::SSPLEDCalibWrapper::start ( const data_t & args)

Definition at line 133 of file SSPLEDCalibWrapper.cpp.

134{
135 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "Start pulsing SSPLEDCalibWrapper of card " << m_board_id << "...";
136
137 if (m_run_marker.load()) {
138 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "Run Marker says that SSPLEDCalibWrapper card " << m_board_id
139 << " is already pulsing...";
140 return;
141 }
142
143 unsigned int base_bias_regAddress = 0x40000340;
144 unsigned int base_timing_regAddress = 0x800003C0;
145
146 if (m_number_channels == 5) {
147 base_bias_regAddress = 0x4000035C;
148 base_timing_regAddress = 0x800003DC;
149 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "Configuring board with 5 channels...";
150 } else if (m_number_channels == 12) {
151 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "Configuring board with 12 channels...";
152 } else {
153 std::stringstream ss;
154 ss << "ERROR: SOMEHOW ENDED UP WITHOUT NUMBER OF CHANNELS SET!!!!" << std::endl;
155 TLOG() << ss.str();
156 throw ConfigurationError(ERS_HERE, ss.str());
157 }
158
159 unsigned int pulse_bias_setting_270nm = (m_pulse_bias_percent_270nm);
160 unsigned int pulse_bias_setting_367nm = (m_pulse_bias_percent_367nm / 2);
161
162 for (unsigned int counter = 0; counter < m_number_channels; counter++) {
163 unsigned int bias_regAddress = base_bias_regAddress + 0x4 * (counter); // 0x40000340 - 0x4000036C
164 unsigned int bias_regVal = 0x00040000;
165 unsigned int timing_regAddress = base_timing_regAddress + 0x4 * (counter); // 0x80003C0 - 0x800003EC
166 unsigned int timing_regVal = 0x0; // the highest byte sets 8 (pdts trigger) + 1 (953.5 Hz) for burst mode, but 8
167 // (pdts trigger) + 7 (single shot) for single
168 if (m_single_pulse) {
169 timing_regVal = 0xF0000000;
170 } else if (m_burst_mode) {
171 timing_regVal = 0x90000000;
172 }
173
174 TLOG(TLVL_FULL_DEBUG) << "Channel map is 0x" << std::hex << m_channel_mask << " and the comparison is 0x"
175 << (1 << counter) << std::endl;
176 if ((m_channel_mask & ((unsigned int)1 << counter)) == ((unsigned int)1 << counter)) {
177 if (counter < 6) {
178 bias_regVal = bias_regVal + pulse_bias_setting_270nm;
179 } else {
180 bias_regVal = bias_regVal + pulse_bias_setting_367nm;
181 }
182 timing_regVal = timing_regVal + m_pulse1_width_ticks;
183 timing_regVal = timing_regVal + (m_pulse2_width_ticks << 8);
184 timing_regVal = timing_regVal + (m_double_pulse_delay_ticks << 16);
185 TLOG(TLVL_FULL_DEBUG) << "Will turn on " << std::dec << counter << " channel at bias register 0x" << std::hex
186 << bias_regAddress << " with bias value 0x" << bias_regVal << std::endl;
187 TLOG(TLVL_FULL_DEBUG) << " and set the width regsiter 0x" << std::hex << timing_regAddress << " to value of 0x"
188 << timing_regVal << std::dec << std::endl;
189 m_device_interface->SetRegister(bias_regAddress, bias_regVal); // BIAS_DAC_CONFIG_N
190 if ((counter == 7) && !((m_channel_mask & ((unsigned int)1 << counter)) == ((unsigned int)1 << (counter - 1)))) {
191 // this is a really convoluted situation where for the very specific 12 channel board that arrived at CERN in
192 // June 2022 the bias for channel 7 was not working and so the bias is taken from channel 6 which means that if
193 // channel 7 is to be turned on while channel 6 is masked off you still have to bias channel 6 in order for the
194 // led on channel 7 to emmit light
195 m_device_interface->SetRegister((bias_regAddress - 0x4), bias_regVal); // BIAS_DAC_CONFIG_N
196 }
197
198 m_device_interface->SetRegister(timing_regAddress, timing_regVal); // cal_CONFIG_N
199 } else {
200 TLOG(TLVL_FULL_DEBUG) << "Will turn off channel " << std::dec << counter << " at timing register 0x" << std::hex
201 << timing_regAddress << std::dec << std::endl;
202 m_device_interface->SetRegister(bias_regAddress, 0x0); // BIAS_DAC_CONFIG_N
203 m_device_interface->SetRegister(timing_regAddress, 0x0); // cal_CONFIG_N
204 }
205 }
206
207 m_device_interface->SetRegister(0x40000300, 0x1); // writing 0x1 to this register applies the bias voltage settings
208
209 m_run_marker = true;
210 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "Start pulsing SSPLEDCalibWrapper of card " << m_board_id << " complete.";
211}

◆ stop()

void dunedaq::sspmodules::SSPLEDCalibWrapper::stop ( const data_t & args)

Definition at line 214 of file SSPLEDCalibWrapper.cpp.

215{
216
217 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "Stop pulsing SSPLEDCalibWrapper of card " << m_board_id << "...";
218 if (!m_run_marker.load()) {
219 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "The run_marker says that SSPLEDCalibWrapper card " << m_board_id
220 << " is already stopped, but stopping anyways...";
221 }
222
223 for (unsigned int counter = 0; counter < 12; counter++) { // switch this to 12 for a 12 channel SSP
224 unsigned int bias_regAddress = 0x40000340 + 0x4 * (counter);
225 unsigned int timing_regAddress = 0x800003c0 + 0x4 * (counter);
226 m_device_interface->SetRegister(bias_regAddress, 0x00000000); // BIAS_DAC_CONFIG_N
227 m_device_interface->SetRegister(timing_regAddress, 0x00000000); // cal_CONFIG_N
228 }
229
230 m_device_interface->SetRegister(0x40000300, 0x1); // writing 0x1 to this register applies the bias voltage settings
231
232 m_run_marker = false;
233 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "Stop pulsing SSPLEDCalibWrapper of card " << m_board_id << " complete.";
234}

◆ validate_config()

void dunedaq::sspmodules::SSPLEDCalibWrapper::validate_config ( const data_t & args)
private

Definition at line 310 of file SSPLEDCalibWrapper.cpp.

311{
312 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::validate_config called.";
313
314 if (!((m_number_channels == 5) || (m_number_channels == 12))) {
315 std::stringstream ss;
316 ss << "ERROR: Incorrect number_channels value " << m_number_channels << " is not equal to 5 or 12!!!" << std::endl;
317 TLOG() << ss.str();
318 throw ConfigurationError(ERS_HERE, ss.str());
319 }
320
321 if (m_channel_mask > 4095) {
322 std::stringstream ss;
323 ss << "ERROR: Incorrect channel_maks value " << m_channel_mask << " is higher than the limit of 4095!!!"
324 << std::endl;
325 TLOG() << ss.str();
326 throw ConfigurationError(ERS_HERE, ss.str());
327 }
328
329 if (!(m_single_pulse || m_burst_mode)) {
330 std::stringstream ss;
331 ss << "ERROR: Incorrect pulse_mode value. Neither single or burst." << std::endl;
332 TLOG() << ss.str();
333 throw ConfigurationError(ERS_HERE, ss.str());
334 }
335
336 if (m_double_pulse_delay_ticks > 4095) {
337 std::stringstream ss;
338 ss << "ERROR: Strange!! double_pulse_delay_ticks value is " << m_double_pulse_delay_ticks
339 << ", which is greater than the limit of 4095" << std::endl;
340 TLOG() << ss.str();
341 // throw ConfigurationError(ERS_HERE, ss.str());
342 }
343
344 if (m_burst_count > 10000) {
345 std::stringstream ss;
346 ss << "ERROR: Strange!! burst_count value is " << m_burst_count
347 << ", which is more time than in a drift readout window" << std::endl;
348 TLOG() << ss.str();
349 // throw ConfigurationError(ERS_HERE, ss.str());
350 }
351
352 if (m_pulse1_width_ticks > 255) {
353 std::stringstream ss;
354 ss << "ERROR: Incorrect pulse1_width_ticks value is " << m_pulse1_width_ticks
355 << ", which is greater than the limit of 255!!!" << std::endl;
356 TLOG() << ss.str();
357 throw ConfigurationError(ERS_HERE, ss.str());
358 }
359
360 if (m_pulse2_width_ticks > 255) {
361 std::stringstream ss;
362 ss << "ERROR: Incorrect pulse2_width_ticks value is " << m_pulse2_width_ticks
363 << ", which is greater than the limit of 255!!!" << std::endl;
364 TLOG() << ss.str();
365 throw ConfigurationError(ERS_HERE, ss.str());
366 }
367
368 if (m_pulse_bias_percent_270nm > 4095) {
369 std::stringstream ss;
370 ss << "ERROR: Incorrect pulse_bias_percent_270nm value is " << m_pulse_bias_percent_270nm
371 << ", which is greater than 100 percent!!!" << std::endl;
372 TLOG() << ss.str();
373 throw ConfigurationError(ERS_HERE, ss.str());
374 }
375
376 if (m_pulse_bias_percent_367nm > 4095) {
377 std::stringstream ss;
378 ss << "ERROR: Incorrect pulse_bias_percent_367nm value is " << m_pulse_bias_percent_367nm
379 << ", which is greater than 100 percent!!!" << std::endl;
380 TLOG() << ss.str();
381 throw ConfigurationError(ERS_HERE, ss.str());
382 }
383
384 TLOG_DEBUG(TLVL_ENTER_EXIT_METHODS) << "SSPLEDCalibWrapper::validate_config complete.";
385}

Member Data Documentation

◆ m_board_id

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_board_id { 0 }
private

Definition at line 55 of file SSPLEDCalibWrapper.hpp.

◆ m_board_ip

unsigned long dunedaq::sspmodules::SSPLEDCalibWrapper::m_board_ip
private

Definition at line 56 of file SSPLEDCalibWrapper.hpp.

◆ m_burst_count

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_burst_count { 1 }
private

Definition at line 65 of file SSPLEDCalibWrapper.hpp.

◆ m_burst_mode

bool dunedaq::sspmodules::SSPLEDCalibWrapper::m_burst_mode = false
private

Definition at line 60 of file SSPLEDCalibWrapper.hpp.

◆ m_channel_mask

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_channel_mask { 4095 }
private

Definition at line 64 of file SSPLEDCalibWrapper.hpp.

◆ m_configure

std::atomic<bool> dunedaq::sspmodules::SSPLEDCalibWrapper::m_configure
private

Definition at line 52 of file SSPLEDCalibWrapper.hpp.

◆ m_device_interface

dunedaq::sspmodules::DeviceInterface* dunedaq::sspmodules::SSPLEDCalibWrapper::m_device_interface
private

Definition at line 48 of file SSPLEDCalibWrapper.hpp.

◆ m_double_pulse

bool dunedaq::sspmodules::SSPLEDCalibWrapper::m_double_pulse = false
private

Definition at line 61 of file SSPLEDCalibWrapper.hpp.

◆ m_double_pulse_delay_ticks

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_double_pulse_delay_ticks { 0 }
private

Definition at line 66 of file SSPLEDCalibWrapper.hpp.

◆ m_instance_name_for_metrics

std::string dunedaq::sspmodules::SSPLEDCalibWrapper::m_instance_name_for_metrics
private

Definition at line 72 of file SSPLEDCalibWrapper.hpp.

◆ m_module_id

unsigned long dunedaq::sspmodules::SSPLEDCalibWrapper::m_module_id
private

Definition at line 59 of file SSPLEDCalibWrapper.hpp.

◆ m_number_channels

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_number_channels { 12 }
private

Definition at line 63 of file SSPLEDCalibWrapper.hpp.

◆ m_partition_number

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_partition_number { 0 }
private

Definition at line 57 of file SSPLEDCalibWrapper.hpp.

◆ m_pulse1_width_ticks

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_pulse1_width_ticks { 0 }
private

Definition at line 67 of file SSPLEDCalibWrapper.hpp.

◆ m_pulse2_width_ticks

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_pulse2_width_ticks { 0 }
private

Definition at line 68 of file SSPLEDCalibWrapper.hpp.

◆ m_pulse_bias_percent_270nm

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_pulse_bias_percent_270nm { 0 }
private

Definition at line 69 of file SSPLEDCalibWrapper.hpp.

◆ m_pulse_bias_percent_367nm

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_pulse_bias_percent_367nm { 0 }
private

Definition at line 70 of file SSPLEDCalibWrapper.hpp.

◆ m_run_marker

std::atomic<bool> dunedaq::sspmodules::SSPLEDCalibWrapper::m_run_marker
private

Definition at line 51 of file SSPLEDCalibWrapper.hpp.

◆ m_single_pulse

bool dunedaq::sspmodules::SSPLEDCalibWrapper::m_single_pulse = false
private

Definition at line 62 of file SSPLEDCalibWrapper.hpp.

◆ m_timing_address

unsigned int dunedaq::sspmodules::SSPLEDCalibWrapper::m_timing_address { 0 }
private

Definition at line 58 of file SSPLEDCalibWrapper.hpp.


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