File indexing completed on 2023-03-17 11:05:39
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayToV0DiffMassBuilder.h"
0012
0013
0014
0015
0016 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayGenericBuilderBase.h"
0017 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayToTkpTknSymChargeBuilder.h"
0018 #include "HeavyFlavorAnalysis/RecoDecay/interface/BPHRecoBuilder.h"
0019 #include "HeavyFlavorAnalysis/RecoDecay/interface/BPHPlusMinusCandidate.h"
0020 #include "DataFormats/Candidate/interface/Candidate.h"
0021
0022
0023
0024
0025 #include <cmath>
0026 using namespace std;
0027
0028
0029
0030
0031
0032
0033
0034
0035 BPHDecayToV0DiffMassBuilder::BPHDecayToV0DiffMassBuilder(const BPHEventSetupWrapper& es,
0036 const string& daug1Name,
0037 double daug1Mass,
0038 double daug1Sigma,
0039 const string& daug2Name,
0040 double daug2Mass,
0041 double daug2Sigma,
0042 const BPHRecoBuilder::BPHGenericCollection* daug1Collection,
0043 const BPHRecoBuilder::BPHGenericCollection* daug2Collection,
0044 double expectedMass)
0045 : BPHDecayGenericBuilderBase(es),
0046 BPHDecayToV0Builder(es, daug1Name, daug2Name, daug1Collection, daug2Collection),
0047 BPHDecayToTkpTknSymChargeBuilder(es,
0048 daug1Name,
0049 daug1Mass,
0050 daug1Sigma,
0051 daug2Name,
0052 daug2Mass,
0053 daug2Sigma,
0054 daug1Collection,
0055 daug2Collection,
0056 expectedMass),
0057 p1Mass(daug1Mass),
0058 p2Mass(daug2Mass),
0059 p1Sigma(daug1Sigma),
0060 p2Sigma(daug2Sigma),
0061 expMass(expectedMass) {}
0062
0063 BPHDecayToV0DiffMassBuilder::BPHDecayToV0DiffMassBuilder(const BPHEventSetupWrapper& es,
0064 const string& daug1Name,
0065 double daug1Mass,
0066 double daug1Sigma,
0067 const string& daug2Name,
0068 double daug2Mass,
0069 double daug2Sigma,
0070 const vector<reco::VertexCompositeCandidate>* v0Collection,
0071 double expectedMass,
0072 const string& searchList)
0073 : BPHDecayGenericBuilderBase(es),
0074 BPHDecayToV0Builder(es, daug1Name, daug2Name, v0Collection, searchList),
0075 BPHDecayToTkpTknSymChargeBuilder(
0076 es, daug1Name, daug1Mass, daug1Sigma, daug2Name, daug2Mass, daug2Sigma, nullptr, nullptr, expectedMass),
0077 p1Mass(daug1Mass),
0078 p2Mass(daug2Mass),
0079 p1Sigma(daug1Sigma),
0080 p2Sigma(daug2Sigma),
0081 expMass(expectedMass) {}
0082
0083 BPHDecayToV0DiffMassBuilder::BPHDecayToV0DiffMassBuilder(const BPHEventSetupWrapper& es,
0084 const string& daug1Name,
0085 double daug1Mass,
0086 double daug1Sigma,
0087 const string& daug2Name,
0088 double daug2Mass,
0089 double daug2Sigma,
0090 const vector<reco::VertexCompositePtrCandidate>* vpCollection,
0091 double expectedMass,
0092 const string& searchList)
0093 : BPHDecayGenericBuilderBase(es),
0094 BPHDecayToV0Builder(es, daug1Name, daug2Name, vpCollection, searchList),
0095 BPHDecayToTkpTknSymChargeBuilder(
0096 es, daug1Name, daug1Mass, daug1Sigma, daug2Name, daug2Mass, daug2Sigma, nullptr, nullptr, expectedMass),
0097 p1Mass(daug1Mass),
0098 p2Mass(daug2Mass),
0099 p1Sigma(daug1Sigma),
0100 p2Sigma(daug2Sigma),
0101 expMass(expectedMass) {}
0102
0103
0104
0105
0106 void BPHDecayToV0DiffMassBuilder::buildFromBPHGenericCollection() {
0107 BPHDecayToTkpTknSymChargeBuilder::build();
0108 return;
0109 }
0110
0111 BPHPlusMinusCandidatePtr BPHDecayToV0DiffMassBuilder::buildCandidate(const reco::Candidate* c1,
0112 const reco::Candidate* c2,
0113 const void* v0,
0114 v0Type type) {
0115 BPHPlusMinusCandidatePtr candX = BPHPlusMinusCandidateWrap::create(evSetup);
0116 BPHPlusMinusCandidatePtr candY = BPHPlusMinusCandidateWrap::create(evSetup);
0117 BPHPlusMinusCandidate* cptrX = candX.get();
0118 BPHPlusMinusCandidate* cptrY = candY.get();
0119 cptrX->add(p1Name, c1, sList, p1Mass, p1Sigma);
0120 cptrX->add(p2Name, c2, sList, p2Mass, p2Sigma);
0121 cptrY->add(p1Name, c2, sList, p1Mass, p1Sigma);
0122 cptrY->add(p2Name, c1, sList, p2Mass, p2Sigma);
0123 double mv0 = 0.0;
0124 switch (type) {
0125 case VertexCompositeCandidate:
0126 mv0 = static_cast<const reco::VertexCompositeCandidate*>(v0)->mass();
0127 break;
0128 case VertexCompositePtrCandidate:
0129 mv0 = static_cast<const reco::VertexCompositePtrCandidate*>(v0)->mass();
0130 break;
0131 default:
0132 mv0 = expMass;
0133 break;
0134 }
0135 double m1 = 0.0;
0136 double m2 = 0.0;
0137 if (p1Mass > p2Mass) {
0138 m1 = c1->mass();
0139 m2 = c2->mass();
0140 } else {
0141 m1 = c2->mass();
0142 m2 = c1->mass();
0143 }
0144
0145 double mcut = (p1Mass + p2Mass) / 2;
0146 if ((m1 > mcut) && (m2 < mcut))
0147 return candX;
0148 if ((m1 < mcut) && (m2 > mcut))
0149 return candY;
0150
0151 return (fabs(mv0 - cptrX->mass()) < fabs(mv0 - cptrY->mass()) ? candX : candY);
0152 }