File indexing completed on 2024-04-06 12:01:16
0001 #ifndef UtilAlgos_SingleObjectSelector_h
0002 #define UtilAlgos_SingleObjectSelector_h
0003
0004
0005
0006
0007 #include "CommonTools/UtilAlgos/interface/ObjectSelectorBase.h"
0008 #include "CommonTools/UtilAlgos/interface/NonNullNumberSelector.h"
0009 #include "CommonTools/UtilAlgos/interface/StoreManagerTrait.h"
0010 #include "CommonTools/UtilAlgos/interface/SelectedOutputCollectionTrait.h"
0011 #include "CommonTools/UtilAlgos/interface/NullPostProcessor.h"
0012 #include "CommonTools/UtilAlgos/interface/EventSetupInitTrait.h"
0013 #include "CommonTools/UtilAlgos/interface/StoreContainerTrait.h"
0014 #include "CommonTools/UtilAlgos/interface/SelectionAdderTrait.h"
0015 #include "CommonTools/UtilAlgos/interface/SingleElementCollectionSelector.h"
0016
0017
0018
0019
0020
0021
0022 template <typename InputCollection,
0023 typename Selector,
0024 typename EdmFilter,
0025 typename OutputCollection = typename ::helper::SelectedOutputCollectionTrait<InputCollection>::type,
0026 typename StoreContainer = typename ::helper::StoreContainerTrait<OutputCollection>::type,
0027 typename PostProcessor = ::helper::NullPostProcessor<OutputCollection>,
0028 typename StoreManager = typename ::helper::StoreManagerTrait<OutputCollection, EdmFilter>::type,
0029 typename Base = typename ::helper::StoreManagerTrait<OutputCollection, EdmFilter>::base,
0030 typename RefAdder = typename ::helper::SelectionAdderTrait<InputCollection, StoreContainer>::type>
0031 class SingleObjectSelectorBase
0032 : public ObjectSelectorBase<
0033 SingleElementCollectionSelector<InputCollection, Selector, OutputCollection, StoreContainer, RefAdder>,
0034 OutputCollection,
0035 NonNullNumberSelector,
0036 PostProcessor,
0037 StoreManager,
0038 Base,
0039 typename ::reco::modules::EventSetupInit<
0040 SingleElementCollectionSelector<InputCollection, Selector, OutputCollection, StoreContainer, RefAdder>>::
0041 type> {
0042 using Init = typename ::reco::modules::EventSetupInit<
0043 SingleElementCollectionSelector<InputCollection, Selector, OutputCollection, StoreContainer, RefAdder>>::type;
0044
0045 public:
0046
0047 explicit SingleObjectSelectorBase(const edm::ParameterSet& cfg)
0048 : ObjectSelectorBase<
0049 SingleElementCollectionSelector<InputCollection, Selector, OutputCollection, StoreContainer, RefAdder>,
0050 OutputCollection,
0051 NonNullNumberSelector,
0052 PostProcessor,
0053 StoreManager,
0054 Base,
0055 Init>(cfg) {}
0056 ~SingleObjectSelectorBase() override {}
0057 };
0058
0059 #include "FWCore/Framework/interface/stream/EDFilter.h"
0060
0061 template <typename InputCollection,
0062 typename Selector,
0063 typename OutputCollection = typename ::helper::SelectedOutputCollectionTrait<InputCollection>::type,
0064 typename StoreContainer = typename ::helper::StoreContainerTrait<OutputCollection>::type,
0065 typename PostProcessor = ::helper::NullPostProcessor<OutputCollection>>
0066 using SingleObjectSelectorStream = SingleObjectSelectorBase<InputCollection,
0067 Selector,
0068 edm::stream::EDFilter<>,
0069 OutputCollection,
0070 StoreContainer,
0071 PostProcessor>;
0072
0073 template <typename InputCollection,
0074 typename Selector,
0075 typename OutputCollection = typename ::helper::SelectedOutputCollectionTrait<InputCollection>::type,
0076 typename StoreContainer = typename ::helper::StoreContainerTrait<OutputCollection>::type,
0077 typename PostProcessor = ::helper::NullPostProcessor<OutputCollection>>
0078 using SingleObjectSelector =
0079 SingleObjectSelectorStream<InputCollection, Selector, OutputCollection, StoreContainer, PostProcessor>;
0080
0081 #endif