00001 #include "fhiclcpp/types/Atom.h" 00002 #include "fhiclcpp/types/Table.h" 00003 #include "fhiclcpp/types/OptionalAtom.h" 00004 #include "fhiclcpp/types/OptionalTable.h" 00005 #include "artdaq/ArtModules/NetMonTransportService.h" 00006 #include "artdaq/ArtModules/RootNetOutput.hh" 00007 #include "art/Framework/Core/OutputModule.h" 00008 #if ART_HEX_VERSION >= 0x21002 00009 # include "art/Framework/IO/ClosingCriteria.h" 00010 #else 00011 # include "art/Framework/IO/Root/RootOutputClosingCriteria.h" 00012 #endif 00013 00014 namespace art { 00018 struct ServicesSchedulerConfig 00019 { 00021 fhicl::Atom<bool> errorOnFailureToPut{ fhicl::Name{"errorOnFailureToPut"}, fhicl::Comment{"This parameter is necessary for correct function of artdaq. Do not modify."}, false }; 00022 }; 00026 struct ServicesConfig 00027 { 00028 fhicl::Table<ServicesSchedulerConfig> scheduler{ fhicl::Name{"scheduler"} }; 00029 fhicl::OptionalTable<NetMonTransportService::Config> netMonTransportServiceInterface{ fhicl::Name{ "NetMonTransportServiceInterface" } }; 00030 }; 00031 00032 struct AnalyzersConfig {}; 00033 struct ProducersConfig {}; 00034 struct FiltersConfig {}; 00035 00039 struct PhysicsConfig 00040 { 00041 fhicl::Table<AnalyzersConfig> analyzers{ fhicl::Name{"analyzers"} }; 00042 fhicl::Table<ProducersConfig> producers{ fhicl::Name{"producers"} }; 00043 fhicl::Table<FiltersConfig> filters{ fhicl::Name{"filters"} }; 00044 00045 fhicl::Sequence<std::string> my_output_modules{ fhicl::Name{"my_output_modules"}, fhicl::Comment{"Output modules (configured in the outputs block) to use"} }; 00046 }; 00047 00051 struct RootOutputConfig 00052 { 00053 using Name = fhicl::Name; 00054 using Comment = fhicl::Comment; 00055 00056 template <typename T> using Atom = fhicl::Atom<T>; 00058 template <typename T> using OptionalAtom = fhicl::OptionalAtom<T>; 00059 00060 fhicl::TableFragment<art::OutputModule::Config> omConfig; 00061 Atom<std::string> catalog{ Name("catalog"), "" }; 00062 OptionalAtom<bool> dropAllEvents{ Name("dropAllEvents") }; 00063 Atom<bool> dropAllSubRuns{ Name("dropAllSubRuns"), false }; 00064 OptionalAtom<bool> fastCloning{ Name("fastCloning") }; 00065 Atom<std::string> tmpDir{ Name("tmpDir"), "/tmp" }; 00066 Atom<int> compressionLevel{ Name("compressionLevel"), 7 }; 00067 Atom<int64_t> saveMemoryObjectThreshold{ Name("saveMemoryObjectThreshold"), -1l }; 00068 Atom<int64_t> treeMaxVirtualSize{ Name("treeMaxVirtualSize"), -1 }; 00069 Atom<int> splitLevel{ Name("splitLevel"), 99 }; 00070 Atom<int> basketSize{ Name("basketSize"), 16384 }; 00071 Atom<bool> dropMetaDataForDroppedData{ Name("dropMetaDataForDroppedData"), false }; 00072 Atom<std::string> dropMetaData{ Name("dropMetaData"), "NONE" }; 00073 Atom<bool> writeParameterSets{ Name("writeParameterSets"), true }; 00074 fhicl::Table<ClosingCriteria::Config> fileProperties{ Name("fileProperties") }; 00075 00079 struct KeysToIgnore 00080 { 00085 std::set<std::string> operator()() const 00086 { 00087 std::set<std::string> keys{ art::OutputModule::Config::KeysToIgnore::get() }; 00088 keys.insert("results"); 00089 return keys; 00090 } 00091 }; 00092 00093 }; 00094 00098 struct OutputsConfig 00099 { 00100 fhicl::OptionalTable<art::RootNetOutput::Config> rootNetOutput{ fhicl::Name{"rootNetOutput"} }; 00101 fhicl::OptionalTable<RootOutputConfig> normalOutput{ fhicl::Name{"normalOutput"} }; 00102 fhicl::OptionalTable<RootOutputConfig> rootDAQOutFile{ fhicl::Name{"rootDAQOutFile"} }; 00103 }; 00104 00108 struct SourceConfig 00109 { 00111 fhicl::Atom<std::string> module_type{ fhicl::Name{ "module_type" }, fhicl::Comment{ "Module type of source. Should be \"RawInput\", \"NetMonInput\", or an experiment-defined input type (e.g. \"DemoInput\")" } }; 00112 }; 00113 00117 struct Config 00118 { 00119 fhicl::Table<art::ServicesConfig> services{ fhicl::Name{"services"} }; 00120 fhicl::Table<art::PhysicsConfig> physics{ fhicl::Name{"physics"} }; 00121 fhicl::Table<art::OutputsConfig> outputs{ fhicl::Name{"outputs"} }; 00122 fhicl::Table<art::SourceConfig> source{ fhicl::Name{"source"} }; 00123 00124 fhicl::Atom<std::string> process_name{ fhicl::Name{"process_name" },fhicl::Comment{"Name of this art processing job"}, "DAQ" }; 00125 }; 00126 }