DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dump_dunedaq__appmodel.cpp File Reference
#include "conffwk/ConfigObject.hpp"
#include "conffwk/Configuration.hpp"
#include "appmodel/AVXAbsRunSumProcessor.hpp"
#include "appmodel/AVXFixedPedestalSubtractProcessor.hpp"
#include "appmodel/AVXFrugalPedestalSubtractProcessor.hpp"
#include "appmodel/AVXRunSumProcessor.hpp"
#include "appmodel/AVXThresholdProcessor.hpp"
#include "appmodel/CRTBernReaderConf.hpp"
#include "appmodel/CRTBernReaderModule.hpp"
#include "appmodel/CRTGrenobleReaderConf.hpp"
#include "appmodel/CRTGrenobleReaderModule.hpp"
#include "appmodel/CRTReaderApplication.hpp"
#include "appmodel/CTBApplication.hpp"
#include "appmodel/CTBCRTSubsystem.hpp"
#include "appmodel/CTBCalibrationStream.hpp"
#include "appmodel/CTBConf.hpp"
#include "appmodel/CTBCountLLT.hpp"
#include "appmodel/CTBHLT.hpp"
#include "appmodel/CTBLLT.hpp"
#include "appmodel/CTBMisc.hpp"
#include "appmodel/CTBModule.hpp"
#include "appmodel/CTBMonitorSocket.hpp"
#include "appmodel/CTBPDSLLT.hpp"
#include "appmodel/CTBPDSSubsystem.hpp"
#include "appmodel/CTBPulser.hpp"
#include "appmodel/CTBRandomTrigger.hpp"
#include "appmodel/CTBReceiverSocket.hpp"
#include "appmodel/CTBSocket.hpp"
#include "appmodel/CTBSockets.hpp"
#include "appmodel/CTBStatisticsSocket.hpp"
#include "appmodel/CTBSubsystem.hpp"
#include "appmodel/CTBTiming.hpp"
#include "appmodel/CTBTrigger.hpp"
#include "appmodel/CTBTriggerReport.hpp"
#include "appmodel/CTBoardConf.hpp"
#include "appmodel/ColdADCSettings.hpp"
#include "appmodel/DFApplication.hpp"
#include "appmodel/DFHWConf.hpp"
#include "appmodel/DFOApplication.hpp"
#include "appmodel/DFOConf.hpp"
#include "appmodel/DFOModule.hpp"
#include "appmodel/DPDKPortConfiguration.hpp"
#include "appmodel/DPDKReaderConf.hpp"
#include "appmodel/DPDKReaderModule.hpp"
#include "appmodel/DPDKReceiver.hpp"
#include "appmodel/DTSHSIApplication.hpp"
#include "appmodel/DaphneApplication.hpp"
#include "appmodel/DaphneConf.hpp"
#include "appmodel/DaphneV2ADC.hpp"
#include "appmodel/DaphneV2AFE.hpp"
#include "appmodel/DaphneV2BoardConf.hpp"
#include "appmodel/DaphneV2Channel.hpp"
#include "appmodel/DaphneV2ControllerModule.hpp"
#include "appmodel/DaphneV2LNA.hpp"
#include "appmodel/DaphneV2PGA.hpp"
#include "appmodel/DataHandlerConf.hpp"
#include "appmodel/DataHandlerModule.hpp"
#include "appmodel/DataProcessor.hpp"
#include "appmodel/DataReaderConf.hpp"
#include "appmodel/DataReaderModule.hpp"
#include "appmodel/DataRecorderConf.hpp"
#include "appmodel/DataRecorderModule.hpp"
#include "appmodel/DataStoreConf.hpp"
#include "appmodel/DataSubscriberModule.hpp"
#include "appmodel/DataWriterConf.hpp"
#include "appmodel/DataWriterModule.hpp"
#include "appmodel/FDDataHandlerModule.hpp"
#include "appmodel/FDFakeReaderModule.hpp"
#include "appmodel/FEMBSettings.hpp"
#include "appmodel/FakeDataApplication.hpp"
#include "appmodel/FakeDataProdConf.hpp"
#include "appmodel/FakeDataProdModule.hpp"
#include "appmodel/FakeDataReceiver.hpp"
#include "appmodel/FakeDataSender.hpp"
#include "appmodel/FakeHSIApplication.hpp"
#include "appmodel/FakeHSIEventGeneratorConf.hpp"
#include "appmodel/FakeHSIEventGeneratorModule.hpp"
#include "appmodel/FelixCardControllerModule.hpp"
#include "appmodel/FelixDataReceiver.hpp"
#include "appmodel/FelixDataSender.hpp"
#include "appmodel/FelixInterface.hpp"
#include "appmodel/FelixReaderConf.hpp"
#include "appmodel/FelixReaderModule.hpp"
#include "appmodel/FilenameParams.hpp"
#include "appmodel/FragmentAggregatorModule.hpp"
#include "appmodel/HDF5FileLayoutParams.hpp"
#include "appmodel/HDF5PathParams.hpp"
#include "appmodel/HSI2TCTranslatorConf.hpp"
#include "appmodel/HSIDataHandlerModule.hpp"
#include "appmodel/HSIEventSender.hpp"
#include "appmodel/HSIEventToTCApplication.hpp"
#include "appmodel/HSIFrameProcessor.hpp"
#include "appmodel/HSIReadout.hpp"
#include "appmodel/HSIReadoutConf.hpp"
#include "appmodel/HSISignalWindow.hpp"
#include "appmodel/HermesDataSender.hpp"
#include "appmodel/HermesModule.hpp"
#include "appmodel/HermesModuleConf.hpp"
#include "appmodel/IpbusAddressTable.hpp"
#include "appmodel/IpbusDevice.hpp"
#include "appmodel/LatencyBuffer.hpp"
#include "appmodel/MLTApplication.hpp"
#include "appmodel/MLTConf.hpp"
#include "appmodel/MLTModule.hpp"
#include "appmodel/NICStatsConf.hpp"
#include "appmodel/NP02ReadoutApplication.hpp"
#include "appmodel/NWDetDataReceiver.hpp"
#include "appmodel/NWDetDataSender.hpp"
#include "appmodel/NetworkConnectionDescriptor.hpp"
#include "appmodel/NetworkConnectionRule.hpp"
#include "appmodel/ProcessingStep.hpp"
#include "appmodel/QueueConnectionRule.hpp"
#include "appmodel/QueueDescriptor.hpp"
#include "appmodel/ROIGroupConf.hpp"
#include "appmodel/RandomTCMakerConf.hpp"
#include "appmodel/RandomTCMakerModule.hpp"
#include "appmodel/RawDataProcessor.hpp"
#include "appmodel/ReadoutApplication.hpp"
#include "appmodel/ReadoutHost.hpp"
#include "appmodel/RequestHandler.hpp"
#include "appmodel/RoHwConfig.hpp"
#include "appmodel/SSPLEDCalibModule.hpp"
#include "appmodel/SSPRegister.hpp"
#include "appmodel/SamplesOverThresholdMinima.hpp"
#include "appmodel/SmartDaqApplication.hpp"
#include "appmodel/SocketDataSender.hpp"
#include "appmodel/SocketDataWriterConf.hpp"
#include "appmodel/SocketDataWriterModule.hpp"
#include "appmodel/SocketReaderConf.hpp"
#include "appmodel/SocketReaderModule.hpp"
#include "appmodel/SocketReceiver.hpp"
#include "appmodel/SocketWriterConf.hpp"
#include "appmodel/SocketWriterModule.hpp"
#include "appmodel/SourceIDConf.hpp"
#include "appmodel/SourceIDToNetworkConnection.hpp"
#include "appmodel/StandaloneTCMakerConf.hpp"
#include "appmodel/StandaloneTCMakerModule.hpp"
#include "appmodel/StreamEmulationParameters.hpp"
#include "appmodel/SubdetectorReadoutWindowMap.hpp"
#include "appmodel/TAAlgorithm.hpp"
#include "appmodel/TADataProcessor.hpp"
#include "appmodel/TAMakerADCSimpleWindowAlgorithm.hpp"
#include "appmodel/TAMakerBundleNAlgorithm.hpp"
#include "appmodel/TAMakerChannelAdjacencyAlgorithm.hpp"
#include "appmodel/TAMakerChannelDistanceAlgorithm.hpp"
#include "appmodel/TAMakerDBSCANAlgorithm.hpp"
#include "appmodel/TAMakerHorizontalMuonAlgorithm.hpp"
#include "appmodel/TAMakerMichelElectronAlgorithm.hpp"
#include "appmodel/TAMakerPlaneCoincidenceAlgorithm.hpp"
#include "appmodel/TAMakerPrescaleAlgorithm.hpp"
#include "appmodel/TCAlgorithm.hpp"
#include "appmodel/TCDataProcessor.hpp"
#include "appmodel/TCMakerADCSimpleWindowAlgorithm.hpp"
#include "appmodel/TCMakerBundleNAlgorithm.hpp"
#include "appmodel/TCMakerChannelAdjacencyAlgorithm.hpp"
#include "appmodel/TCMakerChannelDistanceAlgorithm.hpp"
#include "appmodel/TCMakerDBSCANAlgorithm.hpp"
#include "appmodel/TCMakerHorizontalMuonAlgorithm.hpp"
#include "appmodel/TCMakerMichelElectronAlgorithm.hpp"
#include "appmodel/TCMakerPlaneCoincidenceAlgorithm.hpp"
#include "appmodel/TCMakerPrescaleAlgorithm.hpp"
#include "appmodel/TCReadoutMap.hpp"
#include "appmodel/TDEAMCModule.hpp"
#include "appmodel/TDEAMCModuleConf.hpp"
#include "appmodel/TDECrateApplication.hpp"
#include "appmodel/TPDataProcessor.hpp"
#include "appmodel/TPReplayApplication.hpp"
#include "appmodel/TPReplayModule.hpp"
#include "appmodel/TPReplayModuleConf.hpp"
#include "appmodel/TPStreamConf.hpp"
#include "appmodel/TPStreamWriterApplication.hpp"
#include "appmodel/TPStreamWriterConf.hpp"
#include "appmodel/TPStreamWriterModule.hpp"
#include "appmodel/TRBConf.hpp"
#include "appmodel/TRBModule.hpp"
#include "appmodel/TdeAmcDetDataSender.hpp"
#include "appmodel/TriggerApplication.hpp"
#include "appmodel/TriggerBitword.hpp"
#include "appmodel/TriggerDataHandlerModule.hpp"
#include "appmodel/WIBModule.hpp"
#include "appmodel/WIBModuleConf.hpp"
#include "appmodel/WIBPulserSettings.hpp"
#include "appmodel/WIBSettings.hpp"
#include "appmodel/WIECApplication.hpp"

Go to the source code of this file.

Functions

static void usage (const char *s)
 
static void no_param (const char *s)
 
int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 216 of file dump_dunedaq__appmodel.cpp.

217{
218 // parse parameters
219
220 const char * db_name = nullptr;
221 const char * object_id = nullptr;
222 const char * query = "";
223 std::string class_name;
224 bool init_children = false;
225
226 for(int i = 1; i < argc; i++) {
227 const char * cp = argv[i];
228 if(!strcmp(cp, "-h") || !strcmp(cp, "--help")) {
229 usage(argv[0]);
230 return 0;
231 }
232 if(!strcmp(cp, "-t") || !strcmp(cp, "--init-children")) {
233 init_children = true;
234 }
235 else if(!strcmp(cp, "-d") || !strcmp(cp, "--data")) {
236 if(++i == argc || argv[i][0] == '-') { no_param(cp); } else { db_name = argv[i]; }
237 }
238 else if(!strcmp(cp, "-c") || !strcmp(cp, "--class-name")) {
239 if(++i == argc || argv[i][0] == '-') { no_param(cp); } else { class_name = argv[i]; }
240 }
241 else if(!strcmp(cp, "-i") || !strcmp(cp, "--object-id")) {
242 if(++i == argc || argv[i][0] == '-') { no_param(cp); } else { object_id = argv[i]; }
243 }
244 else if(!strcmp(cp, "-q") || !strcmp(cp, "--query")) {
245 if(++i == argc || argv[i][0] == '-') { no_param(cp); } else { query = argv[i]; }
246 }
247 else {
248 std::cerr << "ERROR: bad parameter " << cp << std::endl;
249 usage(argv[0]);
250 return (EXIT_FAILURE);
251 }
252 }
253
254 if(db_name == nullptr) {
255 std::cerr << "ERROR: no database name provided\n";
256 return (EXIT_FAILURE);
257 }
258
259 if(class_name.empty()) {
260 std::cerr << "ERROR: no class name provided\n";
261 return (EXIT_FAILURE);
262 }
263
264 if(*query != 0 && object_id != nullptr) {
265 std::cerr << "ERROR: only one parameter -i or -q can be provided\n";
266 return (EXIT_FAILURE);
267 }
268
269
270std::cout << std::boolalpha;
271
272 try {
274
275 if(!conf.loaded()) {
276 std::cerr << "Can not load database: " << db_name << std::endl;
277 return (EXIT_FAILURE);
278 }
279
280 std::vector< dunedaq::conffwk::ConfigObject > objects;
281
282 if(object_id) {
284 try {
285 conf.get(class_name, object_id, obj, 1);
286 }
287 catch (dunedaq::conffwk::NotFound & ex) {
288 std::cerr << "Can not get object \'" << object_id << "\' of class \'" << class_name << "\':\n" << ex << std::endl;
289 return (EXIT_FAILURE);
290 }
291 objects.push_back(obj);
292 }
293 else {
294 try {
295 conf.get(class_name, objects, query, 1);
296 }
297 catch (dunedaq::conffwk::NotFound & ex) {
298 std::cerr << "Can not get objects of class \'" << class_name << "\':\n" << ex << std::endl;
299 return (EXIT_FAILURE);
300 }
301 }
302
303 struct SortByUId {
304 bool operator() (const dunedaq::conffwk::ConfigObject * o1, const dunedaq::conffwk::ConfigObject * o2) const {
305 return (o1->UID() < o2->UID());
306 };
307 };
308
309 std::set< dunedaq::conffwk::ConfigObject *, SortByUId > sorted_objects;
310
311 for(auto& i : objects)
312 sorted_objects.insert(&i);
313
314 for(auto& i : sorted_objects) {
315 if(class_name == "AVXAbsRunSumProcessor") {
316 std::cout << *conf.get<dunedaq::appmodel::AVXAbsRunSumProcessor>(*i, init_children) << std::endl;
317 }
318 else if(class_name == "AVXFixedPedestalSubtractProcessor") {
319 std::cout << *conf.get<dunedaq::appmodel::AVXFixedPedestalSubtractProcessor>(*i, init_children) << std::endl;
320 }
321 else if(class_name == "AVXFrugalPedestalSubtractProcessor") {
322 std::cout << *conf.get<dunedaq::appmodel::AVXFrugalPedestalSubtractProcessor>(*i, init_children) << std::endl;
323 }
324 else if(class_name == "AVXRunSumProcessor") {
325 std::cout << *conf.get<dunedaq::appmodel::AVXRunSumProcessor>(*i, init_children) << std::endl;
326 }
327 else if(class_name == "AVXThresholdProcessor") {
328 std::cout << *conf.get<dunedaq::appmodel::AVXThresholdProcessor>(*i, init_children) << std::endl;
329 }
330 else if(class_name == "CRTBernReaderConf") {
331 std::cout << *conf.get<dunedaq::appmodel::CRTBernReaderConf>(*i, init_children) << std::endl;
332 }
333 else if(class_name == "CRTBernReaderModule") {
334 std::cout << *conf.get<dunedaq::appmodel::CRTBernReaderModule>(*i, init_children) << std::endl;
335 }
336 else if(class_name == "CRTGrenobleReaderConf") {
337 std::cout << *conf.get<dunedaq::appmodel::CRTGrenobleReaderConf>(*i, init_children) << std::endl;
338 }
339 else if(class_name == "CRTGrenobleReaderModule") {
340 std::cout << *conf.get<dunedaq::appmodel::CRTGrenobleReaderModule>(*i, init_children) << std::endl;
341 }
342 else if(class_name == "CRTReaderApplication") {
343 std::cout << *conf.get<dunedaq::appmodel::CRTReaderApplication>(*i, init_children) << std::endl;
344 }
345 else if(class_name == "CTBApplication") {
346 std::cout << *conf.get<dunedaq::appmodel::CTBApplication>(*i, init_children) << std::endl;
347 }
348 else if(class_name == "CTBCRTSubsystem") {
349 std::cout << *conf.get<dunedaq::appmodel::CTBCRTSubsystem>(*i, init_children) << std::endl;
350 }
351 else if(class_name == "CTBCalibrationStream") {
352 std::cout << *conf.get<dunedaq::appmodel::CTBCalibrationStream>(*i, init_children) << std::endl;
353 }
354 else if(class_name == "CTBConf") {
355 std::cout << *conf.get<dunedaq::appmodel::CTBConf>(*i, init_children) << std::endl;
356 }
357 else if(class_name == "CTBCountLLT") {
358 std::cout << *conf.get<dunedaq::appmodel::CTBCountLLT>(*i, init_children) << std::endl;
359 }
360 else if(class_name == "CTBHLT") {
361 std::cout << *conf.get<dunedaq::appmodel::CTBHLT>(*i, init_children) << std::endl;
362 }
363 else if(class_name == "CTBLLT") {
364 std::cout << *conf.get<dunedaq::appmodel::CTBLLT>(*i, init_children) << std::endl;
365 }
366 else if(class_name == "CTBMisc") {
367 std::cout << *conf.get<dunedaq::appmodel::CTBMisc>(*i, init_children) << std::endl;
368 }
369 else if(class_name == "CTBModule") {
370 std::cout << *conf.get<dunedaq::appmodel::CTBModule>(*i, init_children) << std::endl;
371 }
372 else if(class_name == "CTBMonitorSocket") {
373 std::cout << *conf.get<dunedaq::appmodel::CTBMonitorSocket>(*i, init_children) << std::endl;
374 }
375 else if(class_name == "CTBPDSLLT") {
376 std::cout << *conf.get<dunedaq::appmodel::CTBPDSLLT>(*i, init_children) << std::endl;
377 }
378 else if(class_name == "CTBPDSSubsystem") {
379 std::cout << *conf.get<dunedaq::appmodel::CTBPDSSubsystem>(*i, init_children) << std::endl;
380 }
381 else if(class_name == "CTBPulser") {
382 std::cout << *conf.get<dunedaq::appmodel::CTBPulser>(*i, init_children) << std::endl;
383 }
384 else if(class_name == "CTBRandomTrigger") {
385 std::cout << *conf.get<dunedaq::appmodel::CTBRandomTrigger>(*i, init_children) << std::endl;
386 }
387 else if(class_name == "CTBReceiverSocket") {
388 std::cout << *conf.get<dunedaq::appmodel::CTBReceiverSocket>(*i, init_children) << std::endl;
389 }
390 else if(class_name == "CTBSocket") {
391 std::cout << *conf.get<dunedaq::appmodel::CTBSocket>(*i, init_children) << std::endl;
392 }
393 else if(class_name == "CTBSockets") {
394 std::cout << *conf.get<dunedaq::appmodel::CTBSockets>(*i, init_children) << std::endl;
395 }
396 else if(class_name == "CTBStatisticsSocket") {
397 std::cout << *conf.get<dunedaq::appmodel::CTBStatisticsSocket>(*i, init_children) << std::endl;
398 }
399 else if(class_name == "CTBSubsystem") {
400 std::cout << *conf.get<dunedaq::appmodel::CTBSubsystem>(*i, init_children) << std::endl;
401 }
402 else if(class_name == "CTBTiming") {
403 std::cout << *conf.get<dunedaq::appmodel::CTBTiming>(*i, init_children) << std::endl;
404 }
405 else if(class_name == "CTBTrigger") {
406 std::cout << *conf.get<dunedaq::appmodel::CTBTrigger>(*i, init_children) << std::endl;
407 }
408 else if(class_name == "CTBTriggerReport") {
409 std::cout << *conf.get<dunedaq::appmodel::CTBTriggerReport>(*i, init_children) << std::endl;
410 }
411 else if(class_name == "CTBoardConf") {
412 std::cout << *conf.get<dunedaq::appmodel::CTBoardConf>(*i, init_children) << std::endl;
413 }
414 else if(class_name == "ColdADCSettings") {
415 std::cout << *conf.get<dunedaq::appmodel::ColdADCSettings>(*i, init_children) << std::endl;
416 }
417 else if(class_name == "DFApplication") {
418 std::cout << *conf.get<dunedaq::appmodel::DFApplication>(*i, init_children) << std::endl;
419 }
420 else if(class_name == "DFHWConf") {
421 std::cout << *conf.get<dunedaq::appmodel::DFHWConf>(*i, init_children) << std::endl;
422 }
423 else if(class_name == "DFOApplication") {
424 std::cout << *conf.get<dunedaq::appmodel::DFOApplication>(*i, init_children) << std::endl;
425 }
426 else if(class_name == "DFOConf") {
427 std::cout << *conf.get<dunedaq::appmodel::DFOConf>(*i, init_children) << std::endl;
428 }
429 else if(class_name == "DFOModule") {
430 std::cout << *conf.get<dunedaq::appmodel::DFOModule>(*i, init_children) << std::endl;
431 }
432 else if(class_name == "DPDKPortConfiguration") {
433 std::cout << *conf.get<dunedaq::appmodel::DPDKPortConfiguration>(*i, init_children) << std::endl;
434 }
435 else if(class_name == "DPDKReaderConf") {
436 std::cout << *conf.get<dunedaq::appmodel::DPDKReaderConf>(*i, init_children) << std::endl;
437 }
438 else if(class_name == "DPDKReaderModule") {
439 std::cout << *conf.get<dunedaq::appmodel::DPDKReaderModule>(*i, init_children) << std::endl;
440 }
441 else if(class_name == "DPDKReceiver") {
442 std::cout << *conf.get<dunedaq::appmodel::DPDKReceiver>(*i, init_children) << std::endl;
443 }
444 else if(class_name == "DTSHSIApplication") {
445 std::cout << *conf.get<dunedaq::appmodel::DTSHSIApplication>(*i, init_children) << std::endl;
446 }
447 else if(class_name == "DaphneApplication") {
448 std::cout << *conf.get<dunedaq::appmodel::DaphneApplication>(*i, init_children) << std::endl;
449 }
450 else if(class_name == "DaphneConf") {
451 std::cout << *conf.get<dunedaq::appmodel::DaphneConf>(*i, init_children) << std::endl;
452 }
453 else if(class_name == "DaphneV2ADC") {
454 std::cout << *conf.get<dunedaq::appmodel::DaphneV2ADC>(*i, init_children) << std::endl;
455 }
456 else if(class_name == "DaphneV2AFE") {
457 std::cout << *conf.get<dunedaq::appmodel::DaphneV2AFE>(*i, init_children) << std::endl;
458 }
459 else if(class_name == "DaphneV2BoardConf") {
460 std::cout << *conf.get<dunedaq::appmodel::DaphneV2BoardConf>(*i, init_children) << std::endl;
461 }
462 else if(class_name == "DaphneV2Channel") {
463 std::cout << *conf.get<dunedaq::appmodel::DaphneV2Channel>(*i, init_children) << std::endl;
464 }
465 else if(class_name == "DaphneV2ControllerModule") {
466 std::cout << *conf.get<dunedaq::appmodel::DaphneV2ControllerModule>(*i, init_children) << std::endl;
467 }
468 else if(class_name == "DaphneV2LNA") {
469 std::cout << *conf.get<dunedaq::appmodel::DaphneV2LNA>(*i, init_children) << std::endl;
470 }
471 else if(class_name == "DaphneV2PGA") {
472 std::cout << *conf.get<dunedaq::appmodel::DaphneV2PGA>(*i, init_children) << std::endl;
473 }
474 else if(class_name == "DataHandlerConf") {
475 std::cout << *conf.get<dunedaq::appmodel::DataHandlerConf>(*i, init_children) << std::endl;
476 }
477 else if(class_name == "DataHandlerModule") {
478 std::cout << *conf.get<dunedaq::appmodel::DataHandlerModule>(*i, init_children) << std::endl;
479 }
480 else if(class_name == "DataProcessor") {
481 std::cout << *conf.get<dunedaq::appmodel::DataProcessor>(*i, init_children) << std::endl;
482 }
483 else if(class_name == "DataReaderConf") {
484 std::cout << *conf.get<dunedaq::appmodel::DataReaderConf>(*i, init_children) << std::endl;
485 }
486 else if(class_name == "DataReaderModule") {
487 std::cout << *conf.get<dunedaq::appmodel::DataReaderModule>(*i, init_children) << std::endl;
488 }
489 else if(class_name == "DataRecorderConf") {
490 std::cout << *conf.get<dunedaq::appmodel::DataRecorderConf>(*i, init_children) << std::endl;
491 }
492 else if(class_name == "DataRecorderModule") {
493 std::cout << *conf.get<dunedaq::appmodel::DataRecorderModule>(*i, init_children) << std::endl;
494 }
495 else if(class_name == "DataStoreConf") {
496 std::cout << *conf.get<dunedaq::appmodel::DataStoreConf>(*i, init_children) << std::endl;
497 }
498 else if(class_name == "DataSubscriberModule") {
499 std::cout << *conf.get<dunedaq::appmodel::DataSubscriberModule>(*i, init_children) << std::endl;
500 }
501 else if(class_name == "DataWriterConf") {
502 std::cout << *conf.get<dunedaq::appmodel::DataWriterConf>(*i, init_children) << std::endl;
503 }
504 else if(class_name == "DataWriterModule") {
505 std::cout << *conf.get<dunedaq::appmodel::DataWriterModule>(*i, init_children) << std::endl;
506 }
507 else if(class_name == "FDDataHandlerModule") {
508 std::cout << *conf.get<dunedaq::appmodel::FDDataHandlerModule>(*i, init_children) << std::endl;
509 }
510 else if(class_name == "FDFakeReaderModule") {
511 std::cout << *conf.get<dunedaq::appmodel::FDFakeReaderModule>(*i, init_children) << std::endl;
512 }
513 else if(class_name == "FEMBSettings") {
514 std::cout << *conf.get<dunedaq::appmodel::FEMBSettings>(*i, init_children) << std::endl;
515 }
516 else if(class_name == "FakeDataApplication") {
517 std::cout << *conf.get<dunedaq::appmodel::FakeDataApplication>(*i, init_children) << std::endl;
518 }
519 else if(class_name == "FakeDataProdConf") {
520 std::cout << *conf.get<dunedaq::appmodel::FakeDataProdConf>(*i, init_children) << std::endl;
521 }
522 else if(class_name == "FakeDataProdModule") {
523 std::cout << *conf.get<dunedaq::appmodel::FakeDataProdModule>(*i, init_children) << std::endl;
524 }
525 else if(class_name == "FakeDataReceiver") {
526 std::cout << *conf.get<dunedaq::appmodel::FakeDataReceiver>(*i, init_children) << std::endl;
527 }
528 else if(class_name == "FakeDataSender") {
529 std::cout << *conf.get<dunedaq::appmodel::FakeDataSender>(*i, init_children) << std::endl;
530 }
531 else if(class_name == "FakeHSIApplication") {
532 std::cout << *conf.get<dunedaq::appmodel::FakeHSIApplication>(*i, init_children) << std::endl;
533 }
534 else if(class_name == "FakeHSIEventGeneratorConf") {
535 std::cout << *conf.get<dunedaq::appmodel::FakeHSIEventGeneratorConf>(*i, init_children) << std::endl;
536 }
537 else if(class_name == "FakeHSIEventGeneratorModule") {
538 std::cout << *conf.get<dunedaq::appmodel::FakeHSIEventGeneratorModule>(*i, init_children) << std::endl;
539 }
540 else if(class_name == "FelixCardControllerModule") {
541 std::cout << *conf.get<dunedaq::appmodel::FelixCardControllerModule>(*i, init_children) << std::endl;
542 }
543 else if(class_name == "FelixDataReceiver") {
544 std::cout << *conf.get<dunedaq::appmodel::FelixDataReceiver>(*i, init_children) << std::endl;
545 }
546 else if(class_name == "FelixDataSender") {
547 std::cout << *conf.get<dunedaq::appmodel::FelixDataSender>(*i, init_children) << std::endl;
548 }
549 else if(class_name == "FelixInterface") {
550 std::cout << *conf.get<dunedaq::appmodel::FelixInterface>(*i, init_children) << std::endl;
551 }
552 else if(class_name == "FelixReaderConf") {
553 std::cout << *conf.get<dunedaq::appmodel::FelixReaderConf>(*i, init_children) << std::endl;
554 }
555 else if(class_name == "FelixReaderModule") {
556 std::cout << *conf.get<dunedaq::appmodel::FelixReaderModule>(*i, init_children) << std::endl;
557 }
558 else if(class_name == "FilenameParams") {
559 std::cout << *conf.get<dunedaq::appmodel::FilenameParams>(*i, init_children) << std::endl;
560 }
561 else if(class_name == "FragmentAggregatorModule") {
562 std::cout << *conf.get<dunedaq::appmodel::FragmentAggregatorModule>(*i, init_children) << std::endl;
563 }
564 else if(class_name == "HDF5FileLayoutParams") {
565 std::cout << *conf.get<dunedaq::appmodel::HDF5FileLayoutParams>(*i, init_children) << std::endl;
566 }
567 else if(class_name == "HDF5PathParams") {
568 std::cout << *conf.get<dunedaq::appmodel::HDF5PathParams>(*i, init_children) << std::endl;
569 }
570 else if(class_name == "HSI2TCTranslatorConf") {
571 std::cout << *conf.get<dunedaq::appmodel::HSI2TCTranslatorConf>(*i, init_children) << std::endl;
572 }
573 else if(class_name == "HSIDataHandlerModule") {
574 std::cout << *conf.get<dunedaq::appmodel::HSIDataHandlerModule>(*i, init_children) << std::endl;
575 }
576 else if(class_name == "HSIEventSender") {
577 std::cout << *conf.get<dunedaq::appmodel::HSIEventSender>(*i, init_children) << std::endl;
578 }
579 else if(class_name == "HSIEventToTCApplication") {
580 std::cout << *conf.get<dunedaq::appmodel::HSIEventToTCApplication>(*i, init_children) << std::endl;
581 }
582 else if(class_name == "HSIFrameProcessor") {
583 std::cout << *conf.get<dunedaq::appmodel::HSIFrameProcessor>(*i, init_children) << std::endl;
584 }
585 else if(class_name == "HSIReadout") {
586 std::cout << *conf.get<dunedaq::appmodel::HSIReadout>(*i, init_children) << std::endl;
587 }
588 else if(class_name == "HSIReadoutConf") {
589 std::cout << *conf.get<dunedaq::appmodel::HSIReadoutConf>(*i, init_children) << std::endl;
590 }
591 else if(class_name == "HSISignalWindow") {
592 std::cout << *conf.get<dunedaq::appmodel::HSISignalWindow>(*i, init_children) << std::endl;
593 }
594 else if(class_name == "HermesDataSender") {
595 std::cout << *conf.get<dunedaq::appmodel::HermesDataSender>(*i, init_children) << std::endl;
596 }
597 else if(class_name == "HermesModule") {
598 std::cout << *conf.get<dunedaq::appmodel::HermesModule>(*i, init_children) << std::endl;
599 }
600 else if(class_name == "HermesModuleConf") {
601 std::cout << *conf.get<dunedaq::appmodel::HermesModuleConf>(*i, init_children) << std::endl;
602 }
603 else if(class_name == "IpbusAddressTable") {
604 std::cout << *conf.get<dunedaq::appmodel::IpbusAddressTable>(*i, init_children) << std::endl;
605 }
606 else if(class_name == "IpbusDevice") {
607 std::cout << *conf.get<dunedaq::appmodel::IpbusDevice>(*i, init_children) << std::endl;
608 }
609 else if(class_name == "LatencyBuffer") {
610 std::cout << *conf.get<dunedaq::appmodel::LatencyBuffer>(*i, init_children) << std::endl;
611 }
612 else if(class_name == "MLTApplication") {
613 std::cout << *conf.get<dunedaq::appmodel::MLTApplication>(*i, init_children) << std::endl;
614 }
615 else if(class_name == "MLTConf") {
616 std::cout << *conf.get<dunedaq::appmodel::MLTConf>(*i, init_children) << std::endl;
617 }
618 else if(class_name == "MLTModule") {
619 std::cout << *conf.get<dunedaq::appmodel::MLTModule>(*i, init_children) << std::endl;
620 }
621 else if(class_name == "NICStatsConf") {
622 std::cout << *conf.get<dunedaq::appmodel::NICStatsConf>(*i, init_children) << std::endl;
623 }
624 else if(class_name == "NP02ReadoutApplication") {
625 std::cout << *conf.get<dunedaq::appmodel::NP02ReadoutApplication>(*i, init_children) << std::endl;
626 }
627 else if(class_name == "NWDetDataReceiver") {
628 std::cout << *conf.get<dunedaq::appmodel::NWDetDataReceiver>(*i, init_children) << std::endl;
629 }
630 else if(class_name == "NWDetDataSender") {
631 std::cout << *conf.get<dunedaq::appmodel::NWDetDataSender>(*i, init_children) << std::endl;
632 }
633 else if(class_name == "NetworkConnectionDescriptor") {
634 std::cout << *conf.get<dunedaq::appmodel::NetworkConnectionDescriptor>(*i, init_children) << std::endl;
635 }
636 else if(class_name == "NetworkConnectionRule") {
637 std::cout << *conf.get<dunedaq::appmodel::NetworkConnectionRule>(*i, init_children) << std::endl;
638 }
639 else if(class_name == "ProcessingStep") {
640 std::cout << *conf.get<dunedaq::appmodel::ProcessingStep>(*i, init_children) << std::endl;
641 }
642 else if(class_name == "QueueConnectionRule") {
643 std::cout << *conf.get<dunedaq::appmodel::QueueConnectionRule>(*i, init_children) << std::endl;
644 }
645 else if(class_name == "QueueDescriptor") {
646 std::cout << *conf.get<dunedaq::appmodel::QueueDescriptor>(*i, init_children) << std::endl;
647 }
648 else if(class_name == "ROIGroupConf") {
649 std::cout << *conf.get<dunedaq::appmodel::ROIGroupConf>(*i, init_children) << std::endl;
650 }
651 else if(class_name == "RandomTCMakerConf") {
652 std::cout << *conf.get<dunedaq::appmodel::RandomTCMakerConf>(*i, init_children) << std::endl;
653 }
654 else if(class_name == "RandomTCMakerModule") {
655 std::cout << *conf.get<dunedaq::appmodel::RandomTCMakerModule>(*i, init_children) << std::endl;
656 }
657 else if(class_name == "RawDataProcessor") {
658 std::cout << *conf.get<dunedaq::appmodel::RawDataProcessor>(*i, init_children) << std::endl;
659 }
660 else if(class_name == "ReadoutApplication") {
661 std::cout << *conf.get<dunedaq::appmodel::ReadoutApplication>(*i, init_children) << std::endl;
662 }
663 else if(class_name == "ReadoutHost") {
664 std::cout << *conf.get<dunedaq::appmodel::ReadoutHost>(*i, init_children) << std::endl;
665 }
666 else if(class_name == "RequestHandler") {
667 std::cout << *conf.get<dunedaq::appmodel::RequestHandler>(*i, init_children) << std::endl;
668 }
669 else if(class_name == "RoHwConfig") {
670 std::cout << *conf.get<dunedaq::appmodel::RoHwConfig>(*i, init_children) << std::endl;
671 }
672 else if(class_name == "SSPLEDCalibModule") {
673 std::cout << *conf.get<dunedaq::appmodel::SSPLEDCalibModule>(*i, init_children) << std::endl;
674 }
675 else if(class_name == "SSPRegister") {
676 std::cout << *conf.get<dunedaq::appmodel::SSPRegister>(*i, init_children) << std::endl;
677 }
678 else if(class_name == "SamplesOverThresholdMinima") {
679 std::cout << *conf.get<dunedaq::appmodel::SamplesOverThresholdMinima>(*i, init_children) << std::endl;
680 }
681 else if(class_name == "SmartDaqApplication") {
682 std::cout << *conf.get<dunedaq::appmodel::SmartDaqApplication>(*i, init_children) << std::endl;
683 }
684 else if(class_name == "SocketDataSender") {
685 std::cout << *conf.get<dunedaq::appmodel::SocketDataSender>(*i, init_children) << std::endl;
686 }
687 else if(class_name == "SocketDataWriterConf") {
688 std::cout << *conf.get<dunedaq::appmodel::SocketDataWriterConf>(*i, init_children) << std::endl;
689 }
690 else if(class_name == "SocketDataWriterModule") {
691 std::cout << *conf.get<dunedaq::appmodel::SocketDataWriterModule>(*i, init_children) << std::endl;
692 }
693 else if(class_name == "SocketReaderConf") {
694 std::cout << *conf.get<dunedaq::appmodel::SocketReaderConf>(*i, init_children) << std::endl;
695 }
696 else if(class_name == "SocketReaderModule") {
697 std::cout << *conf.get<dunedaq::appmodel::SocketReaderModule>(*i, init_children) << std::endl;
698 }
699 else if(class_name == "SocketReceiver") {
700 std::cout << *conf.get<dunedaq::appmodel::SocketReceiver>(*i, init_children) << std::endl;
701 }
702 else if(class_name == "SocketWriterConf") {
703 std::cout << *conf.get<dunedaq::appmodel::SocketWriterConf>(*i, init_children) << std::endl;
704 }
705 else if(class_name == "SocketWriterModule") {
706 std::cout << *conf.get<dunedaq::appmodel::SocketWriterModule>(*i, init_children) << std::endl;
707 }
708 else if(class_name == "SourceIDConf") {
709 std::cout << *conf.get<dunedaq::appmodel::SourceIDConf>(*i, init_children) << std::endl;
710 }
711 else if(class_name == "SourceIDToNetworkConnection") {
712 std::cout << *conf.get<dunedaq::appmodel::SourceIDToNetworkConnection>(*i, init_children) << std::endl;
713 }
714 else if(class_name == "StandaloneTCMakerConf") {
715 std::cout << *conf.get<dunedaq::appmodel::StandaloneTCMakerConf>(*i, init_children) << std::endl;
716 }
717 else if(class_name == "StandaloneTCMakerModule") {
718 std::cout << *conf.get<dunedaq::appmodel::StandaloneTCMakerModule>(*i, init_children) << std::endl;
719 }
720 else if(class_name == "StreamEmulationParameters") {
721 std::cout << *conf.get<dunedaq::appmodel::StreamEmulationParameters>(*i, init_children) << std::endl;
722 }
723 else if(class_name == "SubdetectorReadoutWindowMap") {
724 std::cout << *conf.get<dunedaq::appmodel::SubdetectorReadoutWindowMap>(*i, init_children) << std::endl;
725 }
726 else if(class_name == "TAAlgorithm") {
727 std::cout << *conf.get<dunedaq::appmodel::TAAlgorithm>(*i, init_children) << std::endl;
728 }
729 else if(class_name == "TADataProcessor") {
730 std::cout << *conf.get<dunedaq::appmodel::TADataProcessor>(*i, init_children) << std::endl;
731 }
732 else if(class_name == "TAMakerADCSimpleWindowAlgorithm") {
733 std::cout << *conf.get<dunedaq::appmodel::TAMakerADCSimpleWindowAlgorithm>(*i, init_children) << std::endl;
734 }
735 else if(class_name == "TAMakerBundleNAlgorithm") {
736 std::cout << *conf.get<dunedaq::appmodel::TAMakerBundleNAlgorithm>(*i, init_children) << std::endl;
737 }
738 else if(class_name == "TAMakerChannelAdjacencyAlgorithm") {
739 std::cout << *conf.get<dunedaq::appmodel::TAMakerChannelAdjacencyAlgorithm>(*i, init_children) << std::endl;
740 }
741 else if(class_name == "TAMakerChannelDistanceAlgorithm") {
742 std::cout << *conf.get<dunedaq::appmodel::TAMakerChannelDistanceAlgorithm>(*i, init_children) << std::endl;
743 }
744 else if(class_name == "TAMakerDBSCANAlgorithm") {
745 std::cout << *conf.get<dunedaq::appmodel::TAMakerDBSCANAlgorithm>(*i, init_children) << std::endl;
746 }
747 else if(class_name == "TAMakerHorizontalMuonAlgorithm") {
748 std::cout << *conf.get<dunedaq::appmodel::TAMakerHorizontalMuonAlgorithm>(*i, init_children) << std::endl;
749 }
750 else if(class_name == "TAMakerMichelElectronAlgorithm") {
751 std::cout << *conf.get<dunedaq::appmodel::TAMakerMichelElectronAlgorithm>(*i, init_children) << std::endl;
752 }
753 else if(class_name == "TAMakerPlaneCoincidenceAlgorithm") {
754 std::cout << *conf.get<dunedaq::appmodel::TAMakerPlaneCoincidenceAlgorithm>(*i, init_children) << std::endl;
755 }
756 else if(class_name == "TAMakerPrescaleAlgorithm") {
757 std::cout << *conf.get<dunedaq::appmodel::TAMakerPrescaleAlgorithm>(*i, init_children) << std::endl;
758 }
759 else if(class_name == "TCAlgorithm") {
760 std::cout << *conf.get<dunedaq::appmodel::TCAlgorithm>(*i, init_children) << std::endl;
761 }
762 else if(class_name == "TCDataProcessor") {
763 std::cout << *conf.get<dunedaq::appmodel::TCDataProcessor>(*i, init_children) << std::endl;
764 }
765 else if(class_name == "TCMakerADCSimpleWindowAlgorithm") {
766 std::cout << *conf.get<dunedaq::appmodel::TCMakerADCSimpleWindowAlgorithm>(*i, init_children) << std::endl;
767 }
768 else if(class_name == "TCMakerBundleNAlgorithm") {
769 std::cout << *conf.get<dunedaq::appmodel::TCMakerBundleNAlgorithm>(*i, init_children) << std::endl;
770 }
771 else if(class_name == "TCMakerChannelAdjacencyAlgorithm") {
772 std::cout << *conf.get<dunedaq::appmodel::TCMakerChannelAdjacencyAlgorithm>(*i, init_children) << std::endl;
773 }
774 else if(class_name == "TCMakerChannelDistanceAlgorithm") {
775 std::cout << *conf.get<dunedaq::appmodel::TCMakerChannelDistanceAlgorithm>(*i, init_children) << std::endl;
776 }
777 else if(class_name == "TCMakerDBSCANAlgorithm") {
778 std::cout << *conf.get<dunedaq::appmodel::TCMakerDBSCANAlgorithm>(*i, init_children) << std::endl;
779 }
780 else if(class_name == "TCMakerHorizontalMuonAlgorithm") {
781 std::cout << *conf.get<dunedaq::appmodel::TCMakerHorizontalMuonAlgorithm>(*i, init_children) << std::endl;
782 }
783 else if(class_name == "TCMakerMichelElectronAlgorithm") {
784 std::cout << *conf.get<dunedaq::appmodel::TCMakerMichelElectronAlgorithm>(*i, init_children) << std::endl;
785 }
786 else if(class_name == "TCMakerPlaneCoincidenceAlgorithm") {
787 std::cout << *conf.get<dunedaq::appmodel::TCMakerPlaneCoincidenceAlgorithm>(*i, init_children) << std::endl;
788 }
789 else if(class_name == "TCMakerPrescaleAlgorithm") {
790 std::cout << *conf.get<dunedaq::appmodel::TCMakerPrescaleAlgorithm>(*i, init_children) << std::endl;
791 }
792 else if(class_name == "TCReadoutMap") {
793 std::cout << *conf.get<dunedaq::appmodel::TCReadoutMap>(*i, init_children) << std::endl;
794 }
795 else if(class_name == "TDEAMCModule") {
796 std::cout << *conf.get<dunedaq::appmodel::TDEAMCModule>(*i, init_children) << std::endl;
797 }
798 else if(class_name == "TDEAMCModuleConf") {
799 std::cout << *conf.get<dunedaq::appmodel::TDEAMCModuleConf>(*i, init_children) << std::endl;
800 }
801 else if(class_name == "TDECrateApplication") {
802 std::cout << *conf.get<dunedaq::appmodel::TDECrateApplication>(*i, init_children) << std::endl;
803 }
804 else if(class_name == "TPDataProcessor") {
805 std::cout << *conf.get<dunedaq::appmodel::TPDataProcessor>(*i, init_children) << std::endl;
806 }
807 else if(class_name == "TPReplayApplication") {
808 std::cout << *conf.get<dunedaq::appmodel::TPReplayApplication>(*i, init_children) << std::endl;
809 }
810 else if(class_name == "TPReplayModule") {
811 std::cout << *conf.get<dunedaq::appmodel::TPReplayModule>(*i, init_children) << std::endl;
812 }
813 else if(class_name == "TPReplayModuleConf") {
814 std::cout << *conf.get<dunedaq::appmodel::TPReplayModuleConf>(*i, init_children) << std::endl;
815 }
816 else if(class_name == "TPStreamConf") {
817 std::cout << *conf.get<dunedaq::appmodel::TPStreamConf>(*i, init_children) << std::endl;
818 }
819 else if(class_name == "TPStreamWriterApplication") {
820 std::cout << *conf.get<dunedaq::appmodel::TPStreamWriterApplication>(*i, init_children) << std::endl;
821 }
822 else if(class_name == "TPStreamWriterConf") {
823 std::cout << *conf.get<dunedaq::appmodel::TPStreamWriterConf>(*i, init_children) << std::endl;
824 }
825 else if(class_name == "TPStreamWriterModule") {
826 std::cout << *conf.get<dunedaq::appmodel::TPStreamWriterModule>(*i, init_children) << std::endl;
827 }
828 else if(class_name == "TRBConf") {
829 std::cout << *conf.get<dunedaq::appmodel::TRBConf>(*i, init_children) << std::endl;
830 }
831 else if(class_name == "TRBModule") {
832 std::cout << *conf.get<dunedaq::appmodel::TRBModule>(*i, init_children) << std::endl;
833 }
834 else if(class_name == "TdeAmcDetDataSender") {
835 std::cout << *conf.get<dunedaq::appmodel::TdeAmcDetDataSender>(*i, init_children) << std::endl;
836 }
837 else if(class_name == "TriggerApplication") {
838 std::cout << *conf.get<dunedaq::appmodel::TriggerApplication>(*i, init_children) << std::endl;
839 }
840 else if(class_name == "TriggerBitword") {
841 std::cout << *conf.get<dunedaq::appmodel::TriggerBitword>(*i, init_children) << std::endl;
842 }
843 else if(class_name == "TriggerDataHandlerModule") {
844 std::cout << *conf.get<dunedaq::appmodel::TriggerDataHandlerModule>(*i, init_children) << std::endl;
845 }
846 else if(class_name == "WIBModule") {
847 std::cout << *conf.get<dunedaq::appmodel::WIBModule>(*i, init_children) << std::endl;
848 }
849 else if(class_name == "WIBModuleConf") {
850 std::cout << *conf.get<dunedaq::appmodel::WIBModuleConf>(*i, init_children) << std::endl;
851 }
852 else if(class_name == "WIBPulserSettings") {
853 std::cout << *conf.get<dunedaq::appmodel::WIBPulserSettings>(*i, init_children) << std::endl;
854 }
855 else if(class_name == "WIBSettings") {
856 std::cout << *conf.get<dunedaq::appmodel::WIBSettings>(*i, init_children) << std::endl;
857 }
858 else if(class_name == "WIECApplication") {
859 std::cout << *conf.get<dunedaq::appmodel::WIECApplication>(*i, init_children) << std::endl;
860 }
861 else {
862 std::cerr << "ERROR: do not know how to dump object of " << class_name << " class\n";
863 return (EXIT_FAILURE);
864 }
865 }
866 }
867 catch (dunedaq::conffwk::Exception & ex) {
868 std::cerr << "Caught " << ex << std::endl;
869 return (EXIT_FAILURE);
870 }
871
872 return 0;
873}
Represents database objects.
const std::string & UID() const noexcept
Return object identity.
Defines base class for cache of template objects.
Try to access non-existent object or class.
Definition Errors.hpp:47
static void no_param(const char *s)
static void usage()

◆ no_param()

static void no_param ( const char * s)
static

Definition at line 210 of file dump_dunedaq__appmodel.cpp.

211{
212 std::cerr << "ERROR: the required argument for option \'" << s << "\' is missing\n\n";
213 exit (EXIT_FAILURE);
214}

◆ usage()

static void usage ( const char * s)
static

Definition at line 190 of file dump_dunedaq__appmodel.cpp.

191{
192 std::cout << s << " -d db-name -c class-name [-q query | -i object-id] [-t]\n"
193 "\n"
194 "Options/Arguments:\n"
195 " -d | --data db-name mandatory name of the database\n"
196 " -c | --class-name class-name mandatory name of class\n"
197 " -q | --query query optional query to select class objects\n"
198 " -i | --object-id object-id optional identity to select one object\n"
199 " -t | --init-children all referenced objects are initialized (is used\n"
200 " for debug purposes and performance measurements)\n"
201 " -h | --help print this message\n"
202 "\n"
203 "Description:\n"
204 " The program prints out object(s) of given class.\n"
205 " If no query or object id is provided, all objects of the class are printed.\n"
206 " It is automatically generated by oksdalgen utility.\n"
207 "\n";
208}