diff --git a/FWCore/Integration/plugins/ProducerWithPSetDesc.cc b/FWCore/Integration/plugins/ProducerWithPSetDesc.cc index 45611f9fc0b82..9e71ba1420734 100644 --- a/FWCore/Integration/plugins/ProducerWithPSetDesc.cc +++ b/FWCore/Integration/plugins/ProducerWithPSetDesc.cc @@ -533,613 +533,619 @@ namespace edmtest { e.put(std::move(result)); } - void ProducerWithPSetDesc::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription iDesc; - - // Try to exercise the description code by adding all different - // types of parameters with a large range of values. Also - // nested ParameterSets and vectors of them at the end. - - iDesc.addOptionalUntracked("testingAutoGeneratedCfi", true); - - edm::ParameterDescriptionNode* pn; - pn = iDesc.add("p_int", 2147483647); - pn->setComment( - "A big integer. I am trying to test the wrapping of comments in" - " the printed output by putting in a long comment to see if it gets" - " wrapped OK. The comment should get indented to the second column" - " indent on every line. By default newlines should be inserted between" - " words to make the lines fit in the terminal screen width. There is " - "a command line parameter that can be set to override this width to " - "any desired value. If there is no terminal then it should default to " - "80. The logic for setting the width is in edmPluginHelp.cpp"); - - iDesc.addUntracked("p_int_untracked", -2147483647); - iDesc.addOptional("p_int_opt", 0); - iDesc.addOptionalUntracked("p_int_optuntracked", 7); - iDesc.addOptional("p_int_opt_nd"); - iDesc.addOptionalUntracked("p_int_optuntracked_nd"); - - std::vector vint; - iDesc.add>("vint1", vint); - vint.push_back(2147483647); - iDesc.add>(std::string("vint2"), vint); - vint.push_back(-2147483647); - iDesc.add>("vint3", vint); - vint.push_back(0); - iDesc.add>("vint4", vint); - - iDesc.add("uint1", 4294967295U); - iDesc.addUntracked("uint2", 0); - - std::vector vuint; - iDesc.add>("vuint1", vuint); - vuint.push_back(4294967295U); - iDesc.add>("vuint2", vuint); - vuint.push_back(0); - iDesc.add>("vuint3", vuint); - vuint.push_back(11); - iDesc.add>("vuint4", vuint); - vuint.push_back(21); - vuint.push_back(31); - vuint.push_back(41); - iDesc.add>("vuint5", vuint); - - iDesc.add("int64v1", 9000000000000000000LL); - iDesc.add("int64v2", -9000000000000000000LL); - iDesc.add("int64v3", 0); - - std::vector vint64; - iDesc.add>("vint64v1", vint64); - vint64.push_back(9000000000000000000LL); - iDesc.add>("vint64v2", vint64); - vint64.push_back(-9000000000000000000LL); - iDesc.add>("vint64v3", vint64); - vint64.push_back(0); - iDesc.add>("vint64v4", vint64); - - iDesc.add("uint64v1", 18000000000000000000ULL); - iDesc.addUntracked("uint64v2", 0); - - std::vector vuint64; - iDesc.add>("vuint64v1", vuint64); - vuint64.push_back(18000000000000000000ULL); - iDesc.add>("vuint64v2", vuint64); - vuint64.push_back(0); - iDesc.add>("vuint64v3", vuint64); - vuint64.push_back(11); - iDesc.add>("vuint64v4", vuint64); - - iDesc.add("doublev1", std::numeric_limits::min()); - iDesc.addUntracked("doublev2", 0.0); - iDesc.addUntracked("doublev3", 0.3); - - std::vector vdouble; - iDesc.add>("vdoublev1", vdouble); - // cmsRun will fail with a value this big - // vdouble.push_back(std::numeric_limits::max()); - // This works though - vdouble.push_back(1e+300); - iDesc.add>("vdoublev2", vdouble); - vdouble.push_back(0.0); - iDesc.add>("vdoublev3", vdouble); - vdouble.push_back(11.0); - iDesc.add>("vdoublev4", vdouble); - vdouble.push_back(0.3); - iDesc.add>("vdoublev5", vdouble); - - iDesc.add("boolv1", true); - iDesc.add("boolv2", false); - - std::string test("Hello"); - iDesc.add("stringv1", test); - test.clear(); - iDesc.add("stringv2", test); - - std::vector vstring; - iDesc.add>("vstringv1", vstring); - test = "Hello"; - vstring.push_back(test); - iDesc.add>("vstringv2", vstring); - test = "World"; - vstring.push_back(test); - iDesc.add>("vstringv3", vstring); - test = ""; - vstring.push_back(test); - iDesc.add>("vstringv4", vstring); - - edm::EventID eventID(11, 0, 12); - iDesc.add("eventIDv1", eventID); - edm::EventID eventID2(101, 0, 102); - iDesc.add("eventIDv2", eventID2); - std::vector vEventID; - iDesc.add>("vEventIDv1", vEventID); - edm::EventID eventID3(1000, 0, 1100); - vEventID.push_back(eventID3); - iDesc.add>("vEventIDv2", vEventID); - edm::EventID eventID4(10000, 0, 11000); - vEventID.push_back(eventID4); - iDesc.add>("vEventIDv3", vEventID); - edm::EventID eventID5(100000, 0, 110000); - vEventID.push_back(eventID5); - iDesc.add>("vEventIDv4", vEventID); - - edm::LuminosityBlockID luminosityID(11, 12); - iDesc.add("luminosityIDv1", luminosityID); - edm::LuminosityBlockID luminosityID2(101, 102); - iDesc.add("luminosityIDv2", luminosityID2); - - std::vector vLuminosityBlockID; - iDesc.add>("vLuminosityBlockIDv1", vLuminosityBlockID); - edm::LuminosityBlockID luminosityID3(1000, 1100); - vLuminosityBlockID.push_back(luminosityID3); - iDesc.add>("vLuminosityBlockIDv2", vLuminosityBlockID); - edm::LuminosityBlockID luminosityID4(10000, 11000); - vLuminosityBlockID.push_back(luminosityID4); - iDesc.add>("vLuminosityBlockIDv3", vLuminosityBlockID); - edm::LuminosityBlockID luminosityID5(100000, 110000); - vLuminosityBlockID.push_back(luminosityID5); - iDesc.add>("vLuminosityBlockIDv4", vLuminosityBlockID); - - edm::LuminosityBlockRange lumiRange(1, 1, 9, 9); - iDesc.add("lumiRangev1", lumiRange); - edm::LuminosityBlockRange lumiRange2(3, 4, 1000, 1000); - iDesc.add("lumiRangev2", lumiRange2); - - std::vector vLumiRange; - iDesc.add>("vLumiRangev1", vLumiRange); - vLumiRange.push_back(lumiRange); - iDesc.add>("vLumiRangev2", vLumiRange); - vLumiRange.push_back(lumiRange2); - iDesc.add>("vLumiRangev3", vLumiRange); - - edm::EventRange eventRange(1, 0, 1, 8, 0, 8); - iDesc.add("eventRangev1", eventRange); - edm::EventRange eventRange2(3, 0, 4, 1001, 0, 1002); - iDesc.add("eventRangev2", eventRange2); - - std::vector vEventRange; - iDesc.add>("vEventRangev1", vEventRange); - vEventRange.push_back(eventRange); - iDesc.add>("vEventRangev2", vEventRange); - vEventRange.push_back(eventRange2); - iDesc.add>("vEventRangev3", vEventRange); - - edm::InputTag inputTag("One", "Two", "Three"); - iDesc.add("inputTagv1", inputTag); - edm::InputTag inputTag2("One", "Two"); - iDesc.add("inputTagv2", inputTag2); - edm::InputTag inputTag3("One"); - iDesc.add("inputTagv3", inputTag3); - edm::InputTag inputTag4("One", "", "Three"); - iDesc.add("inputTagv4", inputTag4); + namespace { + edm::ParameterSetDescription description(int p_int) { + edm::ParameterSetDescription iDesc; + + // Try to exercise the description code by adding all different + // types of parameters with a large range of values. Also + // nested ParameterSets and vectors of them at the end. + + iDesc.addOptionalUntracked("testingAutoGeneratedCfi", true); + + edm::ParameterDescriptionNode* pn; + pn = iDesc.add("p_int", p_int); + pn->setComment( + "A big integer. I am trying to test the wrapping of comments in" + " the printed output by putting in a long comment to see if it gets" + " wrapped OK. The comment should get indented to the second column" + " indent on every line. By default newlines should be inserted between" + " words to make the lines fit in the terminal screen width. There is " + "a command line parameter that can be set to override this width to " + "any desired value. If there is no terminal then it should default to " + "80. The logic for setting the width is in edmPluginHelp.cpp"); + + iDesc.addUntracked("p_int_untracked", -2147483647); + iDesc.addOptional("p_int_opt", 0); + iDesc.addOptionalUntracked("p_int_optuntracked", 7); + iDesc.addOptional("p_int_opt_nd"); + iDesc.addOptionalUntracked("p_int_optuntracked_nd"); + + std::vector vint; + iDesc.add>("vint1", vint); + vint.push_back(2147483647); + iDesc.add>(std::string("vint2"), vint); + vint.push_back(-2147483647); + iDesc.add>("vint3", vint); + vint.push_back(0); + iDesc.add>("vint4", vint); + + iDesc.add("uint1", 4294967295U); + iDesc.addUntracked("uint2", 0); + + std::vector vuint; + iDesc.add>("vuint1", vuint); + vuint.push_back(4294967295U); + iDesc.add>("vuint2", vuint); + vuint.push_back(0); + iDesc.add>("vuint3", vuint); + vuint.push_back(11); + iDesc.add>("vuint4", vuint); + vuint.push_back(21); + vuint.push_back(31); + vuint.push_back(41); + iDesc.add>("vuint5", vuint); + + iDesc.add("int64v1", 9000000000000000000LL); + iDesc.add("int64v2", -9000000000000000000LL); + iDesc.add("int64v3", 0); + + std::vector vint64; + iDesc.add>("vint64v1", vint64); + vint64.push_back(9000000000000000000LL); + iDesc.add>("vint64v2", vint64); + vint64.push_back(-9000000000000000000LL); + iDesc.add>("vint64v3", vint64); + vint64.push_back(0); + iDesc.add>("vint64v4", vint64); + + iDesc.add("uint64v1", 18000000000000000000ULL); + iDesc.addUntracked("uint64v2", 0); + + std::vector vuint64; + iDesc.add>("vuint64v1", vuint64); + vuint64.push_back(18000000000000000000ULL); + iDesc.add>("vuint64v2", vuint64); + vuint64.push_back(0); + iDesc.add>("vuint64v3", vuint64); + vuint64.push_back(11); + iDesc.add>("vuint64v4", vuint64); + + iDesc.add("doublev1", std::numeric_limits::min()); + iDesc.addUntracked("doublev2", 0.0); + iDesc.addUntracked("doublev3", 0.3); + + std::vector vdouble; + iDesc.add>("vdoublev1", vdouble); + // cmsRun will fail with a value this big + // vdouble.push_back(std::numeric_limits::max()); + // This works though + vdouble.push_back(1e+300); + iDesc.add>("vdoublev2", vdouble); + vdouble.push_back(0.0); + iDesc.add>("vdoublev3", vdouble); + vdouble.push_back(11.0); + iDesc.add>("vdoublev4", vdouble); + vdouble.push_back(0.3); + iDesc.add>("vdoublev5", vdouble); + + iDesc.add("boolv1", true); + iDesc.add("boolv2", false); + + std::string test("Hello"); + iDesc.add("stringv1", test); + test.clear(); + iDesc.add("stringv2", test); + + std::vector vstring; + iDesc.add>("vstringv1", vstring); + test = "Hello"; + vstring.push_back(test); + iDesc.add>("vstringv2", vstring); + test = "World"; + vstring.push_back(test); + iDesc.add>("vstringv3", vstring); + test = ""; + vstring.push_back(test); + iDesc.add>("vstringv4", vstring); + + edm::EventID eventID(11, 0, 12); + iDesc.add("eventIDv1", eventID); + edm::EventID eventID2(101, 0, 102); + iDesc.add("eventIDv2", eventID2); + std::vector vEventID; + iDesc.add>("vEventIDv1", vEventID); + edm::EventID eventID3(1000, 0, 1100); + vEventID.push_back(eventID3); + iDesc.add>("vEventIDv2", vEventID); + edm::EventID eventID4(10000, 0, 11000); + vEventID.push_back(eventID4); + iDesc.add>("vEventIDv3", vEventID); + edm::EventID eventID5(100000, 0, 110000); + vEventID.push_back(eventID5); + iDesc.add>("vEventIDv4", vEventID); + + edm::LuminosityBlockID luminosityID(11, 12); + iDesc.add("luminosityIDv1", luminosityID); + edm::LuminosityBlockID luminosityID2(101, 102); + iDesc.add("luminosityIDv2", luminosityID2); + + std::vector vLuminosityBlockID; + iDesc.add>("vLuminosityBlockIDv1", vLuminosityBlockID); + edm::LuminosityBlockID luminosityID3(1000, 1100); + vLuminosityBlockID.push_back(luminosityID3); + iDesc.add>("vLuminosityBlockIDv2", vLuminosityBlockID); + edm::LuminosityBlockID luminosityID4(10000, 11000); + vLuminosityBlockID.push_back(luminosityID4); + iDesc.add>("vLuminosityBlockIDv3", vLuminosityBlockID); + edm::LuminosityBlockID luminosityID5(100000, 110000); + vLuminosityBlockID.push_back(luminosityID5); + iDesc.add>("vLuminosityBlockIDv4", vLuminosityBlockID); + + edm::LuminosityBlockRange lumiRange(1, 1, 9, 9); + iDesc.add("lumiRangev1", lumiRange); + edm::LuminosityBlockRange lumiRange2(3, 4, 1000, 1000); + iDesc.add("lumiRangev2", lumiRange2); + + std::vector vLumiRange; + iDesc.add>("vLumiRangev1", vLumiRange); + vLumiRange.push_back(lumiRange); + iDesc.add>("vLumiRangev2", vLumiRange); + vLumiRange.push_back(lumiRange2); + iDesc.add>("vLumiRangev3", vLumiRange); + + edm::EventRange eventRange(1, 0, 1, 8, 0, 8); + iDesc.add("eventRangev1", eventRange); + edm::EventRange eventRange2(3, 0, 4, 1001, 0, 1002); + iDesc.add("eventRangev2", eventRange2); + + std::vector vEventRange; + iDesc.add>("vEventRangev1", vEventRange); + vEventRange.push_back(eventRange); + iDesc.add>("vEventRangev2", vEventRange); + vEventRange.push_back(eventRange2); + iDesc.add>("vEventRangev3", vEventRange); + + edm::InputTag inputTag("One", "Two", "Three"); + iDesc.add("inputTagv1", inputTag); + edm::InputTag inputTag2("One", "Two"); + iDesc.add("inputTagv2", inputTag2); + edm::InputTag inputTag3("One"); + iDesc.add("inputTagv3", inputTag3); + edm::InputTag inputTag4("One", "", "Three"); + iDesc.add("inputTagv4", inputTag4); + + std::vector vInputTag; + iDesc.add>("vInputTagv1", vInputTag); + vInputTag.push_back(inputTag); + iDesc.add>("vInputTagv2", vInputTag); + vInputTag.push_back(inputTag2); + iDesc.add>("vInputTagv3", vInputTag); + vInputTag.push_back(inputTag3); + iDesc.add>("vInputTagv4", vInputTag); + vInputTag.push_back(inputTag4); + iDesc.add>("vInputTagv5", vInputTag); + + edm::ESInputTag esinputTag("One", "Two"); + iDesc.add("esinputTagv1", esinputTag); + edm::ESInputTag esinputTag2("One", ""); + iDesc.add("esinputTagv2", esinputTag2); + edm::ESInputTag esinputTag3("", "Two"); + iDesc.add("esinputTagv3", esinputTag3); + + std::vector vESInputTag; + iDesc.add>("vESInputTagv1", vESInputTag); + vESInputTag.push_back(esinputTag); + iDesc.add>("vESInputTagv2", vESInputTag); + vESInputTag.push_back(esinputTag2); + iDesc.add>("vESInputTagv3", vESInputTag); + vESInputTag.push_back(esinputTag3); + iDesc.add>("vESInputTagv4", vESInputTag); + + // For purposes of the test, this just needs to point to any file + // that exists. + edm::FileInPath fileInPath("FWCore/Integration/plugins/ProducerWithPSetDesc.cc"); + iDesc.add("fileInPath", fileInPath); + + edm::EmptyGroupDescription emptyGroup; + iDesc.addNode(emptyGroup); + + edm::ParameterSetDescription bar; + bar.add("Drinks", 5); + bar.addUntracked("uDrinks", 5); + bar.addOptional("oDrinks", 5); + bar.addOptionalUntracked("ouDrinks", 5); + iDesc.add("bar", bar); + + edm::ParameterDescription test101("test101", bar, true); + iDesc.addOptionalNode(test101, false); + + edm::ParameterSetDescription barx; + barx.add("Drinks", 5); + barx.addUntracked("uDrinks", 5); + barx.addOptional("oDrinks", 5); + barx.addOptionalUntracked("ouDrinks", 5); + barx.addOptional("ndoDrinks"); + barx.addOptionalUntracked("ndouDrinks"); + + edm::ParameterDescription> test102( + "test102", edm::ParameterSetDescription(), true); + iDesc.addOptionalNode(test102, false); + + edm::ParameterDescription> test103(std::string("test103"), barx, true); + iDesc.addOptionalNode(test103, false); + + std::vector defaultVPSet104; + defaultVPSet104.push_back(edm::ParameterSet()); + edm::ParameterDescription> test104( + std::string("test104"), barx, false, defaultVPSet104); + iDesc.addNode(test104); + + std::vector defaultVPSet105; + edm::ParameterDescription> test105( + std::string("test105"), barx, false, defaultVPSet105); + iDesc.addNode(test105); + + double d1 = 0.1; + double d2 = 0.2; + double d3 = 0.3; + iDesc.addNode(edm::ParameterDescription("test1", d1, true)); + iDesc.addOptionalNode(edm::ParameterDescription("test2", d2, true), true); + // The value in the second argument is not used in this case + iDesc.addOptionalNode(edm::ParameterDescription("test3", d3, true), false); + + iDesc.addOptionalNode(edm::ParameterDescription("testA", "fooA", true) and + edm::ParameterDescription("testB", 100, true) && + edm::ParameterDescription("testC", 101, true), + true); - std::vector vInputTag; - iDesc.add>("vInputTagv1", vInputTag); - vInputTag.push_back(inputTag); - iDesc.add>("vInputTagv2", vInputTag); - vInputTag.push_back(inputTag2); - iDesc.add>("vInputTagv3", vInputTag); - vInputTag.push_back(inputTag3); - iDesc.add>("vInputTagv4", vInputTag); - vInputTag.push_back(inputTag4); - iDesc.add>("vInputTagv5", vInputTag); - - edm::ESInputTag esinputTag("One", "Two"); - iDesc.add("esinputTagv1", esinputTag); - edm::ESInputTag esinputTag2("One", ""); - iDesc.add("esinputTagv2", esinputTag2); - edm::ESInputTag esinputTag3("", "Two"); - iDesc.add("esinputTagv3", esinputTag3); + iDesc.ifValueOptional(edm::ParameterDescription("oiswitch", 1, true), + 0 >> edm::ParameterDescription("oivalue", 100, true) or + 1 >> (edm::ParameterDescription("oivalue1", 101.0, true) and + edm::ParameterDescription("oivalue2", 101.0, true)) or + 2 >> edm::ParameterDescription("oivalue", "102", true), + true); - std::vector vESInputTag; - iDesc.add>("vESInputTagv1", vESInputTag); - vESInputTag.push_back(esinputTag); - iDesc.add>("vESInputTagv2", vESInputTag); - vESInputTag.push_back(esinputTag2); - iDesc.add>("vESInputTagv3", vESInputTag); - vESInputTag.push_back(esinputTag3); - iDesc.add>("vESInputTagv4", vESInputTag); + edm::ParameterSetDescription deeplyNested; + + bool case0 = true; + bool case1 = false; + deeplyNested.ifValue(edm::ParameterDescription("bswitch", false, true), + case0 >> edm::ParameterDescription("bvalue", 100, true) or + case1 >> (edm::ParameterDescription("bvalue1", 101.0, true) and + edm::ParameterDescription("bvalue2", 101.0, true))); + deeplyNested.ifValue(edm::ParameterDescription("iswitch", 1, true), + 0 >> edm::ParameterDescription("ivalue", 100, true) or + 1 >> (edm::ParameterDescription("ivalue1", 101.0, true) and + edm::ParameterDescription("ivalue2", 101.0, false)) or + 2 >> edm::ParameterDescription("ivalue", "102", true)); + deeplyNested.ifValue(edm::ParameterDescription("sswitch", std::string("1"), true), + std::string("0") >> edm::ParameterDescription("svalue", 100, true) or + "1" >> (edm::ParameterDescription("svalue1", 101.0, true) and + edm::ParameterDescription("svalue2", 101.0, true)) or + "2" >> edm::ParameterDescription("svalue", "102", true)); + + deeplyNested.ifValueOptional(edm::ParameterDescription("ndiswitch", 1, true), + 0 >> edm::ParameterDescription("ndivalue", 100, true) or + 1 >> (edm::ParameterDescription("ndivalue1", 101.0, true) and + edm::ParameterDescription("ndivalue2", 101.0, true)) or + 2 >> edm::ParameterDescription("ndivalue", "102", true), + false); + + deeplyNested.add("testint", 1000); + + barx.add("testDeeplyNested", deeplyNested); + + iDesc.add("testDeeplyNested2", deeplyNested); + + edm::ParameterSetDescription validator; + validator.add("xvalue", 7); + std::vector vDefaults; + edm::ParameterSet vDefaults0; + vDefaults.push_back(vDefaults0); + edm::ParameterSet vDefaults1; + vDefaults1.addParameter("xvalue", 100); + vDefaults.push_back(vDefaults1); + barx.addVPSet("anotherVPSet", validator, vDefaults); + + std::vector defaultVPSet; + + edm::ParameterSet psetInVector1; + psetInVector1.addParameter("oDrinks", 11U); + defaultVPSet.push_back(psetInVector1); + + edm::ParameterSet psetInVector2; + psetInVector2.addParameter("oDrinks", 11U); + psetInVector2.addUntrackedParameter("ouDrinks", 11U); + psetInVector2.addUntrackedParameter("ndouDrinks", 11U); - // For purposes of the test, this just needs to point to any file - // that exists. - edm::FileInPath fileInPath("FWCore/Integration/plugins/ProducerWithPSetDesc.cc"); - iDesc.add("fileInPath", fileInPath); - - edm::EmptyGroupDescription emptyGroup; - iDesc.addNode(emptyGroup); - - edm::ParameterSetDescription bar; - bar.add("Drinks", 5); - bar.addUntracked("uDrinks", 5); - bar.addOptional("oDrinks", 5); - bar.addOptionalUntracked("ouDrinks", 5); - iDesc.add("bar", bar); - - edm::ParameterDescription test101("test101", bar, true); - iDesc.addOptionalNode(test101, false); - - edm::ParameterSetDescription barx; - barx.add("Drinks", 5); - barx.addUntracked("uDrinks", 5); - barx.addOptional("oDrinks", 5); - barx.addOptionalUntracked("ouDrinks", 5); - barx.addOptional("ndoDrinks"); - barx.addOptionalUntracked("ndouDrinks"); - - edm::ParameterDescription> test102("test102", edm::ParameterSetDescription(), true); - iDesc.addOptionalNode(test102, false); - - edm::ParameterDescription> test103(std::string("test103"), barx, true); - iDesc.addOptionalNode(test103, false); - - std::vector defaultVPSet104; - defaultVPSet104.push_back(edm::ParameterSet()); - edm::ParameterDescription> test104( - std::string("test104"), barx, false, defaultVPSet104); - iDesc.addNode(test104); - - std::vector defaultVPSet105; - edm::ParameterDescription> test105( - std::string("test105"), barx, false, defaultVPSet105); - iDesc.addNode(test105); - - double d1 = 0.1; - double d2 = 0.2; - double d3 = 0.3; - iDesc.addNode(edm::ParameterDescription("test1", d1, true)); - iDesc.addOptionalNode(edm::ParameterDescription("test2", d2, true), true); - // The value in the second argument is not used in this case - iDesc.addOptionalNode(edm::ParameterDescription("test3", d3, true), false); - - iDesc.addOptionalNode(edm::ParameterDescription("testA", "fooA", true) and - edm::ParameterDescription("testB", 100, true) && - edm::ParameterDescription("testC", 101, true), - true); - - iDesc.ifValueOptional(edm::ParameterDescription("oiswitch", 1, true), - 0 >> edm::ParameterDescription("oivalue", 100, true) or - 1 >> (edm::ParameterDescription("oivalue1", 101.0, true) and - edm::ParameterDescription("oivalue2", 101.0, true)) or - 2 >> edm::ParameterDescription("oivalue", "102", true), - true); - - edm::ParameterSetDescription deeplyNested; - - bool case0 = true; - bool case1 = false; - deeplyNested.ifValue(edm::ParameterDescription("bswitch", false, true), - case0 >> edm::ParameterDescription("bvalue", 100, true) or - case1 >> (edm::ParameterDescription("bvalue1", 101.0, true) and - edm::ParameterDescription("bvalue2", 101.0, true))); - deeplyNested.ifValue(edm::ParameterDescription("iswitch", 1, true), - 0 >> edm::ParameterDescription("ivalue", 100, true) or - 1 >> (edm::ParameterDescription("ivalue1", 101.0, true) and - edm::ParameterDescription("ivalue2", 101.0, false)) or - 2 >> edm::ParameterDescription("ivalue", "102", true)); - deeplyNested.ifValue(edm::ParameterDescription("sswitch", std::string("1"), true), - std::string("0") >> edm::ParameterDescription("svalue", 100, true) or - "1" >> (edm::ParameterDescription("svalue1", 101.0, true) and - edm::ParameterDescription("svalue2", 101.0, true)) or - "2" >> edm::ParameterDescription("svalue", "102", true)); - - deeplyNested.ifValueOptional(edm::ParameterDescription("ndiswitch", 1, true), - 0 >> edm::ParameterDescription("ndivalue", 100, true) or - 1 >> (edm::ParameterDescription("ndivalue1", 101.0, true) and - edm::ParameterDescription("ndivalue2", 101.0, true)) or - 2 >> edm::ParameterDescription("ndivalue", "102", true), - false); - - deeplyNested.add("testint", 1000); - - barx.add("testDeeplyNested", deeplyNested); - - iDesc.add("testDeeplyNested2", deeplyNested); - - edm::ParameterSetDescription validator; - validator.add("xvalue", 7); - std::vector vDefaults; - edm::ParameterSet vDefaults0; - vDefaults.push_back(vDefaults0); - edm::ParameterSet vDefaults1; - vDefaults1.addParameter("xvalue", 100); - vDefaults.push_back(vDefaults1); - barx.addVPSet("anotherVPSet", validator, vDefaults); - - std::vector defaultVPSet; - - edm::ParameterSet psetInVector1; - psetInVector1.addParameter("oDrinks", 11U); - defaultVPSet.push_back(psetInVector1); - - edm::ParameterSet psetInVector2; - psetInVector2.addParameter("oDrinks", 11U); - psetInVector2.addUntrackedParameter("ouDrinks", 11U); - psetInVector2.addUntrackedParameter("ndouDrinks", 11U); - - std::vector anotherDefaultVPSet; - anotherDefaultVPSet.push_back(edm::ParameterSet()); - edm::ParameterSet anotherParameterSet; - anotherParameterSet.addParameter("xvalue", 17); - anotherDefaultVPSet.push_back(anotherParameterSet); - psetInVector2.addParameter>("anotherVPSet", anotherDefaultVPSet); - - edm::ParameterSet defaultForDeeplyNested; - defaultForDeeplyNested.addParameter("testint", 2); - psetInVector2.addParameter("testDeeplyNested", defaultForDeeplyNested); - - defaultVPSet.push_back(psetInVector2); - - iDesc.addVPSet("bars", barx, defaultVPSet); - - // Alternate way to add a ParameterSetDescription - edm::ParameterDescriptionBase* parDescription; - parDescription = iDesc.addOptional("subpset", edm::ParameterSetDescription()); - edm::ParameterSetDescription* subPsetDescription = parDescription->parameterSetDescription(); - - subPsetDescription->add("xvalue", 11); - subPsetDescription->addUntracked(std::string("bar"), bar); - - // ----------------------------------------------- + std::vector anotherDefaultVPSet; + anotherDefaultVPSet.push_back(edm::ParameterSet()); + edm::ParameterSet anotherParameterSet; + anotherParameterSet.addParameter("xvalue", 17); + anotherDefaultVPSet.push_back(anotherParameterSet); + psetInVector2.addParameter>("anotherVPSet", anotherDefaultVPSet); - edm::ParameterSetDescription wildcardPset; - wildcardPset.addOptional("p_uint_opt", 0); - wildcardPset.addWildcard("*"); - pn = wildcardPset.addWildcardUntracked(std::string("*")); - pn->setComment("A comment for a wildcard parameter"); + edm::ParameterSet defaultForDeeplyNested; + defaultForDeeplyNested.addParameter("testint", 2); + psetInVector2.addParameter("testDeeplyNested", defaultForDeeplyNested); - std::unique_ptr wnode = - std::make_unique>("*", edm::RequireExactlyOne, true); - wildcardPset.addOptionalNode(std::move(wnode), false); + defaultVPSet.push_back(psetInVector2); - edm::ParameterSetDescription wSet1; - wSet1.add("Drinks", 5); + iDesc.addVPSet("bars", barx, defaultVPSet); - std::unique_ptr wnode2 = - std::make_unique>( - "*", edm::RequireAtLeastOne, true, wSet1); - wildcardPset.addOptionalNode(std::move(wnode2), false); + // Alternate way to add a ParameterSetDescription + edm::ParameterDescriptionBase* parDescription; + parDescription = iDesc.addOptional("subpset", edm::ParameterSetDescription()); + edm::ParameterSetDescription* subPsetDescription = parDescription->parameterSetDescription(); - std::unique_ptr wnode3 = - std::make_unique>>("*", edm::RequireExactlyOne, true); - wildcardPset.addOptionalNode(std::move(wnode3), false); + subPsetDescription->add("xvalue", 11); + subPsetDescription->addUntracked(std::string("bar"), bar); - wSet1.add("Drinks2", 11); + // ----------------------------------------------- - std::unique_ptr wnode4 = - std::make_unique>>( - "*", edm::RequireAtLeastOne, true, wSet1); - wildcardPset.addOptionalNode(std::move(wnode4), false); + edm::ParameterSetDescription wildcardPset; + wildcardPset.addOptional("p_uint_opt", 0); + wildcardPset.addWildcard("*"); + pn = wildcardPset.addWildcardUntracked(std::string("*")); + pn->setComment("A comment for a wildcard parameter"); - iDesc.add("wildcardPset", wildcardPset); + std::unique_ptr wnode = + std::make_unique>("*", edm::RequireExactlyOne, true); + wildcardPset.addOptionalNode(std::move(wnode), false); - // --------------------------------------------- + edm::ParameterSetDescription wSet1; + wSet1.add("Drinks", 5); - std::vector testIntVector; - testIntVector.push_back(21); - testIntVector.push_back(22); - edm::ParameterSetDescription switchPset; - pn = switchPset.ifValue(edm::ParameterDescription("iswitch", 1, true), - 0 >> edm::ParameterDescription>("ivalue", testIntVector, true) or - 1 >> (edm::ParameterDescription("ivalue1", 101.0, true) and - edm::ParameterDescription("ivalue2", 101.0, true)) or - 2 >> edm::ParameterDescription("ivalue", "102", true)); - pn->setComment("Comment for a ParameterSwitch"); + std::unique_ptr wnode2 = + std::make_unique>( + "*", edm::RequireAtLeastOne, true, wSet1); + wildcardPset.addOptionalNode(std::move(wnode2), false); - switchPset - .ifValue(edm::ParameterDescription("addTeVRefits", true, true), - true >> (edm::ParameterDescription("pickySrc", edm::InputTag(), true) and - edm::ParameterDescription("tpfmsSrc", edm::InputTag(), true)) or - false >> edm::EmptyGroupDescription()) - ->setComment("If TeV refits are added, their sources need to be specified"); + std::unique_ptr wnode3 = + std::make_unique>>("*", edm::RequireExactlyOne, true); + wildcardPset.addOptionalNode(std::move(wnode3), false); - iDesc.add("switchPset", switchPset); + wSet1.add("Drinks2", 11); - // ----------------------------------------------- + std::unique_ptr wnode4 = + std::make_unique>>( + "*", edm::RequireAtLeastOne, true, wSet1); + wildcardPset.addOptionalNode(std::move(wnode4), false); - edm::ParameterSetDescription xorPset; - xorPset.addNode(edm::ParameterDescription("name", "11", true) xor - edm::ParameterDescription("name", 11U, true)); + iDesc.add("wildcardPset", wildcardPset); - xorPset.addNode(edm::ParameterDescription("name1", "11", true) xor - edm::ParameterDescription("name1", 11U, true)); + // --------------------------------------------- - xorPset.addOptionalNode(edm::ParameterDescription("name2", "11", true) xor - edm::ParameterDescription("name2", 11U, true), - false); + std::vector testIntVector; + testIntVector.push_back(21); + testIntVector.push_back(22); + edm::ParameterSetDescription switchPset; + pn = switchPset.ifValue(edm::ParameterDescription("iswitch", 1, true), + 0 >> edm::ParameterDescription>("ivalue", testIntVector, true) or + 1 >> (edm::ParameterDescription("ivalue1", 101.0, true) and + edm::ParameterDescription("ivalue2", 101.0, true)) or + 2 >> edm::ParameterDescription("ivalue", "102", true)); + pn->setComment("Comment for a ParameterSwitch"); - xorPset.addNode(edm::ParameterDescription("name3", "11", true) xor - edm::ParameterDescription("name4", 11U, true) xor test101 xor test103); + switchPset + .ifValue(edm::ParameterDescription("addTeVRefits", true, true), + true >> (edm::ParameterDescription("pickySrc", edm::InputTag(), true) and + edm::ParameterDescription("tpfmsSrc", edm::InputTag(), true)) or + false >> edm::EmptyGroupDescription()) + ->setComment("If TeV refits are added, their sources need to be specified"); - iDesc.add("xorPset", xorPset); + iDesc.add("switchPset", switchPset); - // ----------------------------------------- + // ----------------------------------------------- - edm::ParameterSetDescription orPset; + edm::ParameterSetDescription xorPset; + xorPset.addNode(edm::ParameterDescription("name", "11", true) xor + edm::ParameterDescription("name", 11U, true)); - orPset.addNode(edm::ParameterDescription("x1", "11", true) or - edm::ParameterDescription("x2", 11U, true)); + xorPset.addNode(edm::ParameterDescription("name1", "11", true) xor + edm::ParameterDescription("name1", 11U, true)); - orPset.addNode(edm::ParameterDescription("y1", "11", true) or - edm::ParameterDescription("y2", 11U, true)); + xorPset.addOptionalNode(edm::ParameterDescription("name2", "11", true) xor + edm::ParameterDescription("name2", 11U, true), + false); - orPset.addOptionalNode(edm::ParameterDescription("z1", "11", true) or - edm::ParameterDescription("z2", 11U, true) or test101 or test103, - false); + xorPset.addNode(edm::ParameterDescription("name3", "11", true) xor + edm::ParameterDescription("name4", 11U, true) xor test101 xor test103); - iDesc.add("orPset", orPset); + iDesc.add("xorPset", xorPset); - // ------------------------------------------------ + // ----------------------------------------- - edm::ParameterSetDescription andPset; + edm::ParameterSetDescription orPset; - andPset.addNode(edm::ParameterDescription("x1", "11", true) and - edm::ParameterDescription("x2", 11U, true)); + orPset.addNode(edm::ParameterDescription("x1", "11", true) or + edm::ParameterDescription("x2", 11U, true)); - andPset.addNode(edm::ParameterDescription("y1", "11", true) and - edm::ParameterDescription("y2", 11U, true)); + orPset.addNode(edm::ParameterDescription("y1", "11", true) or + edm::ParameterDescription("y2", 11U, true)); - andPset.addNode(edm::ParameterDescription("z1", "11", true) and - edm::ParameterDescription("z2", 11U, true)); + orPset.addOptionalNode(edm::ParameterDescription("z1", "11", true) or + edm::ParameterDescription("z2", 11U, true) or test101 or test103, + false); - andPset.addOptionalNode(edm::ParameterDescription("a1", "11", true) and - edm::ParameterDescription("a2", 11U, true), - false); + iDesc.add("orPset", orPset); - andPset.addOptionalNode((edm::ParameterDescription("b1", "11", true) and - edm::ParameterDescription("b2", 11U, true)) and - edm::ParameterDescription("b3", 11U, true) and - (edm::ParameterDescription("b4", 11U, true) and - (edm::ParameterDescription("b5", 11U, true) and - edm::ParameterDescription("b6", 11U, true))), - true); + // ------------------------------------------------ - iDesc.add("andPset", andPset); + edm::ParameterSetDescription andPset; - // -------------------------------------- + andPset.addNode(edm::ParameterDescription("x1", "11", true) and + edm::ParameterDescription("x2", 11U, true)); - edm::ParameterSetDescription ifExistsPset; + andPset.addNode(edm::ParameterDescription("y1", "11", true) and + edm::ParameterDescription("y2", 11U, true)); + + andPset.addNode(edm::ParameterDescription("z1", "11", true) and + edm::ParameterDescription("z2", 11U, true)); + + andPset.addOptionalNode(edm::ParameterDescription("a1", "11", true) and + edm::ParameterDescription("a2", 11U, true), + false); + + andPset.addOptionalNode((edm::ParameterDescription("b1", "11", true) and + edm::ParameterDescription("b2", 11U, true)) and + edm::ParameterDescription("b3", 11U, true) and + (edm::ParameterDescription("b4", 11U, true) and + (edm::ParameterDescription("b5", 11U, true) and + edm::ParameterDescription("b6", 11U, true))), + true); + + iDesc.add("andPset", andPset); + + // -------------------------------------- + + edm::ParameterSetDescription ifExistsPset; + + ifExistsPset.ifExists(edm::ParameterDescription("x1", 11U, true), + edm::ParameterDescription("x2", "11", true)); + + ifExistsPset.ifExistsOptional(edm::ParameterDescription("y1", 11U, true), + edm::ParameterDescription("y2", "11", true), + false); + + ifExistsPset.ifExists(edm::ParameterDescription("z1", 11U, true), + edm::ParameterDescription("z2", "11", true)); + + iDesc.add("ifExistsPset", ifExistsPset); + + // ------------------------------------------ + + edm::ParameterSetDescription allowedLabelsPset; + + allowedLabelsPset.addOptional("p_int_opt", 0); + allowedLabelsPset.labelsFrom("testAllowedLabels"); + allowedLabelsPset.labelsFromUntracked(std::string("testAllowedLabelsUntracked")); + allowedLabelsPset.labelsFromOptional("testOptAllowedLabels", false); + allowedLabelsPset.labelsFromOptionalUntracked(std::string("testOptAllowedLabelsUntracked"), false); + allowedLabelsPset.labelsFromOptionalUntracked( + std::string("testWithSet"), true, bar); + + allowedLabelsPset.labelsFromOptionalUntracked>( + std::string("testWithVectorOfSets"), true, bar); + + iDesc.add("allowedLabelsPset", allowedLabelsPset); - ifExistsPset.ifExists(edm::ParameterDescription("x1", 11U, true), - edm::ParameterDescription("x2", "11", true)); + edm::ParameterSetDescription noDefaultPset3; - ifExistsPset.ifExistsOptional(edm::ParameterDescription("y1", 11U, true), - edm::ParameterDescription("y2", "11", true), - false); + noDefaultPset3.addOptional(std::string("noDefault1")); + noDefaultPset3.addOptional>("noDefault2"); + noDefaultPset3.addOptional("noDefault3"); + noDefaultPset3.addOptional>("noDefault4"); + noDefaultPset3.addOptional("noDefault5"); + noDefaultPset3.addOptional>("noDefault6"); + noDefaultPset3.addOptional("noDefault7"); + noDefaultPset3.addOptional>("noDefault8"); + noDefaultPset3.addOptional("noDefault9"); + noDefaultPset3.addOptional>("noDefault10"); + noDefaultPset3.addOptional("noDefault11"); + noDefaultPset3.addOptional("noDefault12"); + noDefaultPset3.addOptional>("noDefault13"); + noDefaultPset3.addOptional("noDefault14"); + noDefaultPset3.addOptional>("noDefault15"); + noDefaultPset3.addOptional("noDefault16"); + noDefaultPset3.addOptional>("noDefault17"); + noDefaultPset3.addOptional("noDefault18"); + noDefaultPset3.addOptional>("noDefault19"); + noDefaultPset3.addOptional("noDefault20"); + noDefaultPset3.addOptional("noDefault21"); + noDefaultPset3.addOptional>("noDefault22"); + noDefaultPset3.addOptional("noDefault23"); + noDefaultPset3.addOptional>("noDefault24"); + + iDesc.add("noDefaultPset3", noDefaultPset3); + + edm::ParameterSetDescription noDefaultPset4; + + noDefaultPset4.addOptionalUntracked(std::string("noDefault1")); + noDefaultPset4.addOptionalUntracked>("noDefault2"); + noDefaultPset4.addOptionalUntracked("noDefault3"); + noDefaultPset4.addOptionalUntracked>("noDefault4"); + noDefaultPset4.addOptionalUntracked("noDefault5"); + noDefaultPset4.addOptionalUntracked>("noDefault6"); + noDefaultPset4.addOptionalUntracked("noDefault7"); + noDefaultPset4.addOptionalUntracked>("noDefault8"); + noDefaultPset4.addOptionalUntracked("noDefault9"); + noDefaultPset4.addOptionalUntracked>("noDefault10"); + noDefaultPset4.addOptionalUntracked("noDefault11"); + noDefaultPset4.addOptionalUntracked("noDefault12"); + noDefaultPset4.addOptionalUntracked>("noDefault13"); + noDefaultPset4.addOptionalUntracked("noDefault14"); + noDefaultPset4.addOptionalUntracked>("noDefault15"); + noDefaultPset4.addOptionalUntracked("noDefault16"); + noDefaultPset4.addOptionalUntracked>("noDefault17"); + noDefaultPset4.addOptionalUntracked("noDefault18"); + noDefaultPset4.addOptionalUntracked>("noDefault19"); + noDefaultPset4.addOptionalUntracked("noDefault20"); + noDefaultPset4.addOptionalUntracked("noDefault21"); + noDefaultPset4.addOptionalUntracked>("noDefault22"); + noDefaultPset4.addOptionalUntracked("noDefault23"); + noDefaultPset4.addOptionalUntracked>("noDefault24"); + + iDesc.add("noDefaultPset4", noDefaultPset4); - ifExistsPset.ifExists(edm::ParameterDescription("z1", 11U, true), - edm::ParameterDescription("z2", "11", true)); + edm::ParameterSetDescription pluginDesc; + pluginDesc.addNode(edm::PluginDescription("type", "edmtestAnotherValueMaker", true)); + iDesc.add("plugin", pluginDesc); - iDesc.add("ifExistsPset", ifExistsPset); + edm::ParameterSetDescription pluginDesc1; + pluginDesc1.addNode(edm::PluginDescription("type", true)); + iDesc.add("plugin1", pluginDesc1); - // ------------------------------------------ + edm::ParameterSetDescription pluginDesc2; + pluginDesc2.addNode(edm::PluginDescription("type", true)); + std::vector vDefaultsPlugins2; + iDesc.addVPSet("plugin2", pluginDesc2, vDefaultsPlugins2); - edm::ParameterSetDescription allowedLabelsPset; - - allowedLabelsPset.addOptional("p_int_opt", 0); - allowedLabelsPset.labelsFrom("testAllowedLabels"); - allowedLabelsPset.labelsFromUntracked(std::string("testAllowedLabelsUntracked")); - allowedLabelsPset.labelsFromOptional("testOptAllowedLabels", false); - allowedLabelsPset.labelsFromOptionalUntracked(std::string("testOptAllowedLabelsUntracked"), false); - allowedLabelsPset.labelsFromOptionalUntracked(std::string("testWithSet"), true, bar); - - allowedLabelsPset.labelsFromOptionalUntracked>( - std::string("testWithVectorOfSets"), true, bar); - - iDesc.add("allowedLabelsPset", allowedLabelsPset); - - edm::ParameterSetDescription noDefaultPset3; - - noDefaultPset3.addOptional(std::string("noDefault1")); - noDefaultPset3.addOptional>("noDefault2"); - noDefaultPset3.addOptional("noDefault3"); - noDefaultPset3.addOptional>("noDefault4"); - noDefaultPset3.addOptional("noDefault5"); - noDefaultPset3.addOptional>("noDefault6"); - noDefaultPset3.addOptional("noDefault7"); - noDefaultPset3.addOptional>("noDefault8"); - noDefaultPset3.addOptional("noDefault9"); - noDefaultPset3.addOptional>("noDefault10"); - noDefaultPset3.addOptional("noDefault11"); - noDefaultPset3.addOptional("noDefault12"); - noDefaultPset3.addOptional>("noDefault13"); - noDefaultPset3.addOptional("noDefault14"); - noDefaultPset3.addOptional>("noDefault15"); - noDefaultPset3.addOptional("noDefault16"); - noDefaultPset3.addOptional>("noDefault17"); - noDefaultPset3.addOptional("noDefault18"); - noDefaultPset3.addOptional>("noDefault19"); - noDefaultPset3.addOptional("noDefault20"); - noDefaultPset3.addOptional("noDefault21"); - noDefaultPset3.addOptional>("noDefault22"); - noDefaultPset3.addOptional("noDefault23"); - noDefaultPset3.addOptional>("noDefault24"); - - iDesc.add("noDefaultPset3", noDefaultPset3); - - edm::ParameterSetDescription noDefaultPset4; - - noDefaultPset4.addOptionalUntracked(std::string("noDefault1")); - noDefaultPset4.addOptionalUntracked>("noDefault2"); - noDefaultPset4.addOptionalUntracked("noDefault3"); - noDefaultPset4.addOptionalUntracked>("noDefault4"); - noDefaultPset4.addOptionalUntracked("noDefault5"); - noDefaultPset4.addOptionalUntracked>("noDefault6"); - noDefaultPset4.addOptionalUntracked("noDefault7"); - noDefaultPset4.addOptionalUntracked>("noDefault8"); - noDefaultPset4.addOptionalUntracked("noDefault9"); - noDefaultPset4.addOptionalUntracked>("noDefault10"); - noDefaultPset4.addOptionalUntracked("noDefault11"); - noDefaultPset4.addOptionalUntracked("noDefault12"); - noDefaultPset4.addOptionalUntracked>("noDefault13"); - noDefaultPset4.addOptionalUntracked("noDefault14"); - noDefaultPset4.addOptionalUntracked>("noDefault15"); - noDefaultPset4.addOptionalUntracked("noDefault16"); - noDefaultPset4.addOptionalUntracked>("noDefault17"); - noDefaultPset4.addOptionalUntracked("noDefault18"); - noDefaultPset4.addOptionalUntracked>("noDefault19"); - noDefaultPset4.addOptionalUntracked("noDefault20"); - noDefaultPset4.addOptionalUntracked("noDefault21"); - noDefaultPset4.addOptionalUntracked>("noDefault22"); - noDefaultPset4.addOptionalUntracked("noDefault23"); - noDefaultPset4.addOptionalUntracked>("noDefault24"); - - iDesc.add("noDefaultPset4", noDefaultPset4); - - edm::ParameterSetDescription pluginDesc; - pluginDesc.addNode(edm::PluginDescription("type", "edmtestAnotherValueMaker", true)); - iDesc.add("plugin", pluginDesc); - - edm::ParameterSetDescription pluginDesc1; - pluginDesc1.addNode(edm::PluginDescription("type", true)); - iDesc.add("plugin1", pluginDesc1); - - edm::ParameterSetDescription pluginDesc2; - pluginDesc2.addNode(edm::PluginDescription("type", true)); - std::vector vDefaultsPlugins2; - iDesc.addVPSet("plugin2", pluginDesc2, vDefaultsPlugins2); - - edm::ParameterSetDescription pluginDesc3; - pluginDesc3.addNode(edm::PluginDescription("type", true)); - std::vector vDefaultsPlugins3; - edm::ParameterSet vpsetDefault0; - vpsetDefault0.addParameter("type", "edmtestAnotherOneMaker"); - vDefaultsPlugins3.push_back(vpsetDefault0); - edm::ParameterSet vpsetDefault1; - vpsetDefault1.addParameter("type", "edmtestAnotherValueMaker"); - vpsetDefault1.addParameter("value", 11); - vDefaultsPlugins3.push_back(vpsetDefault1); - - iDesc.addVPSet("plugin3", pluginDesc3, vDefaultsPlugins3); - - edm::ParameterSetDescription pluginDesc4; - pluginDesc4.addNode( - edm::PluginDescription("type", "edmtestAnotherMakerWithRecursivePlugin", true)); - iDesc.add("plugin4", pluginDesc4); - - edm::ParameterSetDescription pluginDesc5; - pluginDesc5.addNode( - edm::PluginDescription("type", "edmtestAnotherMakerWithRecursivePlugin", true)); - std::vector vDefaultsPlugins5; - { + edm::ParameterSetDescription pluginDesc3; + pluginDesc3.addNode(edm::PluginDescription("type", true)); + std::vector vDefaultsPlugins3; edm::ParameterSet vpsetDefault0; vpsetDefault0.addParameter("type", "edmtestAnotherOneMaker"); - vDefaultsPlugins5.push_back(vpsetDefault0); + vDefaultsPlugins3.push_back(vpsetDefault0); edm::ParameterSet vpsetDefault1; - vpsetDefault1.addParameter("type", "edmtestAnotherMakerWithRecursivePlugin"); + vpsetDefault1.addParameter("type", "edmtestAnotherValueMaker"); vpsetDefault1.addParameter("value", 11); - vDefaultsPlugins5.push_back(vpsetDefault1); + vDefaultsPlugins3.push_back(vpsetDefault1); + + iDesc.addVPSet("plugin3", pluginDesc3, vDefaultsPlugins3); + + edm::ParameterSetDescription pluginDesc4; + pluginDesc4.addNode( + edm::PluginDescription("type", "edmtestAnotherMakerWithRecursivePlugin", true)); + iDesc.add("plugin4", pluginDesc4); + + edm::ParameterSetDescription pluginDesc5; + pluginDesc5.addNode( + edm::PluginDescription("type", "edmtestAnotherMakerWithRecursivePlugin", true)); + std::vector vDefaultsPlugins5; + { + edm::ParameterSet vpsetDefault0; + vpsetDefault0.addParameter("type", "edmtestAnotherOneMaker"); + vDefaultsPlugins5.push_back(vpsetDefault0); + edm::ParameterSet vpsetDefault1; + vpsetDefault1.addParameter("type", "edmtestAnotherMakerWithRecursivePlugin"); + vpsetDefault1.addParameter("value", 11); + vDefaultsPlugins5.push_back(vpsetDefault1); + } + iDesc.addVPSet("plugin5", pluginDesc5, vDefaultsPlugins5); + return iDesc; } - iDesc.addVPSet("plugin5", pluginDesc5, vDefaultsPlugins5); - + } // namespace + void ProducerWithPSetDesc::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + auto iDesc = description(2147483647); // ------------------------------------------ descriptions.add("testProducerWithPsetDesc", iDesc); // ------------------------------------------ - edm::ParameterSetDescription iDesc1; - iDesc1.add("p_int", 1); + edm::ParameterSetDescription iDesc1 = description(1); iDesc1.setAllowAnything(); iDesc1.setComment("A comment for a ParameterSetDescription"); @@ -1204,15 +1210,11 @@ namespace edmtest { // ------------------------------------------ - edm::ParameterSetDescription iDesc2; - iDesc2.add("p_int", 2); - descriptions.addDefault(iDesc2); + descriptions.addDefault(description(2)); // ------------------------------------------ - edm::ParameterSetDescription iDesc3; - iDesc3.add("p_int", 3); - descriptions.addWithDefaultLabel(iDesc3); + descriptions.addWithDefaultLabel(description(3)); } } // namespace edmtest using edmtest::ProducerWithPSetDesc; diff --git a/FWCore/Integration/test/cfi_dumpPython.py b/FWCore/Integration/test/cfi_dumpPython.py new file mode 100644 index 0000000000000..80a55739ce946 --- /dev/null +++ b/FWCore/Integration/test/cfi_dumpPython.py @@ -0,0 +1,2 @@ +from .testProducerWithPsetDesc_cfi import testProducerWithPsetDesc +print(testProducerWithPsetDesc.dumpPython()) \ No newline at end of file diff --git a/FWCore/Integration/test/run_ParameterSet.sh b/FWCore/Integration/test/run_ParameterSet.sh index 37e32eb9ff2e5..d07b03de965b4 100755 --- a/FWCore/Integration/test/run_ParameterSet.sh +++ b/FWCore/Integration/test/run_ParameterSet.sh @@ -34,7 +34,13 @@ LOCAL_TEST_DIR=${SCRAM_TEST_PATH} cmsRun ${LOCAL_TEST_DIR}/runAutoGeneratedCfi_cfg.py || die "cmsRun runAutoGeneratedCfi_cfg.py" $? # Compare the cfi file to a reference file to ensure it is correct - diff ./testProducerWithPsetDesc_cfi.py ${LOCAL_TEST_DIR}/unit_test_outputs/testProducerWithPsetDesc_cfi.py || die "comparing testProducerWithPsetDesc_cfi.py" $? + mkdir testcfi + cp ${LOCAL_TEST_DIR}/cfi_dumpPython.py testcfi + cp testProducerWithPsetDesc_cfi.py testcfi + cp ProducerWithPSetDesc.py testcfi + PYTHON3PATH=${PWD}:${PYTHON3PATH} python3 -m testcfi.cfi_dumpPython > dumpPython.log + python3 ${LOCAL_TEST_DIR}/unit_test_outputs/testProducerWithPsetDesc_cfi.py > dumpPython_ref.log + diff ./dumpPython.log dumpPython_ref.log || die "comparing testProducerWithPsetDesc_cfi.py" $? # This time try a cfi without any of the required parameters to test that we properly insert # required missing parameters into the ParameterSet diff --git a/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_briefdoc.txt b/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_briefdoc.txt index 2748ca6f4e4f7..62e52ba367616 100644 --- a/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_briefdoc.txt +++ b/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_briefdoc.txt @@ -912,11 +912,918 @@ 1.2 testLabel1 Description allows anything. If the configured PSet contains illegal parameters, then validation will ignore them instead of throwing an exception. - p_int int32 1 - noDefaultPset1 PSet see Section 1.2.1 - noDefaultPset2 PSet see Section 1.2.2 - mightGet untracked vstring optional none - Section 1.2.1 noDefaultPset1 PSet description: + testingAutoGeneratedCfi untracked bool optional True + p_int int32 1 + p_int_untracked untracked int32 -2147483647 + p_int_opt int32 optional 0 + p_int_optuntracked untracked int32 optional 7 + p_int_opt_nd int32 optional none + p_int_optuntracked_nd untracked int32 optional none + vint1 vint32 empty + vint2 vint32 (vector size = 1) + [0]: 2147483647 + vint3 vint32 (vector size = 2) + [0]: 2147483647 + [1]: -2147483647 + vint4 vint32 (vector size = 3) + [0]: 2147483647 + [1]: -2147483647 + [2]: 0 + uint1 uint32 4294967295 + uint2 untracked uint32 0 + vuint1 vuint32 empty + vuint2 vuint32 (vector size = 1) + [0]: 4294967295 + vuint3 vuint32 (vector size = 2) + [0]: 4294967295 + [1]: 0 + vuint4 vuint32 (vector size = 3) + [0]: 4294967295 + [1]: 0 + [2]: 11 + vuint5 vuint32 see Section 1.2.1 + int64v1 int64 9000000000000000000 + int64v2 int64 -9000000000000000000 + int64v3 int64 0 + vint64v1 vint64 empty + vint64v2 vint64 (vector size = 1) + [0]: 9000000000000000000 + vint64v3 vint64 (vector size = 2) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + vint64v4 vint64 (vector size = 3) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + [2]: 0 + uint64v1 uint64 18000000000000000000 + uint64v2 untracked uint64 0 + vuint64v1 vuint64 empty + vuint64v2 vuint64 (vector size = 1) + [0]: 18000000000000000000 + vuint64v3 vuint64 (vector size = 2) + [0]: 18000000000000000000 + [1]: 0 + vuint64v4 vuint64 (vector size = 3) + [0]: 18000000000000000000 + [1]: 0 + [2]: 11 + doublev1 double 2.2250738585072014e-308 + doublev2 untracked double 0 + doublev3 untracked double 0.3 + vdoublev1 vdouble empty + vdoublev2 vdouble (vector size = 1) + [0]: 1e+300 + vdoublev3 vdouble (vector size = 2) + [0]: 1e+300 + [1]: 0 + vdoublev4 vdouble (vector size = 3) + [0]: 1e+300 + [1]: 0 + [2]: 11 + vdoublev5 vdouble (vector size = 4) + [0]: 1e+300 + [1]: 0 + [2]: 11 + [3]: 0.3 + boolv1 bool True + boolv2 bool False + stringv1 string 'Hello' + stringv2 string '' + vstringv1 vstring empty + vstringv2 vstring (vector size = 1) + [0]: 'Hello' + vstringv3 vstring (vector size = 2) + [0]: 'Hello' + [1]: 'World' + vstringv4 vstring (vector size = 3) + [0]: 'Hello' + [1]: 'World' + [2]: '' + eventIDv1 EventID 11:12 + eventIDv2 EventID 101:102 + vEventIDv1 VEventID empty + vEventIDv2 VEventID (vector size = 1) + [0]: 1000:1100 + vEventIDv3 VEventID (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + vEventIDv4 VEventID (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + luminosityIDv1 LuminosityBlockID 11:12 + luminosityIDv2 LuminosityBlockID 101:102 + vLuminosityBlockIDv1 VLuminosityBlockID empty + vLuminosityBlockIDv2 VLuminosityBlockID (vector size = 1) + [0]: 1000:1100 + vLuminosityBlockIDv3 VLuminosityBlockID (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + vLuminosityBlockIDv4 VLuminosityBlockID (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + lumiRangev1 LuminosityBlockRange 1:1-9:9 + lumiRangev2 LuminosityBlockRange 3:4-1000:1000 + vLumiRangev1 VLuminosityBlockRange empty + vLumiRangev2 VLuminosityBlockRange (vector size = 1) + [0]: 1:1-9:9 + vLumiRangev3 VLuminosityBlockRange (vector size = 2) + [0]: 1:1-9:9 + [1]: 3:4-1000:1000 + eventRangev1 EventRange 1:1-8:8 + eventRangev2 EventRange 3:4-1001:1002 + vEventRangev1 VEventRange empty + vEventRangev2 VEventRange (vector size = 1) + [0]: 1:1-8:8 + vEventRangev3 VEventRange (vector size = 2) + [0]: 1:1-8:8 + [1]: 3:4-1001:1002 + inputTagv1 InputTag 'One:Two:Three' + inputTagv2 InputTag 'One:Two' + inputTagv3 InputTag 'One' + inputTagv4 InputTag 'One::Three' + vInputTagv1 VInputTag empty + vInputTagv2 VInputTag (vector size = 1) + [0]: 'One:Two:Three' + vInputTagv3 VInputTag (vector size = 2) + [0]: 'One:Two:Three' + [1]: 'One:Two' + vInputTagv4 VInputTag (vector size = 3) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + vInputTagv5 VInputTag (vector size = 4) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + [3]: 'One::Three' + esinputTagv1 ESInputTag 'One:Two' + esinputTagv2 ESInputTag 'One:' + esinputTagv3 ESInputTag ':Two' + vESInputTagv1 VESInputTag empty + vESInputTagv2 VESInputTag (vector size = 1) + [0]: 'One:Two' + vESInputTagv3 VESInputTag (vector size = 2) + [0]: 'One:Two' + [1]: 'One:' + vESInputTagv4 VESInputTag (vector size = 3) + [0]: 'One:Two' + [1]: 'One:' + [2]: ':Two' + fileInPath FileInPath 'FWCore/Integration/plugins/ProducerWithPSetDesc.cc' + Empty group description + bar PSet see Section 1.2.2 + test101 PSet optional see Section 1.2.3 (do not write to cfi) + test102 VPSet optional see Section 1.2.4 (do not write to cfi) + test103 VPSet optional see Section 1.2.5 (do not write to cfi) + test104 untracked VPSet see Section 1.2.6 + test105 untracked VPSet see Section 1.2.7 + test1 double 0.1 + test2 double optional 0.2 + test3 double optional none (do not write to cfi) + AND group: optional see Section 1.2.8 + oiswitch (switch) int32 optional see Section 1.2.9 + testDeeplyNested2 PSet see Section 1.2.10 + bars VPSet see Section 1.2.11 + subpset PSet optional see Section 1.2.12 + wildcardPset PSet see Section 1.2.13 + switchPset PSet see Section 1.2.14 + xorPset PSet see Section 1.2.15 + orPset PSet see Section 1.2.16 + andPset PSet see Section 1.2.17 + ifExistsPset PSet see Section 1.2.18 + allowedLabelsPset PSet see Section 1.2.19 + noDefaultPset3 PSet see Section 1.2.20 + noDefaultPset4 PSet see Section 1.2.21 + plugin PSet see Section 1.2.22 + plugin1 PSet see Section 1.2.23 + plugin2 VPSet see Section 1.2.24 + plugin3 VPSet see Section 1.2.25 + plugin4 PSet see Section 1.2.26 + plugin5 VPSet see Section 1.2.27 + noDefaultPset1 PSet see Section 1.2.28 + noDefaultPset2 PSet see Section 1.2.29 + mightGet untracked vstring optional none + Section 1.2.1 vuint5 default contents: (vector size = 6) + [0]: 4294967295 + [1]: 0 + [2]: 11 + [3]: 21 + [4]: 31 + [5]: 41 + Section 1.2.2 bar PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.2.3 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.2.4 test102 VPSet description: + All elements will be validated using the PSet description in Section 1.2.4.1. + Does not have a default VPSet. + Section 1.2.4.1 description of PSet used to validate elements of VPSet: + Description is empty + Section 1.2.5 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.2.5.1. + Does not have a default VPSet. + Section 1.2.5.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.2.6 test104 VPSet description: + All elements will be validated using the PSet description in Section 1.2.6.1. + The default VPSet has 1 element. + [0]: see Section 1.2.6.2 + Section 1.2.6.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.2.6.2 PSet description of default VPSet element [0] + Description is empty + Section 1.2.7 test105 VPSet description: + All elements will be validated using the PSet description in Section 1.2.7.1. + The default VPSet is empty. + Section 1.2.7.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.2.8 AND group description: + This optional AND group requires all or none of the following to be in the PSet + testA string 'fooA' + testB int32 100 + testC int32 101 + Section 1.2.9 oiswitch (switch): + switch: + oiswitch int32 optional 1 + if oiswitch = 0 + oivalue int32 100 + if oiswitch = 1 + AND group: see Section 1.2.9.1 + if oiswitch = 2 + oivalue string '102' + Section 1.2.9.1 AND group description: + This AND group requires all of the following to be in the PSet + oivalue1 double 101 + oivalue2 double 101 + Section 1.2.10 testDeeplyNested2 PSet description: + bswitch (switch) bool see Section 1.2.10.1 + iswitch (switch) int32 see Section 1.2.10.2 + sswitch (switch) string see Section 1.2.10.3 + ndiswitch (switch) int32 optional (do not write to cfi) see Section 1.2.10.4 + testint int32 1000 + Section 1.2.10.1 bswitch (switch): + switch: + bswitch bool False + if bswitch = False + AND group: see Section 1.2.10.1.1 + if bswitch = True + bvalue int32 100 + Section 1.2.10.1.1 AND group description: + This AND group requires all of the following to be in the PSet + bvalue1 double 101 + bvalue2 double 101 + Section 1.2.10.2 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue int32 100 + if iswitch = 1 + AND group: see Section 1.2.10.2.1 + if iswitch = 2 + ivalue string '102' + Section 1.2.10.2.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 untracked double 101 + Section 1.2.10.3 sswitch (switch): + switch: + sswitch string '1' + if sswitch = "0" + svalue int32 100 + if sswitch = "1" + AND group: see Section 1.2.10.3.1 + if sswitch = "2" + svalue string '102' + Section 1.2.10.3.1 AND group description: + This AND group requires all of the following to be in the PSet + svalue1 double 101 + svalue2 double 101 + Section 1.2.10.4 ndiswitch (switch): + switch: + ndiswitch int32 optional 1 + if ndiswitch = 0 + ndivalue int32 100 + if ndiswitch = 1 + AND group: see Section 1.2.10.4.1 + if ndiswitch = 2 + ndivalue string '102' + Section 1.2.10.4.1 AND group description: + This AND group requires all of the following to be in the PSet + ndivalue1 double 101 + ndivalue2 double 101 + Section 1.2.11 bars VPSet description: + All elements will be validated using the PSet description in Section 1.2.11.1. + The default VPSet has 2 elements. + [0]: see Section 1.2.11.2 + [1]: see Section 1.2.11.3 + Section 1.2.11.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + testDeeplyNested PSet see Section 1.2.11.1.1 + anotherVPSet VPSet see Section 1.2.11.1.2 + Section 1.2.11.1.1 testDeeplyNested PSet description: + bswitch (switch) bool see Section 1.2.11.1.1.1 + iswitch (switch) int32 see Section 1.2.11.1.1.2 + sswitch (switch) string see Section 1.2.11.1.1.3 + ndiswitch (switch) int32 optional (do not write to cfi) see Section 1.2.11.1.1.4 + testint int32 1000 + Section 1.2.11.1.1.1 bswitch (switch): + switch: + bswitch bool False + if bswitch = False + AND group: see Section 1.2.11.1.1.1.1 + if bswitch = True + bvalue int32 100 + Section 1.2.11.1.1.1.1 AND group description: + This AND group requires all of the following to be in the PSet + bvalue1 double 101 + bvalue2 double 101 + Section 1.2.11.1.1.2 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue int32 100 + if iswitch = 1 + AND group: see Section 1.2.11.1.1.2.1 + if iswitch = 2 + ivalue string '102' + Section 1.2.11.1.1.2.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 untracked double 101 + Section 1.2.11.1.1.3 sswitch (switch): + switch: + sswitch string '1' + if sswitch = "0" + svalue int32 100 + if sswitch = "1" + AND group: see Section 1.2.11.1.1.3.1 + if sswitch = "2" + svalue string '102' + Section 1.2.11.1.1.3.1 AND group description: + This AND group requires all of the following to be in the PSet + svalue1 double 101 + svalue2 double 101 + Section 1.2.11.1.1.4 ndiswitch (switch): + switch: + ndiswitch int32 optional 1 + if ndiswitch = 0 + ndivalue int32 100 + if ndiswitch = 1 + AND group: see Section 1.2.11.1.1.4.1 + if ndiswitch = 2 + ndivalue string '102' + Section 1.2.11.1.1.4.1 AND group description: + This AND group requires all of the following to be in the PSet + ndivalue1 double 101 + ndivalue2 double 101 + Section 1.2.11.1.2 anotherVPSet VPSet description: + All elements will be validated using the PSet description in Section 1.2.11.1.2.1. + The default VPSet has 2 elements. + [0]: see Section 1.2.11.1.2.2 + [1]: see Section 1.2.11.1.2.3 + Section 1.2.11.1.2.1 description of PSet used to validate elements of VPSet: + xvalue int32 7 + Section 1.2.11.1.2.2 PSet description of default VPSet element [0] + Description is empty + Section 1.2.11.1.2.3 PSet description of default VPSet element [1] + xvalue int32 100 + Section 1.2.11.2 PSet description of default VPSet element [0] + oDrinks uint32 11 + Section 1.2.11.3 PSet description of default VPSet element [1] + ndouDrinks untracked uint32 11 + oDrinks uint32 11 + ouDrinks untracked uint32 11 + testDeeplyNested PSet see Section 1.2.11.3.1 + anotherVPSet VPSet see Section 1.2.11.3.2 + Section 1.2.11.3.1 testDeeplyNested PSet description: + testint int32 2 + Section 1.2.11.3.2 VPSet description for VPSet that is part of the default of a containing VPSet: + The default VPSet has 2 elements. + [0]: see Section 1.2.11.3.2.1 + [1]: see Section 1.2.11.3.2.2 + Section 1.2.11.3.2.1 PSet description of default VPSet element [0] + Description is empty + Section 1.2.11.3.2.2 PSet description of default VPSet element [1] + xvalue int32 17 + Section 1.2.12 subpset PSet description: + xvalue int32 11 + bar untracked PSet see Section 1.2.12.1 + Section 1.2.12.1 bar PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.2.13 wildcardPset PSet description: + p_uint_opt uint32 optional 0 + wildcard: * int32 optional (require zero or more) + wildcard: * untracked double optional (require zero or more) + wildcard: * PSet optional (require exactly one) + wildcard: * PSet optional (require at least one) + (see Section 1.2.13.1) + wildcard: * VPSet optional (require exactly one) + wildcard: * VPSet optional (require at least one) + (see Section 1.2.13.2) + Section 1.2.13.1 description of PSet matching wildcard: + Drinks uint32 5 + Section 1.2.13.2 description used to validate all PSets which are in the VPSet matching the wildcard: + Drinks uint32 5 + Drinks2 uint32 11 + Section 1.2.14 switchPset PSet description: + iswitch (switch) int32 see Section 1.2.14.1 + addTeVRefits (switch) bool see Section 1.2.14.2 + Section 1.2.14.1 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue vint32 (vector size = 2) + [0]: 21 + [1]: 22 + if iswitch = 1 + AND group: see Section 1.2.14.1.1 + if iswitch = 2 + ivalue string '102' + Section 1.2.14.1.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 double 101 + Section 1.2.14.2 addTeVRefits (switch): + switch: + addTeVRefits bool True + if addTeVRefits = False + Empty group description + if addTeVRefits = True + AND group: see Section 1.2.14.2.1 + Section 1.2.14.2.1 AND group description: + This AND group requires all of the following to be in the PSet + pickySrc InputTag '' + tpfmsSrc InputTag '' + Section 1.2.15 xorPset PSet description: + XOR group: see Section 1.2.15.1 + XOR group: see Section 1.2.15.2 + XOR group: optional (do not write to cfi) see Section 1.2.15.3 + XOR group: see Section 1.2.15.4 + Section 1.2.15.1 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name string '11' + name uint32 11 + Section 1.2.15.2 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name1 string '11' + name1 uint32 11 + Section 1.2.15.3 XOR group description: + This optional XOR group requires exactly one or none of the following to be in the PSet + name2 string '11' + name2 uint32 11 + Section 1.2.15.4 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name3 string '11' + name4 uint32 11 + test101 PSet see Section 1.2.15.4.1 + test103 VPSet see Section 1.2.15.4.2 + Section 1.2.15.4.1 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.2.15.4.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.2.15.4.2.1. + Does not have a default VPSet. + Section 1.2.15.4.2.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.2.16 orPset PSet description: + OR group: see Section 1.2.16.1 + OR group: see Section 1.2.16.2 + OR group: optional (do not write to cfi) see Section 1.2.16.3 + Section 1.2.16.1 OR group description: + This OR group requires at least one of the following to be in the PSet + x1 string '11' + x2 uint32 11 + Section 1.2.16.2 OR group description: + This OR group requires at least one of the following to be in the PSet + y1 string '11' + y2 uint32 11 + Section 1.2.16.3 OR group description: + This optional OR group requires at least one or none of the following to be in the PSet + z1 string '11' + z2 uint32 11 + test101 PSet see Section 1.2.16.3.1 + test103 VPSet see Section 1.2.16.3.2 + Section 1.2.16.3.1 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.2.16.3.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.2.16.3.2.1. + Does not have a default VPSet. + Section 1.2.16.3.2.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.2.17 andPset PSet description: + AND group: see Section 1.2.17.1 + AND group: see Section 1.2.17.2 + AND group: see Section 1.2.17.3 + AND group: optional (do not write to cfi) see Section 1.2.17.4 + AND group: optional see Section 1.2.17.5 + Section 1.2.17.1 AND group description: + This AND group requires all of the following to be in the PSet + x1 string '11' + x2 uint32 11 + Section 1.2.17.2 AND group description: + This AND group requires all of the following to be in the PSet + y1 string '11' + y2 uint32 11 + Section 1.2.17.3 AND group description: + This AND group requires all of the following to be in the PSet + z1 string '11' + z2 uint32 11 + Section 1.2.17.4 AND group description: + This optional AND group requires all or none of the following to be in the PSet + a1 string '11' + a2 uint32 11 + Section 1.2.17.5 AND group description: + This optional AND group requires all or none of the following to be in the PSet + b1 string '11' + b2 uint32 11 + b3 uint32 11 + b4 uint32 11 + b5 uint32 11 + b6 uint32 11 + Section 1.2.18 ifExistsPset PSet description: + IfExists pair: see Section 1.2.18.1 + IfExists pair: optional (do not write to cfi) see Section 1.2.18.2 + IfExists pair: see Section 1.2.18.3 + Section 1.2.18.1 IfExists pair description: + If the first parameter exists, then the second is required to exist + x1 uint32 11 + x2 string '11' + Section 1.2.18.2 optional IfExists pair description: + If the first parameter exists, then the second is allowed to exist + y1 uint32 11 + y2 string '11' + Section 1.2.18.3 IfExists pair description: + If the first parameter exists, then the second is required to exist + z1 uint32 11 + z2 string '11' + Section 1.2.19 allowedLabelsPset PSet description: + p_int_opt int32 optional 0 + testAllowedLabels (list of allowed labels) see Section 1.2.19.1 + testAllowedLabelsUntracked (list of allowed labels) see Section 1.2.19.2 + testOptAllowedLabels (list of allowed labels) optional (do not write to cfi) see Section 1.2.19.3 + testOptAllowedLabelsUntracked (list of allowed labels) optional (do not write to cfi) see Section 1.2.19.4 + testWithSet (list of allowed labels) optional see Section 1.2.19.5 + testWithVectorOfSets (list of allowed labels) optional see Section 1.2.19.6 + Section 1.2.19.1 testAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testAllowedLabels vstring empty + type of allowed parameters: int32 + Section 1.2.19.2 testAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testAllowedLabelsUntracked untracked vstring empty + type of allowed parameters: untracked uint32 + Section 1.2.19.3 testOptAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testOptAllowedLabels vstring optional empty + type of allowed parameters: int32 + Section 1.2.19.4 testOptAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testOptAllowedLabelsUntracked untracked vstring optional empty + type of allowed parameters: untracked uint32 + Section 1.2.19.5 testWithSet - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testWithSet untracked vstring optional empty + type of allowed parameters: untracked PSet + see Section 1.2.19.5.1 + Section 1.2.19.5.1 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.2.19.6 testWithVectorOfSets - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testWithVectorOfSets untracked vstring optional empty + type of allowed parameters: untracked VPSet + see Section 1.2.19.6.1 + Section 1.2.19.6.1 PSet description used to validate all elements of VPSet's: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.2.20 noDefaultPset3 PSet description: + noDefault1 int32 optional none + noDefault2 vint32 optional none + noDefault3 uint32 optional none + noDefault4 vuint32 optional none + noDefault5 int64 optional none + noDefault6 vint64 optional none + noDefault7 uint64 optional none + noDefault8 vuint64 optional none + noDefault9 double optional none + noDefault10 vdouble optional none + noDefault11 bool optional none + noDefault12 string optional none + noDefault13 vstring optional none + noDefault14 EventID optional none + noDefault15 VEventID optional none + noDefault16 LuminosityBlockID optional none + noDefault17 VLuminosityBlockID optional none + noDefault18 InputTag optional none + noDefault19 VInputTag optional none + noDefault20 FileInPath optional none + noDefault21 LuminosityBlockRange optional none + noDefault22 VLuminosityBlockRange optional none + noDefault23 EventRange optional none + noDefault24 VEventRange optional none + Section 1.2.21 noDefaultPset4 PSet description: + noDefault1 untracked int32 optional none + noDefault2 untracked vint32 optional none + noDefault3 untracked uint32 optional none + noDefault4 untracked vuint32 optional none + noDefault5 untracked int64 optional none + noDefault6 untracked vint64 optional none + noDefault7 untracked uint64 optional none + noDefault8 untracked vuint64 optional none + noDefault9 untracked double optional none + noDefault10 untracked vdouble optional none + noDefault11 untracked bool optional none + noDefault12 untracked string optional none + noDefault13 untracked vstring optional none + noDefault14 untracked EventID optional none + noDefault15 untracked VEventID optional none + noDefault16 untracked LuminosityBlockID optional none + noDefault17 untracked VLuminosityBlockID optional none + noDefault18 untracked InputTag optional none + noDefault19 untracked VInputTag optional none + noDefault20 untracked FileInPath optional none + noDefault21 untracked LuminosityBlockRange optional none + noDefault22 untracked VLuminosityBlockRange optional none + noDefault23 untracked EventRange optional none + noDefault24 untracked VEventRange optional none + Section 1.2.22 plugin PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.2.22.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.2.22.1.1 + type string 'edmtestAnotherValueMaker' + Section 1.2.22.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.2.22)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.2.22.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherValueMaker' + Section 1.2.22.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherValueMaker' + Section 1.2.23 plugin1 PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.2.23.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.2.23.1.1 + type string none + Section 1.2.23.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.2.23)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.2.23.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.2.23.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.2.24 plugin2 VPSet description: + All elements will be validated using the PSet description in Section 1.2.24.1. + The default VPSet is empty. + Section 1.2.24.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.2.24.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.2.24.1.1.1 + type string none + Section 1.2.24.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.2.24.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.2.24.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.2.24.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.2.25 plugin3 VPSet description: + All elements will be validated using the PSet description in Section 1.2.25.1. + The default VPSet has 2 elements. + [0]: see Section 1.2.25.2 + [1]: see Section 1.2.25.3 + Section 1.2.25.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.2.25.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.2.25.1.1.1 + type string none + Section 1.2.25.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.2.25.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.2.25.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.2.25.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.2.25.2 PSet description of default VPSet element [0] + type string 'edmtestAnotherOneMaker' + Section 1.2.25.3 PSet description of default VPSet element [1] + type string 'edmtestAnotherValueMaker' + value int32 11 + Section 1.2.26 plugin4 PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.2.26.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.2.26.1.1 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.2.26.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.2.26)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.2.26.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.2.26.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.2.27 plugin5 VPSet description: + All elements will be validated using the PSet description in Section 1.2.27.1. + The default VPSet has 2 elements. + [0]: see Section 1.2.27.2 + [1]: see Section 1.2.27.3 + Section 1.2.27.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.2.27.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.2.27.1.1.1 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.2.27.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.2.27.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.2.27.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.2.27.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.2.27.2 PSet description of default VPSet element [0] + type string 'edmtestAnotherOneMaker' + Section 1.2.27.3 PSet description of default VPSet element [1] + type string 'edmtestAnotherMakerWithRecursivePlugin' + value int32 11 + Section 1.2.28 noDefaultPset1 PSet description: noDefault1 int32 none noDefault2 vint32 none noDefault3 uint32 none @@ -941,7 +1848,7 @@ noDefault22 VLuminosityBlockRange none noDefault23 EventRange none noDefault24 VEventRange none - Section 1.2.2 noDefaultPset2 PSet description: + Section 1.2.29 noDefaultPset2 PSet description: noDefault1 untracked int32 none noDefault2 untracked vint32 none noDefault3 untracked uint32 none @@ -967,8 +1874,1822 @@ noDefault23 untracked EventRange none noDefault24 untracked VEventRange none 1.3 producerWithPSetDesc - p_int int32 3 - mightGet untracked vstring optional none + testingAutoGeneratedCfi untracked bool optional True + p_int int32 3 + p_int_untracked untracked int32 -2147483647 + p_int_opt int32 optional 0 + p_int_optuntracked untracked int32 optional 7 + p_int_opt_nd int32 optional none + p_int_optuntracked_nd untracked int32 optional none + vint1 vint32 empty + vint2 vint32 (vector size = 1) + [0]: 2147483647 + vint3 vint32 (vector size = 2) + [0]: 2147483647 + [1]: -2147483647 + vint4 vint32 (vector size = 3) + [0]: 2147483647 + [1]: -2147483647 + [2]: 0 + uint1 uint32 4294967295 + uint2 untracked uint32 0 + vuint1 vuint32 empty + vuint2 vuint32 (vector size = 1) + [0]: 4294967295 + vuint3 vuint32 (vector size = 2) + [0]: 4294967295 + [1]: 0 + vuint4 vuint32 (vector size = 3) + [0]: 4294967295 + [1]: 0 + [2]: 11 + vuint5 vuint32 see Section 1.3.1 + int64v1 int64 9000000000000000000 + int64v2 int64 -9000000000000000000 + int64v3 int64 0 + vint64v1 vint64 empty + vint64v2 vint64 (vector size = 1) + [0]: 9000000000000000000 + vint64v3 vint64 (vector size = 2) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + vint64v4 vint64 (vector size = 3) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + [2]: 0 + uint64v1 uint64 18000000000000000000 + uint64v2 untracked uint64 0 + vuint64v1 vuint64 empty + vuint64v2 vuint64 (vector size = 1) + [0]: 18000000000000000000 + vuint64v3 vuint64 (vector size = 2) + [0]: 18000000000000000000 + [1]: 0 + vuint64v4 vuint64 (vector size = 3) + [0]: 18000000000000000000 + [1]: 0 + [2]: 11 + doublev1 double 2.2250738585072014e-308 + doublev2 untracked double 0 + doublev3 untracked double 0.3 + vdoublev1 vdouble empty + vdoublev2 vdouble (vector size = 1) + [0]: 1e+300 + vdoublev3 vdouble (vector size = 2) + [0]: 1e+300 + [1]: 0 + vdoublev4 vdouble (vector size = 3) + [0]: 1e+300 + [1]: 0 + [2]: 11 + vdoublev5 vdouble (vector size = 4) + [0]: 1e+300 + [1]: 0 + [2]: 11 + [3]: 0.3 + boolv1 bool True + boolv2 bool False + stringv1 string 'Hello' + stringv2 string '' + vstringv1 vstring empty + vstringv2 vstring (vector size = 1) + [0]: 'Hello' + vstringv3 vstring (vector size = 2) + [0]: 'Hello' + [1]: 'World' + vstringv4 vstring (vector size = 3) + [0]: 'Hello' + [1]: 'World' + [2]: '' + eventIDv1 EventID 11:12 + eventIDv2 EventID 101:102 + vEventIDv1 VEventID empty + vEventIDv2 VEventID (vector size = 1) + [0]: 1000:1100 + vEventIDv3 VEventID (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + vEventIDv4 VEventID (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + luminosityIDv1 LuminosityBlockID 11:12 + luminosityIDv2 LuminosityBlockID 101:102 + vLuminosityBlockIDv1 VLuminosityBlockID empty + vLuminosityBlockIDv2 VLuminosityBlockID (vector size = 1) + [0]: 1000:1100 + vLuminosityBlockIDv3 VLuminosityBlockID (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + vLuminosityBlockIDv4 VLuminosityBlockID (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + lumiRangev1 LuminosityBlockRange 1:1-9:9 + lumiRangev2 LuminosityBlockRange 3:4-1000:1000 + vLumiRangev1 VLuminosityBlockRange empty + vLumiRangev2 VLuminosityBlockRange (vector size = 1) + [0]: 1:1-9:9 + vLumiRangev3 VLuminosityBlockRange (vector size = 2) + [0]: 1:1-9:9 + [1]: 3:4-1000:1000 + eventRangev1 EventRange 1:1-8:8 + eventRangev2 EventRange 3:4-1001:1002 + vEventRangev1 VEventRange empty + vEventRangev2 VEventRange (vector size = 1) + [0]: 1:1-8:8 + vEventRangev3 VEventRange (vector size = 2) + [0]: 1:1-8:8 + [1]: 3:4-1001:1002 + inputTagv1 InputTag 'One:Two:Three' + inputTagv2 InputTag 'One:Two' + inputTagv3 InputTag 'One' + inputTagv4 InputTag 'One::Three' + vInputTagv1 VInputTag empty + vInputTagv2 VInputTag (vector size = 1) + [0]: 'One:Two:Three' + vInputTagv3 VInputTag (vector size = 2) + [0]: 'One:Two:Three' + [1]: 'One:Two' + vInputTagv4 VInputTag (vector size = 3) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + vInputTagv5 VInputTag (vector size = 4) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + [3]: 'One::Three' + esinputTagv1 ESInputTag 'One:Two' + esinputTagv2 ESInputTag 'One:' + esinputTagv3 ESInputTag ':Two' + vESInputTagv1 VESInputTag empty + vESInputTagv2 VESInputTag (vector size = 1) + [0]: 'One:Two' + vESInputTagv3 VESInputTag (vector size = 2) + [0]: 'One:Two' + [1]: 'One:' + vESInputTagv4 VESInputTag (vector size = 3) + [0]: 'One:Two' + [1]: 'One:' + [2]: ':Two' + fileInPath FileInPath 'FWCore/Integration/plugins/ProducerWithPSetDesc.cc' + Empty group description + bar PSet see Section 1.3.2 + test101 PSet optional see Section 1.3.3 (do not write to cfi) + test102 VPSet optional see Section 1.3.4 (do not write to cfi) + test103 VPSet optional see Section 1.3.5 (do not write to cfi) + test104 untracked VPSet see Section 1.3.6 + test105 untracked VPSet see Section 1.3.7 + test1 double 0.1 + test2 double optional 0.2 + test3 double optional none (do not write to cfi) + AND group: optional see Section 1.3.8 + oiswitch (switch) int32 optional see Section 1.3.9 + testDeeplyNested2 PSet see Section 1.3.10 + bars VPSet see Section 1.3.11 + subpset PSet optional see Section 1.3.12 + wildcardPset PSet see Section 1.3.13 + switchPset PSet see Section 1.3.14 + xorPset PSet see Section 1.3.15 + orPset PSet see Section 1.3.16 + andPset PSet see Section 1.3.17 + ifExistsPset PSet see Section 1.3.18 + allowedLabelsPset PSet see Section 1.3.19 + noDefaultPset3 PSet see Section 1.3.20 + noDefaultPset4 PSet see Section 1.3.21 + plugin PSet see Section 1.3.22 + plugin1 PSet see Section 1.3.23 + plugin2 VPSet see Section 1.3.24 + plugin3 VPSet see Section 1.3.25 + plugin4 PSet see Section 1.3.26 + plugin5 VPSet see Section 1.3.27 + mightGet untracked vstring optional none + Section 1.3.1 vuint5 default contents: (vector size = 6) + [0]: 4294967295 + [1]: 0 + [2]: 11 + [3]: 21 + [4]: 31 + [5]: 41 + Section 1.3.2 bar PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.3.3 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.3.4 test102 VPSet description: + All elements will be validated using the PSet description in Section 1.3.4.1. + Does not have a default VPSet. + Section 1.3.4.1 description of PSet used to validate elements of VPSet: + Description is empty + Section 1.3.5 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.3.5.1. + Does not have a default VPSet. + Section 1.3.5.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.3.6 test104 VPSet description: + All elements will be validated using the PSet description in Section 1.3.6.1. + The default VPSet has 1 element. + [0]: see Section 1.3.6.2 + Section 1.3.6.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.3.6.2 PSet description of default VPSet element [0] + Description is empty + Section 1.3.7 test105 VPSet description: + All elements will be validated using the PSet description in Section 1.3.7.1. + The default VPSet is empty. + Section 1.3.7.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.3.8 AND group description: + This optional AND group requires all or none of the following to be in the PSet + testA string 'fooA' + testB int32 100 + testC int32 101 + Section 1.3.9 oiswitch (switch): + switch: + oiswitch int32 optional 1 + if oiswitch = 0 + oivalue int32 100 + if oiswitch = 1 + AND group: see Section 1.3.9.1 + if oiswitch = 2 + oivalue string '102' + Section 1.3.9.1 AND group description: + This AND group requires all of the following to be in the PSet + oivalue1 double 101 + oivalue2 double 101 + Section 1.3.10 testDeeplyNested2 PSet description: + bswitch (switch) bool see Section 1.3.10.1 + iswitch (switch) int32 see Section 1.3.10.2 + sswitch (switch) string see Section 1.3.10.3 + ndiswitch (switch) int32 optional (do not write to cfi) see Section 1.3.10.4 + testint int32 1000 + Section 1.3.10.1 bswitch (switch): + switch: + bswitch bool False + if bswitch = False + AND group: see Section 1.3.10.1.1 + if bswitch = True + bvalue int32 100 + Section 1.3.10.1.1 AND group description: + This AND group requires all of the following to be in the PSet + bvalue1 double 101 + bvalue2 double 101 + Section 1.3.10.2 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue int32 100 + if iswitch = 1 + AND group: see Section 1.3.10.2.1 + if iswitch = 2 + ivalue string '102' + Section 1.3.10.2.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 untracked double 101 + Section 1.3.10.3 sswitch (switch): + switch: + sswitch string '1' + if sswitch = "0" + svalue int32 100 + if sswitch = "1" + AND group: see Section 1.3.10.3.1 + if sswitch = "2" + svalue string '102' + Section 1.3.10.3.1 AND group description: + This AND group requires all of the following to be in the PSet + svalue1 double 101 + svalue2 double 101 + Section 1.3.10.4 ndiswitch (switch): + switch: + ndiswitch int32 optional 1 + if ndiswitch = 0 + ndivalue int32 100 + if ndiswitch = 1 + AND group: see Section 1.3.10.4.1 + if ndiswitch = 2 + ndivalue string '102' + Section 1.3.10.4.1 AND group description: + This AND group requires all of the following to be in the PSet + ndivalue1 double 101 + ndivalue2 double 101 + Section 1.3.11 bars VPSet description: + All elements will be validated using the PSet description in Section 1.3.11.1. + The default VPSet has 2 elements. + [0]: see Section 1.3.11.2 + [1]: see Section 1.3.11.3 + Section 1.3.11.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + testDeeplyNested PSet see Section 1.3.11.1.1 + anotherVPSet VPSet see Section 1.3.11.1.2 + Section 1.3.11.1.1 testDeeplyNested PSet description: + bswitch (switch) bool see Section 1.3.11.1.1.1 + iswitch (switch) int32 see Section 1.3.11.1.1.2 + sswitch (switch) string see Section 1.3.11.1.1.3 + ndiswitch (switch) int32 optional (do not write to cfi) see Section 1.3.11.1.1.4 + testint int32 1000 + Section 1.3.11.1.1.1 bswitch (switch): + switch: + bswitch bool False + if bswitch = False + AND group: see Section 1.3.11.1.1.1.1 + if bswitch = True + bvalue int32 100 + Section 1.3.11.1.1.1.1 AND group description: + This AND group requires all of the following to be in the PSet + bvalue1 double 101 + bvalue2 double 101 + Section 1.3.11.1.1.2 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue int32 100 + if iswitch = 1 + AND group: see Section 1.3.11.1.1.2.1 + if iswitch = 2 + ivalue string '102' + Section 1.3.11.1.1.2.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 untracked double 101 + Section 1.3.11.1.1.3 sswitch (switch): + switch: + sswitch string '1' + if sswitch = "0" + svalue int32 100 + if sswitch = "1" + AND group: see Section 1.3.11.1.1.3.1 + if sswitch = "2" + svalue string '102' + Section 1.3.11.1.1.3.1 AND group description: + This AND group requires all of the following to be in the PSet + svalue1 double 101 + svalue2 double 101 + Section 1.3.11.1.1.4 ndiswitch (switch): + switch: + ndiswitch int32 optional 1 + if ndiswitch = 0 + ndivalue int32 100 + if ndiswitch = 1 + AND group: see Section 1.3.11.1.1.4.1 + if ndiswitch = 2 + ndivalue string '102' + Section 1.3.11.1.1.4.1 AND group description: + This AND group requires all of the following to be in the PSet + ndivalue1 double 101 + ndivalue2 double 101 + Section 1.3.11.1.2 anotherVPSet VPSet description: + All elements will be validated using the PSet description in Section 1.3.11.1.2.1. + The default VPSet has 2 elements. + [0]: see Section 1.3.11.1.2.2 + [1]: see Section 1.3.11.1.2.3 + Section 1.3.11.1.2.1 description of PSet used to validate elements of VPSet: + xvalue int32 7 + Section 1.3.11.1.2.2 PSet description of default VPSet element [0] + Description is empty + Section 1.3.11.1.2.3 PSet description of default VPSet element [1] + xvalue int32 100 + Section 1.3.11.2 PSet description of default VPSet element [0] + oDrinks uint32 11 + Section 1.3.11.3 PSet description of default VPSet element [1] + ndouDrinks untracked uint32 11 + oDrinks uint32 11 + ouDrinks untracked uint32 11 + testDeeplyNested PSet see Section 1.3.11.3.1 + anotherVPSet VPSet see Section 1.3.11.3.2 + Section 1.3.11.3.1 testDeeplyNested PSet description: + testint int32 2 + Section 1.3.11.3.2 VPSet description for VPSet that is part of the default of a containing VPSet: + The default VPSet has 2 elements. + [0]: see Section 1.3.11.3.2.1 + [1]: see Section 1.3.11.3.2.2 + Section 1.3.11.3.2.1 PSet description of default VPSet element [0] + Description is empty + Section 1.3.11.3.2.2 PSet description of default VPSet element [1] + xvalue int32 17 + Section 1.3.12 subpset PSet description: + xvalue int32 11 + bar untracked PSet see Section 1.3.12.1 + Section 1.3.12.1 bar PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.3.13 wildcardPset PSet description: + p_uint_opt uint32 optional 0 + wildcard: * int32 optional (require zero or more) + wildcard: * untracked double optional (require zero or more) + wildcard: * PSet optional (require exactly one) + wildcard: * PSet optional (require at least one) + (see Section 1.3.13.1) + wildcard: * VPSet optional (require exactly one) + wildcard: * VPSet optional (require at least one) + (see Section 1.3.13.2) + Section 1.3.13.1 description of PSet matching wildcard: + Drinks uint32 5 + Section 1.3.13.2 description used to validate all PSets which are in the VPSet matching the wildcard: + Drinks uint32 5 + Drinks2 uint32 11 + Section 1.3.14 switchPset PSet description: + iswitch (switch) int32 see Section 1.3.14.1 + addTeVRefits (switch) bool see Section 1.3.14.2 + Section 1.3.14.1 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue vint32 (vector size = 2) + [0]: 21 + [1]: 22 + if iswitch = 1 + AND group: see Section 1.3.14.1.1 + if iswitch = 2 + ivalue string '102' + Section 1.3.14.1.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 double 101 + Section 1.3.14.2 addTeVRefits (switch): + switch: + addTeVRefits bool True + if addTeVRefits = False + Empty group description + if addTeVRefits = True + AND group: see Section 1.3.14.2.1 + Section 1.3.14.2.1 AND group description: + This AND group requires all of the following to be in the PSet + pickySrc InputTag '' + tpfmsSrc InputTag '' + Section 1.3.15 xorPset PSet description: + XOR group: see Section 1.3.15.1 + XOR group: see Section 1.3.15.2 + XOR group: optional (do not write to cfi) see Section 1.3.15.3 + XOR group: see Section 1.3.15.4 + Section 1.3.15.1 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name string '11' + name uint32 11 + Section 1.3.15.2 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name1 string '11' + name1 uint32 11 + Section 1.3.15.3 XOR group description: + This optional XOR group requires exactly one or none of the following to be in the PSet + name2 string '11' + name2 uint32 11 + Section 1.3.15.4 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name3 string '11' + name4 uint32 11 + test101 PSet see Section 1.3.15.4.1 + test103 VPSet see Section 1.3.15.4.2 + Section 1.3.15.4.1 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.3.15.4.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.3.15.4.2.1. + Does not have a default VPSet. + Section 1.3.15.4.2.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.3.16 orPset PSet description: + OR group: see Section 1.3.16.1 + OR group: see Section 1.3.16.2 + OR group: optional (do not write to cfi) see Section 1.3.16.3 + Section 1.3.16.1 OR group description: + This OR group requires at least one of the following to be in the PSet + x1 string '11' + x2 uint32 11 + Section 1.3.16.2 OR group description: + This OR group requires at least one of the following to be in the PSet + y1 string '11' + y2 uint32 11 + Section 1.3.16.3 OR group description: + This optional OR group requires at least one or none of the following to be in the PSet + z1 string '11' + z2 uint32 11 + test101 PSet see Section 1.3.16.3.1 + test103 VPSet see Section 1.3.16.3.2 + Section 1.3.16.3.1 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.3.16.3.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.3.16.3.2.1. + Does not have a default VPSet. + Section 1.3.16.3.2.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.3.17 andPset PSet description: + AND group: see Section 1.3.17.1 + AND group: see Section 1.3.17.2 + AND group: see Section 1.3.17.3 + AND group: optional (do not write to cfi) see Section 1.3.17.4 + AND group: optional see Section 1.3.17.5 + Section 1.3.17.1 AND group description: + This AND group requires all of the following to be in the PSet + x1 string '11' + x2 uint32 11 + Section 1.3.17.2 AND group description: + This AND group requires all of the following to be in the PSet + y1 string '11' + y2 uint32 11 + Section 1.3.17.3 AND group description: + This AND group requires all of the following to be in the PSet + z1 string '11' + z2 uint32 11 + Section 1.3.17.4 AND group description: + This optional AND group requires all or none of the following to be in the PSet + a1 string '11' + a2 uint32 11 + Section 1.3.17.5 AND group description: + This optional AND group requires all or none of the following to be in the PSet + b1 string '11' + b2 uint32 11 + b3 uint32 11 + b4 uint32 11 + b5 uint32 11 + b6 uint32 11 + Section 1.3.18 ifExistsPset PSet description: + IfExists pair: see Section 1.3.18.1 + IfExists pair: optional (do not write to cfi) see Section 1.3.18.2 + IfExists pair: see Section 1.3.18.3 + Section 1.3.18.1 IfExists pair description: + If the first parameter exists, then the second is required to exist + x1 uint32 11 + x2 string '11' + Section 1.3.18.2 optional IfExists pair description: + If the first parameter exists, then the second is allowed to exist + y1 uint32 11 + y2 string '11' + Section 1.3.18.3 IfExists pair description: + If the first parameter exists, then the second is required to exist + z1 uint32 11 + z2 string '11' + Section 1.3.19 allowedLabelsPset PSet description: + p_int_opt int32 optional 0 + testAllowedLabels (list of allowed labels) see Section 1.3.19.1 + testAllowedLabelsUntracked (list of allowed labels) see Section 1.3.19.2 + testOptAllowedLabels (list of allowed labels) optional (do not write to cfi) see Section 1.3.19.3 + testOptAllowedLabelsUntracked (list of allowed labels) optional (do not write to cfi) see Section 1.3.19.4 + testWithSet (list of allowed labels) optional see Section 1.3.19.5 + testWithVectorOfSets (list of allowed labels) optional see Section 1.3.19.6 + Section 1.3.19.1 testAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testAllowedLabels vstring empty + type of allowed parameters: int32 + Section 1.3.19.2 testAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testAllowedLabelsUntracked untracked vstring empty + type of allowed parameters: untracked uint32 + Section 1.3.19.3 testOptAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testOptAllowedLabels vstring optional empty + type of allowed parameters: int32 + Section 1.3.19.4 testOptAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testOptAllowedLabelsUntracked untracked vstring optional empty + type of allowed parameters: untracked uint32 + Section 1.3.19.5 testWithSet - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testWithSet untracked vstring optional empty + type of allowed parameters: untracked PSet + see Section 1.3.19.5.1 + Section 1.3.19.5.1 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.3.19.6 testWithVectorOfSets - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testWithVectorOfSets untracked vstring optional empty + type of allowed parameters: untracked VPSet + see Section 1.3.19.6.1 + Section 1.3.19.6.1 PSet description used to validate all elements of VPSet's: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.3.20 noDefaultPset3 PSet description: + noDefault1 int32 optional none + noDefault2 vint32 optional none + noDefault3 uint32 optional none + noDefault4 vuint32 optional none + noDefault5 int64 optional none + noDefault6 vint64 optional none + noDefault7 uint64 optional none + noDefault8 vuint64 optional none + noDefault9 double optional none + noDefault10 vdouble optional none + noDefault11 bool optional none + noDefault12 string optional none + noDefault13 vstring optional none + noDefault14 EventID optional none + noDefault15 VEventID optional none + noDefault16 LuminosityBlockID optional none + noDefault17 VLuminosityBlockID optional none + noDefault18 InputTag optional none + noDefault19 VInputTag optional none + noDefault20 FileInPath optional none + noDefault21 LuminosityBlockRange optional none + noDefault22 VLuminosityBlockRange optional none + noDefault23 EventRange optional none + noDefault24 VEventRange optional none + Section 1.3.21 noDefaultPset4 PSet description: + noDefault1 untracked int32 optional none + noDefault2 untracked vint32 optional none + noDefault3 untracked uint32 optional none + noDefault4 untracked vuint32 optional none + noDefault5 untracked int64 optional none + noDefault6 untracked vint64 optional none + noDefault7 untracked uint64 optional none + noDefault8 untracked vuint64 optional none + noDefault9 untracked double optional none + noDefault10 untracked vdouble optional none + noDefault11 untracked bool optional none + noDefault12 untracked string optional none + noDefault13 untracked vstring optional none + noDefault14 untracked EventID optional none + noDefault15 untracked VEventID optional none + noDefault16 untracked LuminosityBlockID optional none + noDefault17 untracked VLuminosityBlockID optional none + noDefault18 untracked InputTag optional none + noDefault19 untracked VInputTag optional none + noDefault20 untracked FileInPath optional none + noDefault21 untracked LuminosityBlockRange optional none + noDefault22 untracked VLuminosityBlockRange optional none + noDefault23 untracked EventRange optional none + noDefault24 untracked VEventRange optional none + Section 1.3.22 plugin PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.3.22.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.3.22.1.1 + type string 'edmtestAnotherValueMaker' + Section 1.3.22.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.3.22)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.3.22.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherValueMaker' + Section 1.3.22.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherValueMaker' + Section 1.3.23 plugin1 PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.3.23.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.3.23.1.1 + type string none + Section 1.3.23.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.3.23)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.3.23.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.3.23.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.3.24 plugin2 VPSet description: + All elements will be validated using the PSet description in Section 1.3.24.1. + The default VPSet is empty. + Section 1.3.24.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.3.24.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.3.24.1.1.1 + type string none + Section 1.3.24.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.3.24.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.3.24.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.3.24.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.3.25 plugin3 VPSet description: + All elements will be validated using the PSet description in Section 1.3.25.1. + The default VPSet has 2 elements. + [0]: see Section 1.3.25.2 + [1]: see Section 1.3.25.3 + Section 1.3.25.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.3.25.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.3.25.1.1.1 + type string none + Section 1.3.25.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.3.25.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.3.25.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.3.25.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.3.25.2 PSet description of default VPSet element [0] + type string 'edmtestAnotherOneMaker' + Section 1.3.25.3 PSet description of default VPSet element [1] + type string 'edmtestAnotherValueMaker' + value int32 11 + Section 1.3.26 plugin4 PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.3.26.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.3.26.1.1 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.3.26.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.3.26)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.3.26.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.3.26.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.3.27 plugin5 VPSet description: + All elements will be validated using the PSet description in Section 1.3.27.1. + The default VPSet has 2 elements. + [0]: see Section 1.3.27.2 + [1]: see Section 1.3.27.3 + Section 1.3.27.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.3.27.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.3.27.1.1.1 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.3.27.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.3.27.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.3.27.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.3.27.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.3.27.2 PSet description of default VPSet element [0] + type string 'edmtestAnotherOneMaker' + Section 1.3.27.3 PSet description of default VPSet element [1] + type string 'edmtestAnotherMakerWithRecursivePlugin' + value int32 11 1.4 description without a module label - p_int int32 2 - mightGet untracked vstring optional none + testingAutoGeneratedCfi untracked bool optional True + p_int int32 2 + p_int_untracked untracked int32 -2147483647 + p_int_opt int32 optional 0 + p_int_optuntracked untracked int32 optional 7 + p_int_opt_nd int32 optional none + p_int_optuntracked_nd untracked int32 optional none + vint1 vint32 empty + vint2 vint32 (vector size = 1) + [0]: 2147483647 + vint3 vint32 (vector size = 2) + [0]: 2147483647 + [1]: -2147483647 + vint4 vint32 (vector size = 3) + [0]: 2147483647 + [1]: -2147483647 + [2]: 0 + uint1 uint32 4294967295 + uint2 untracked uint32 0 + vuint1 vuint32 empty + vuint2 vuint32 (vector size = 1) + [0]: 4294967295 + vuint3 vuint32 (vector size = 2) + [0]: 4294967295 + [1]: 0 + vuint4 vuint32 (vector size = 3) + [0]: 4294967295 + [1]: 0 + [2]: 11 + vuint5 vuint32 see Section 1.4.1 + int64v1 int64 9000000000000000000 + int64v2 int64 -9000000000000000000 + int64v3 int64 0 + vint64v1 vint64 empty + vint64v2 vint64 (vector size = 1) + [0]: 9000000000000000000 + vint64v3 vint64 (vector size = 2) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + vint64v4 vint64 (vector size = 3) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + [2]: 0 + uint64v1 uint64 18000000000000000000 + uint64v2 untracked uint64 0 + vuint64v1 vuint64 empty + vuint64v2 vuint64 (vector size = 1) + [0]: 18000000000000000000 + vuint64v3 vuint64 (vector size = 2) + [0]: 18000000000000000000 + [1]: 0 + vuint64v4 vuint64 (vector size = 3) + [0]: 18000000000000000000 + [1]: 0 + [2]: 11 + doublev1 double 2.2250738585072014e-308 + doublev2 untracked double 0 + doublev3 untracked double 0.3 + vdoublev1 vdouble empty + vdoublev2 vdouble (vector size = 1) + [0]: 1e+300 + vdoublev3 vdouble (vector size = 2) + [0]: 1e+300 + [1]: 0 + vdoublev4 vdouble (vector size = 3) + [0]: 1e+300 + [1]: 0 + [2]: 11 + vdoublev5 vdouble (vector size = 4) + [0]: 1e+300 + [1]: 0 + [2]: 11 + [3]: 0.3 + boolv1 bool True + boolv2 bool False + stringv1 string 'Hello' + stringv2 string '' + vstringv1 vstring empty + vstringv2 vstring (vector size = 1) + [0]: 'Hello' + vstringv3 vstring (vector size = 2) + [0]: 'Hello' + [1]: 'World' + vstringv4 vstring (vector size = 3) + [0]: 'Hello' + [1]: 'World' + [2]: '' + eventIDv1 EventID 11:12 + eventIDv2 EventID 101:102 + vEventIDv1 VEventID empty + vEventIDv2 VEventID (vector size = 1) + [0]: 1000:1100 + vEventIDv3 VEventID (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + vEventIDv4 VEventID (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + luminosityIDv1 LuminosityBlockID 11:12 + luminosityIDv2 LuminosityBlockID 101:102 + vLuminosityBlockIDv1 VLuminosityBlockID empty + vLuminosityBlockIDv2 VLuminosityBlockID (vector size = 1) + [0]: 1000:1100 + vLuminosityBlockIDv3 VLuminosityBlockID (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + vLuminosityBlockIDv4 VLuminosityBlockID (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + lumiRangev1 LuminosityBlockRange 1:1-9:9 + lumiRangev2 LuminosityBlockRange 3:4-1000:1000 + vLumiRangev1 VLuminosityBlockRange empty + vLumiRangev2 VLuminosityBlockRange (vector size = 1) + [0]: 1:1-9:9 + vLumiRangev3 VLuminosityBlockRange (vector size = 2) + [0]: 1:1-9:9 + [1]: 3:4-1000:1000 + eventRangev1 EventRange 1:1-8:8 + eventRangev2 EventRange 3:4-1001:1002 + vEventRangev1 VEventRange empty + vEventRangev2 VEventRange (vector size = 1) + [0]: 1:1-8:8 + vEventRangev3 VEventRange (vector size = 2) + [0]: 1:1-8:8 + [1]: 3:4-1001:1002 + inputTagv1 InputTag 'One:Two:Three' + inputTagv2 InputTag 'One:Two' + inputTagv3 InputTag 'One' + inputTagv4 InputTag 'One::Three' + vInputTagv1 VInputTag empty + vInputTagv2 VInputTag (vector size = 1) + [0]: 'One:Two:Three' + vInputTagv3 VInputTag (vector size = 2) + [0]: 'One:Two:Three' + [1]: 'One:Two' + vInputTagv4 VInputTag (vector size = 3) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + vInputTagv5 VInputTag (vector size = 4) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + [3]: 'One::Three' + esinputTagv1 ESInputTag 'One:Two' + esinputTagv2 ESInputTag 'One:' + esinputTagv3 ESInputTag ':Two' + vESInputTagv1 VESInputTag empty + vESInputTagv2 VESInputTag (vector size = 1) + [0]: 'One:Two' + vESInputTagv3 VESInputTag (vector size = 2) + [0]: 'One:Two' + [1]: 'One:' + vESInputTagv4 VESInputTag (vector size = 3) + [0]: 'One:Two' + [1]: 'One:' + [2]: ':Two' + fileInPath FileInPath 'FWCore/Integration/plugins/ProducerWithPSetDesc.cc' + Empty group description + bar PSet see Section 1.4.2 + test101 PSet optional see Section 1.4.3 (do not write to cfi) + test102 VPSet optional see Section 1.4.4 (do not write to cfi) + test103 VPSet optional see Section 1.4.5 (do not write to cfi) + test104 untracked VPSet see Section 1.4.6 + test105 untracked VPSet see Section 1.4.7 + test1 double 0.1 + test2 double optional 0.2 + test3 double optional none (do not write to cfi) + AND group: optional see Section 1.4.8 + oiswitch (switch) int32 optional see Section 1.4.9 + testDeeplyNested2 PSet see Section 1.4.10 + bars VPSet see Section 1.4.11 + subpset PSet optional see Section 1.4.12 + wildcardPset PSet see Section 1.4.13 + switchPset PSet see Section 1.4.14 + xorPset PSet see Section 1.4.15 + orPset PSet see Section 1.4.16 + andPset PSet see Section 1.4.17 + ifExistsPset PSet see Section 1.4.18 + allowedLabelsPset PSet see Section 1.4.19 + noDefaultPset3 PSet see Section 1.4.20 + noDefaultPset4 PSet see Section 1.4.21 + plugin PSet see Section 1.4.22 + plugin1 PSet see Section 1.4.23 + plugin2 VPSet see Section 1.4.24 + plugin3 VPSet see Section 1.4.25 + plugin4 PSet see Section 1.4.26 + plugin5 VPSet see Section 1.4.27 + mightGet untracked vstring optional none + Section 1.4.1 vuint5 default contents: (vector size = 6) + [0]: 4294967295 + [1]: 0 + [2]: 11 + [3]: 21 + [4]: 31 + [5]: 41 + Section 1.4.2 bar PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.4.3 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.4.4 test102 VPSet description: + All elements will be validated using the PSet description in Section 1.4.4.1. + Does not have a default VPSet. + Section 1.4.4.1 description of PSet used to validate elements of VPSet: + Description is empty + Section 1.4.5 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.4.5.1. + Does not have a default VPSet. + Section 1.4.5.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.4.6 test104 VPSet description: + All elements will be validated using the PSet description in Section 1.4.6.1. + The default VPSet has 1 element. + [0]: see Section 1.4.6.2 + Section 1.4.6.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.4.6.2 PSet description of default VPSet element [0] + Description is empty + Section 1.4.7 test105 VPSet description: + All elements will be validated using the PSet description in Section 1.4.7.1. + The default VPSet is empty. + Section 1.4.7.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.4.8 AND group description: + This optional AND group requires all or none of the following to be in the PSet + testA string 'fooA' + testB int32 100 + testC int32 101 + Section 1.4.9 oiswitch (switch): + switch: + oiswitch int32 optional 1 + if oiswitch = 0 + oivalue int32 100 + if oiswitch = 1 + AND group: see Section 1.4.9.1 + if oiswitch = 2 + oivalue string '102' + Section 1.4.9.1 AND group description: + This AND group requires all of the following to be in the PSet + oivalue1 double 101 + oivalue2 double 101 + Section 1.4.10 testDeeplyNested2 PSet description: + bswitch (switch) bool see Section 1.4.10.1 + iswitch (switch) int32 see Section 1.4.10.2 + sswitch (switch) string see Section 1.4.10.3 + ndiswitch (switch) int32 optional (do not write to cfi) see Section 1.4.10.4 + testint int32 1000 + Section 1.4.10.1 bswitch (switch): + switch: + bswitch bool False + if bswitch = False + AND group: see Section 1.4.10.1.1 + if bswitch = True + bvalue int32 100 + Section 1.4.10.1.1 AND group description: + This AND group requires all of the following to be in the PSet + bvalue1 double 101 + bvalue2 double 101 + Section 1.4.10.2 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue int32 100 + if iswitch = 1 + AND group: see Section 1.4.10.2.1 + if iswitch = 2 + ivalue string '102' + Section 1.4.10.2.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 untracked double 101 + Section 1.4.10.3 sswitch (switch): + switch: + sswitch string '1' + if sswitch = "0" + svalue int32 100 + if sswitch = "1" + AND group: see Section 1.4.10.3.1 + if sswitch = "2" + svalue string '102' + Section 1.4.10.3.1 AND group description: + This AND group requires all of the following to be in the PSet + svalue1 double 101 + svalue2 double 101 + Section 1.4.10.4 ndiswitch (switch): + switch: + ndiswitch int32 optional 1 + if ndiswitch = 0 + ndivalue int32 100 + if ndiswitch = 1 + AND group: see Section 1.4.10.4.1 + if ndiswitch = 2 + ndivalue string '102' + Section 1.4.10.4.1 AND group description: + This AND group requires all of the following to be in the PSet + ndivalue1 double 101 + ndivalue2 double 101 + Section 1.4.11 bars VPSet description: + All elements will be validated using the PSet description in Section 1.4.11.1. + The default VPSet has 2 elements. + [0]: see Section 1.4.11.2 + [1]: see Section 1.4.11.3 + Section 1.4.11.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + testDeeplyNested PSet see Section 1.4.11.1.1 + anotherVPSet VPSet see Section 1.4.11.1.2 + Section 1.4.11.1.1 testDeeplyNested PSet description: + bswitch (switch) bool see Section 1.4.11.1.1.1 + iswitch (switch) int32 see Section 1.4.11.1.1.2 + sswitch (switch) string see Section 1.4.11.1.1.3 + ndiswitch (switch) int32 optional (do not write to cfi) see Section 1.4.11.1.1.4 + testint int32 1000 + Section 1.4.11.1.1.1 bswitch (switch): + switch: + bswitch bool False + if bswitch = False + AND group: see Section 1.4.11.1.1.1.1 + if bswitch = True + bvalue int32 100 + Section 1.4.11.1.1.1.1 AND group description: + This AND group requires all of the following to be in the PSet + bvalue1 double 101 + bvalue2 double 101 + Section 1.4.11.1.1.2 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue int32 100 + if iswitch = 1 + AND group: see Section 1.4.11.1.1.2.1 + if iswitch = 2 + ivalue string '102' + Section 1.4.11.1.1.2.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 untracked double 101 + Section 1.4.11.1.1.3 sswitch (switch): + switch: + sswitch string '1' + if sswitch = "0" + svalue int32 100 + if sswitch = "1" + AND group: see Section 1.4.11.1.1.3.1 + if sswitch = "2" + svalue string '102' + Section 1.4.11.1.1.3.1 AND group description: + This AND group requires all of the following to be in the PSet + svalue1 double 101 + svalue2 double 101 + Section 1.4.11.1.1.4 ndiswitch (switch): + switch: + ndiswitch int32 optional 1 + if ndiswitch = 0 + ndivalue int32 100 + if ndiswitch = 1 + AND group: see Section 1.4.11.1.1.4.1 + if ndiswitch = 2 + ndivalue string '102' + Section 1.4.11.1.1.4.1 AND group description: + This AND group requires all of the following to be in the PSet + ndivalue1 double 101 + ndivalue2 double 101 + Section 1.4.11.1.2 anotherVPSet VPSet description: + All elements will be validated using the PSet description in Section 1.4.11.1.2.1. + The default VPSet has 2 elements. + [0]: see Section 1.4.11.1.2.2 + [1]: see Section 1.4.11.1.2.3 + Section 1.4.11.1.2.1 description of PSet used to validate elements of VPSet: + xvalue int32 7 + Section 1.4.11.1.2.2 PSet description of default VPSet element [0] + Description is empty + Section 1.4.11.1.2.3 PSet description of default VPSet element [1] + xvalue int32 100 + Section 1.4.11.2 PSet description of default VPSet element [0] + oDrinks uint32 11 + Section 1.4.11.3 PSet description of default VPSet element [1] + ndouDrinks untracked uint32 11 + oDrinks uint32 11 + ouDrinks untracked uint32 11 + testDeeplyNested PSet see Section 1.4.11.3.1 + anotherVPSet VPSet see Section 1.4.11.3.2 + Section 1.4.11.3.1 testDeeplyNested PSet description: + testint int32 2 + Section 1.4.11.3.2 VPSet description for VPSet that is part of the default of a containing VPSet: + The default VPSet has 2 elements. + [0]: see Section 1.4.11.3.2.1 + [1]: see Section 1.4.11.3.2.2 + Section 1.4.11.3.2.1 PSet description of default VPSet element [0] + Description is empty + Section 1.4.11.3.2.2 PSet description of default VPSet element [1] + xvalue int32 17 + Section 1.4.12 subpset PSet description: + xvalue int32 11 + bar untracked PSet see Section 1.4.12.1 + Section 1.4.12.1 bar PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.4.13 wildcardPset PSet description: + p_uint_opt uint32 optional 0 + wildcard: * int32 optional (require zero or more) + wildcard: * untracked double optional (require zero or more) + wildcard: * PSet optional (require exactly one) + wildcard: * PSet optional (require at least one) + (see Section 1.4.13.1) + wildcard: * VPSet optional (require exactly one) + wildcard: * VPSet optional (require at least one) + (see Section 1.4.13.2) + Section 1.4.13.1 description of PSet matching wildcard: + Drinks uint32 5 + Section 1.4.13.2 description used to validate all PSets which are in the VPSet matching the wildcard: + Drinks uint32 5 + Drinks2 uint32 11 + Section 1.4.14 switchPset PSet description: + iswitch (switch) int32 see Section 1.4.14.1 + addTeVRefits (switch) bool see Section 1.4.14.2 + Section 1.4.14.1 iswitch (switch): + switch: + iswitch int32 1 + if iswitch = 0 + ivalue vint32 (vector size = 2) + [0]: 21 + [1]: 22 + if iswitch = 1 + AND group: see Section 1.4.14.1.1 + if iswitch = 2 + ivalue string '102' + Section 1.4.14.1.1 AND group description: + This AND group requires all of the following to be in the PSet + ivalue1 double 101 + ivalue2 double 101 + Section 1.4.14.2 addTeVRefits (switch): + switch: + addTeVRefits bool True + if addTeVRefits = False + Empty group description + if addTeVRefits = True + AND group: see Section 1.4.14.2.1 + Section 1.4.14.2.1 AND group description: + This AND group requires all of the following to be in the PSet + pickySrc InputTag '' + tpfmsSrc InputTag '' + Section 1.4.15 xorPset PSet description: + XOR group: see Section 1.4.15.1 + XOR group: see Section 1.4.15.2 + XOR group: optional (do not write to cfi) see Section 1.4.15.3 + XOR group: see Section 1.4.15.4 + Section 1.4.15.1 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name string '11' + name uint32 11 + Section 1.4.15.2 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name1 string '11' + name1 uint32 11 + Section 1.4.15.3 XOR group description: + This optional XOR group requires exactly one or none of the following to be in the PSet + name2 string '11' + name2 uint32 11 + Section 1.4.15.4 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + name3 string '11' + name4 uint32 11 + test101 PSet see Section 1.4.15.4.1 + test103 VPSet see Section 1.4.15.4.2 + Section 1.4.15.4.1 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.4.15.4.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.4.15.4.2.1. + Does not have a default VPSet. + Section 1.4.15.4.2.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.4.16 orPset PSet description: + OR group: see Section 1.4.16.1 + OR group: see Section 1.4.16.2 + OR group: optional (do not write to cfi) see Section 1.4.16.3 + Section 1.4.16.1 OR group description: + This OR group requires at least one of the following to be in the PSet + x1 string '11' + x2 uint32 11 + Section 1.4.16.2 OR group description: + This OR group requires at least one of the following to be in the PSet + y1 string '11' + y2 uint32 11 + Section 1.4.16.3 OR group description: + This optional OR group requires at least one or none of the following to be in the PSet + z1 string '11' + z2 uint32 11 + test101 PSet see Section 1.4.16.3.1 + test103 VPSet see Section 1.4.16.3.2 + Section 1.4.16.3.1 test101 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.4.16.3.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.4.16.3.2.1. + Does not have a default VPSet. + Section 1.4.16.3.2.1 description of PSet used to validate elements of VPSet: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + ndoDrinks uint32 optional none + ndouDrinks untracked uint32 optional none + Section 1.4.17 andPset PSet description: + AND group: see Section 1.4.17.1 + AND group: see Section 1.4.17.2 + AND group: see Section 1.4.17.3 + AND group: optional (do not write to cfi) see Section 1.4.17.4 + AND group: optional see Section 1.4.17.5 + Section 1.4.17.1 AND group description: + This AND group requires all of the following to be in the PSet + x1 string '11' + x2 uint32 11 + Section 1.4.17.2 AND group description: + This AND group requires all of the following to be in the PSet + y1 string '11' + y2 uint32 11 + Section 1.4.17.3 AND group description: + This AND group requires all of the following to be in the PSet + z1 string '11' + z2 uint32 11 + Section 1.4.17.4 AND group description: + This optional AND group requires all or none of the following to be in the PSet + a1 string '11' + a2 uint32 11 + Section 1.4.17.5 AND group description: + This optional AND group requires all or none of the following to be in the PSet + b1 string '11' + b2 uint32 11 + b3 uint32 11 + b4 uint32 11 + b5 uint32 11 + b6 uint32 11 + Section 1.4.18 ifExistsPset PSet description: + IfExists pair: see Section 1.4.18.1 + IfExists pair: optional (do not write to cfi) see Section 1.4.18.2 + IfExists pair: see Section 1.4.18.3 + Section 1.4.18.1 IfExists pair description: + If the first parameter exists, then the second is required to exist + x1 uint32 11 + x2 string '11' + Section 1.4.18.2 optional IfExists pair description: + If the first parameter exists, then the second is allowed to exist + y1 uint32 11 + y2 string '11' + Section 1.4.18.3 IfExists pair description: + If the first parameter exists, then the second is required to exist + z1 uint32 11 + z2 string '11' + Section 1.4.19 allowedLabelsPset PSet description: + p_int_opt int32 optional 0 + testAllowedLabels (list of allowed labels) see Section 1.4.19.1 + testAllowedLabelsUntracked (list of allowed labels) see Section 1.4.19.2 + testOptAllowedLabels (list of allowed labels) optional (do not write to cfi) see Section 1.4.19.3 + testOptAllowedLabelsUntracked (list of allowed labels) optional (do not write to cfi) see Section 1.4.19.4 + testWithSet (list of allowed labels) optional see Section 1.4.19.5 + testWithVectorOfSets (list of allowed labels) optional see Section 1.4.19.6 + Section 1.4.19.1 testAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testAllowedLabels vstring empty + type of allowed parameters: int32 + Section 1.4.19.2 testAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testAllowedLabelsUntracked untracked vstring empty + type of allowed parameters: untracked uint32 + Section 1.4.19.3 testOptAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testOptAllowedLabels vstring optional empty + type of allowed parameters: int32 + Section 1.4.19.4 testOptAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testOptAllowedLabelsUntracked untracked vstring optional empty + type of allowed parameters: untracked uint32 + Section 1.4.19.5 testWithSet - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testWithSet untracked vstring optional empty + type of allowed parameters: untracked PSet + see Section 1.4.19.5.1 + Section 1.4.19.5.1 PSet description: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.4.19.6 testWithVectorOfSets - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + testWithVectorOfSets untracked vstring optional empty + type of allowed parameters: untracked VPSet + see Section 1.4.19.6.1 + Section 1.4.19.6.1 PSet description used to validate all elements of VPSet's: + Drinks uint32 5 + uDrinks untracked uint32 5 + oDrinks uint32 optional 5 + ouDrinks untracked uint32 optional 5 + Section 1.4.20 noDefaultPset3 PSet description: + noDefault1 int32 optional none + noDefault2 vint32 optional none + noDefault3 uint32 optional none + noDefault4 vuint32 optional none + noDefault5 int64 optional none + noDefault6 vint64 optional none + noDefault7 uint64 optional none + noDefault8 vuint64 optional none + noDefault9 double optional none + noDefault10 vdouble optional none + noDefault11 bool optional none + noDefault12 string optional none + noDefault13 vstring optional none + noDefault14 EventID optional none + noDefault15 VEventID optional none + noDefault16 LuminosityBlockID optional none + noDefault17 VLuminosityBlockID optional none + noDefault18 InputTag optional none + noDefault19 VInputTag optional none + noDefault20 FileInPath optional none + noDefault21 LuminosityBlockRange optional none + noDefault22 VLuminosityBlockRange optional none + noDefault23 EventRange optional none + noDefault24 VEventRange optional none + Section 1.4.21 noDefaultPset4 PSet description: + noDefault1 untracked int32 optional none + noDefault2 untracked vint32 optional none + noDefault3 untracked uint32 optional none + noDefault4 untracked vuint32 optional none + noDefault5 untracked int64 optional none + noDefault6 untracked vint64 optional none + noDefault7 untracked uint64 optional none + noDefault8 untracked vuint64 optional none + noDefault9 untracked double optional none + noDefault10 untracked vdouble optional none + noDefault11 untracked bool optional none + noDefault12 untracked string optional none + noDefault13 untracked vstring optional none + noDefault14 untracked EventID optional none + noDefault15 untracked VEventID optional none + noDefault16 untracked LuminosityBlockID optional none + noDefault17 untracked VLuminosityBlockID optional none + noDefault18 untracked InputTag optional none + noDefault19 untracked VInputTag optional none + noDefault20 untracked FileInPath optional none + noDefault21 untracked LuminosityBlockRange optional none + noDefault22 untracked VLuminosityBlockRange optional none + noDefault23 untracked EventRange optional none + noDefault24 untracked VEventRange optional none + Section 1.4.22 plugin PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.4.22.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.4.22.1.1 + type string 'edmtestAnotherValueMaker' + Section 1.4.22.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.4.22)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.4.22.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherValueMaker' + Section 1.4.22.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherValueMaker' + Section 1.4.23 plugin1 PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.4.23.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.4.23.1.1 + type string none + Section 1.4.23.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.4.23)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.4.23.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.4.23.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.4.24 plugin2 VPSet description: + All elements will be validated using the PSet description in Section 1.4.24.1. + The default VPSet is empty. + Section 1.4.24.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.4.24.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.4.24.1.1.1 + type string none + Section 1.4.24.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.4.24.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.4.24.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.4.24.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.4.25 plugin3 VPSet description: + All elements will be validated using the PSet description in Section 1.4.25.1. + The default VPSet has 2 elements. + [0]: see Section 1.4.25.2 + [1]: see Section 1.4.25.3 + Section 1.4.25.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.4.25.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.4.25.1.1.1 + type string none + Section 1.4.25.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.4.25.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.4.25.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string none + Section 1.4.25.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string none + Section 1.4.25.2 PSet description of default VPSet element [0] + type string 'edmtestAnotherOneMaker' + Section 1.4.25.3 PSet description of default VPSet element [1] + type string 'edmtestAnotherValueMaker' + value int32 11 + Section 1.4.26 plugin4 PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.4.26.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.4.26.1.1 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.4.26.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.4.26)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.4.26.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.4.26.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.4.27 plugin5 VPSet description: + All elements will be validated using the PSet description in Section 1.4.27.1. + The default VPSet has 2 elements. + [0]: see Section 1.4.27.2 + [1]: see Section 1.4.27.3 + Section 1.4.27.1 description of PSet used to validate elements of VPSet: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + Section 1.4.27.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + value int32 5 + pluginRecursive PSet see Section 1.4.27.1.1.1 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.4.27.1.1.1 pluginRecursive PSet description: + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + *** The descriptions for this plugin category already started printing above (see Section 1.4.27.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + Section 1.4.27.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.4.27.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + value int32 5 + type string 'edmtestAnotherMakerWithRecursivePlugin' + Section 1.4.27.2 PSet description of default VPSet element [0] + type string 'edmtestAnotherOneMaker' + Section 1.4.27.3 PSet description of default VPSet element [1] + type string 'edmtestAnotherMakerWithRecursivePlugin' + value int32 11 diff --git a/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_cfi.py b/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_cfi.py index 967f418452902..7fba48e18a9a1 100644 --- a/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_cfi.py +++ b/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_cfi.py @@ -373,3 +373,5 @@ ), mightGet = cms.optional.untracked.vstring ) + +print(testProducerWithPsetDesc.dumpPython()) \ No newline at end of file diff --git a/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_doc.txt b/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_doc.txt index 335cad697d318..f55457f2bb231 100644 --- a/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_doc.txt +++ b/FWCore/Integration/test/unit_test_outputs/testProducerWithPsetDesc_doc.txt @@ -2416,253 +2416,7420 @@ generated for each configuration with a module label. Description allows anything. If the configured PSet contains illegal parameters, then validation will ignore them instead of throwing an exception. + testingAutoGeneratedCfi + type: untracked bool optional + default: True + p_int type: int32 default: 1 + A big integer. I am trying to test the wrapping of + comments in the printed output by putting in a long + comment to see if it gets wrapped OK. The comment + should get indented to the second column indent on + every line. By default newlines should be inserted + between words to make the lines fit in the terminal + screen width. There is a command line parameter that + can be set to override this width to any desired value. + If there is no terminal then it should default to 80. + The logic for setting the width is in edmPluginHelp.cpp - noDefaultPset1 - type: PSet - see Section 1.2.1 + p_int_untracked + type: untracked int32 + default: -2147483647 - noDefaultPset2 - type: PSet - see Section 1.2.2 + p_int_opt + type: int32 optional + default: 0 - mightGet - type: untracked vstring optional - default: none - List contains the branch names for the EDProducts which - might be requested by the module. - The format for identifying the EDProduct is the same as - the one used for OutputModules, except no wild cards - are allowed. E.g. - Foos_foomodule_whichFoo_RECO + p_int_optuntracked + type: untracked int32 optional + default: 7 - Section 1.2.1 noDefaultPset1 PSet description: + p_int_opt_nd + type: int32 optional + default: none - noDefault1 - type: int32 + p_int_optuntracked_nd + type: untracked int32 optional default: none - noDefault2 + vint1 type: vint32 - default: none + default: empty - noDefault3 + vint2 + type: vint32 + default: (vector size = 1) + [0]: 2147483647 + + vint3 + type: vint32 + default: (vector size = 2) + [0]: 2147483647 + [1]: -2147483647 + + vint4 + type: vint32 + default: (vector size = 3) + [0]: 2147483647 + [1]: -2147483647 + [2]: 0 + + uint1 type: uint32 - default: none + default: 4294967295 - noDefault4 + uint2 + type: untracked uint32 + default: 0 + + vuint1 type: vuint32 - default: none + default: empty - noDefault5 + vuint2 + type: vuint32 + default: (vector size = 1) + [0]: 4294967295 + + vuint3 + type: vuint32 + default: (vector size = 2) + [0]: 4294967295 + [1]: 0 + + vuint4 + type: vuint32 + default: (vector size = 3) + [0]: 4294967295 + [1]: 0 + [2]: 11 + + vuint5 + type: vuint32 + default: see Section 1.2.1 + + int64v1 type: int64 - default: none + default: 9000000000000000000 - noDefault6 + int64v2 + type: int64 + default: -9000000000000000000 + + int64v3 + type: int64 + default: 0 + + vint64v1 type: vint64 - default: none + default: empty - noDefault7 + vint64v2 + type: vint64 + default: (vector size = 1) + [0]: 9000000000000000000 + + vint64v3 + type: vint64 + default: (vector size = 2) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + + vint64v4 + type: vint64 + default: (vector size = 3) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + [2]: 0 + + uint64v1 type: uint64 - default: none + default: 18000000000000000000 - noDefault8 + uint64v2 + type: untracked uint64 + default: 0 + + vuint64v1 + type: vuint64 + default: empty + + vuint64v2 + type: vuint64 + default: (vector size = 1) + [0]: 18000000000000000000 + + vuint64v3 type: vuint64 + default: (vector size = 2) + [0]: 18000000000000000000 + [1]: 0 + + vuint64v4 + type: vuint64 + default: (vector size = 3) + [0]: 18000000000000000000 + [1]: 0 + [2]: 11 + + doublev1 + type: double + default: 2.2250738585072014e-308 + + doublev2 + type: untracked double + default: 0 + + doublev3 + type: untracked double + default: 0.3 + + vdoublev1 + type: vdouble + default: empty + + vdoublev2 + type: vdouble + default: (vector size = 1) + [0]: 1e+300 + + vdoublev3 + type: vdouble + default: (vector size = 2) + [0]: 1e+300 + [1]: 0 + + vdoublev4 + type: vdouble + default: (vector size = 3) + [0]: 1e+300 + [1]: 0 + [2]: 11 + + vdoublev5 + type: vdouble + default: (vector size = 4) + [0]: 1e+300 + [1]: 0 + [2]: 11 + [3]: 0.3 + + boolv1 + type: bool + default: True + + boolv2 + type: bool + default: False + + stringv1 + type: string + default: 'Hello' + + stringv2 + type: string + default: '' + + vstringv1 + type: vstring + default: empty + + vstringv2 + type: vstring + default: (vector size = 1) + [0]: 'Hello' + + vstringv3 + type: vstring + default: (vector size = 2) + [0]: 'Hello' + [1]: 'World' + + vstringv4 + type: vstring + default: (vector size = 3) + [0]: 'Hello' + [1]: 'World' + [2]: '' + + eventIDv1 + type: EventID + default: 11:12 + + eventIDv2 + type: EventID + default: 101:102 + + vEventIDv1 + type: VEventID + default: empty + + vEventIDv2 + type: VEventID + default: (vector size = 1) + [0]: 1000:1100 + + vEventIDv3 + type: VEventID + default: (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + + vEventIDv4 + type: VEventID + default: (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + + luminosityIDv1 + type: LuminosityBlockID + default: 11:12 + + luminosityIDv2 + type: LuminosityBlockID + default: 101:102 + + vLuminosityBlockIDv1 + type: VLuminosityBlockID + default: empty + + vLuminosityBlockIDv2 + type: VLuminosityBlockID + default: (vector size = 1) + [0]: 1000:1100 + + vLuminosityBlockIDv3 + type: VLuminosityBlockID + default: (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + + vLuminosityBlockIDv4 + type: VLuminosityBlockID + default: (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + + lumiRangev1 + type: LuminosityBlockRange + default: 1:1-9:9 + + lumiRangev2 + type: LuminosityBlockRange + default: 3:4-1000:1000 + + vLumiRangev1 + type: VLuminosityBlockRange + default: empty + + vLumiRangev2 + type: VLuminosityBlockRange + default: (vector size = 1) + [0]: 1:1-9:9 + + vLumiRangev3 + type: VLuminosityBlockRange + default: (vector size = 2) + [0]: 1:1-9:9 + [1]: 3:4-1000:1000 + + eventRangev1 + type: EventRange + default: 1:1-8:8 + + eventRangev2 + type: EventRange + default: 3:4-1001:1002 + + vEventRangev1 + type: VEventRange + default: empty + + vEventRangev2 + type: VEventRange + default: (vector size = 1) + [0]: 1:1-8:8 + + vEventRangev3 + type: VEventRange + default: (vector size = 2) + [0]: 1:1-8:8 + [1]: 3:4-1001:1002 + + inputTagv1 + type: InputTag + default: 'One:Two:Three' + + inputTagv2 + type: InputTag + default: 'One:Two' + + inputTagv3 + type: InputTag + default: 'One' + + inputTagv4 + type: InputTag + default: 'One::Three' + + vInputTagv1 + type: VInputTag + default: empty + + vInputTagv2 + type: VInputTag + default: (vector size = 1) + [0]: 'One:Two:Three' + + vInputTagv3 + type: VInputTag + default: (vector size = 2) + [0]: 'One:Two:Three' + [1]: 'One:Two' + + vInputTagv4 + type: VInputTag + default: (vector size = 3) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + + vInputTagv5 + type: VInputTag + default: (vector size = 4) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + [3]: 'One::Three' + + esinputTagv1 + type: ESInputTag + default: 'One:Two' + + esinputTagv2 + type: ESInputTag + default: 'One:' + + esinputTagv3 + type: ESInputTag + default: ':Two' + + vESInputTagv1 + type: VESInputTag + default: empty + + vESInputTagv2 + type: VESInputTag + default: (vector size = 1) + [0]: 'One:Two' + + vESInputTagv3 + type: VESInputTag + default: (vector size = 2) + [0]: 'One:Two' + [1]: 'One:' + + vESInputTagv4 + type: VESInputTag + default: (vector size = 3) + [0]: 'One:Two' + [1]: 'One:' + [2]: ':Two' + + fileInPath + type: FileInPath + default: 'FWCore/Integration/plugins/ProducerWithPSetDesc.cc' + + Empty group description + + bar + type: PSet + see Section 1.2.2 + + test101 + type: PSet optional + see Section 1.2.3 (do not write to cfi) + + test102 + type: VPSet optional + see Section 1.2.4 (do not write to cfi) + + test103 + type: VPSet optional + see Section 1.2.5 (do not write to cfi) + + test104 + type: untracked VPSet + see Section 1.2.6 + + test105 + type: untracked VPSet + see Section 1.2.7 + + test1 + type: double + default: 0.1 + + test2 + type: double optional + default: 0.2 + + test3 + type: double optional + default: none (do not write to cfi) + + AND group: + optional + see Section 1.2.8 + + oiswitch (switch) + type: int32 optional + see Section 1.2.9 + + testDeeplyNested2 + type: PSet + see Section 1.2.10 + + bars + type: VPSet + see Section 1.2.11 + + subpset + type: PSet optional + see Section 1.2.12 + + wildcardPset + type: PSet + see Section 1.2.13 + + switchPset + type: PSet + see Section 1.2.14 + + xorPset + type: PSet + see Section 1.2.15 + + orPset + type: PSet + see Section 1.2.16 + + andPset + type: PSet + see Section 1.2.17 + + ifExistsPset + type: PSet + see Section 1.2.18 + + allowedLabelsPset + type: PSet + see Section 1.2.19 + + noDefaultPset3 + type: PSet + see Section 1.2.20 + + noDefaultPset4 + type: PSet + see Section 1.2.21 + + plugin + type: PSet + see Section 1.2.22 + + plugin1 + type: PSet + see Section 1.2.23 + + plugin2 + type: VPSet + see Section 1.2.24 + + plugin3 + type: VPSet + see Section 1.2.25 + + plugin4 + type: PSet + see Section 1.2.26 + + plugin5 + type: VPSet + see Section 1.2.27 + + noDefaultPset1 + type: PSet + see Section 1.2.28 + + noDefaultPset2 + type: PSet + see Section 1.2.29 + + mightGet + type: untracked vstring optional + default: none + List contains the branch names for the EDProducts which + might be requested by the module. + The format for identifying the EDProduct is the same as + the one used for OutputModules, except no wild cards + are allowed. E.g. + Foos_foomodule_whichFoo_RECO + + Section 1.2.1 vuint5 default contents: (vector size = 6) + [0]: 4294967295 + [1]: 0 + [2]: 11 + [3]: 21 + [4]: 31 + [5]: 41 + + Section 1.2.2 bar PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.2.3 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.2.4 test102 VPSet description: + All elements will be validated using the PSet description in Section 1.2.4.1. + Does not have a default VPSet. + + Section 1.2.4.1 description of PSet used to validate elements of VPSet: + + Description is empty + + Section 1.2.5 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.2.5.1. + Does not have a default VPSet. + + Section 1.2.5.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.2.6 test104 VPSet description: + All elements will be validated using the PSet description in Section 1.2.6.1. + The default VPSet has 1 element. + [0]: see Section 1.2.6.2 + + Section 1.2.6.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.2.6.2 PSet description of default VPSet element [0] + + Description is empty + + Section 1.2.7 test105 VPSet description: + All elements will be validated using the PSet description in Section 1.2.7.1. + The default VPSet is empty. + + Section 1.2.7.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.2.8 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + testA + type: string + default: 'fooA' + + testB + type: int32 + default: 100 + + testC + type: int32 + default: 101 + + Section 1.2.9 oiswitch (switch): + The value of "oiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + oiswitch + type: int32 optional + default: 1 + + if oiswitch = 0 + oivalue + type: int32 + default: 100 + + if oiswitch = 1 + AND group: + see Section 1.2.9.1 + + if oiswitch = 2 + oivalue + type: string + default: '102' + + Section 1.2.9.1 AND group description: + This AND group requires all of the following to be in the PSet + + oivalue1 + type: double + default: 101 + + oivalue2 + type: double + default: 101 + + Section 1.2.10 testDeeplyNested2 PSet description: + + bswitch (switch) + type: bool + see Section 1.2.10.1 + + iswitch (switch) + type: int32 + see Section 1.2.10.2 + + sswitch (switch) + type: string + see Section 1.2.10.3 + + ndiswitch (switch) + type: int32 optional (do not write to cfi) + see Section 1.2.10.4 + + testint + type: int32 + default: 1000 + + Section 1.2.10.1 bswitch (switch): + The value of "bswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + bswitch + type: bool + default: False + + if bswitch = False + AND group: + see Section 1.2.10.1.1 + + if bswitch = True + bvalue + type: int32 + default: 100 + + Section 1.2.10.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + bvalue1 + type: double + default: 101 + + bvalue2 + type: double + default: 101 + + Section 1.2.10.2 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: int32 + default: 100 + + if iswitch = 1 + AND group: + see Section 1.2.10.2.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.2.10.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: untracked double + default: 101 + + Section 1.2.10.3 sswitch (switch): + The value of "sswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + sswitch + type: string + default: '1' + + if sswitch = "0" + svalue + type: int32 + default: 100 + + if sswitch = "1" + AND group: + see Section 1.2.10.3.1 + + if sswitch = "2" + svalue + type: string + default: '102' + + Section 1.2.10.3.1 AND group description: + This AND group requires all of the following to be in the PSet + + svalue1 + type: double + default: 101 + + svalue2 + type: double + default: 101 + + Section 1.2.10.4 ndiswitch (switch): + The value of "ndiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + ndiswitch + type: int32 optional + default: 1 + + if ndiswitch = 0 + ndivalue + type: int32 + default: 100 + + if ndiswitch = 1 + AND group: + see Section 1.2.10.4.1 + + if ndiswitch = 2 + ndivalue + type: string + default: '102' + + Section 1.2.10.4.1 AND group description: + This AND group requires all of the following to be in the PSet + + ndivalue1 + type: double + default: 101 + + ndivalue2 + type: double + default: 101 + + Section 1.2.11 bars VPSet description: + All elements will be validated using the PSet description in Section 1.2.11.1. + The default VPSet has 2 elements. + [0]: see Section 1.2.11.2 + [1]: see Section 1.2.11.3 + + Section 1.2.11.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + testDeeplyNested + type: PSet + see Section 1.2.11.1.1 + + anotherVPSet + type: VPSet + see Section 1.2.11.1.2 + + Section 1.2.11.1.1 testDeeplyNested PSet description: + + bswitch (switch) + type: bool + see Section 1.2.11.1.1.1 + + iswitch (switch) + type: int32 + see Section 1.2.11.1.1.2 + + sswitch (switch) + type: string + see Section 1.2.11.1.1.3 + + ndiswitch (switch) + type: int32 optional (do not write to cfi) + see Section 1.2.11.1.1.4 + + testint + type: int32 + default: 1000 + + Section 1.2.11.1.1.1 bswitch (switch): + The value of "bswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + bswitch + type: bool + default: False + + if bswitch = False + AND group: + see Section 1.2.11.1.1.1.1 + + if bswitch = True + bvalue + type: int32 + default: 100 + + Section 1.2.11.1.1.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + bvalue1 + type: double + default: 101 + + bvalue2 + type: double + default: 101 + + Section 1.2.11.1.1.2 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: int32 + default: 100 + + if iswitch = 1 + AND group: + see Section 1.2.11.1.1.2.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.2.11.1.1.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: untracked double + default: 101 + + Section 1.2.11.1.1.3 sswitch (switch): + The value of "sswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + sswitch + type: string + default: '1' + + if sswitch = "0" + svalue + type: int32 + default: 100 + + if sswitch = "1" + AND group: + see Section 1.2.11.1.1.3.1 + + if sswitch = "2" + svalue + type: string + default: '102' + + Section 1.2.11.1.1.3.1 AND group description: + This AND group requires all of the following to be in the PSet + + svalue1 + type: double + default: 101 + + svalue2 + type: double + default: 101 + + Section 1.2.11.1.1.4 ndiswitch (switch): + The value of "ndiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + ndiswitch + type: int32 optional + default: 1 + + if ndiswitch = 0 + ndivalue + type: int32 + default: 100 + + if ndiswitch = 1 + AND group: + see Section 1.2.11.1.1.4.1 + + if ndiswitch = 2 + ndivalue + type: string + default: '102' + + Section 1.2.11.1.1.4.1 AND group description: + This AND group requires all of the following to be in the PSet + + ndivalue1 + type: double + default: 101 + + ndivalue2 + type: double + default: 101 + + Section 1.2.11.1.2 anotherVPSet VPSet description: + All elements will be validated using the PSet description in Section 1.2.11.1.2.1. + The default VPSet has 2 elements. + [0]: see Section 1.2.11.1.2.2 + [1]: see Section 1.2.11.1.2.3 + + Section 1.2.11.1.2.1 description of PSet used to validate elements of VPSet: + + xvalue + type: int32 + default: 7 + + Section 1.2.11.1.2.2 PSet description of default VPSet element [0] + + Description is empty + + Section 1.2.11.1.2.3 PSet description of default VPSet element [1] + + xvalue + type: int32 + default: 100 + + Section 1.2.11.2 PSet description of default VPSet element [0] + + oDrinks + type: uint32 + default: 11 + + Section 1.2.11.3 PSet description of default VPSet element [1] + + ndouDrinks + type: untracked uint32 + default: 11 + + oDrinks + type: uint32 + default: 11 + + ouDrinks + type: untracked uint32 + default: 11 + + testDeeplyNested + type: PSet + see Section 1.2.11.3.1 + + anotherVPSet + type: VPSet + see Section 1.2.11.3.2 + + Section 1.2.11.3.1 testDeeplyNested PSet description: + + testint + type: int32 + default: 2 + + Section 1.2.11.3.2 VPSet description for VPSet that is part of the default of a containing VPSet: + The default VPSet has 2 elements. + [0]: see Section 1.2.11.3.2.1 + [1]: see Section 1.2.11.3.2.2 + + Section 1.2.11.3.2.1 PSet description of default VPSet element [0] + + Description is empty + + Section 1.2.11.3.2.2 PSet description of default VPSet element [1] + + xvalue + type: int32 + default: 17 + + Section 1.2.12 subpset PSet description: + + xvalue + type: int32 + default: 11 + + bar + type: untracked PSet + see Section 1.2.12.1 + + Section 1.2.12.1 bar PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.2.13 wildcardPset PSet description: + + p_uint_opt + type: uint32 optional + default: 0 + + labels must match this wildcard pattern: * + type: int32 optional + criteria: require zero or more + + labels must match this wildcard pattern: * + type: untracked double optional + criteria: require zero or more + A comment for a wildcard parameter + + labels must match this wildcard pattern: * + type: PSet optional + criteria: require exactly one + + labels must match this wildcard pattern: * + type: PSet optional + criteria: require at least one + (see Section 1.2.13.1) + + labels must match this wildcard pattern: * + type: VPSet optional + criteria: require exactly one + + labels must match this wildcard pattern: * + type: VPSet optional + criteria: require at least one + (see Section 1.2.13.2) + + Section 1.2.13.1 description of PSet matching wildcard: + + Drinks + type: uint32 + default: 5 + + Section 1.2.13.2 description used to validate all PSets which are in the VPSet matching the wildcard: + + Drinks + type: uint32 + default: 5 + + Drinks2 + type: uint32 + default: 11 + + Section 1.2.14 switchPset PSet description: + + iswitch (switch) + type: int32 + see Section 1.2.14.1 + Comment for a ParameterSwitch + + addTeVRefits (switch) + type: bool + see Section 1.2.14.2 + If TeV refits are added, their sources need to be + specified + + Section 1.2.14.1 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: vint32 + default: (vector size = 2) + [0]: 21 + [1]: 22 + + if iswitch = 1 + AND group: + see Section 1.2.14.1.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.2.14.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: double + default: 101 + + Section 1.2.14.2 addTeVRefits (switch): + The value of "addTeVRefits" controls which other parameters + are required or allowed to be in the PSet. + + switch: + addTeVRefits + type: bool + default: True + + if addTeVRefits = False + Empty group description + + if addTeVRefits = True + AND group: + see Section 1.2.14.2.1 + + Section 1.2.14.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + pickySrc + type: InputTag + default: '' + + tpfmsSrc + type: InputTag + default: '' + + Section 1.2.15 xorPset PSet description: + + XOR group: + see Section 1.2.15.1 + + XOR group: + see Section 1.2.15.2 + + XOR group: + optional (do not write to cfi) + see Section 1.2.15.3 + + XOR group: + see Section 1.2.15.4 + + Section 1.2.15.1 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name + type: string + default: '11' + + name + type: uint32 + default: 11 + + Section 1.2.15.2 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name1 + type: string + default: '11' + + name1 + type: uint32 + default: 11 + + Section 1.2.15.3 XOR group description: + This optional XOR group requires exactly one or none of the following to be in the PSet + + name2 + type: string + default: '11' + + name2 + type: uint32 + default: 11 + + Section 1.2.15.4 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name3 + type: string + default: '11' + + name4 + type: uint32 + default: 11 + + test101 + type: PSet + see Section 1.2.15.4.1 + + test103 + type: VPSet + see Section 1.2.15.4.2 + + Section 1.2.15.4.1 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.2.15.4.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.2.15.4.2.1. + Does not have a default VPSet. + + Section 1.2.15.4.2.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.2.16 orPset PSet description: + + OR group: + see Section 1.2.16.1 + + OR group: + see Section 1.2.16.2 + + OR group: + optional (do not write to cfi) + see Section 1.2.16.3 + + Section 1.2.16.1 OR group description: + This OR group requires at least one of the following to be in the PSet + + x1 + type: string + default: '11' + + x2 + type: uint32 + default: 11 + + Section 1.2.16.2 OR group description: + This OR group requires at least one of the following to be in the PSet + + y1 + type: string + default: '11' + + y2 + type: uint32 + default: 11 + + Section 1.2.16.3 OR group description: + This optional OR group requires at least one or none of the following to be in the PSet + + z1 + type: string + default: '11' + + z2 + type: uint32 + default: 11 + + test101 + type: PSet + see Section 1.2.16.3.1 + + test103 + type: VPSet + see Section 1.2.16.3.2 + + Section 1.2.16.3.1 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.2.16.3.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.2.16.3.2.1. + Does not have a default VPSet. + + Section 1.2.16.3.2.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.2.17 andPset PSet description: + + AND group: + see Section 1.2.17.1 + + AND group: + see Section 1.2.17.2 + + AND group: + see Section 1.2.17.3 + + AND group: + optional (do not write to cfi) + see Section 1.2.17.4 + + AND group: + optional + see Section 1.2.17.5 + + Section 1.2.17.1 AND group description: + This AND group requires all of the following to be in the PSet + + x1 + type: string + default: '11' + + x2 + type: uint32 + default: 11 + + Section 1.2.17.2 AND group description: + This AND group requires all of the following to be in the PSet + + y1 + type: string + default: '11' + + y2 + type: uint32 + default: 11 + + Section 1.2.17.3 AND group description: + This AND group requires all of the following to be in the PSet + + z1 + type: string + default: '11' + + z2 + type: uint32 + default: 11 + + Section 1.2.17.4 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + a1 + type: string + default: '11' + + a2 + type: uint32 + default: 11 + + Section 1.2.17.5 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + b1 + type: string + default: '11' + + b2 + type: uint32 + default: 11 + + b3 + type: uint32 + default: 11 + + b4 + type: uint32 + default: 11 + + b5 + type: uint32 + default: 11 + + b6 + type: uint32 + default: 11 + + Section 1.2.18 ifExistsPset PSet description: + + IfExists pair: + see Section 1.2.18.1 + + IfExists pair: + optional (do not write to cfi) + see Section 1.2.18.2 + + IfExists pair: + see Section 1.2.18.3 + + Section 1.2.18.1 IfExists pair description: + If the first parameter exists, then the second is required to exist + + x1 + type: uint32 + default: 11 + + x2 + type: string + default: '11' + + Section 1.2.18.2 optional IfExists pair description: + If the first parameter exists, then the second is allowed to exist + + y1 + type: uint32 + default: 11 + + y2 + type: string + default: '11' + + Section 1.2.18.3 IfExists pair description: + If the first parameter exists, then the second is required to exist + + z1 + type: uint32 + default: 11 + + z2 + type: string + default: '11' + + Section 1.2.19 allowedLabelsPset PSet description: + + p_int_opt + type: int32 optional + default: 0 + + testAllowedLabels (list of allowed labels) + see Section 1.2.19.1 + + testAllowedLabelsUntracked (list of allowed labels) + see Section 1.2.19.2 + + testOptAllowedLabels (list of allowed labels) + optional (do not write to cfi) + see Section 1.2.19.3 + + testOptAllowedLabelsUntracked (list of allowed labels) + optional (do not write to cfi) + see Section 1.2.19.4 + + testWithSet (list of allowed labels) + optional + see Section 1.2.19.5 + + testWithVectorOfSets (list of allowed labels) + optional + see Section 1.2.19.6 + + Section 1.2.19.1 testAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testAllowedLabels + type: vstring + default: empty + + type of allowed parameters: + int32 + + Section 1.2.19.2 testAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testAllowedLabelsUntracked + type: untracked vstring + default: empty + + type of allowed parameters: + untracked uint32 + + Section 1.2.19.3 testOptAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testOptAllowedLabels + type: vstring optional + default: empty + + type of allowed parameters: + int32 + + Section 1.2.19.4 testOptAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testOptAllowedLabelsUntracked + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked uint32 + + Section 1.2.19.5 testWithSet - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testWithSet + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked PSet + see Section 1.2.19.5.1 + + Section 1.2.19.5.1 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.2.19.6 testWithVectorOfSets - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testWithVectorOfSets + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked VPSet + see Section 1.2.19.6.1 + + Section 1.2.19.6.1 PSet description used to validate all elements of VPSet's: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.2.20 noDefaultPset3 PSet description: + + noDefault1 + type: int32 optional + default: none + + noDefault2 + type: vint32 optional + default: none + + noDefault3 + type: uint32 optional + default: none + + noDefault4 + type: vuint32 optional + default: none + + noDefault5 + type: int64 optional + default: none + + noDefault6 + type: vint64 optional + default: none + + noDefault7 + type: uint64 optional + default: none + + noDefault8 + type: vuint64 optional + default: none + + noDefault9 + type: double optional + default: none + + noDefault10 + type: vdouble optional + default: none + + noDefault11 + type: bool optional + default: none + + noDefault12 + type: string optional + default: none + + noDefault13 + type: vstring optional + default: none + + noDefault14 + type: EventID optional + default: none + + noDefault15 + type: VEventID optional + default: none + + noDefault16 + type: LuminosityBlockID optional + default: none + + noDefault17 + type: VLuminosityBlockID optional + default: none + + noDefault18 + type: InputTag optional + default: none + + noDefault19 + type: VInputTag optional + default: none + + noDefault20 + type: FileInPath optional + default: none + + noDefault21 + type: LuminosityBlockRange optional + default: none + + noDefault22 + type: VLuminosityBlockRange optional + default: none + + noDefault23 + type: EventRange optional + default: none + + noDefault24 + type: VEventRange optional + default: none + + Section 1.2.21 noDefaultPset4 PSet description: + + noDefault1 + type: untracked int32 optional + default: none + + noDefault2 + type: untracked vint32 optional + default: none + + noDefault3 + type: untracked uint32 optional + default: none + + noDefault4 + type: untracked vuint32 optional + default: none + + noDefault5 + type: untracked int64 optional + default: none + + noDefault6 + type: untracked vint64 optional + default: none + + noDefault7 + type: untracked uint64 optional + default: none + + noDefault8 + type: untracked vuint64 optional + default: none + + noDefault9 + type: untracked double optional + default: none + + noDefault10 + type: untracked vdouble optional + default: none + + noDefault11 + type: untracked bool optional + default: none + + noDefault12 + type: untracked string optional + default: none + + noDefault13 + type: untracked vstring optional + default: none + + noDefault14 + type: untracked EventID optional + default: none + + noDefault15 + type: untracked VEventID optional + default: none + + noDefault16 + type: untracked LuminosityBlockID optional + default: none + + noDefault17 + type: untracked VLuminosityBlockID optional + default: none + + noDefault18 + type: untracked InputTag optional + default: none + + noDefault19 + type: untracked VInputTag optional + default: none + + noDefault20 + type: untracked FileInPath optional + default: none + + noDefault21 + type: untracked LuminosityBlockRange optional + default: none + + noDefault22 + type: untracked VLuminosityBlockRange optional + default: none + + noDefault23 + type: untracked EventRange optional + default: none + + noDefault24 + type: untracked VEventRange optional + default: none + + Section 1.2.22 plugin PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.2.22.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.2.22.1.1 + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.2.22.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.2.22)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.2.22.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.2.22.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.2.23 plugin1 PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.2.23.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.2.23.1.1 + + type + type: string + default: none + + Section 1.2.23.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.2.23)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.2.23.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: none + + Section 1.2.23.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: none + + Section 1.2.24 plugin2 VPSet description: + All elements will be validated using the PSet description in Section 1.2.24.1. + The default VPSet is empty. + + Section 1.2.24.1 description of PSet used to validate elements of VPSet: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.2.24.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.2.24.1.1.1 + + type + type: string + default: none + + Section 1.2.24.1.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.2.24.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.2.24.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: none + + Section 1.2.24.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: none + + Section 1.2.25 plugin3 VPSet description: + All elements will be validated using the PSet description in Section 1.2.25.1. + The default VPSet has 2 elements. + [0]: see Section 1.2.25.2 + [1]: see Section 1.2.25.3 + + Section 1.2.25.1 description of PSet used to validate elements of VPSet: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.2.25.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.2.25.1.1.1 + + type + type: string + default: none + + Section 1.2.25.1.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.2.25.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.2.25.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: none + + Section 1.2.25.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: none + + Section 1.2.25.2 PSet description of default VPSet element [0] + + type + type: string + default: 'edmtestAnotherOneMaker' + + Section 1.2.25.3 PSet description of default VPSet element [1] + + type + type: string + default: 'edmtestAnotherValueMaker' + + value + type: int32 + default: 11 + + Section 1.2.26 plugin4 PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.2.26.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.2.26.1.1 + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.2.26.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.2.26)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.2.26.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.2.26.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.2.27 plugin5 VPSet description: + All elements will be validated using the PSet description in Section 1.2.27.1. + The default VPSet has 2 elements. + [0]: see Section 1.2.27.2 + [1]: see Section 1.2.27.3 + + Section 1.2.27.1 description of PSet used to validate elements of VPSet: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.2.27.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.2.27.1.1.1 + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.2.27.1.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.2.27.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.2.27.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.2.27.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.2.27.2 PSet description of default VPSet element [0] + + type + type: string + default: 'edmtestAnotherOneMaker' + + Section 1.2.27.3 PSet description of default VPSet element [1] + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + value + type: int32 + default: 11 + + Section 1.2.28 noDefaultPset1 PSet description: + + noDefault1 + type: int32 + default: none + + noDefault2 + type: vint32 + default: none + + noDefault3 + type: uint32 + default: none + + noDefault4 + type: vuint32 + default: none + + noDefault5 + type: int64 + default: none + + noDefault6 + type: vint64 + default: none + + noDefault7 + type: uint64 + default: none + + noDefault8 + type: vuint64 + default: none + + noDefault9 + type: double + default: none + + noDefault10 + type: vdouble + default: none + + noDefault11 + type: bool + default: none + + noDefault12 + type: string + default: none + + noDefault13 + type: vstring + default: none + + noDefault14 + type: EventID + default: none + + noDefault15 + type: VEventID + default: none + + noDefault16 + type: LuminosityBlockID + default: none + + noDefault17 + type: VLuminosityBlockID + default: none + + noDefault18 + type: InputTag + default: none + + noDefault19 + type: VInputTag + default: none + + noDefault20 + type: FileInPath + default: none + + noDefault21 + type: LuminosityBlockRange + default: none + + noDefault22 + type: VLuminosityBlockRange + default: none + + noDefault23 + type: EventRange + default: none + + noDefault24 + type: VEventRange + default: none + + Section 1.2.29 noDefaultPset2 PSet description: + + noDefault1 + type: untracked int32 + default: none + + noDefault2 + type: untracked vint32 + default: none + + noDefault3 + type: untracked uint32 + default: none + + noDefault4 + type: untracked vuint32 + default: none + + noDefault5 + type: untracked int64 + default: none + + noDefault6 + type: untracked vint64 + default: none + + noDefault7 + type: untracked uint64 + default: none + + noDefault8 + type: untracked vuint64 + default: none + + noDefault9 + type: untracked double + default: none + + noDefault10 + type: untracked vdouble + default: none + + noDefault11 + type: untracked bool + default: none + + noDefault12 + type: untracked string + default: none + + noDefault13 + type: untracked vstring + default: none + + noDefault14 + type: untracked EventID + default: none + + noDefault15 + type: untracked VEventID + default: none + + noDefault16 + type: untracked LuminosityBlockID + default: none + + noDefault17 + type: untracked VLuminosityBlockID + default: none + + noDefault18 + type: untracked InputTag + default: none + + noDefault19 + type: untracked VInputTag + default: none + + noDefault20 + type: untracked FileInPath + default: none + + noDefault21 + type: untracked LuminosityBlockRange + default: none + + noDefault22 + type: untracked VLuminosityBlockRange + default: none + + noDefault23 + type: untracked EventRange + default: none + + noDefault24 + type: untracked VEventRange + default: none + + 1.3 module label: producerWithPSetDesc + + testingAutoGeneratedCfi + type: untracked bool optional + default: True + + p_int + type: int32 + default: 3 + A big integer. I am trying to test the wrapping of + comments in the printed output by putting in a long + comment to see if it gets wrapped OK. The comment + should get indented to the second column indent on + every line. By default newlines should be inserted + between words to make the lines fit in the terminal + screen width. There is a command line parameter that + can be set to override this width to any desired value. + If there is no terminal then it should default to 80. + The logic for setting the width is in edmPluginHelp.cpp + + p_int_untracked + type: untracked int32 + default: -2147483647 + + p_int_opt + type: int32 optional + default: 0 + + p_int_optuntracked + type: untracked int32 optional + default: 7 + + p_int_opt_nd + type: int32 optional + default: none + + p_int_optuntracked_nd + type: untracked int32 optional + default: none + + vint1 + type: vint32 + default: empty + + vint2 + type: vint32 + default: (vector size = 1) + [0]: 2147483647 + + vint3 + type: vint32 + default: (vector size = 2) + [0]: 2147483647 + [1]: -2147483647 + + vint4 + type: vint32 + default: (vector size = 3) + [0]: 2147483647 + [1]: -2147483647 + [2]: 0 + + uint1 + type: uint32 + default: 4294967295 + + uint2 + type: untracked uint32 + default: 0 + + vuint1 + type: vuint32 + default: empty + + vuint2 + type: vuint32 + default: (vector size = 1) + [0]: 4294967295 + + vuint3 + type: vuint32 + default: (vector size = 2) + [0]: 4294967295 + [1]: 0 + + vuint4 + type: vuint32 + default: (vector size = 3) + [0]: 4294967295 + [1]: 0 + [2]: 11 + + vuint5 + type: vuint32 + default: see Section 1.3.1 + + int64v1 + type: int64 + default: 9000000000000000000 + + int64v2 + type: int64 + default: -9000000000000000000 + + int64v3 + type: int64 + default: 0 + + vint64v1 + type: vint64 + default: empty + + vint64v2 + type: vint64 + default: (vector size = 1) + [0]: 9000000000000000000 + + vint64v3 + type: vint64 + default: (vector size = 2) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + + vint64v4 + type: vint64 + default: (vector size = 3) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + [2]: 0 + + uint64v1 + type: uint64 + default: 18000000000000000000 + + uint64v2 + type: untracked uint64 + default: 0 + + vuint64v1 + type: vuint64 + default: empty + + vuint64v2 + type: vuint64 + default: (vector size = 1) + [0]: 18000000000000000000 + + vuint64v3 + type: vuint64 + default: (vector size = 2) + [0]: 18000000000000000000 + [1]: 0 + + vuint64v4 + type: vuint64 + default: (vector size = 3) + [0]: 18000000000000000000 + [1]: 0 + [2]: 11 + + doublev1 + type: double + default: 2.2250738585072014e-308 + + doublev2 + type: untracked double + default: 0 + + doublev3 + type: untracked double + default: 0.3 + + vdoublev1 + type: vdouble + default: empty + + vdoublev2 + type: vdouble + default: (vector size = 1) + [0]: 1e+300 + + vdoublev3 + type: vdouble + default: (vector size = 2) + [0]: 1e+300 + [1]: 0 + + vdoublev4 + type: vdouble + default: (vector size = 3) + [0]: 1e+300 + [1]: 0 + [2]: 11 + + vdoublev5 + type: vdouble + default: (vector size = 4) + [0]: 1e+300 + [1]: 0 + [2]: 11 + [3]: 0.3 + + boolv1 + type: bool + default: True + + boolv2 + type: bool + default: False + + stringv1 + type: string + default: 'Hello' + + stringv2 + type: string + default: '' + + vstringv1 + type: vstring + default: empty + + vstringv2 + type: vstring + default: (vector size = 1) + [0]: 'Hello' + + vstringv3 + type: vstring + default: (vector size = 2) + [0]: 'Hello' + [1]: 'World' + + vstringv4 + type: vstring + default: (vector size = 3) + [0]: 'Hello' + [1]: 'World' + [2]: '' + + eventIDv1 + type: EventID + default: 11:12 + + eventIDv2 + type: EventID + default: 101:102 + + vEventIDv1 + type: VEventID + default: empty + + vEventIDv2 + type: VEventID + default: (vector size = 1) + [0]: 1000:1100 + + vEventIDv3 + type: VEventID + default: (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + + vEventIDv4 + type: VEventID + default: (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + + luminosityIDv1 + type: LuminosityBlockID + default: 11:12 + + luminosityIDv2 + type: LuminosityBlockID + default: 101:102 + + vLuminosityBlockIDv1 + type: VLuminosityBlockID + default: empty + + vLuminosityBlockIDv2 + type: VLuminosityBlockID + default: (vector size = 1) + [0]: 1000:1100 + + vLuminosityBlockIDv3 + type: VLuminosityBlockID + default: (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + + vLuminosityBlockIDv4 + type: VLuminosityBlockID + default: (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + + lumiRangev1 + type: LuminosityBlockRange + default: 1:1-9:9 + + lumiRangev2 + type: LuminosityBlockRange + default: 3:4-1000:1000 + + vLumiRangev1 + type: VLuminosityBlockRange + default: empty + + vLumiRangev2 + type: VLuminosityBlockRange + default: (vector size = 1) + [0]: 1:1-9:9 + + vLumiRangev3 + type: VLuminosityBlockRange + default: (vector size = 2) + [0]: 1:1-9:9 + [1]: 3:4-1000:1000 + + eventRangev1 + type: EventRange + default: 1:1-8:8 + + eventRangev2 + type: EventRange + default: 3:4-1001:1002 + + vEventRangev1 + type: VEventRange + default: empty + + vEventRangev2 + type: VEventRange + default: (vector size = 1) + [0]: 1:1-8:8 + + vEventRangev3 + type: VEventRange + default: (vector size = 2) + [0]: 1:1-8:8 + [1]: 3:4-1001:1002 + + inputTagv1 + type: InputTag + default: 'One:Two:Three' + + inputTagv2 + type: InputTag + default: 'One:Two' + + inputTagv3 + type: InputTag + default: 'One' + + inputTagv4 + type: InputTag + default: 'One::Three' + + vInputTagv1 + type: VInputTag + default: empty + + vInputTagv2 + type: VInputTag + default: (vector size = 1) + [0]: 'One:Two:Three' + + vInputTagv3 + type: VInputTag + default: (vector size = 2) + [0]: 'One:Two:Three' + [1]: 'One:Two' + + vInputTagv4 + type: VInputTag + default: (vector size = 3) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + + vInputTagv5 + type: VInputTag + default: (vector size = 4) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + [3]: 'One::Three' + + esinputTagv1 + type: ESInputTag + default: 'One:Two' + + esinputTagv2 + type: ESInputTag + default: 'One:' + + esinputTagv3 + type: ESInputTag + default: ':Two' + + vESInputTagv1 + type: VESInputTag + default: empty + + vESInputTagv2 + type: VESInputTag + default: (vector size = 1) + [0]: 'One:Two' + + vESInputTagv3 + type: VESInputTag + default: (vector size = 2) + [0]: 'One:Two' + [1]: 'One:' + + vESInputTagv4 + type: VESInputTag + default: (vector size = 3) + [0]: 'One:Two' + [1]: 'One:' + [2]: ':Two' + + fileInPath + type: FileInPath + default: 'FWCore/Integration/plugins/ProducerWithPSetDesc.cc' + + Empty group description + + bar + type: PSet + see Section 1.3.2 + + test101 + type: PSet optional + see Section 1.3.3 (do not write to cfi) + + test102 + type: VPSet optional + see Section 1.3.4 (do not write to cfi) + + test103 + type: VPSet optional + see Section 1.3.5 (do not write to cfi) + + test104 + type: untracked VPSet + see Section 1.3.6 + + test105 + type: untracked VPSet + see Section 1.3.7 + + test1 + type: double + default: 0.1 + + test2 + type: double optional + default: 0.2 + + test3 + type: double optional + default: none (do not write to cfi) + + AND group: + optional + see Section 1.3.8 + + oiswitch (switch) + type: int32 optional + see Section 1.3.9 + + testDeeplyNested2 + type: PSet + see Section 1.3.10 + + bars + type: VPSet + see Section 1.3.11 + + subpset + type: PSet optional + see Section 1.3.12 + + wildcardPset + type: PSet + see Section 1.3.13 + + switchPset + type: PSet + see Section 1.3.14 + + xorPset + type: PSet + see Section 1.3.15 + + orPset + type: PSet + see Section 1.3.16 + + andPset + type: PSet + see Section 1.3.17 + + ifExistsPset + type: PSet + see Section 1.3.18 + + allowedLabelsPset + type: PSet + see Section 1.3.19 + + noDefaultPset3 + type: PSet + see Section 1.3.20 + + noDefaultPset4 + type: PSet + see Section 1.3.21 + + plugin + type: PSet + see Section 1.3.22 + + plugin1 + type: PSet + see Section 1.3.23 + + plugin2 + type: VPSet + see Section 1.3.24 + + plugin3 + type: VPSet + see Section 1.3.25 + + plugin4 + type: PSet + see Section 1.3.26 + + plugin5 + type: VPSet + see Section 1.3.27 + + mightGet + type: untracked vstring optional + default: none + List contains the branch names for the EDProducts which + might be requested by the module. + The format for identifying the EDProduct is the same as + the one used for OutputModules, except no wild cards + are allowed. E.g. + Foos_foomodule_whichFoo_RECO + + Section 1.3.1 vuint5 default contents: (vector size = 6) + [0]: 4294967295 + [1]: 0 + [2]: 11 + [3]: 21 + [4]: 31 + [5]: 41 + + Section 1.3.2 bar PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.3.3 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.3.4 test102 VPSet description: + All elements will be validated using the PSet description in Section 1.3.4.1. + Does not have a default VPSet. + + Section 1.3.4.1 description of PSet used to validate elements of VPSet: + + Description is empty + + Section 1.3.5 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.3.5.1. + Does not have a default VPSet. + + Section 1.3.5.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.3.6 test104 VPSet description: + All elements will be validated using the PSet description in Section 1.3.6.1. + The default VPSet has 1 element. + [0]: see Section 1.3.6.2 + + Section 1.3.6.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.3.6.2 PSet description of default VPSet element [0] + + Description is empty + + Section 1.3.7 test105 VPSet description: + All elements will be validated using the PSet description in Section 1.3.7.1. + The default VPSet is empty. + + Section 1.3.7.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.3.8 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + testA + type: string + default: 'fooA' + + testB + type: int32 + default: 100 + + testC + type: int32 + default: 101 + + Section 1.3.9 oiswitch (switch): + The value of "oiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + oiswitch + type: int32 optional + default: 1 + + if oiswitch = 0 + oivalue + type: int32 + default: 100 + + if oiswitch = 1 + AND group: + see Section 1.3.9.1 + + if oiswitch = 2 + oivalue + type: string + default: '102' + + Section 1.3.9.1 AND group description: + This AND group requires all of the following to be in the PSet + + oivalue1 + type: double + default: 101 + + oivalue2 + type: double + default: 101 + + Section 1.3.10 testDeeplyNested2 PSet description: + + bswitch (switch) + type: bool + see Section 1.3.10.1 + + iswitch (switch) + type: int32 + see Section 1.3.10.2 + + sswitch (switch) + type: string + see Section 1.3.10.3 + + ndiswitch (switch) + type: int32 optional (do not write to cfi) + see Section 1.3.10.4 + + testint + type: int32 + default: 1000 + + Section 1.3.10.1 bswitch (switch): + The value of "bswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + bswitch + type: bool + default: False + + if bswitch = False + AND group: + see Section 1.3.10.1.1 + + if bswitch = True + bvalue + type: int32 + default: 100 + + Section 1.3.10.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + bvalue1 + type: double + default: 101 + + bvalue2 + type: double + default: 101 + + Section 1.3.10.2 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: int32 + default: 100 + + if iswitch = 1 + AND group: + see Section 1.3.10.2.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.3.10.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: untracked double + default: 101 + + Section 1.3.10.3 sswitch (switch): + The value of "sswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + sswitch + type: string + default: '1' + + if sswitch = "0" + svalue + type: int32 + default: 100 + + if sswitch = "1" + AND group: + see Section 1.3.10.3.1 + + if sswitch = "2" + svalue + type: string + default: '102' + + Section 1.3.10.3.1 AND group description: + This AND group requires all of the following to be in the PSet + + svalue1 + type: double + default: 101 + + svalue2 + type: double + default: 101 + + Section 1.3.10.4 ndiswitch (switch): + The value of "ndiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + ndiswitch + type: int32 optional + default: 1 + + if ndiswitch = 0 + ndivalue + type: int32 + default: 100 + + if ndiswitch = 1 + AND group: + see Section 1.3.10.4.1 + + if ndiswitch = 2 + ndivalue + type: string + default: '102' + + Section 1.3.10.4.1 AND group description: + This AND group requires all of the following to be in the PSet + + ndivalue1 + type: double + default: 101 + + ndivalue2 + type: double + default: 101 + + Section 1.3.11 bars VPSet description: + All elements will be validated using the PSet description in Section 1.3.11.1. + The default VPSet has 2 elements. + [0]: see Section 1.3.11.2 + [1]: see Section 1.3.11.3 + + Section 1.3.11.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + testDeeplyNested + type: PSet + see Section 1.3.11.1.1 + + anotherVPSet + type: VPSet + see Section 1.3.11.1.2 + + Section 1.3.11.1.1 testDeeplyNested PSet description: + + bswitch (switch) + type: bool + see Section 1.3.11.1.1.1 + + iswitch (switch) + type: int32 + see Section 1.3.11.1.1.2 + + sswitch (switch) + type: string + see Section 1.3.11.1.1.3 + + ndiswitch (switch) + type: int32 optional (do not write to cfi) + see Section 1.3.11.1.1.4 + + testint + type: int32 + default: 1000 + + Section 1.3.11.1.1.1 bswitch (switch): + The value of "bswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + bswitch + type: bool + default: False + + if bswitch = False + AND group: + see Section 1.3.11.1.1.1.1 + + if bswitch = True + bvalue + type: int32 + default: 100 + + Section 1.3.11.1.1.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + bvalue1 + type: double + default: 101 + + bvalue2 + type: double + default: 101 + + Section 1.3.11.1.1.2 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: int32 + default: 100 + + if iswitch = 1 + AND group: + see Section 1.3.11.1.1.2.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.3.11.1.1.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: untracked double + default: 101 + + Section 1.3.11.1.1.3 sswitch (switch): + The value of "sswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + sswitch + type: string + default: '1' + + if sswitch = "0" + svalue + type: int32 + default: 100 + + if sswitch = "1" + AND group: + see Section 1.3.11.1.1.3.1 + + if sswitch = "2" + svalue + type: string + default: '102' + + Section 1.3.11.1.1.3.1 AND group description: + This AND group requires all of the following to be in the PSet + + svalue1 + type: double + default: 101 + + svalue2 + type: double + default: 101 + + Section 1.3.11.1.1.4 ndiswitch (switch): + The value of "ndiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + ndiswitch + type: int32 optional + default: 1 + + if ndiswitch = 0 + ndivalue + type: int32 + default: 100 + + if ndiswitch = 1 + AND group: + see Section 1.3.11.1.1.4.1 + + if ndiswitch = 2 + ndivalue + type: string + default: '102' + + Section 1.3.11.1.1.4.1 AND group description: + This AND group requires all of the following to be in the PSet + + ndivalue1 + type: double + default: 101 + + ndivalue2 + type: double + default: 101 + + Section 1.3.11.1.2 anotherVPSet VPSet description: + All elements will be validated using the PSet description in Section 1.3.11.1.2.1. + The default VPSet has 2 elements. + [0]: see Section 1.3.11.1.2.2 + [1]: see Section 1.3.11.1.2.3 + + Section 1.3.11.1.2.1 description of PSet used to validate elements of VPSet: + + xvalue + type: int32 + default: 7 + + Section 1.3.11.1.2.2 PSet description of default VPSet element [0] + + Description is empty + + Section 1.3.11.1.2.3 PSet description of default VPSet element [1] + + xvalue + type: int32 + default: 100 + + Section 1.3.11.2 PSet description of default VPSet element [0] + + oDrinks + type: uint32 + default: 11 + + Section 1.3.11.3 PSet description of default VPSet element [1] + + ndouDrinks + type: untracked uint32 + default: 11 + + oDrinks + type: uint32 + default: 11 + + ouDrinks + type: untracked uint32 + default: 11 + + testDeeplyNested + type: PSet + see Section 1.3.11.3.1 + + anotherVPSet + type: VPSet + see Section 1.3.11.3.2 + + Section 1.3.11.3.1 testDeeplyNested PSet description: + + testint + type: int32 + default: 2 + + Section 1.3.11.3.2 VPSet description for VPSet that is part of the default of a containing VPSet: + The default VPSet has 2 elements. + [0]: see Section 1.3.11.3.2.1 + [1]: see Section 1.3.11.3.2.2 + + Section 1.3.11.3.2.1 PSet description of default VPSet element [0] + + Description is empty + + Section 1.3.11.3.2.2 PSet description of default VPSet element [1] + + xvalue + type: int32 + default: 17 + + Section 1.3.12 subpset PSet description: + + xvalue + type: int32 + default: 11 + + bar + type: untracked PSet + see Section 1.3.12.1 + + Section 1.3.12.1 bar PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.3.13 wildcardPset PSet description: + + p_uint_opt + type: uint32 optional + default: 0 + + labels must match this wildcard pattern: * + type: int32 optional + criteria: require zero or more + + labels must match this wildcard pattern: * + type: untracked double optional + criteria: require zero or more + A comment for a wildcard parameter + + labels must match this wildcard pattern: * + type: PSet optional + criteria: require exactly one + + labels must match this wildcard pattern: * + type: PSet optional + criteria: require at least one + (see Section 1.3.13.1) + + labels must match this wildcard pattern: * + type: VPSet optional + criteria: require exactly one + + labels must match this wildcard pattern: * + type: VPSet optional + criteria: require at least one + (see Section 1.3.13.2) + + Section 1.3.13.1 description of PSet matching wildcard: + + Drinks + type: uint32 + default: 5 + + Section 1.3.13.2 description used to validate all PSets which are in the VPSet matching the wildcard: + + Drinks + type: uint32 + default: 5 + + Drinks2 + type: uint32 + default: 11 + + Section 1.3.14 switchPset PSet description: + + iswitch (switch) + type: int32 + see Section 1.3.14.1 + Comment for a ParameterSwitch + + addTeVRefits (switch) + type: bool + see Section 1.3.14.2 + If TeV refits are added, their sources need to be + specified + + Section 1.3.14.1 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: vint32 + default: (vector size = 2) + [0]: 21 + [1]: 22 + + if iswitch = 1 + AND group: + see Section 1.3.14.1.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.3.14.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: double + default: 101 + + Section 1.3.14.2 addTeVRefits (switch): + The value of "addTeVRefits" controls which other parameters + are required or allowed to be in the PSet. + + switch: + addTeVRefits + type: bool + default: True + + if addTeVRefits = False + Empty group description + + if addTeVRefits = True + AND group: + see Section 1.3.14.2.1 + + Section 1.3.14.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + pickySrc + type: InputTag + default: '' + + tpfmsSrc + type: InputTag + default: '' + + Section 1.3.15 xorPset PSet description: + + XOR group: + see Section 1.3.15.1 + + XOR group: + see Section 1.3.15.2 + + XOR group: + optional (do not write to cfi) + see Section 1.3.15.3 + + XOR group: + see Section 1.3.15.4 + + Section 1.3.15.1 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name + type: string + default: '11' + + name + type: uint32 + default: 11 + + Section 1.3.15.2 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name1 + type: string + default: '11' + + name1 + type: uint32 + default: 11 + + Section 1.3.15.3 XOR group description: + This optional XOR group requires exactly one or none of the following to be in the PSet + + name2 + type: string + default: '11' + + name2 + type: uint32 + default: 11 + + Section 1.3.15.4 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name3 + type: string + default: '11' + + name4 + type: uint32 + default: 11 + + test101 + type: PSet + see Section 1.3.15.4.1 + + test103 + type: VPSet + see Section 1.3.15.4.2 + + Section 1.3.15.4.1 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.3.15.4.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.3.15.4.2.1. + Does not have a default VPSet. + + Section 1.3.15.4.2.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.3.16 orPset PSet description: + + OR group: + see Section 1.3.16.1 + + OR group: + see Section 1.3.16.2 + + OR group: + optional (do not write to cfi) + see Section 1.3.16.3 + + Section 1.3.16.1 OR group description: + This OR group requires at least one of the following to be in the PSet + + x1 + type: string + default: '11' + + x2 + type: uint32 + default: 11 + + Section 1.3.16.2 OR group description: + This OR group requires at least one of the following to be in the PSet + + y1 + type: string + default: '11' + + y2 + type: uint32 + default: 11 + + Section 1.3.16.3 OR group description: + This optional OR group requires at least one or none of the following to be in the PSet + + z1 + type: string + default: '11' + + z2 + type: uint32 + default: 11 + + test101 + type: PSet + see Section 1.3.16.3.1 + + test103 + type: VPSet + see Section 1.3.16.3.2 + + Section 1.3.16.3.1 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.3.16.3.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.3.16.3.2.1. + Does not have a default VPSet. + + Section 1.3.16.3.2.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.3.17 andPset PSet description: + + AND group: + see Section 1.3.17.1 + + AND group: + see Section 1.3.17.2 + + AND group: + see Section 1.3.17.3 + + AND group: + optional (do not write to cfi) + see Section 1.3.17.4 + + AND group: + optional + see Section 1.3.17.5 + + Section 1.3.17.1 AND group description: + This AND group requires all of the following to be in the PSet + + x1 + type: string + default: '11' + + x2 + type: uint32 + default: 11 + + Section 1.3.17.2 AND group description: + This AND group requires all of the following to be in the PSet + + y1 + type: string + default: '11' + + y2 + type: uint32 + default: 11 + + Section 1.3.17.3 AND group description: + This AND group requires all of the following to be in the PSet + + z1 + type: string + default: '11' + + z2 + type: uint32 + default: 11 + + Section 1.3.17.4 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + a1 + type: string + default: '11' + + a2 + type: uint32 + default: 11 + + Section 1.3.17.5 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + b1 + type: string + default: '11' + + b2 + type: uint32 + default: 11 + + b3 + type: uint32 + default: 11 + + b4 + type: uint32 + default: 11 + + b5 + type: uint32 + default: 11 + + b6 + type: uint32 + default: 11 + + Section 1.3.18 ifExistsPset PSet description: + + IfExists pair: + see Section 1.3.18.1 + + IfExists pair: + optional (do not write to cfi) + see Section 1.3.18.2 + + IfExists pair: + see Section 1.3.18.3 + + Section 1.3.18.1 IfExists pair description: + If the first parameter exists, then the second is required to exist + + x1 + type: uint32 + default: 11 + + x2 + type: string + default: '11' + + Section 1.3.18.2 optional IfExists pair description: + If the first parameter exists, then the second is allowed to exist + + y1 + type: uint32 + default: 11 + + y2 + type: string + default: '11' + + Section 1.3.18.3 IfExists pair description: + If the first parameter exists, then the second is required to exist + + z1 + type: uint32 + default: 11 + + z2 + type: string + default: '11' + + Section 1.3.19 allowedLabelsPset PSet description: + + p_int_opt + type: int32 optional + default: 0 + + testAllowedLabels (list of allowed labels) + see Section 1.3.19.1 + + testAllowedLabelsUntracked (list of allowed labels) + see Section 1.3.19.2 + + testOptAllowedLabels (list of allowed labels) + optional (do not write to cfi) + see Section 1.3.19.3 + + testOptAllowedLabelsUntracked (list of allowed labels) + optional (do not write to cfi) + see Section 1.3.19.4 + + testWithSet (list of allowed labels) + optional + see Section 1.3.19.5 + + testWithVectorOfSets (list of allowed labels) + optional + see Section 1.3.19.6 + + Section 1.3.19.1 testAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testAllowedLabels + type: vstring + default: empty + + type of allowed parameters: + int32 + + Section 1.3.19.2 testAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testAllowedLabelsUntracked + type: untracked vstring + default: empty + + type of allowed parameters: + untracked uint32 + + Section 1.3.19.3 testOptAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testOptAllowedLabels + type: vstring optional + default: empty + + type of allowed parameters: + int32 + + Section 1.3.19.4 testOptAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testOptAllowedLabelsUntracked + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked uint32 + + Section 1.3.19.5 testWithSet - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testWithSet + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked PSet + see Section 1.3.19.5.1 + + Section 1.3.19.5.1 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.3.19.6 testWithVectorOfSets - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testWithVectorOfSets + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked VPSet + see Section 1.3.19.6.1 + + Section 1.3.19.6.1 PSet description used to validate all elements of VPSet's: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.3.20 noDefaultPset3 PSet description: + + noDefault1 + type: int32 optional + default: none + + noDefault2 + type: vint32 optional + default: none + + noDefault3 + type: uint32 optional + default: none + + noDefault4 + type: vuint32 optional + default: none + + noDefault5 + type: int64 optional + default: none + + noDefault6 + type: vint64 optional + default: none + + noDefault7 + type: uint64 optional + default: none + + noDefault8 + type: vuint64 optional + default: none + + noDefault9 + type: double optional + default: none + + noDefault10 + type: vdouble optional + default: none + + noDefault11 + type: bool optional + default: none + + noDefault12 + type: string optional + default: none + + noDefault13 + type: vstring optional + default: none + + noDefault14 + type: EventID optional + default: none + + noDefault15 + type: VEventID optional + default: none + + noDefault16 + type: LuminosityBlockID optional + default: none + + noDefault17 + type: VLuminosityBlockID optional + default: none + + noDefault18 + type: InputTag optional + default: none + + noDefault19 + type: VInputTag optional + default: none + + noDefault20 + type: FileInPath optional + default: none + + noDefault21 + type: LuminosityBlockRange optional + default: none + + noDefault22 + type: VLuminosityBlockRange optional + default: none + + noDefault23 + type: EventRange optional + default: none + + noDefault24 + type: VEventRange optional + default: none + + Section 1.3.21 noDefaultPset4 PSet description: + + noDefault1 + type: untracked int32 optional + default: none + + noDefault2 + type: untracked vint32 optional + default: none + + noDefault3 + type: untracked uint32 optional + default: none + + noDefault4 + type: untracked vuint32 optional + default: none + + noDefault5 + type: untracked int64 optional + default: none + + noDefault6 + type: untracked vint64 optional + default: none + + noDefault7 + type: untracked uint64 optional + default: none + + noDefault8 + type: untracked vuint64 optional + default: none + + noDefault9 + type: untracked double optional + default: none + + noDefault10 + type: untracked vdouble optional + default: none + + noDefault11 + type: untracked bool optional + default: none + + noDefault12 + type: untracked string optional + default: none + + noDefault13 + type: untracked vstring optional + default: none + + noDefault14 + type: untracked EventID optional + default: none + + noDefault15 + type: untracked VEventID optional + default: none + + noDefault16 + type: untracked LuminosityBlockID optional + default: none + + noDefault17 + type: untracked VLuminosityBlockID optional + default: none + + noDefault18 + type: untracked InputTag optional + default: none + + noDefault19 + type: untracked VInputTag optional + default: none + + noDefault20 + type: untracked FileInPath optional + default: none + + noDefault21 + type: untracked LuminosityBlockRange optional + default: none + + noDefault22 + type: untracked VLuminosityBlockRange optional + default: none + + noDefault23 + type: untracked EventRange optional + default: none + + noDefault24 + type: untracked VEventRange optional + default: none + + Section 1.3.22 plugin PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.3.22.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.3.22.1.1 + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.3.22.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.3.22)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.3.22.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.3.22.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.3.23 plugin1 PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.3.23.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.3.23.1.1 + + type + type: string + default: none + + Section 1.3.23.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.3.23)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.3.23.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: none + + Section 1.3.23.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: none + + Section 1.3.24 plugin2 VPSet description: + All elements will be validated using the PSet description in Section 1.3.24.1. + The default VPSet is empty. + + Section 1.3.24.1 description of PSet used to validate elements of VPSet: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.3.24.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.3.24.1.1.1 + + type + type: string + default: none + + Section 1.3.24.1.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.3.24.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.3.24.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: none + + Section 1.3.24.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: none + + Section 1.3.25 plugin3 VPSet description: + All elements will be validated using the PSet description in Section 1.3.25.1. + The default VPSet has 2 elements. + [0]: see Section 1.3.25.2 + [1]: see Section 1.3.25.3 + + Section 1.3.25.1 description of PSet used to validate elements of VPSet: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.3.25.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.3.25.1.1.1 + + type + type: string + default: none + + Section 1.3.25.1.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.3.25.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.3.25.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: none + + Section 1.3.25.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: none + + Section 1.3.25.2 PSet description of default VPSet element [0] + + type + type: string + default: 'edmtestAnotherOneMaker' + + Section 1.3.25.3 PSet description of default VPSet element [1] + + type + type: string + default: 'edmtestAnotherValueMaker' + + value + type: int32 + default: 11 + + Section 1.3.26 plugin4 PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.3.26.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.3.26.1.1 + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.3.26.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.3.26)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.3.26.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.3.26.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.3.27 plugin5 VPSet description: + All elements will be validated using the PSet description in Section 1.3.27.1. + The default VPSet has 2 elements. + [0]: see Section 1.3.27.2 + [1]: see Section 1.3.27.3 + + Section 1.3.27.1 description of PSet used to validate elements of VPSet: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.3.27.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.3.27.1.1.1 + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.3.27.1.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.3.27.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.3.27.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.3.27.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + Section 1.3.27.2 PSet description of default VPSet element [0] + + type + type: string + default: 'edmtestAnotherOneMaker' + + Section 1.3.27.3 PSet description of default VPSet element [1] + + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' + + value + type: int32 + default: 11 + + 1.4 description without a module label + + testingAutoGeneratedCfi + type: untracked bool optional + default: True + + p_int + type: int32 + default: 2 + A big integer. I am trying to test the wrapping of + comments in the printed output by putting in a long + comment to see if it gets wrapped OK. The comment + should get indented to the second column indent on + every line. By default newlines should be inserted + between words to make the lines fit in the terminal + screen width. There is a command line parameter that + can be set to override this width to any desired value. + If there is no terminal then it should default to 80. + The logic for setting the width is in edmPluginHelp.cpp + + p_int_untracked + type: untracked int32 + default: -2147483647 + + p_int_opt + type: int32 optional + default: 0 + + p_int_optuntracked + type: untracked int32 optional + default: 7 + + p_int_opt_nd + type: int32 optional + default: none + + p_int_optuntracked_nd + type: untracked int32 optional + default: none + + vint1 + type: vint32 + default: empty + + vint2 + type: vint32 + default: (vector size = 1) + [0]: 2147483647 + + vint3 + type: vint32 + default: (vector size = 2) + [0]: 2147483647 + [1]: -2147483647 + + vint4 + type: vint32 + default: (vector size = 3) + [0]: 2147483647 + [1]: -2147483647 + [2]: 0 + + uint1 + type: uint32 + default: 4294967295 + + uint2 + type: untracked uint32 + default: 0 + + vuint1 + type: vuint32 + default: empty + + vuint2 + type: vuint32 + default: (vector size = 1) + [0]: 4294967295 + + vuint3 + type: vuint32 + default: (vector size = 2) + [0]: 4294967295 + [1]: 0 + + vuint4 + type: vuint32 + default: (vector size = 3) + [0]: 4294967295 + [1]: 0 + [2]: 11 + + vuint5 + type: vuint32 + default: see Section 1.4.1 + + int64v1 + type: int64 + default: 9000000000000000000 + + int64v2 + type: int64 + default: -9000000000000000000 + + int64v3 + type: int64 + default: 0 + + vint64v1 + type: vint64 + default: empty + + vint64v2 + type: vint64 + default: (vector size = 1) + [0]: 9000000000000000000 + + vint64v3 + type: vint64 + default: (vector size = 2) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + + vint64v4 + type: vint64 + default: (vector size = 3) + [0]: 9000000000000000000 + [1]: -9000000000000000000 + [2]: 0 + + uint64v1 + type: uint64 + default: 18000000000000000000 + + uint64v2 + type: untracked uint64 + default: 0 + + vuint64v1 + type: vuint64 + default: empty + + vuint64v2 + type: vuint64 + default: (vector size = 1) + [0]: 18000000000000000000 + + vuint64v3 + type: vuint64 + default: (vector size = 2) + [0]: 18000000000000000000 + [1]: 0 + + vuint64v4 + type: vuint64 + default: (vector size = 3) + [0]: 18000000000000000000 + [1]: 0 + [2]: 11 + + doublev1 + type: double + default: 2.2250738585072014e-308 + + doublev2 + type: untracked double + default: 0 + + doublev3 + type: untracked double + default: 0.3 + + vdoublev1 + type: vdouble + default: empty + + vdoublev2 + type: vdouble + default: (vector size = 1) + [0]: 1e+300 + + vdoublev3 + type: vdouble + default: (vector size = 2) + [0]: 1e+300 + [1]: 0 + + vdoublev4 + type: vdouble + default: (vector size = 3) + [0]: 1e+300 + [1]: 0 + [2]: 11 + + vdoublev5 + type: vdouble + default: (vector size = 4) + [0]: 1e+300 + [1]: 0 + [2]: 11 + [3]: 0.3 + + boolv1 + type: bool + default: True + + boolv2 + type: bool + default: False + + stringv1 + type: string + default: 'Hello' + + stringv2 + type: string + default: '' + + vstringv1 + type: vstring + default: empty + + vstringv2 + type: vstring + default: (vector size = 1) + [0]: 'Hello' + + vstringv3 + type: vstring + default: (vector size = 2) + [0]: 'Hello' + [1]: 'World' + + vstringv4 + type: vstring + default: (vector size = 3) + [0]: 'Hello' + [1]: 'World' + [2]: '' + + eventIDv1 + type: EventID + default: 11:12 + + eventIDv2 + type: EventID + default: 101:102 + + vEventIDv1 + type: VEventID + default: empty + + vEventIDv2 + type: VEventID + default: (vector size = 1) + [0]: 1000:1100 + + vEventIDv3 + type: VEventID + default: (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + + vEventIDv4 + type: VEventID + default: (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + + luminosityIDv1 + type: LuminosityBlockID + default: 11:12 + + luminosityIDv2 + type: LuminosityBlockID + default: 101:102 + + vLuminosityBlockIDv1 + type: VLuminosityBlockID + default: empty + + vLuminosityBlockIDv2 + type: VLuminosityBlockID + default: (vector size = 1) + [0]: 1000:1100 + + vLuminosityBlockIDv3 + type: VLuminosityBlockID + default: (vector size = 2) + [0]: 1000:1100 + [1]: 10000:11000 + + vLuminosityBlockIDv4 + type: VLuminosityBlockID + default: (vector size = 3) + [0]: 1000:1100 + [1]: 10000:11000 + [2]: 100000:110000 + + lumiRangev1 + type: LuminosityBlockRange + default: 1:1-9:9 + + lumiRangev2 + type: LuminosityBlockRange + default: 3:4-1000:1000 + + vLumiRangev1 + type: VLuminosityBlockRange + default: empty + + vLumiRangev2 + type: VLuminosityBlockRange + default: (vector size = 1) + [0]: 1:1-9:9 + + vLumiRangev3 + type: VLuminosityBlockRange + default: (vector size = 2) + [0]: 1:1-9:9 + [1]: 3:4-1000:1000 + + eventRangev1 + type: EventRange + default: 1:1-8:8 + + eventRangev2 + type: EventRange + default: 3:4-1001:1002 + + vEventRangev1 + type: VEventRange + default: empty + + vEventRangev2 + type: VEventRange + default: (vector size = 1) + [0]: 1:1-8:8 + + vEventRangev3 + type: VEventRange + default: (vector size = 2) + [0]: 1:1-8:8 + [1]: 3:4-1001:1002 + + inputTagv1 + type: InputTag + default: 'One:Two:Three' + + inputTagv2 + type: InputTag + default: 'One:Two' + + inputTagv3 + type: InputTag + default: 'One' + + inputTagv4 + type: InputTag + default: 'One::Three' + + vInputTagv1 + type: VInputTag + default: empty + + vInputTagv2 + type: VInputTag + default: (vector size = 1) + [0]: 'One:Two:Three' + + vInputTagv3 + type: VInputTag + default: (vector size = 2) + [0]: 'One:Two:Three' + [1]: 'One:Two' + + vInputTagv4 + type: VInputTag + default: (vector size = 3) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + + vInputTagv5 + type: VInputTag + default: (vector size = 4) + [0]: 'One:Two:Three' + [1]: 'One:Two' + [2]: 'One' + [3]: 'One::Three' + + esinputTagv1 + type: ESInputTag + default: 'One:Two' + + esinputTagv2 + type: ESInputTag + default: 'One:' + + esinputTagv3 + type: ESInputTag + default: ':Two' + + vESInputTagv1 + type: VESInputTag + default: empty + + vESInputTagv2 + type: VESInputTag + default: (vector size = 1) + [0]: 'One:Two' + + vESInputTagv3 + type: VESInputTag + default: (vector size = 2) + [0]: 'One:Two' + [1]: 'One:' + + vESInputTagv4 + type: VESInputTag + default: (vector size = 3) + [0]: 'One:Two' + [1]: 'One:' + [2]: ':Two' + + fileInPath + type: FileInPath + default: 'FWCore/Integration/plugins/ProducerWithPSetDesc.cc' + + Empty group description + + bar + type: PSet + see Section 1.4.2 + + test101 + type: PSet optional + see Section 1.4.3 (do not write to cfi) + + test102 + type: VPSet optional + see Section 1.4.4 (do not write to cfi) + + test103 + type: VPSet optional + see Section 1.4.5 (do not write to cfi) + + test104 + type: untracked VPSet + see Section 1.4.6 + + test105 + type: untracked VPSet + see Section 1.4.7 + + test1 + type: double + default: 0.1 + + test2 + type: double optional + default: 0.2 + + test3 + type: double optional + default: none (do not write to cfi) + + AND group: + optional + see Section 1.4.8 + + oiswitch (switch) + type: int32 optional + see Section 1.4.9 + + testDeeplyNested2 + type: PSet + see Section 1.4.10 + + bars + type: VPSet + see Section 1.4.11 + + subpset + type: PSet optional + see Section 1.4.12 + + wildcardPset + type: PSet + see Section 1.4.13 + + switchPset + type: PSet + see Section 1.4.14 + + xorPset + type: PSet + see Section 1.4.15 + + orPset + type: PSet + see Section 1.4.16 + + andPset + type: PSet + see Section 1.4.17 + + ifExistsPset + type: PSet + see Section 1.4.18 + + allowedLabelsPset + type: PSet + see Section 1.4.19 + + noDefaultPset3 + type: PSet + see Section 1.4.20 + + noDefaultPset4 + type: PSet + see Section 1.4.21 + + plugin + type: PSet + see Section 1.4.22 + + plugin1 + type: PSet + see Section 1.4.23 + + plugin2 + type: VPSet + see Section 1.4.24 + + plugin3 + type: VPSet + see Section 1.4.25 + + plugin4 + type: PSet + see Section 1.4.26 + + plugin5 + type: VPSet + see Section 1.4.27 + + mightGet + type: untracked vstring optional + default: none + List contains the branch names for the EDProducts which + might be requested by the module. + The format for identifying the EDProduct is the same as + the one used for OutputModules, except no wild cards + are allowed. E.g. + Foos_foomodule_whichFoo_RECO + + Section 1.4.1 vuint5 default contents: (vector size = 6) + [0]: 4294967295 + [1]: 0 + [2]: 11 + [3]: 21 + [4]: 31 + [5]: 41 + + Section 1.4.2 bar PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.4.3 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.4.4 test102 VPSet description: + All elements will be validated using the PSet description in Section 1.4.4.1. + Does not have a default VPSet. + + Section 1.4.4.1 description of PSet used to validate elements of VPSet: + + Description is empty + + Section 1.4.5 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.4.5.1. + Does not have a default VPSet. + + Section 1.4.5.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.4.6 test104 VPSet description: + All elements will be validated using the PSet description in Section 1.4.6.1. + The default VPSet has 1 element. + [0]: see Section 1.4.6.2 + + Section 1.4.6.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.4.6.2 PSet description of default VPSet element [0] + + Description is empty + + Section 1.4.7 test105 VPSet description: + All elements will be validated using the PSet description in Section 1.4.7.1. + The default VPSet is empty. + + Section 1.4.7.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.4.8 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + testA + type: string + default: 'fooA' + + testB + type: int32 + default: 100 + + testC + type: int32 + default: 101 + + Section 1.4.9 oiswitch (switch): + The value of "oiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + oiswitch + type: int32 optional + default: 1 + + if oiswitch = 0 + oivalue + type: int32 + default: 100 + + if oiswitch = 1 + AND group: + see Section 1.4.9.1 + + if oiswitch = 2 + oivalue + type: string + default: '102' + + Section 1.4.9.1 AND group description: + This AND group requires all of the following to be in the PSet + + oivalue1 + type: double + default: 101 + + oivalue2 + type: double + default: 101 + + Section 1.4.10 testDeeplyNested2 PSet description: + + bswitch (switch) + type: bool + see Section 1.4.10.1 + + iswitch (switch) + type: int32 + see Section 1.4.10.2 + + sswitch (switch) + type: string + see Section 1.4.10.3 + + ndiswitch (switch) + type: int32 optional (do not write to cfi) + see Section 1.4.10.4 + + testint + type: int32 + default: 1000 + + Section 1.4.10.1 bswitch (switch): + The value of "bswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + bswitch + type: bool + default: False + + if bswitch = False + AND group: + see Section 1.4.10.1.1 + + if bswitch = True + bvalue + type: int32 + default: 100 + + Section 1.4.10.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + bvalue1 + type: double + default: 101 + + bvalue2 + type: double + default: 101 + + Section 1.4.10.2 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: int32 + default: 100 + + if iswitch = 1 + AND group: + see Section 1.4.10.2.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.4.10.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: untracked double + default: 101 + + Section 1.4.10.3 sswitch (switch): + The value of "sswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + sswitch + type: string + default: '1' + + if sswitch = "0" + svalue + type: int32 + default: 100 + + if sswitch = "1" + AND group: + see Section 1.4.10.3.1 + + if sswitch = "2" + svalue + type: string + default: '102' + + Section 1.4.10.3.1 AND group description: + This AND group requires all of the following to be in the PSet + + svalue1 + type: double + default: 101 + + svalue2 + type: double + default: 101 + + Section 1.4.10.4 ndiswitch (switch): + The value of "ndiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + ndiswitch + type: int32 optional + default: 1 + + if ndiswitch = 0 + ndivalue + type: int32 + default: 100 + + if ndiswitch = 1 + AND group: + see Section 1.4.10.4.1 + + if ndiswitch = 2 + ndivalue + type: string + default: '102' + + Section 1.4.10.4.1 AND group description: + This AND group requires all of the following to be in the PSet + + ndivalue1 + type: double + default: 101 + + ndivalue2 + type: double + default: 101 + + Section 1.4.11 bars VPSet description: + All elements will be validated using the PSet description in Section 1.4.11.1. + The default VPSet has 2 elements. + [0]: see Section 1.4.11.2 + [1]: see Section 1.4.11.3 + + Section 1.4.11.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + testDeeplyNested + type: PSet + see Section 1.4.11.1.1 + + anotherVPSet + type: VPSet + see Section 1.4.11.1.2 + + Section 1.4.11.1.1 testDeeplyNested PSet description: + + bswitch (switch) + type: bool + see Section 1.4.11.1.1.1 + + iswitch (switch) + type: int32 + see Section 1.4.11.1.1.2 + + sswitch (switch) + type: string + see Section 1.4.11.1.1.3 + + ndiswitch (switch) + type: int32 optional (do not write to cfi) + see Section 1.4.11.1.1.4 + + testint + type: int32 + default: 1000 + + Section 1.4.11.1.1.1 bswitch (switch): + The value of "bswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + bswitch + type: bool + default: False + + if bswitch = False + AND group: + see Section 1.4.11.1.1.1.1 + + if bswitch = True + bvalue + type: int32 + default: 100 + + Section 1.4.11.1.1.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + bvalue1 + type: double + default: 101 + + bvalue2 + type: double + default: 101 + + Section 1.4.11.1.1.2 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: int32 + default: 100 + + if iswitch = 1 + AND group: + see Section 1.4.11.1.1.2.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.4.11.1.1.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: untracked double + default: 101 + + Section 1.4.11.1.1.3 sswitch (switch): + The value of "sswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + sswitch + type: string + default: '1' + + if sswitch = "0" + svalue + type: int32 + default: 100 + + if sswitch = "1" + AND group: + see Section 1.4.11.1.1.3.1 + + if sswitch = "2" + svalue + type: string + default: '102' + + Section 1.4.11.1.1.3.1 AND group description: + This AND group requires all of the following to be in the PSet + + svalue1 + type: double + default: 101 + + svalue2 + type: double + default: 101 + + Section 1.4.11.1.1.4 ndiswitch (switch): + The value of "ndiswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + ndiswitch + type: int32 optional + default: 1 + + if ndiswitch = 0 + ndivalue + type: int32 + default: 100 + + if ndiswitch = 1 + AND group: + see Section 1.4.11.1.1.4.1 + + if ndiswitch = 2 + ndivalue + type: string + default: '102' + + Section 1.4.11.1.1.4.1 AND group description: + This AND group requires all of the following to be in the PSet + + ndivalue1 + type: double + default: 101 + + ndivalue2 + type: double + default: 101 + + Section 1.4.11.1.2 anotherVPSet VPSet description: + All elements will be validated using the PSet description in Section 1.4.11.1.2.1. + The default VPSet has 2 elements. + [0]: see Section 1.4.11.1.2.2 + [1]: see Section 1.4.11.1.2.3 + + Section 1.4.11.1.2.1 description of PSet used to validate elements of VPSet: + + xvalue + type: int32 + default: 7 + + Section 1.4.11.1.2.2 PSet description of default VPSet element [0] + + Description is empty + + Section 1.4.11.1.2.3 PSet description of default VPSet element [1] + + xvalue + type: int32 + default: 100 + + Section 1.4.11.2 PSet description of default VPSet element [0] + + oDrinks + type: uint32 + default: 11 + + Section 1.4.11.3 PSet description of default VPSet element [1] + + ndouDrinks + type: untracked uint32 + default: 11 + + oDrinks + type: uint32 + default: 11 + + ouDrinks + type: untracked uint32 + default: 11 + + testDeeplyNested + type: PSet + see Section 1.4.11.3.1 + + anotherVPSet + type: VPSet + see Section 1.4.11.3.2 + + Section 1.4.11.3.1 testDeeplyNested PSet description: + + testint + type: int32 + default: 2 + + Section 1.4.11.3.2 VPSet description for VPSet that is part of the default of a containing VPSet: + The default VPSet has 2 elements. + [0]: see Section 1.4.11.3.2.1 + [1]: see Section 1.4.11.3.2.2 + + Section 1.4.11.3.2.1 PSet description of default VPSet element [0] + + Description is empty + + Section 1.4.11.3.2.2 PSet description of default VPSet element [1] + + xvalue + type: int32 + default: 17 + + Section 1.4.12 subpset PSet description: + + xvalue + type: int32 + default: 11 + + bar + type: untracked PSet + see Section 1.4.12.1 + + Section 1.4.12.1 bar PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.4.13 wildcardPset PSet description: + + p_uint_opt + type: uint32 optional + default: 0 + + labels must match this wildcard pattern: * + type: int32 optional + criteria: require zero or more + + labels must match this wildcard pattern: * + type: untracked double optional + criteria: require zero or more + A comment for a wildcard parameter + + labels must match this wildcard pattern: * + type: PSet optional + criteria: require exactly one + + labels must match this wildcard pattern: * + type: PSet optional + criteria: require at least one + (see Section 1.4.13.1) + + labels must match this wildcard pattern: * + type: VPSet optional + criteria: require exactly one + + labels must match this wildcard pattern: * + type: VPSet optional + criteria: require at least one + (see Section 1.4.13.2) + + Section 1.4.13.1 description of PSet matching wildcard: + + Drinks + type: uint32 + default: 5 + + Section 1.4.13.2 description used to validate all PSets which are in the VPSet matching the wildcard: + + Drinks + type: uint32 + default: 5 + + Drinks2 + type: uint32 + default: 11 + + Section 1.4.14 switchPset PSet description: + + iswitch (switch) + type: int32 + see Section 1.4.14.1 + Comment for a ParameterSwitch + + addTeVRefits (switch) + type: bool + see Section 1.4.14.2 + If TeV refits are added, their sources need to be + specified + + Section 1.4.14.1 iswitch (switch): + The value of "iswitch" controls which other parameters + are required or allowed to be in the PSet. + + switch: + iswitch + type: int32 + default: 1 + + if iswitch = 0 + ivalue + type: vint32 + default: (vector size = 2) + [0]: 21 + [1]: 22 + + if iswitch = 1 + AND group: + see Section 1.4.14.1.1 + + if iswitch = 2 + ivalue + type: string + default: '102' + + Section 1.4.14.1.1 AND group description: + This AND group requires all of the following to be in the PSet + + ivalue1 + type: double + default: 101 + + ivalue2 + type: double + default: 101 + + Section 1.4.14.2 addTeVRefits (switch): + The value of "addTeVRefits" controls which other parameters + are required or allowed to be in the PSet. + + switch: + addTeVRefits + type: bool + default: True + + if addTeVRefits = False + Empty group description + + if addTeVRefits = True + AND group: + see Section 1.4.14.2.1 + + Section 1.4.14.2.1 AND group description: + This AND group requires all of the following to be in the PSet + + pickySrc + type: InputTag + default: '' + + tpfmsSrc + type: InputTag + default: '' + + Section 1.4.15 xorPset PSet description: + + XOR group: + see Section 1.4.15.1 + + XOR group: + see Section 1.4.15.2 + + XOR group: + optional (do not write to cfi) + see Section 1.4.15.3 + + XOR group: + see Section 1.4.15.4 + + Section 1.4.15.1 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name + type: string + default: '11' + + name + type: uint32 + default: 11 + + Section 1.4.15.2 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name1 + type: string + default: '11' + + name1 + type: uint32 + default: 11 + + Section 1.4.15.3 XOR group description: + This optional XOR group requires exactly one or none of the following to be in the PSet + + name2 + type: string + default: '11' + + name2 + type: uint32 + default: 11 + + Section 1.4.15.4 XOR group description: + This XOR group requires exactly one of the following to be in the PSet + + name3 + type: string + default: '11' + + name4 + type: uint32 + default: 11 + + test101 + type: PSet + see Section 1.4.15.4.1 + + test103 + type: VPSet + see Section 1.4.15.4.2 + + Section 1.4.15.4.1 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.4.15.4.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.4.15.4.2.1. + Does not have a default VPSet. + + Section 1.4.15.4.2.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.4.16 orPset PSet description: + + OR group: + see Section 1.4.16.1 + + OR group: + see Section 1.4.16.2 + + OR group: + optional (do not write to cfi) + see Section 1.4.16.3 + + Section 1.4.16.1 OR group description: + This OR group requires at least one of the following to be in the PSet + + x1 + type: string + default: '11' + + x2 + type: uint32 + default: 11 + + Section 1.4.16.2 OR group description: + This OR group requires at least one of the following to be in the PSet + + y1 + type: string + default: '11' + + y2 + type: uint32 + default: 11 + + Section 1.4.16.3 OR group description: + This optional OR group requires at least one or none of the following to be in the PSet + + z1 + type: string + default: '11' + + z2 + type: uint32 + default: 11 + + test101 + type: PSet + see Section 1.4.16.3.1 + + test103 + type: VPSet + see Section 1.4.16.3.2 + + Section 1.4.16.3.1 test101 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.4.16.3.2 test103 VPSet description: + All elements will be validated using the PSet description in Section 1.4.16.3.2.1. + Does not have a default VPSet. + + Section 1.4.16.3.2.1 description of PSet used to validate elements of VPSet: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + ndoDrinks + type: uint32 optional + default: none + + ndouDrinks + type: untracked uint32 optional + default: none + + Section 1.4.17 andPset PSet description: + + AND group: + see Section 1.4.17.1 + + AND group: + see Section 1.4.17.2 + + AND group: + see Section 1.4.17.3 + + AND group: + optional (do not write to cfi) + see Section 1.4.17.4 + + AND group: + optional + see Section 1.4.17.5 + + Section 1.4.17.1 AND group description: + This AND group requires all of the following to be in the PSet + + x1 + type: string + default: '11' + + x2 + type: uint32 + default: 11 + + Section 1.4.17.2 AND group description: + This AND group requires all of the following to be in the PSet + + y1 + type: string + default: '11' + + y2 + type: uint32 + default: 11 + + Section 1.4.17.3 AND group description: + This AND group requires all of the following to be in the PSet + + z1 + type: string + default: '11' + + z2 + type: uint32 + default: 11 + + Section 1.4.17.4 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + a1 + type: string + default: '11' + + a2 + type: uint32 + default: 11 + + Section 1.4.17.5 AND group description: + This optional AND group requires all or none of the following to be in the PSet + + b1 + type: string + default: '11' + + b2 + type: uint32 + default: 11 + + b3 + type: uint32 + default: 11 + + b4 + type: uint32 + default: 11 + + b5 + type: uint32 + default: 11 + + b6 + type: uint32 + default: 11 + + Section 1.4.18 ifExistsPset PSet description: + + IfExists pair: + see Section 1.4.18.1 + + IfExists pair: + optional (do not write to cfi) + see Section 1.4.18.2 + + IfExists pair: + see Section 1.4.18.3 + + Section 1.4.18.1 IfExists pair description: + If the first parameter exists, then the second is required to exist + + x1 + type: uint32 + default: 11 + + x2 + type: string + default: '11' + + Section 1.4.18.2 optional IfExists pair description: + If the first parameter exists, then the second is allowed to exist + + y1 + type: uint32 + default: 11 + + y2 + type: string + default: '11' + + Section 1.4.18.3 IfExists pair description: + If the first parameter exists, then the second is required to exist + + z1 + type: uint32 + default: 11 + + z2 + type: string + default: '11' + + Section 1.4.19 allowedLabelsPset PSet description: + + p_int_opt + type: int32 optional + default: 0 + + testAllowedLabels (list of allowed labels) + see Section 1.4.19.1 + + testAllowedLabelsUntracked (list of allowed labels) + see Section 1.4.19.2 + + testOptAllowedLabels (list of allowed labels) + optional (do not write to cfi) + see Section 1.4.19.3 + + testOptAllowedLabelsUntracked (list of allowed labels) + optional (do not write to cfi) + see Section 1.4.19.4 + + testWithSet (list of allowed labels) + optional + see Section 1.4.19.5 + + testWithVectorOfSets (list of allowed labels) + optional + see Section 1.4.19.6 + + Section 1.4.19.1 testAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testAllowedLabels + type: vstring + default: empty + + type of allowed parameters: + int32 + + Section 1.4.19.2 testAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testAllowedLabelsUntracked + type: untracked vstring + default: empty + + type of allowed parameters: + untracked uint32 + + Section 1.4.19.3 testOptAllowedLabels - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testOptAllowedLabels + type: vstring optional + default: empty + + type of allowed parameters: + int32 + + Section 1.4.19.4 testOptAllowedLabelsUntracked - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testOptAllowedLabelsUntracked + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked uint32 + + Section 1.4.19.5 testWithSet - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testWithSet + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked PSet + see Section 1.4.19.5.1 + + Section 1.4.19.5.1 PSet description: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.4.19.6 testWithVectorOfSets - allowed labels description + The following parameter contains a list of parameter labels + which are allowed to be in the PSet + + testWithVectorOfSets + type: untracked vstring optional + default: empty + + type of allowed parameters: + untracked VPSet + see Section 1.4.19.6.1 + + Section 1.4.19.6.1 PSet description used to validate all elements of VPSet's: + + Drinks + type: uint32 + default: 5 + + uDrinks + type: untracked uint32 + default: 5 + + oDrinks + type: uint32 optional + default: 5 + + ouDrinks + type: untracked uint32 optional + default: 5 + + Section 1.4.20 noDefaultPset3 PSet description: + + noDefault1 + type: int32 optional + default: none + + noDefault2 + type: vint32 optional + default: none + + noDefault3 + type: uint32 optional + default: none + + noDefault4 + type: vuint32 optional + default: none + + noDefault5 + type: int64 optional + default: none + + noDefault6 + type: vint64 optional + default: none + + noDefault7 + type: uint64 optional + default: none + + noDefault8 + type: vuint64 optional + default: none + + noDefault9 + type: double optional + default: none + + noDefault10 + type: vdouble optional + default: none + + noDefault11 + type: bool optional + default: none + + noDefault12 + type: string optional + default: none + + noDefault13 + type: vstring optional + default: none + + noDefault14 + type: EventID optional + default: none + + noDefault15 + type: VEventID optional + default: none + + noDefault16 + type: LuminosityBlockID optional + default: none + + noDefault17 + type: VLuminosityBlockID optional + default: none + + noDefault18 + type: InputTag optional + default: none + + noDefault19 + type: VInputTag optional + default: none + + noDefault20 + type: FileInPath optional + default: none + + noDefault21 + type: LuminosityBlockRange optional + default: none + + noDefault22 + type: VLuminosityBlockRange optional + default: none + + noDefault23 + type: EventRange optional + default: none + + noDefault24 + type: VEventRange optional + default: none + + Section 1.4.21 noDefaultPset4 PSet description: + + noDefault1 + type: untracked int32 optional + default: none + + noDefault2 + type: untracked vint32 optional + default: none + + noDefault3 + type: untracked uint32 optional + default: none + + noDefault4 + type: untracked vuint32 optional + default: none + + noDefault5 + type: untracked int64 optional + default: none + + noDefault6 + type: untracked vint64 optional + default: none + + noDefault7 + type: untracked uint64 optional + default: none + + noDefault8 + type: untracked vuint64 optional + default: none + + noDefault9 + type: untracked double optional + default: none + + noDefault10 + type: untracked vdouble optional + default: none + + noDefault11 + type: untracked bool optional + default: none + + noDefault12 + type: untracked string optional + default: none + + noDefault13 + type: untracked vstring optional + default: none + + noDefault14 + type: untracked EventID optional + default: none + + noDefault15 + type: untracked VEventID optional + default: none + + noDefault16 + type: untracked LuminosityBlockID optional + default: none + + noDefault17 + type: untracked VLuminosityBlockID optional + default: none + + noDefault18 + type: untracked InputTag optional + default: none + + noDefault19 + type: untracked VInputTag optional + default: none + + noDefault20 + type: untracked FileInPath optional + default: none + + noDefault21 + type: untracked LuminosityBlockRange optional + default: none + + noDefault22 + type: untracked VLuminosityBlockRange optional + default: none + + noDefault23 + type: untracked EventRange optional + default: none + + noDefault24 + type: untracked VEventRange optional + default: none + + Section 1.4.22 plugin PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.4.22.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.4.22.1.1 + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.4.22.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.4.22)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.4.22.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.4.22.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: 'edmtestAnotherValueMaker' + + Section 1.4.23 plugin1 PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.4.23.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.4.23.1.1 + + type + type: string + default: none + + Section 1.4.23.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.4.23)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.4.23.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: none + + Section 1.4.23.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: none + + Section 1.4.24 plugin2 VPSet description: + All elements will be validated using the PSet description in Section 1.4.24.1. + The default VPSet is empty. + + Section 1.4.24.1 description of PSet used to validate elements of VPSet: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.4.24.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.4.24.1.1.1 + + type + type: string + default: none + + Section 1.4.24.1.1.1 pluginRecursive PSet description: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + *** The descriptions for this plugin category already started printing above (see Section 1.4.24.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** + + Section 1.4.24.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type + type: string + default: none + + Section 1.4.24.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" + + value + type: int32 + default: 5 + + type + type: string + default: none + + Section 1.4.25 plugin3 VPSet description: + All elements will be validated using the PSet description in Section 1.4.25.1. + The default VPSet has 2 elements. + [0]: see Section 1.4.25.2 + [1]: see Section 1.4.25.3 + + Section 1.4.25.1 description of PSet used to validate elements of VPSet: + + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". + + Section 1.4.25.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" + + value + type: int32 + default: 5 + + pluginRecursive + type: PSet + see Section 1.4.25.1.1.1 + + type + type: string default: none - noDefault9 - type: double - default: none + Section 1.4.25.1.1.1 pluginRecursive PSet description: - noDefault10 - type: vdouble - default: none + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". - noDefault11 - type: bool - default: none + *** The descriptions for this plugin category already started printing above (see Section 1.4.25.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** - noDefault12 + Section 1.4.25.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" + + type type: string default: none - noDefault13 - type: vstring - default: none + Section 1.4.25.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" - noDefault14 - type: EventID - default: none + value + type: int32 + default: 5 - noDefault15 - type: VEventID + type + type: string default: none - noDefault16 - type: LuminosityBlockID - default: none + Section 1.4.25.2 PSet description of default VPSet element [0] - noDefault17 - type: VLuminosityBlockID - default: none + type + type: string + default: 'edmtestAnotherOneMaker' - noDefault18 - type: InputTag - default: none + Section 1.4.25.3 PSet description of default VPSet element [1] - noDefault19 - type: VInputTag - default: none + type + type: string + default: 'edmtestAnotherValueMaker' - noDefault20 - type: FileInPath - default: none + value + type: int32 + default: 11 - noDefault21 - type: LuminosityBlockRange - default: none + Section 1.4.26 plugin4 PSet description: - noDefault22 - type: VLuminosityBlockRange - default: none + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". - noDefault23 - type: EventRange - default: none + Section 1.4.26.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" - noDefault24 - type: VEventRange - default: none + value + type: int32 + default: 5 - Section 1.2.2 noDefaultPset2 PSet description: + pluginRecursive + type: PSet + see Section 1.4.26.1.1 - noDefault1 - type: untracked int32 - default: none + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' - noDefault2 - type: untracked vint32 - default: none + Section 1.4.26.1.1 pluginRecursive PSet description: - noDefault3 - type: untracked uint32 - default: none + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". - noDefault4 - type: untracked vuint32 - default: none + *** The descriptions for this plugin category already started printing above (see Section 1.4.26)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** - noDefault5 - type: untracked int64 - default: none + Section 1.4.26.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" - noDefault6 - type: untracked vint64 - default: none + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' - noDefault7 - type: untracked uint64 - default: none + Section 1.4.26.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" - noDefault8 - type: untracked vuint64 - default: none + value + type: int32 + default: 5 - noDefault9 - type: untracked double - default: none + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' - noDefault10 - type: untracked vdouble - default: none + Section 1.4.27 plugin5 VPSet description: + All elements will be validated using the PSet description in Section 1.4.27.1. + The default VPSet has 2 elements. + [0]: see Section 1.4.27.2 + [1]: see Section 1.4.27.3 - noDefault11 - type: untracked bool - default: none + Section 1.4.27.1 description of PSet used to validate elements of VPSet: - noDefault12 - type: untracked string - default: none + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". - noDefault13 - type: untracked vstring - default: none + Section 1.4.27.1.1 ParameterSet description for plugin named "edmtestAnotherMakerWithRecursivePlugin" - noDefault14 - type: untracked EventID - default: none + value + type: int32 + default: 5 - noDefault15 - type: untracked VEventID - default: none + pluginRecursive + type: PSet + see Section 1.4.27.1.1.1 - noDefault16 - type: untracked LuminosityBlockID - default: none + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' - noDefault17 - type: untracked VLuminosityBlockID - default: none + Section 1.4.27.1.1.1 pluginRecursive PSet description: - noDefault18 - type: untracked InputTag - default: none + There are multiple possible different descriptions for this ParameterSet + because it will be used by a helper plugin object contained inside the top level + module plugin object and the type of the helper plugin object is configurable. + Or if it is in a vector of ParameterSets it might be used by multiple + helper plugin objects and each could be configured with a different plugin type. + Each plugin type could allow a different set of configuration parameters. + Each subsection of this section has one of the possible descriptions. + All of these plugins are from the category "PluginDescriptoredmtestAnotherIntFactory". + The plugin type is specified by the parameter named "type". - noDefault19 - type: untracked VInputTag - default: none + *** The descriptions for this plugin category already started printing above (see Section 1.4.27.1)! *** + *** We might still be in the middle of that printout at this point because it might be recursive. *** + *** We'll not duplicate that printout and skip it. *** + *** (N.B. If we tried to print it again, we might fall into an infinite recursion.) *** - noDefault20 - type: untracked FileInPath - default: none + Section 1.4.27.1.2 ParameterSet description for plugin named "edmtestAnotherOneMaker" - noDefault21 - type: untracked LuminosityBlockRange - default: none + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' - noDefault22 - type: untracked VLuminosityBlockRange - default: none + Section 1.4.27.1.3 ParameterSet description for plugin named "edmtestAnotherValueMaker" - noDefault23 - type: untracked EventRange - default: none + value + type: int32 + default: 5 - noDefault24 - type: untracked VEventRange - default: none + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' - 1.3 module label: producerWithPSetDesc + Section 1.4.27.2 PSet description of default VPSet element [0] - p_int - type: int32 - default: 3 + type + type: string + default: 'edmtestAnotherOneMaker' - mightGet - type: untracked vstring optional - default: none - List contains the branch names for the EDProducts which - might be requested by the module. - The format for identifying the EDProduct is the same as - the one used for OutputModules, except no wild cards - are allowed. E.g. - Foos_foomodule_whichFoo_RECO + Section 1.4.27.3 PSet description of default VPSet element [1] - 1.4 description without a module label + type + type: string + default: 'edmtestAnotherMakerWithRecursivePlugin' - p_int + value type: int32 - default: 2 - - mightGet - type: untracked vstring optional - default: none - List contains the branch names for the EDProducts which - might be requested by the module. - The format for identifying the EDProduct is the same as - the one used for OutputModules, except no wild cards - are allowed. E.g. - Foos_foomodule_whichFoo_RECO + default: 11 diff --git a/FWCore/ParameterSet/interface/AllowedLabelsDescriptionBase.h b/FWCore/ParameterSet/interface/AllowedLabelsDescriptionBase.h index ad3351eebfc7b..02c8a2ed41d34 100644 --- a/FWCore/ParameterSet/interface/AllowedLabelsDescriptionBase.h +++ b/FWCore/ParameterSet/interface/AllowedLabelsDescriptionBase.h @@ -34,8 +34,12 @@ namespace edm { void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const override; - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override; + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const override; void print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const override; diff --git a/FWCore/ParameterSet/interface/ConfigurationDescriptions.h b/FWCore/ParameterSet/interface/ConfigurationDescriptions.h index c0925cd40bfce..11405b2151807 100644 --- a/FWCore/ParameterSet/interface/ConfigurationDescriptions.h +++ b/FWCore/ParameterSet/interface/ConfigurationDescriptions.h @@ -85,9 +85,11 @@ namespace edm { static void writeCfiForLabel(std::pair const& labelAndDesc, std::string const& baseType, std::string const& pluginName, + bool isSameAsDefault, + CfiOptions& options, std::set& usedCfiFileNames); - void writeClassFile(ParameterSetDescription const&) const; + cfi::Paths writeClassFile(ParameterSetDescription const&, bool willUseWithCfis) const; void printForLabel(std::pair const& labelAndDesc, std::ostream& os, diff --git a/FWCore/ParameterSet/interface/EmptyGroupDescription.h b/FWCore/ParameterSet/interface/EmptyGroupDescription.h index d7fd0fa41cfee..5b00acad11961 100644 --- a/FWCore/ParameterSet/interface/EmptyGroupDescription.h +++ b/FWCore/ParameterSet/interface/EmptyGroupDescription.h @@ -25,8 +25,12 @@ namespace edm { void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const override; - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override; + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const override; void print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const override; diff --git a/FWCore/ParameterSet/interface/IfExistsDescription.h b/FWCore/ParameterSet/interface/IfExistsDescription.h index 85291d87fbf37..7b404339c43e4 100644 --- a/FWCore/ParameterSet/interface/IfExistsDescription.h +++ b/FWCore/ParameterSet/interface/IfExistsDescription.h @@ -37,8 +37,12 @@ namespace edm { void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const override; - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override; + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const override; void print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const override; diff --git a/FWCore/ParameterSet/interface/ParameterDescription.h b/FWCore/ParameterSet/interface/ParameterDescription.h index 5993fa16850a6..b1f55782149c3 100644 --- a/FWCore/ParameterSet/interface/ParameterDescription.h +++ b/FWCore/ParameterSet/interface/ParameterDescription.h @@ -173,7 +173,7 @@ namespace edm { } using ParameterDescriptionNode::writeCfi_; - void writeCfi_(std::ostream& os, int indentation) const override { + void writeCfi_(std::ostream& os, int indentation, CfiOptions&) const override { writeParameterValue::writeValue(os, indentation, value_, writeParameterValue::CFI); } @@ -228,7 +228,7 @@ namespace edm { bool exists_(ParameterSet const& pset) const override; using ParameterDescriptionNode::writeCfi_; - void writeCfi_(std::ostream& os, int indentation) const override; + void writeCfi_(std::ostream& os, int indentation, CfiOptions&) const override; void writeDoc_(std::ostream& os, int indentation) const override; @@ -285,7 +285,7 @@ namespace edm { bool exists_(ParameterSet const& pset) const override; using ParameterDescriptionNode::writeCfi_; - void writeCfi_(std::ostream& os, int indentation) const override; + void writeCfi_(std::ostream& os, int indentation, CfiOptions&) const override; void writeDoc_(std::ostream& os, int indentation) const override; @@ -293,10 +293,8 @@ namespace edm { void insertDefault_(ParameterSet& pset) const override; - static void writeOneElementToCfi(ParameterSet const& pset, - std::ostream& os, - int indentation, - bool& nextOneStartsWithAComma); + static void writeOneElementToCfi( + ParameterSet const& pset, std::ostream& os, int indentation, CfiOptions&, bool& nextOneStartsWithAComma); value_ptr psetDesc_; std::vector vPset_; diff --git a/FWCore/ParameterSet/interface/ParameterDescriptionBase.h b/FWCore/ParameterSet/interface/ParameterDescriptionBase.h index bec36f726d30c..5915450dd4d84 100644 --- a/FWCore/ParameterSet/interface/ParameterDescriptionBase.h +++ b/FWCore/ParameterSet/interface/ParameterDescriptionBase.h @@ -60,14 +60,32 @@ namespace edm { void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const override; - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override; + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const override; + + void writeLabelValueCfi(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const; + + void writeFullCfi(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const; bool partiallyExists_(ParameterSet const& pset) const override; int howManyXORSubNodesExist_(ParameterSet const& pset) const override; - virtual void writeCfi_(std::ostream& os, int indentation) const = 0; + virtual void writeCfi_(std::ostream& os, int indentation, CfiOptions&) const = 0; virtual void writeDoc_(std::ostream& os, int indentation) const = 0; diff --git a/FWCore/ParameterSet/interface/ParameterDescriptionNode.h b/FWCore/ParameterSet/interface/ParameterDescriptionNode.h index 7adaa66f59314..95a9151da09b7 100644 --- a/FWCore/ParameterSet/interface/ParameterDescriptionNode.h +++ b/FWCore/ParameterSet/interface/ParameterDescriptionNode.h @@ -14,6 +14,11 @@ #include #include #include +#include +#include +#include +#include +#include namespace edm { @@ -65,6 +70,122 @@ namespace edm { std::string parameterTypeEnumToString(ParameterTypes iType); + namespace cfi { + struct Paths { + //This is the 'path' through the cms.PSet hierarchy. + // E.g. foo.bar.tar would have a Path for foo, bar, and tar with + // tar having a null nodes_ variable. + std::optional> nodes_; + }; + struct Typed {}; + struct ClassFile { + void parameterMustBeTyped() { + Paths* p = &fullPaths_; + for (auto n : presentPath_) { + if (not p->nodes_) { + p->nodes_ = std::unordered_map(); + } + p = &(p->nodes_.value().emplace(n, Paths{})).first->second; + } + } + void pushNode(std::string_view iNode) { presentPath_.push_back(iNode); } + void popNode() { + assert(not presentPath_.empty()); + presentPath_.pop_back(); + } + + Paths releasePaths() { return std::move(fullPaths_); } + + private: + std::vector presentPath_; + Paths fullPaths_; + }; + struct Untyped { + Untyped(Paths iPaths) : paths_(iPaths) {} + bool needToSwitchToTyped(std::string_view iNode) { + presentPath_.push_back(iNode); + if (not paths_.nodes_.has_value()) { + return false; + } + const Paths* p = &paths_; + for (auto const& n : presentPath_) { + if (not paths_.nodes_.has_value()) { + return false; + } + auto f = paths_.nodes_->find(std::string(n)); + if (f == paths_.nodes_->end()) { + return false; + } + p = &f->second; + } + return not p->nodes_.has_value(); + } + void popNode() { + assert(not presentPath_.empty()); + presentPath_.pop_back(); + } + + private: + std::vector presentPath_; + Paths paths_; + }; + + using CfiOptions = std::variant; + + inline void parameterMustBeTyped(CfiOptions& iOps) noexcept { + if (std::holds_alternative(iOps)) { + std::get(iOps).parameterMustBeTyped(); + } + } + inline void parameterMustBeTyped(CfiOptions& iOps, std::string_view iNode) noexcept { + if (std::holds_alternative(iOps)) { + auto& d = std::get(iOps); + d.pushNode(iNode); + d.parameterMustBeTyped(); + d.popNode(); + } + } + [[nodiscard]] inline bool shouldWriteUntyped(CfiOptions const& iOps) noexcept { + return std::holds_alternative(iOps); + } + + struct NodeGuard { + NodeGuard(CfiOptions& iOp) : options_(&iOp) {} + NodeGuard() = delete; + NodeGuard(NodeGuard const&) = delete; + NodeGuard& operator=(NodeGuard const&) = delete; + NodeGuard(NodeGuard&& iOther) : options_{iOther.options_} { iOther.options_ = nullptr; } + NodeGuard& operator=(NodeGuard&& iOther) { + NodeGuard temp{std::move(iOther)}; + options_ = temp.options_; + temp.options_ = nullptr; + return *this; + } + ~NodeGuard() { + if (nullptr == options_) { + return; + } + if (std::holds_alternative(*options_)) { + std::get(*options_).popNode(); + } else if (std::holds_alternative(*options_)) { + std::get(*options_).popNode(); + } + } + CfiOptions* options_; + }; + + [[nodiscard]] inline std::pair needToSwitchToTyped(std::string_view iNode, + CfiOptions& iOpt) noexcept { + if (std::holds_alternative(iOpt)) { + return std::pair(std::get(iOpt).needToSwitchToTyped(iNode), NodeGuard(iOpt)); + } else if (std::holds_alternative(iOpt)) { + std::get(iOpt).pushNode(iNode); + } + return std::pair(false, NodeGuard(iOpt)); + } + } // namespace cfi + using CfiOptions = cfi::CfiOptions; + struct ParameterTypeToEnum { template static ParameterTypes toEnum(); @@ -115,8 +236,13 @@ namespace edm { // ParameterSetDescription where the algorithm fails to write // a valid cfi, in some cases the description can be so pathological // that it is impossible to write a cfi that will pass validation. - void writeCfi(std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const { - writeCfi_(os, optional, startWithComma, indentation, wroteSomething); + void writeCfi(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { + writeCfi_(os, optional, startWithComma, indentation, options, wroteSomething); } // Print out the description in human readable format @@ -222,8 +348,12 @@ namespace edm { virtual void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const = 0; - virtual void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const = 0; + virtual void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const = 0; virtual void print_(std::ostream&, bool /*optional*/, bool /*writeToCfi*/, DocFormatHelper&) const {} @@ -248,27 +378,27 @@ namespace edm { // operator>> --------------------------------------------- - std::unique_ptr > operator>>(bool caseValue, ParameterDescriptionNode const& node); + std::unique_ptr> operator>>(bool caseValue, ParameterDescriptionNode const& node); - std::unique_ptr > operator>>(int caseValue, ParameterDescriptionNode const& node); + std::unique_ptr> operator>>(int caseValue, ParameterDescriptionNode const& node); - std::unique_ptr > operator>>(std::string const& caseValue, - ParameterDescriptionNode const& node); + std::unique_ptr> operator>>(std::string const& caseValue, + ParameterDescriptionNode const& node); - std::unique_ptr > operator>>(char const* caseValue, - ParameterDescriptionNode const& node); + std::unique_ptr> operator>>(char const* caseValue, + ParameterDescriptionNode const& node); - std::unique_ptr > operator>>(bool caseValue, - std::unique_ptr node); - - std::unique_ptr > operator>>(int caseValue, + std::unique_ptr> operator>>(bool caseValue, std::unique_ptr node); - std::unique_ptr > operator>>(std::string const& caseValue, - std::unique_ptr node); + std::unique_ptr> operator>>(int caseValue, + std::unique_ptr node); + + std::unique_ptr> operator>>(std::string const& caseValue, + std::unique_ptr node); - std::unique_ptr > operator>>(char const* caseValue, - std::unique_ptr node); + std::unique_ptr> operator>>(char const* caseValue, + std::unique_ptr node); // operator&& --------------------------------------------- diff --git a/FWCore/ParameterSet/interface/ParameterSetDescription.h b/FWCore/ParameterSet/interface/ParameterSetDescription.h index ff6a0312292ac..17f422a39dc76 100644 --- a/FWCore/ParameterSet/interface/ParameterSetDescription.h +++ b/FWCore/ParameterSet/interface/ParameterSetDescription.h @@ -302,7 +302,7 @@ namespace edm { void validate(ParameterSet& pset) const; - void writeCfi(std::ostream& os, bool startWithComma, int indentation) const; + void writeCfi(std::ostream& os, bool startWithComma, int indentation, CfiOptions&) const; void print(std::ostream& os, DocFormatHelper& dfh) const; @@ -360,6 +360,7 @@ namespace edm { std::ostream& os, bool& startWithComma, int indentation, + CfiOptions&, bool& wroteSomething); static void printNode(SetDescriptionEntry const& entry, std::ostream& os, DocFormatHelper& dfh); diff --git a/FWCore/ParameterSet/interface/ParameterSwitch.h b/FWCore/ParameterSet/interface/ParameterSwitch.h index 7b8ca1e56e65e..fffc62bbecebf 100644 --- a/FWCore/ParameterSet/interface/ParameterSwitch.h +++ b/FWCore/ParameterSet/interface/ParameterSwitch.h @@ -86,13 +86,29 @@ namespace edm { } } - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override { - switch_.writeCfi(os, optional, startWithComma, indentation, wroteSomething); + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const override { + switch_.writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); + + if (std::holds_alternative(options)) { + std::set labels; + std::set parameterTypes; + std::set wildcardTypes; + for (auto const& n : cases_) { + n.second->checkAndGetLabelsAndTypes(labels, parameterTypes, wildcardTypes); + } + for (auto const& l : labels) { + cfi::parameterMustBeTyped(options, l); + } + } typename CaseMap::const_iterator selectedCase = cases_.find(switch_.getDefaultValue()); if (selectedCase != cases_.end()) { - selectedCase->second->writeCfi(os, optional, startWithComma, indentation, wroteSomething); + selectedCase->second->writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); } } diff --git a/FWCore/ParameterSet/interface/ParameterWildcard.h b/FWCore/ParameterSet/interface/ParameterWildcard.h index 2f75e646257c0..ac893fe5a9157 100644 --- a/FWCore/ParameterSet/interface/ParameterWildcard.h +++ b/FWCore/ParameterSet/interface/ParameterWildcard.h @@ -76,7 +76,7 @@ namespace edm { ParameterDescriptionNode* clone() const override; private: - void writeTemplate(std::ostream& os, int indentation) const override; + void writeTemplate(std::ostream& os, int indentation, CfiOptions&) const override; void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const override; bool hasNestedContent_() const override; diff --git a/FWCore/ParameterSet/interface/ParameterWildcardBase.h b/FWCore/ParameterSet/interface/ParameterWildcardBase.h index b92b1f537961b..71fc78448a2ef 100644 --- a/FWCore/ParameterSet/interface/ParameterWildcardBase.h +++ b/FWCore/ParameterSet/interface/ParameterWildcardBase.h @@ -41,8 +41,12 @@ namespace edm { std::set& parameterTypes, std::set& wildcardTypes) const override; - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override; + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const override; void print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const override; @@ -50,7 +54,7 @@ namespace edm { int howManyXORSubNodesExist_(ParameterSet const& pset) const override; - virtual void writeTemplate(std::ostream& os, int indentation) const; + virtual void writeTemplate(std::ostream& os, int indentation, CfiOptions&) const; ParameterTypes type_; bool isTracked_; WildcardValidationCriteria criteria_; diff --git a/FWCore/ParameterSet/interface/PluginDescription.h b/FWCore/ParameterSet/interface/PluginDescription.h index 448f2ec15621b..0386caa03305b 100644 --- a/FWCore/ParameterSet/interface/PluginDescription.h +++ b/FWCore/ParameterSet/interface/PluginDescription.h @@ -131,17 +131,26 @@ namespace edm { validatedLabels.insert(n.begin(), n.end()); } - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const final { + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const final { if (not defaultType_.empty()) { if (!edmplugin::PluginManager::isAvailable()) { auto conf = edmplugin::standard::config(); conf.allowNoCache(); edmplugin::PluginManager::configure(conf); } - loadDescription(defaultType_).writeCfi(os, startWithComma, indentation); + //given each plugin can have very different parameters we should do a full dump + CfiOptions ops = cfi::Typed{}; + loadDescription(defaultType_).writeCfi(os, startWithComma, indentation, ops); wroteSomething = true; } + if (std::holds_alternative(options)) { + std::get(options).parameterMustBeTyped(); + } } bool hasNestedContent_() const final { return true; } diff --git a/FWCore/ParameterSet/python/Types.py b/FWCore/ParameterSet/python/Types.py index a10c784b55ed9..37652f357ce15 100644 --- a/FWCore/ParameterSet/python/Types.py +++ b/FWCore/ParameterSet/python/Types.py @@ -431,6 +431,26 @@ def __init__(self, run, *args): self.__event = args[1] else: raise RuntimeError('EventID ctor must have 2 or 3 arguments') + def setValue(self, value): + if isinstance(value, str): + self.__run = self._valueFromString(value).__run + self.__luminosityBlock = self._valueFromString(value).__luminosityBlock + self.__event = self._valueFromString(value).__event + else: + try: + iter(value) + self.__run = value[0] + if len(value) == 2: + self.__luminosityBlock = 0 + self.__event = value[1] + elif len(value) == 3: + self.__luminosityBlock = value[1] + self.__event = value[2] + else: + raise RuntimeError('EventID setValue takes container of 2 or 3 elements') + except TypeError: + #value is not iterable + raise RuntimeError('EventID setValue takes container of 2 or 3 elements') def run(self) -> int: return self.__run def luminosityBlock(self) -> int: @@ -439,7 +459,7 @@ def event(self) -> int: return self.__event @staticmethod def _isValid(value) -> builtins.bool: - return True + return isinstance(value, str) or isinstance(value, EventID) or len(value) == 2 or len(value) == 3 @staticmethod def _valueFromString(value:str): parts = value.split(":") @@ -468,13 +488,20 @@ def __init__(self, run, block=None): else: self.__run = run self.__block = block + def setValue(self, value): + if isinstance(value, str): + self.__run = self._valueFromString(value).__run + self.__block = self._valueFromString(value).__block + else: + self.__run = value[0] + self.__block = value[1] def run(self) -> int: return self.__run def luminosityBlock(self) -> int: return self.__block @staticmethod def _isValid(value) -> builtins.bool: - return True + return isinstance(value,str) or isinstance(value, LuminosityBlockID) or len(value) == 2 @staticmethod def _valueFromString(value:str): """only used for cfg-parsing""" @@ -498,15 +525,30 @@ def __init__(self, start, startSub=None, end=None, endSub=None): self.__end = parsed.__end self.__endSub = parsed.__endSub else: - self.__start = start - self.__startSub = startSub - self.__end = end - self.__endSub = endSub + if startSub is not None and end is None: + self._valueFromContainer((start, startSub)) + else: + self._valueFromContainer(( start, startSub, end, endSub)) + if self.__end < self.__start: + raise RuntimeError('LuminosityBlockRange '+str(self.__start)+':'+str(self.__startSub)+'-'+str(self.__end)+':'+str(self.__endSub)+' out of order') + # 0 luminosity block number is a special case that means no limit + if self.__end == self.__start and (self.__endSub != 0 and self.__endSub < self.__startSub): + raise RuntimeError('LuminosityBlockRange '+str(self.__start)+':'+str(self.__startSub)+'-'+str(self.__end)+':'+str(self.__endSub)+' out of order') + def setValue(self,value): + if isinstance(value, str): + parsed = self._valueFromString(value) + self.__start = parsed.__start + self.__startSub = parsed.__startSub + self.__end = parsed.__end + self.__endSub = parsed.__endSub + else: + self._valueFromContainer(value) if self.__end < self.__start: raise RuntimeError('LuminosityBlockRange '+str(self.__start)+':'+str(self.__startSub)+'-'+str(self.__end)+':'+str(self.__endSub)+' out of order') # 0 luminosity block number is a special case that means no limit if self.__end == self.__start and (self.__endSub != 0 and self.__endSub < self.__startSub): raise RuntimeError('LuminosityBlockRange '+str(self.__start)+':'+str(self.__startSub)+'-'+str(self.__end)+':'+str(self.__endSub)+' out of order') + def start(self) -> int: return self.__start def startSub(self) -> int: @@ -517,7 +559,30 @@ def endSub(self) -> int: return self.__endSub @staticmethod def _isValid(value) -> builtins.bool: - return True + if isinstance(value, str): + return True + if isinstance(value, LuminosityBlockRange): + return True + try: + if len(value) == 2: + return len(value[0])==2 and len(value[1])==2 + return len(value) == 4 + except: + return False + return False + def _valueFromContainer(self, value): + if len(value) == 2: + if len(value[0]) != 2 or len(value[1]) != 2: + raise RuntimeError('LuminosityBlockRange set by a container must then contain elements which are len == 2') + self.__start = value[0][0] + self.__startSub = value[0][1] + self.__end = value[1][0] + self.__endSub = value[1][1] + else: + self.__start = value[0] + self.__startSub = value[1] + self.__end = value[2] + self.__endSub = value[3] @staticmethod def _valueFromString(value:str): """only used for cfg-parsing""" @@ -561,26 +626,34 @@ def __init__(self, start, *args): self.__endLumi = parsed.__endLumi self.__endSub = parsed.__endSub else: - self.__start = start - if len(args) == 3: - self.__startLumi = 0 - self.__startSub = args[0] - self.__end = args[1] - self.__endLumi = 0 - self.__endSub = args[2] - elif len(args) == 5: - self.__startLumi = args[0] - self.__startSub = args[1] - self.__end = args[2] - self.__endLumi = args[3] - self.__endSub = args[4] + if len(args) == 0: + self._valueFromContainer(start) else: - raise RuntimeError('EventRange ctor must have 4 or 6 arguments') + v = [start] + v.extend(args) + self._valueFromContainer(v) if self.__end < self.__start or (self.__end == self.__start and self.__endLumi < self.__startLumi): raise RuntimeError('EventRange '+str(self.__start)+':'+str(self.__startLumi)+':'+str(self.__startSub)+'-'+str(self.__end)+':'+str(self.__endLumi)+':'+str(self.__endSub)+' out of order') # 0 event number is a special case that means no limit if self.__end == self.__start and self.__endLumi == self.__startLumi and (self.__endSub != 0 and self.__endSub < self.__startSub): raise RuntimeError('EventRange '+str(self.__start)+':'+str(self.__startLumi)+':'+str(self.__startSub)+'-'+str(self.__end)+':'+str(self.__endLumi)+':'+str(self.__endSub)+' out of order') + def setValue(self, value): + if isinstance(value, str): + parsed = self._valueFromString(value) + self.__start = parsed.__start + self.__startLumi = parsed.__startLumi + self.__startSub = parsed.__startSub + self.__end = parsed.__end + self.__endLumi = parsed.__endLumi + self.__endSub = parsed.__endSub + else: + self._valueFromContainer(value) + if self.__end < self.__start or (self.__end == self.__start and self.__endLumi < self.__startLumi): + raise RuntimeError('EventRange '+str(self.__start)+':'+str(self.__startLumi)+':'+str(self.__startSub)+'-'+str(self.__end)+':'+str(self.__endLumi)+':'+str(self.__endSub)+' out of order') + # 0 event number is a special case that means no limit + if self.__end == self.__start and self.__endLumi == self.__startLumi and (self.__endSub != 0 and self.__endSub < self.__startSub): + raise RuntimeError('EventRange '+str(self.__start)+':'+str(self.__startLumi)+':'+str(self.__startSub)+'-'+str(self.__end)+':'+str(self.__endLumi)+':'+str(self.__endSub)+' out of order') + def start(self) -> int: return self.__start def startLumi(self) -> int: @@ -596,6 +669,35 @@ def endSub(self) -> int: @staticmethod def _isValid(value) -> builtins.bool: return True + def _valueFromContainer(self, value): + length = len(value) + if length == 2: + if len(value[0]) != 3 or len(value[1]) != 3: + raise RuntimeError('EventRange set with 2 arguments require the arguments to be a container with 3 elements') + else: + self.__start = value[0][0] + self.__startLumi = value[0][1] + self.__startSub = value[0][2] + self.__end = value[1][0] + self.__endLumi = value[1][1] + self.__endSub = value[1][2] + elif length == 4: + self.__start = value[0] + self.__startLumi = 0 + self.__startSub = value[1] + self.__end = value[2] + self.__endLumi = 0 + self.__endSub = value[3] + elif len(value) == 6: + self.__start = value[0] + self.__startLumi = value[1] + self.__startSub = value[2] + self.__end = value[3] + self.__endLumi = value[4] + self.__endSub = value[5] + else: + raise RuntimeError('EventRange setValue must be set using 2, 4, or 6 arguments') + @staticmethod def _valueFromString(value:str): """only used for cfg-parsing""" @@ -1084,7 +1186,11 @@ def _itemIsValid(cls,item): def configValueForItem(self,item,options:PrintOptions) -> str: return LuminosityBlockID.formatValueForConfig(item) def pythonValueForItem(self,item, options:PrintOptions) -> str: - return item.dumpPython(options) + if isinstance(item,str): + return '"'+item+'"' + elif isinstance(item, _Parameterizable): + return item.dumpPython(options) + return str(item) @staticmethod def _valueFromString(value:str): return VLuminosityBlockID(*_ValidatingParameterListBase._itemsFromStrings(value,LuminosityBlockID._valueFromString)) @@ -1210,11 +1316,12 @@ def configValueForItem(self,item,options:PrintOptions) -> str: def pythonValueForItem(self,item, options:PrintOptions) -> str: if isinstance(item, str): return '"'+item+'"' - else: + elif isinstance(item, _Parameterizable): return item.dumpPython(options) + return str(item) @staticmethod def _valueFromString(value:str): - return VLuminosityBlockRange(*_ValidatingParameterListBase._itemsFromStrings(value,VLuminosityBlockRange._valueFromString)) + return VLuminosityBlockRange(*_ValidatingParameterListBase._itemsFromStrings(value,LuminosityBlockRange._valueFromString)) def insertInto(self, parameterSet, myname:str): cppIDs = list() for i in self: @@ -1236,11 +1343,12 @@ def configValueForItem(self,item,options:PrintOptions) -> str: def pythonValueForItem(self,item, options:PrintOptions) -> str: if isinstance(item, str): return '"'+item+'"' - else: + elif isinstance(item, _Parameterizable): return item.dumpPython(options) + return str(item) @staticmethod def _valueFromString(value:str): - return VEventRange(*_ValidatingParameterListBase._itemsFromStrings(value,VEventRange._valueFromString)) + return VEventRange(*_ValidatingParameterListBase._itemsFromStrings(value,EventRange._valueFromString)) def insertInto(self, parameterSet, myname:str): cppIDs = list() for i in self: @@ -1627,6 +1735,7 @@ def testvstring(self): self.assertEqual(len(a), 5) self.assertEqual(a[0], "") self.assertEqual(a[3], "Sarah") + self.assertEqual(a.dumpPython(), "cms.vstring(\n '',\n 'Barack',\n 'John',\n 'Sarah',\n 'Joe'\n)") ps = PSet(v = vstring('a', 'b')) ps.v = ['loose'] def testUntracked(self): @@ -2212,6 +2321,13 @@ def testEventID(self): eid.insertInto(pset,'foo') eid2 = EventID._valueFromString('3:4') eid2.insertInto(pset,'foo2') + eid = EventID(0,0,0) + eid.setValue("2:0:3") + self.assertEqual( repr(eid), "cms.EventID(2, 0, 3)" ) + eid.setValue( (4,1)) + self.assertEqual( repr(eid), "cms.EventID(4, 0, 1)" ) + eid.setValue( (5,1,2)) + self.assertEqual( repr(eid), "cms.EventID(5, 1, 2)" ) def testVEventID(self): veid = VEventID(EventID(2, 0, 3)) veid2 = VEventID("1:2", "3:4") @@ -2228,14 +2344,31 @@ def testLuminosityBlockID(self): lid.insertInto(pset,'foo') lid2 = LuminosityBlockID._valueFromString('3:4') lid2.insertInto(pset,'foo2') + lid3 = LuminosityBlockID(1) + lid3.setValue((2,3)) + self.assertEqual(repr(lid3), "cms.LuminosityBlockID(2, 3)") def testVLuminosityBlockID(self): vlid = VLuminosityBlockID(LuminosityBlockID(2, 3)) vlid2 = VLuminosityBlockID("1:2", "3:4") self.assertEqual( repr(vlid[0]), "cms.LuminosityBlockID(2, 3)" ) self.assertEqual( repr(vlid2[0]), "'1:2'" ) + self.assertEqual( vlid2.dumpPython(), 'cms.VLuminosityBlockID("1:2", "3:4")') + vlid3 = VLuminosityBlockID((1,2),(3,4)) + self.assertEqual( repr(vlid3[0]), '(1, 2)' ) + self.assertEqual( vlid3.dumpPython(), 'cms.VLuminosityBlockID((1, 2), (3, 4))') pset = PSetTester() vlid.insertInto(pset,'foo') + vlid4 = VLuminosityBlockID() + vlid4.setValue(["1:2"]) + self.assertEqual( vlid4.dumpPython(), 'cms.VLuminosityBlockID("1:2")' ) + p = PSet(v = VLuminosityBlockID()) + p.v = VLuminosityBlockID() + p.v = ["1:2"] + self.assertEqual( p.v.dumpPython(), 'cms.VLuminosityBlockID("1:2")' ) + p = PSet( v = VLuminosityBlockID()) + p.v = [(3,1)] + self.assertEqual( p.v.dumpPython(), 'cms.VLuminosityBlockID((3, 1))' ) def testEventRange(self): range1 = EventRange(1, 0, 2, 3, 0, 4) @@ -2246,12 +2379,20 @@ def testEventRange(self): pset = PSetTester() range1.insertInto(pset,'foo') range2.insertInto(pset,'bar') + range4 = EventRange((1,2,3), (4,5,6)) + self.assertEqual(repr(range4), "cms.EventRange(1, 2, 3, 4, 5, 6)") def testVEventRange(self): v1 = VEventRange(EventRange(1, 0, 2, 3, 0, 4)) v2 = VEventRange("1:2-3:4", "5:MIN-7:MAX") + self.assertEqual( v2.dumpPython(), 'cms.VEventRange("1:2-3:4", "5:MIN-7:MAX")') self.assertEqual( repr(v1[0]), "cms.EventRange(1, 0, 2, 3, 0, 4)" ) pset = PSetTester() v2.insertInto(pset,'foo') + v3 = VEventRange(((1,2,3), (4,5,6)), ((7,1,1),(8,0,0))) + self.assertEqual(v3.dumpPython(), "cms.VEventRange(((1, 2, 3), (4, 5, 6)), ((7, 1, 1), (8, 0, 0)))") + p = PSet(v = VEventRange()) + p.v = [((3,2,1), (7,8,9))] + self.assertEqual(p.v[0], ((3,2,1), (7,8,9))) def testLuminosityBlockRange(self): range1 = LuminosityBlockRange(1, 2, 3, 4) @@ -2262,12 +2403,25 @@ def testLuminosityBlockRange(self): pset = PSetTester() range1.insertInto(pset,'foo') range2.insertInto(pset,'bar') + range4 = LuminosityBlockRange(1, 2, 3, 4) + range4.setValue((2,3,4,5)) + self.assertEqual(repr(range4), "cms.LuminosityBlockRange(2, 3, 4, 5)") + range5 = LuminosityBlockRange((1,2), (3,4)) + self.assertEqual(repr(range5), "cms.LuminosityBlockRange(1, 2, 3, 4)") def testVLuminosityBlockRange(self): v1 = VLuminosityBlockRange(LuminosityBlockRange(1, 2, 3, 4)) v2 = VLuminosityBlockRange("1:2-3:4", "5:MIN-7:MAX") self.assertEqual( repr(v1[0]), "cms.LuminosityBlockRange(1, 2, 3, 4)" ) pset = PSetTester() v2.insertInto(pset,'foo') + v3 = VLuminosityBlockRange(((1,2), (3,4)), ((5,6), (7,8))) + self.assertEqual( v3.dumpPython(), "cms.VLuminosityBlockRange(((1, 2), (3, 4)), ((5, 6), (7, 8)))") + p = PSet(v = VLuminosityBlockRange()) + p.v = [((3,2), (7,8))] + self.assertEqual(p.v[0], ((3,2), (7,8))) + self.assertRaises(TypeError, lambda x: VLuminosityBlockRange(x), 1) + + self.assertRaises(TypeError, lambda x: VLuminosityBlockRange(x), ((1,2,3),(1,2))) def testPSetConversion(self): p = PSet(a = untracked.int32(7), diff --git a/FWCore/ParameterSet/src/ANDGroupDescription.cc b/FWCore/ParameterSet/src/ANDGroupDescription.cc index a8f7c9ff313f2..9832492b3e227 100644 --- a/FWCore/ParameterSet/src/ANDGroupDescription.cc +++ b/FWCore/ParameterSet/src/ANDGroupDescription.cc @@ -60,10 +60,14 @@ namespace edm { } } - void ANDGroupDescription::writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const { - node_left_->writeCfi(os, optional, startWithComma, indentation, wroteSomething); - node_right_->writeCfi(os, optional, startWithComma, indentation, wroteSomething); + void ANDGroupDescription::writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { + node_left_->writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); + node_right_->writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); } void ANDGroupDescription::print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const { diff --git a/FWCore/ParameterSet/src/ANDGroupDescription.h b/FWCore/ParameterSet/src/ANDGroupDescription.h index 0a17e904786ea..f97c6e9b835ec 100644 --- a/FWCore/ParameterSet/src/ANDGroupDescription.h +++ b/FWCore/ParameterSet/src/ANDGroupDescription.h @@ -37,8 +37,12 @@ namespace edm { void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const override; - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override; + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const override; void print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const override; diff --git a/FWCore/ParameterSet/src/AllowedLabelsDescriptionBase.cc b/FWCore/ParameterSet/src/AllowedLabelsDescriptionBase.cc index c06ccc95f9067..5d38577f040b1 100644 --- a/FWCore/ParameterSet/src/AllowedLabelsDescriptionBase.cc +++ b/FWCore/ParameterSet/src/AllowedLabelsDescriptionBase.cc @@ -46,9 +46,13 @@ namespace edm { } } - void AllowedLabelsDescriptionBase::writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const { - parameterHoldingLabels_.writeCfi(os, optional, startWithComma, indentation, wroteSomething); + void AllowedLabelsDescriptionBase::writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { + parameterHoldingLabels_.writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); } void AllowedLabelsDescriptionBase::print_(std::ostream& os, diff --git a/FWCore/ParameterSet/src/ConfigurationDescriptions.cc b/FWCore/ParameterSet/src/ConfigurationDescriptions.cc index 3ffa8ed2a44b9..d162971fc1e3e 100644 --- a/FWCore/ParameterSet/src/ConfigurationDescriptions.cc +++ b/FWCore/ParameterSet/src/ConfigurationDescriptions.cc @@ -141,33 +141,42 @@ namespace edm { } void ConfigurationDescriptions::writeCfis(std::set& usedCfiFileNames) const { - for_all(descriptions_, - std::bind(&ConfigurationDescriptions::writeCfiForLabel, - std::placeholders::_1, - std::cref(baseType_), - std::cref(pluginName_), - std::ref(usedCfiFileNames))); + bool wroteClassFile = false; + cfi::Paths paths; if (defaultDescDefined_) { - writeClassFile(defaultDesc_); + paths = writeClassFile(defaultDesc_, not descriptions_.empty()); + wroteClassFile = true; } else if (descriptions_.size() == 1) { - writeClassFile(descriptions_.begin()->second); + paths = writeClassFile(descriptions_.begin()->second, true); + wroteClassFile = true; + } + CfiOptions ops = wroteClassFile ? CfiOptions{cfi::Untyped{paths}} : CfiOptions{cfi::Typed{}}; + for (auto& d : descriptions_) { + writeCfiForLabel(d, baseType_, pluginName_, 1 == descriptions_.size(), ops, usedCfiFileNames); } } - void ConfigurationDescriptions::writeClassFile(ParameterSetDescription const& iDesc) const { - std::string pluginName = pluginName_; - auto found = pluginName.find("::"); - while (found != std::string::npos) { - pluginName.replace(found, 2, "_"); - found = pluginName.find("::"); - } - //Symbols that can appear in our plugin names but can't in python function names - const std::string toReplace("@<>,"); - found = pluginName.find_first_of(toReplace); - while (found != std::string::npos) { - pluginName.replace(found, 1, "_"); - found = pluginName.find_first_of(toReplace, found); + namespace { + std::string modifyPluginName(std::string iName) { + auto found = iName.find("::"); + while (found != std::string::npos) { + iName.replace(found, 2, "_"); + found = iName.find("::"); + } + //Symbols that can appear in our plugin names but can't in python function names + const std::string toReplace("@<>,"); + found = iName.find_first_of(toReplace); + while (found != std::string::npos) { + iName.replace(found, 1, "_"); + found = iName.find_first_of(toReplace, found); + } + return iName; } + } // namespace + + cfi::Paths ConfigurationDescriptions::writeClassFile(ParameterSetDescription const& iDesc, + bool willUseWithCfis) const { + std::string pluginName = modifyPluginName(pluginName_); std::string fileName = pluginName + ".py"; std::ofstream outFile(fileName.c_str()); @@ -187,7 +196,8 @@ namespace edm { bool startWithComma = true; int indentation = 4; - iDesc.writeCfi(outFile, startWithComma, indentation); + CfiOptions ops = willUseWithCfis ? CfiOptions{cfi::ClassFile{}} : CfiOptions{cfi::Typed{}}; + iDesc.writeCfi(outFile, startWithComma, indentation, ops); outFile << ")\n" " for k,v in kwargs.items():\n" @@ -195,11 +205,14 @@ namespace edm { " return mod\n"; outFile.close(); + return std::holds_alternative(ops) ? std::get(ops).releasePaths() : cfi::Paths{}; } void ConfigurationDescriptions::writeCfiForLabel(std::pair const& labelAndDesc, std::string const& baseType, std::string const& pluginName, + bool isSameAsDefault, + CfiOptions& options, std::set& usedCfiFileNames) { if (0 == strcmp(baseType.c_str(), kService) && labelAndDesc.first != pluginName) { throw edm::Exception(edm::errors::LogicError, @@ -250,13 +263,22 @@ namespace edm { throw ex; } - outFile << "import FWCore.ParameterSet.Config as cms\n\n"; - outFile << labelAndDesc.first << " = cms." << baseType << "('" << pluginName << "'"; - bool startWithComma = true; - int indentation = 2; - labelAndDesc.second.writeCfi(outFile, startWithComma, indentation); + if (not shouldWriteUntyped(options)) { + outFile << "import FWCore.ParameterSet.Config as cms\n\n"; + outFile << labelAndDesc.first << " = cms." << baseType << "('" << pluginName << "'"; + } else { + outFile << "import FWCore.ParameterSet.Config as cms\n\n"; + auto pythonName = modifyPluginName(pluginName); + outFile << "from ." << pythonName << " import " << pythonName << "\n\n"; + outFile << labelAndDesc.first << " = " << pythonName << "("; + startWithComma = false; + } + if (not isSameAsDefault) { + int indentation = 2; + labelAndDesc.second.writeCfi(outFile, startWithComma, indentation, options); + } outFile << ")\n"; outFile.close(); diff --git a/FWCore/ParameterSet/src/EmptyGroupDescription.cc b/FWCore/ParameterSet/src/EmptyGroupDescription.cc index bce6587b66000..ed6f744003783 100644 --- a/FWCore/ParameterSet/src/EmptyGroupDescription.cc +++ b/FWCore/ParameterSet/src/EmptyGroupDescription.cc @@ -16,9 +16,12 @@ namespace edm { std::set& /*validatedLabels*/, bool /*optional*/) const {} - void EmptyGroupDescription::writeCfi_( - std::ostream&, bool /*optional*/, bool& /*startWithComma*/, int /*indentation*/, bool& /*wroteSomething*/) const { - } + void EmptyGroupDescription::writeCfi_(std::ostream&, + bool /*optional*/, + bool& /*startWithComma*/, + int /*indentation*/, + CfiOptions&, + bool& /*wroteSomething*/) const {} void EmptyGroupDescription::print_(std::ostream& os, bool /*optional*/, diff --git a/FWCore/ParameterSet/src/IfExistsDescription.cc b/FWCore/ParameterSet/src/IfExistsDescription.cc index 37e33d53569d4..e60a9c38406f3 100644 --- a/FWCore/ParameterSet/src/IfExistsDescription.cc +++ b/FWCore/ParameterSet/src/IfExistsDescription.cc @@ -72,10 +72,15 @@ namespace edm { } } - void IfExistsDescription::writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const { - node_left_->writeCfi(os, optional, startWithComma, indentation, wroteSomething); - node_right_->writeCfi(os, optional, startWithComma, indentation, wroteSomething); + void IfExistsDescription::writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { + node_left_->writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); + node_right_->writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); + parameterMustBeTyped(options); } void IfExistsDescription::print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const { diff --git a/FWCore/ParameterSet/src/ORGroupDescription.cc b/FWCore/ParameterSet/src/ORGroupDescription.cc index 64f5d8e4f3cf8..8c9d6d2e4da3b 100644 --- a/FWCore/ParameterSet/src/ORGroupDescription.cc +++ b/FWCore/ParameterSet/src/ORGroupDescription.cc @@ -71,9 +71,13 @@ namespace edm { node_left_->validate(pset, validatedLabels, false); } - void ORGroupDescription::writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const { - node_left_->writeCfi(os, optional, startWithComma, indentation, wroteSomething); + void ORGroupDescription::writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { + node_left_->writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); } void ORGroupDescription::print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const { diff --git a/FWCore/ParameterSet/src/ORGroupDescription.h b/FWCore/ParameterSet/src/ORGroupDescription.h index b65d961ab3473..5c2cb6ff0cbe6 100644 --- a/FWCore/ParameterSet/src/ORGroupDescription.h +++ b/FWCore/ParameterSet/src/ORGroupDescription.h @@ -35,8 +35,12 @@ namespace edm { void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const override; - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override; + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const override; void print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const override; diff --git a/FWCore/ParameterSet/src/ParameterDescription.cc b/FWCore/ParameterSet/src/ParameterDescription.cc index 6dd18c869baf7..88eb3eb3bd6df 100644 --- a/FWCore/ParameterSet/src/ParameterDescription.cc +++ b/FWCore/ParameterSet/src/ParameterDescription.cc @@ -123,10 +123,12 @@ namespace edm { return psetDesc_.operator->(); } - void ParameterDescription::writeCfi_(std::ostream& os, int indentation) const { + void ParameterDescription::writeCfi_(std::ostream& os, + int indentation, + CfiOptions& options) const { bool startWithComma = false; indentation += 2; - psetDesc_->writeCfi(os, startWithComma, indentation); + psetDesc_->writeCfi(os, startWithComma, indentation, options); } void ParameterDescription::writeDoc_(std::ostream&, int /*indentation*/) const {} @@ -338,10 +340,8 @@ namespace edm { return pset.existsAs >(label(), isTracked()); } - void ParameterDescription >::writeOneElementToCfi(ParameterSet const& pset, - std::ostream& os, - int indentation, - bool& nextOneStartsWithAComma) { + void ParameterDescription >::writeOneElementToCfi( + ParameterSet const& pset, std::ostream& os, int indentation, CfiOptions& options, bool& nextOneStartsWithAComma) { if (nextOneStartsWithAComma) os << ","; nextOneStartsWithAComma = true; @@ -355,17 +355,23 @@ namespace edm { ParameterSetDescription psetDesc; fillDescriptionFromPSet(pset, psetDesc); - psetDesc.writeCfi(os, startWithComma, indent); + CfiOptions ops = cfi::Typed{}; + psetDesc.writeCfi(os, startWithComma, indent, ops); os << ")"; } - void ParameterDescription >::writeCfi_(std::ostream& os, int indentation) const { + void ParameterDescription >::writeCfi_(std::ostream& os, + int indentation, + CfiOptions& options) const { bool nextOneStartsWithAComma = false; - for_all( - vPset_, - std::bind( - &writeOneElementToCfi, std::placeholders::_1, std::ref(os), indentation, std::ref(nextOneStartsWithAComma))); + for_all(vPset_, + std::bind(&writeOneElementToCfi, + std::placeholders::_1, + std::ref(os), + indentation, + options, + std::ref(nextOneStartsWithAComma))); os << "\n"; printSpaces(os, indentation); } diff --git a/FWCore/ParameterSet/src/ParameterDescriptionBase.cc b/FWCore/ParameterSet/src/ParameterDescriptionBase.cc index 7e838fc9bcae4..d20cd9dcf9f68 100644 --- a/FWCore/ParameterSet/src/ParameterDescriptionBase.cc +++ b/FWCore/ParameterSet/src/ParameterDescriptionBase.cc @@ -118,11 +118,92 @@ namespace edm { } } - void ParameterDescriptionBase::writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const { + void ParameterDescriptionBase::writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { if (label().empty() or label()[0] == '@') { return; } + + auto check = cfi::needToSwitchToTyped(label(), options); + if (check.first) { + CfiOptions fullOp = cfi::Typed{}; + writeFullCfi(os, optional, startWithComma, indentation, fullOp, wroteSomething); + } else if (shouldWriteUntyped(options)) { + writeLabelValueCfi(os, optional, startWithComma, indentation, options, wroteSomething); + } else { + writeFullCfi(os, optional, startWithComma, indentation, options, wroteSomething); + } + } + + void ParameterDescriptionBase::writeLabelValueCfi(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { + constexpr std::string_view k_endList = "]"; + constexpr std::string_view k_endParenthesis = ")"; + constexpr std::string_view k_endBasicType = ""; + if (not hasDefault()) { + return; + } + wroteSomething = true; + if (startWithComma) + os << ","; + startWithComma = true; + os << "\n"; + printSpaces(os, indentation); + + os << label() << " = "; + std::string_view endDelimiter = k_endBasicType; + switch (type()) { + case k_vdouble: + case k_vint32: + case k_vint64: + case k_vstringRaw: + case k_vuint32: + case k_vuint64: + case k_VESInputTag: + case k_VEventID: + case k_VEventRange: + case k_VInputTag: + case k_VLuminosityBlockID: + case k_VLuminosityBlockRange: + case k_VPSet: + os << "["; + endDelimiter = k_endList; + break; + case k_PSet: + os << "dict("; + endDelimiter = k_endParenthesis; + break; + case k_EventID: + case k_EventRange: + case k_ESInputTag: + case k_InputTag: + case k_LuminosityBlockID: + case k_LuminosityBlockRange: + os << "("; + endDelimiter = k_endParenthesis; + break; + default: + break; + } + writeCfi_(os, indentation, options); + os << endDelimiter; + return; + } + + void ParameterDescriptionBase::writeFullCfi(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { wroteSomething = true; if (startWithComma) os << ","; @@ -146,11 +227,10 @@ namespace edm { if (!isTracked()) os << "untracked."; os << parameterTypeEnumToString(type()) << "("; - writeCfi_(os, indentation); + writeCfi_(os, indentation, options); os << ")"; } } - void ParameterDescriptionBase::print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const { if (dfh.pass() == 0) { dfh.setAtLeast1(label().size()); diff --git a/FWCore/ParameterSet/src/ParameterSetDescription.cc b/FWCore/ParameterSet/src/ParameterSetDescription.cc index 7065dceb760be..ca9331215d7b1 100644 --- a/FWCore/ParameterSet/src/ParameterSetDescription.cc +++ b/FWCore/ParameterSet/src/ParameterSetDescription.cc @@ -125,20 +125,28 @@ namespace edm { } } - void ParameterSetDescription::writeCfi(std::ostream& os, bool startWithComma, int indentation) const { - using std::placeholders::_1; + void ParameterSetDescription::writeCfi(std::ostream& os, + bool startWithComma, + int indentation, + CfiOptions& options) const { bool wroteSomething = false; bool seenWildcard = false; + bool seenMultipleWildcards = false; for (auto const& entry : entries_) { //only add the first seen wildcard to the cfi. This avoids possible ambiguities. if (entry.node()->isWildcard()) { if (seenWildcard == true) { + seenMultipleWildcards = true; continue; } seenWildcard = true; } - writeNode(entry, os, startWithComma, indentation, wroteSomething); + writeNode(entry, os, startWithComma, indentation, options, wroteSomething); + } + + if ((anythingAllowed() or seenMultipleWildcards)) { + cfi::parameterMustBeTyped(options); } if (wroteSomething) { @@ -227,10 +235,17 @@ namespace edm { } } - void ParameterSetDescription::writeNode( - SetDescriptionEntry const& entry, std::ostream& os, bool& startWithComma, int indentation, bool& wroteSomething) { + void ParameterSetDescription::writeNode(SetDescriptionEntry const& entry, + std::ostream& os, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) { if (entry.writeToCfi()) { - entry.node()->writeCfi(os, entry.optional(), startWithComma, indentation, wroteSomething); + entry.node()->writeCfi(os, entry.optional(), startWithComma, indentation, options, wroteSomething); + } else { + //The simplest way to handle this is to force all items to be full in this PSet + cfi::parameterMustBeTyped(options); } } diff --git a/FWCore/ParameterSet/src/ParameterWildcard.cc b/FWCore/ParameterSet/src/ParameterWildcard.cc index 1209e6aced559..192debc4a94cb 100644 --- a/FWCore/ParameterSet/src/ParameterWildcard.cc +++ b/FWCore/ParameterSet/src/ParameterWildcard.cc @@ -111,11 +111,13 @@ namespace edm { return parameterNames.size() == 1U; } - void ParameterWildcard::writeTemplate(std::ostream& os, int indentation) const { + void ParameterWildcard::writeTemplate(std::ostream& os, + int indentation, + CfiOptions& options) const { os << "PSetTemplate("; indentation += 2; if (psetDesc_) { - psetDesc_->writeCfi(os, false, indentation); + psetDesc_->writeCfi(os, false, indentation, options); } os << ")"; } diff --git a/FWCore/ParameterSet/src/ParameterWildcardBase.cc b/FWCore/ParameterSet/src/ParameterWildcardBase.cc index fc9c404869f34..23de41b4bb45d 100644 --- a/FWCore/ParameterSet/src/ParameterWildcardBase.cc +++ b/FWCore/ParameterSet/src/ParameterWildcardBase.cc @@ -146,8 +146,12 @@ namespace edm { } } - void ParameterWildcardBase::writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const { + void ParameterWildcardBase::writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { wroteSomething = true; if (startWithComma) os << ","; @@ -166,10 +170,10 @@ namespace edm { if (!isTracked()) os << "untracked."; - writeTemplate(os, indentation); + writeTemplate(os, indentation, options); } - void ParameterWildcardBase::writeTemplate(std::ostream& os, int indentation) const { + void ParameterWildcardBase::writeTemplate(std::ostream& os, int indentation, CfiOptions&) const { os << parameterTypeEnumToString(type()); } diff --git a/FWCore/ParameterSet/src/XORGroupDescription.cc b/FWCore/ParameterSet/src/XORGroupDescription.cc index 76b915c0e12b6..1824f98707205 100644 --- a/FWCore/ParameterSet/src/XORGroupDescription.cc +++ b/FWCore/ParameterSet/src/XORGroupDescription.cc @@ -78,9 +78,13 @@ namespace edm { } } - void XORGroupDescription::writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const { - node_left_->writeCfi(os, optional, startWithComma, indentation, wroteSomething); + void XORGroupDescription::writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions& options, + bool& wroteSomething) const { + node_left_->writeCfi(os, optional, startWithComma, indentation, options, wroteSomething); } void XORGroupDescription::print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const { diff --git a/FWCore/ParameterSet/src/XORGroupDescription.h b/FWCore/ParameterSet/src/XORGroupDescription.h index f4626b8695771..6c427c4bc1a48 100644 --- a/FWCore/ParameterSet/src/XORGroupDescription.h +++ b/FWCore/ParameterSet/src/XORGroupDescription.h @@ -37,8 +37,12 @@ namespace edm { void validate_(ParameterSet& pset, std::set& validatedLabels, bool optional) const override; - void writeCfi_( - std::ostream& os, bool optional, bool& startWithComma, int indentation, bool& wroteSomething) const override; + void writeCfi_(std::ostream& os, + bool optional, + bool& startWithComma, + int indentation, + CfiOptions&, + bool& wroteSomething) const override; void print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const override; diff --git a/FWCore/ParameterSet/test/test_catch_ParameterSetDescription.cc b/FWCore/ParameterSet/test/test_catch_ParameterSetDescription.cc index 2f5ac8638b2b2..00b4819bd936e 100644 --- a/FWCore/ParameterSet/test/test_catch_ParameterSetDescription.cc +++ b/FWCore/ParameterSet/test/test_catch_ParameterSetDescription.cc @@ -86,7 +86,8 @@ TEST_CASE("test ParameterSetDescription", "[ParameterSetDescription]") { std::ostringstream os; bool startWithComma = false; bool wroteSomething = false; - w.writeCfi(os, false, startWithComma, 0, wroteSomething); + edm::CfiOptions ops = edm::cfi::Typed{}; + w.writeCfi(os, false, startWithComma, 0, ops, wroteSomething); REQUIRE_THAT(os.str(), Equals("\nallowAnyLabel_ = cms.required.int32")); } @@ -107,7 +108,9 @@ TEST_CASE("test ParameterSetDescription", "[ParameterSetDescription]") { std::ostringstream os; bool startWithComma = false; bool wroteSomething = false; - w.writeCfi(os, false, startWithComma, 0, wroteSomething); + edm::CfiOptions ops = edm::cfi::Typed{}; + + w.writeCfi(os, false, startWithComma, 0, ops, wroteSomething); REQUIRE_THAT(os.str(), Equals("\nallowAnyLabel_ = cms.required.untracked.uint32")); } @@ -152,7 +155,9 @@ TEST_CASE("test ParameterSetDescription", "[ParameterSetDescription]") { std::ostringstream os; bool startWithComma = false; bool wroteSomething = false; - w.writeCfi(os, false, startWithComma, 0, wroteSomething); + edm::CfiOptions ops = edm::cfi::Typed{}; + + w.writeCfi(os, false, startWithComma, 0, ops, wroteSomething); REQUIRE_THAT(os.str(), Equals("\nallowAnyLabel_ = cms.required.double")); } @@ -186,7 +191,8 @@ TEST_CASE("test ParameterSetDescription", "[ParameterSetDescription]") { std::ostringstream os; bool startWithComma = false; bool wroteSomething = false; - w.writeCfi(os, false, startWithComma, 0, wroteSomething); + edm::CfiOptions ops = edm::cfi::Typed{}; + w.writeCfi(os, false, startWithComma, 0, ops, wroteSomething); REQUIRE_THAT(os.str(), Equals("\nallowAnyLabel_ = cms.required.PSetTemplate()")); } @@ -235,7 +241,8 @@ TEST_CASE("test ParameterSetDescription", "[ParameterSetDescription]") { std::ostringstream os; bool startWithComma = false; bool wroteSomething = false; - w.writeCfi(os, false, startWithComma, 0, wroteSomething); + edm::CfiOptions ops = edm::cfi::Typed{}; + w.writeCfi(os, false, startWithComma, 0, ops, wroteSomething); REQUIRE_THAT(os.str(), Equals("\nallowAnyLabel_ = cms.required.PSetTemplate(\n n1 = cms.untracked.uint32(1)\n)")); @@ -287,7 +294,8 @@ TEST_CASE("test ParameterSetDescription", "[ParameterSetDescription]") { std::ostringstream os; bool startWithComma = false; bool wroteSomething = false; - w.writeCfi(os, false, startWithComma, 0, wroteSomething); + edm::CfiOptions ops = edm::cfi::Typed{}; + w.writeCfi(os, false, startWithComma, 0, ops, wroteSomething); REQUIRE_THAT(os.str(), Equals("\nallowAnyLabel_ = cms.required.VPSet")); } @@ -1350,13 +1358,15 @@ TEST_CASE("test ParameterSetDescription", "[ParameterSetDescription]") { psetDesc.addVPSet("vp", templte, defaults); } - edm::ParameterSet test; - test.addParameter("vp", defaults); - psetDesc.validate(test); - - std::ostringstream s; - psetDesc.writeCfi(s, false, 0); - std::string expected = R"-( + SECTION("writeCfi full") { + edm::ParameterSet test; + test.addParameter("vp", defaults); + psetDesc.validate(test); + + std::ostringstream s; + edm::CfiOptions fullOps = edm::cfi::Typed{}; + psetDesc.writeCfi(s, false, 0, fullOps); + std::string expected = R"-( vp = cms.VPSet( cms.PSet( L = cms.LuminosityBlockID(1, 2), @@ -1392,7 +1402,180 @@ vp = cms.VPSet( ) )-"; - CHECK(expected == s.str()); + CHECK(expected == s.str()); + } + SECTION("writeCfi Untyped") { + edm::ParameterSet test; + test.addParameter("vp", defaults); + psetDesc.validate(test); + + std::ostringstream s; + edm::CfiOptions fullOps = edm::cfi::Untyped{edm::cfi::Paths{}}; + psetDesc.writeCfi(s, false, 0, fullOps); + std::string expected = R"-( +vp = [ + cms.PSet( + L = cms.LuminosityBlockID(1, 2), + Lr = cms.LuminosityBlockRange('1:2-3:4'), + b = cms.bool(True), + d = cms.double(1), + e = cms.EventID(1, 2, 3), + er = cms.EventRange('1:2:3-4:5:6'), + et = cms.ESInputTag('', 'foo'), + f = cms.FileInPath(''), + i = cms.int32(1), + l = cms.int64(1), + s = cms.string('a'), + t = cms.InputTag('foo'), + ui = cms.uint32(1), + ul = cms.uint64(1), + vL = cms.VLuminosityBlockID('1:2'), + vLr = cms.VLuminosityBlockRange('1:2-3:4'), + vd = cms.vdouble(1), + ve = cms.VEventID('1:2:3'), + ver = cms.VEventRange('1:2:3-4:5:6'), + vet = cms.VESInputTag(':foo'), + vi = cms.vint32(1), + vl = cms.vint64(1), + vs = cms.vstring('a'), + vt = cms.VInputTag('foo'), + vui = cms.vuint32(1), + vul = cms.vuint64(1), + p = cms.PSet(), + vp = cms.VPSet( + ) + ) +] +)-"; + + CHECK(expected == s.str()); + } + } + + SECTION("PSet with default") { + edm::ParameterSetDescription psetDesc; + + { + edm::ParameterSetDescription templte; + + templte.add("i", 1); + templte.add>("vi", std::vector({1})); + templte.add("ui", 1); + templte.add>("vui", std::vector({1})); + templte.add("l", 1); + templte.add>("vl", std::vector({1})); + templte.add("ul", 1); + templte.add>("vul", std::vector({1})); + templte.add("b", true); + templte.add("d", 1.0); + templte.add>("vd", std::vector({1.0})); + templte.add("s", "a"); + templte.add>("vs", std::vector({"a"})); + templte.add("t", edm::InputTag("foo")); + templte.add>("vt", std::vector({edm::InputTag("foo")})); + templte.add("et", edm::ESInputTag(":foo")); + templte.add>("vet", std::vector({edm::ESInputTag(":foo")})); + edm::FileInPath::disableFileLookup(); + templte.add("f", edm::FileInPath()); + templte.add("e", edm::EventID(1, 2, 3)); + templte.add>("ve", std::vector({edm::EventID(1, 2, 3)})); + templte.add("L", edm::LuminosityBlockID(1, 2)); + templte.add>( + "vL", std::vector({edm::LuminosityBlockID(1, 2)})); + templte.add("er", edm::EventRange(1, 2, 3, 4, 5, 6)); + templte.add>("ver", + std::vector({edm::EventRange(1, 2, 3, 4, 5, 6)})); + templte.add("Lr", edm::LuminosityBlockRange(1, 2, 3, 4)); + templte.add>( + "vLr", std::vector({edm::LuminosityBlockRange(1, 2, 3, 4)})); + templte.add("p", edm::ParameterSetDescription()); + templte.addVPSet("vp", edm::ParameterSetDescription(), std::vector()); + psetDesc.add("p", templte); + } + SECTION("writeCfi full") { + edm::ParameterSet test; + test.addParameter("p", edm::ParameterSet()); + psetDesc.validate(test); + + std::ostringstream s; + edm::CfiOptions fullOps = edm::cfi::Typed{}; + psetDesc.writeCfi(s, false, 0, fullOps); + std::string expected = R"-( +p = cms.PSet( + i = cms.int32(1), + vi = cms.vint32(1), + ui = cms.uint32(1), + vui = cms.vuint32(1), + l = cms.int64(1), + vl = cms.vint64(1), + ul = cms.uint64(1), + vul = cms.vuint64(1), + b = cms.bool(True), + d = cms.double(1), + vd = cms.vdouble(1), + s = cms.string('a'), + vs = cms.vstring('a'), + t = cms.InputTag('foo'), + vt = cms.VInputTag('foo'), + et = cms.ESInputTag('', 'foo'), + vet = cms.VESInputTag(':foo'), + f = cms.FileInPath(''), + e = cms.EventID(1, 2, 3), + ve = cms.VEventID('1:2:3'), + L = cms.LuminosityBlockID(1, 2), + vL = cms.VLuminosityBlockID('1:2'), + er = cms.EventRange('1:2:3-4:5:6'), + ver = cms.VEventRange('1:2:3-4:5:6'), + Lr = cms.LuminosityBlockRange('1:2-3:4'), + vLr = cms.VLuminosityBlockRange('1:2-3:4'), + p = cms.PSet(), + vp = cms.VPSet( + ) +) +)-"; + + CHECK(expected == s.str()); + } + SECTION("writeCfi Untyped") { + std::ostringstream s; + edm::CfiOptions fullOps = edm::cfi::Untyped{edm::cfi::Paths{}}; + psetDesc.writeCfi(s, false, 0, fullOps); + std::string expected = R"-( +p = dict( + i = 1, + vi = [1], + ui = 1, + vui = [1], + l = 1, + vl = [1], + ul = 1, + vul = [1], + b = True, + d = 1, + vd = [1], + s = 'a', + vs = ['a'], + t = ('foo'), + vt = ['foo'], + et = ('', 'foo'), + vet = [':foo'], + f = '', + e = (1, 2, 3), + ve = ['1:2:3'], + L = (1, 2), + vL = ['1:2'], + er = ('1:2:3-4:5:6'), + ver = ['1:2:3-4:5:6'], + Lr = ('1:2-3:4'), + vLr = ['1:2-3:4'], + p = dict(), + vp = [ + ] +) +)-"; + + CHECK(expected == s.str()); + } } SECTION("setAllowAnything") {