File indexing completed on 2023-03-17 11:05:35
0001 #ifndef HeavyFlavorAnalysis_SpecificDecay_BPHDecayToResResBuilder_h
0002 #define HeavyFlavorAnalysis_SpecificDecay_BPHDecayToResResBuilder_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayToResResBuilderBase.h"
0017 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayConstrainedBuilder.h"
0018 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecaySpecificBuilder.h"
0019
0020
0021
0022
0023 #include "FWCore/Framework/interface/EventSetup.h"
0024
0025 class BPHEventSetupWrapper;
0026
0027
0028
0029
0030 #include <iostream>
0031 #include <string>
0032 #include <vector>
0033
0034
0035
0036
0037
0038 template <class ProdType, class Res1Type, class Res2Type>
0039 class BPHDecayToResResBuilder : public BPHDecayToResResBuilderBase,
0040 public BPHDecayConstrainedBuilder<ProdType, Res1Type>,
0041 public BPHDecaySpecificBuilder<ProdType> {
0042 public:
0043 using typename BPHDecayGenericBuilder<ProdType>::prod_ptr;
0044 typedef typename Res1Type::const_pointer res1_ptr;
0045 typedef typename Res2Type::const_pointer res2_ptr;
0046
0047
0048
0049 BPHDecayToResResBuilder(const BPHEventSetupWrapper& es,
0050 const std::string& res1Name,
0051 double res1Mass,
0052 double res1Width,
0053 const std::vector<res1_ptr>& res1Collection,
0054 const std::string& res2Name,
0055 const std::vector<res2_ptr>& res2Collection)
0056 : BPHDecayGenericBuilderBase(es, nullptr),
0057 BPHDecayConstrainedBuilderBase(res1Name, res1Mass, res1Width),
0058 BPHDecayToResResBuilderBase(res2Name),
0059 BPHDecayConstrainedBuilder<ProdType, Res2Type>(res1Collection),
0060 sCollection(&res2Collection) {}
0061
0062
0063 BPHDecayToResResBuilder(const BPHDecayToResResBuilder& x) = delete;
0064 BPHDecayToResResBuilder& operator=(const BPHDecayToResResBuilder& x) = delete;
0065
0066
0067
0068 ~BPHDecayToResResBuilder() override = default;
0069
0070 protected:
0071 BPHDecayToResResBuilder(const std::vector<res1_ptr>& res1Collection,
0072 const std::string& res2Name,
0073 const std::vector<res2_ptr>& res2Collection)
0074 : BPHDecayToResResBuilderBase(res2Name),
0075 BPHDecayConstrainedBuilder<ProdType, Res2Type>(res1Collection),
0076 sCollection(&res2Collection) {}
0077
0078 const std::vector<res2_ptr>* sCollection;
0079
0080 void addRes2Collection(BPHRecoBuilder& brb) override {
0081 const std::vector<res2_ptr>& sc = *this->sCollection;
0082 if (res2Sel->getMassMax() > 0.0) {
0083 sCollectSel.clear();
0084 sCollectSel.reserve(sc.size());
0085 for (const res2_ptr& s : sc) {
0086 if (res2Sel->accept(*s))
0087 sCollectSel.push_back(s);
0088 }
0089 brb.add(sName, sCollectSel);
0090 } else
0091 brb.add(sName, *this->sCollection);
0092 }
0093
0094 private:
0095 std::vector<res2_ptr> sCollectSel;
0096 };
0097
0098 #endif