File indexing completed on 2024-04-06 12:15:38
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayToV0Builder.h"
0012
0013
0014
0015
0016 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayGenericBuilderBase.h"
0017 #include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoBuilder.h"
0018 #include "HeavyFlavorAnalysis/RecoDecay/interface/BPHPlusMinusCandidate.h"
0019 #include "DataFormats/Candidate/interface/Candidate.h"
0020
0021 #include "DataFormats/Candidate/interface/VertexCompositeCandidate.h"
0022
0023
0024
0025
0026 #include <cmath>
0027 using namespace std;
0028
0029
0030
0031
0032
0033
0034
0035
0036 BPHDecayToV0Builder::BPHDecayToV0Builder(const BPHEventSetupWrapper& es,
0037 const string& d1Name,
0038 const string& d2Name,
0039 const BPHRecoBuilder::BPHGenericCollection* d1Collection,
0040 const BPHRecoBuilder::BPHGenericCollection* d2Collection)
0041 : BPHDecayGenericBuilderBase(es),
0042 p1Name(d1Name),
0043 p2Name(d2Name),
0044 p1Collection(d1Collection),
0045 p2Collection(d2Collection),
0046 vCollection(nullptr),
0047 rCollection(nullptr),
0048 sList("") {}
0049
0050 BPHDecayToV0Builder::BPHDecayToV0Builder(const BPHEventSetupWrapper& es,
0051 const string& d1Name,
0052 const string& d2Name,
0053 const vector<reco::VertexCompositeCandidate>* v0Collection,
0054 const string& searchList)
0055 : BPHDecayGenericBuilderBase(es),
0056 p1Name(d1Name),
0057 p2Name(d2Name),
0058 p1Collection(nullptr),
0059 p2Collection(nullptr),
0060 vCollection(v0Collection),
0061 rCollection(nullptr),
0062 sList(searchList) {}
0063
0064 BPHDecayToV0Builder::BPHDecayToV0Builder(const BPHEventSetupWrapper& es,
0065 const string& d1Name,
0066 const string& d2Name,
0067 const vector<reco::VertexCompositePtrCandidate>* vpCollection,
0068 const string& searchList)
0069 : BPHDecayGenericBuilderBase(es),
0070 p1Name(d1Name),
0071 p2Name(d2Name),
0072 p1Collection(nullptr),
0073 p2Collection(nullptr),
0074 vCollection(nullptr),
0075 rCollection(vpCollection),
0076 sList(searchList) {}
0077
0078
0079
0080
0081 BPHDecayToV0Builder::~BPHDecayToV0Builder() { v0Clear(); }
0082
0083
0084
0085
0086 void BPHDecayToV0Builder::fillRecList() {
0087 v0Clear();
0088
0089 if ((p1Collection != nullptr) && (p2Collection != nullptr))
0090 buildFromBPHGenericCollection();
0091 else if (vCollection != nullptr)
0092 buildFromV0(vCollection, VertexCompositeCandidate);
0093 else if (rCollection != nullptr)
0094 buildFromV0(rCollection, VertexCompositePtrCandidate);
0095
0096 return;
0097 }
0098
0099 template <class T>
0100 void BPHDecayToV0Builder::buildFromV0(const T* v0Collection, v0Type type) {
0101 int iv0;
0102 int nv0 = v0Collection->size();
0103 recList.reserve(nv0);
0104
0105
0106 for (iv0 = 0; iv0 < nv0; ++iv0) {
0107 const typename T::value_type& v0 = v0Collection->at(iv0);
0108
0109
0110 if (v0.numberOfDaughters() != 2)
0111 continue;
0112 const reco::Candidate* dr = v0.daughter(0);
0113 const reco::Candidate* dl = v0.daughter(1);
0114
0115
0116 BPHPlusMinusCandidatePtr cand = buildCandidate(dr, dl, &v0, type);
0117 if (cand.get() == nullptr)
0118 continue;
0119 BPHPlusMinusCandidate* cptr = cand.get();
0120 if (cand->daughters().size() != 2)
0121 continue;
0122 if (!massSel->accept(*cand))
0123 continue;
0124 if ((chi2Sel != nullptr) && (!chi2Sel->accept(*cand)))
0125 continue;
0126
0127 recList.push_back(cand);
0128 V0Info* info = new V0Info;
0129 info->type = type;
0130 info->v0 = &v0;
0131 v0Map[cptr] = info;
0132 }
0133
0134 return;
0135 }
0136
0137 void BPHDecayToV0Builder::v0Clear() {
0138 map<const BPHRecoCandidate*, const V0Info*>::iterator iter = v0Map.begin();
0139 map<const BPHRecoCandidate*, const V0Info*>::iterator iend = v0Map.end();
0140 while (iter != iend)
0141 delete iter++->second;
0142 return;
0143 }