Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:05:39

0001 /*
0002  *  See header file for a description of this class.
0003  *
0004  *  \author Paolo Ronchese INFN Padova
0005  *
0006  */
0007 
0008 //-----------------------
0009 // This Class' Header --
0010 //-----------------------
0011 #include "HeavyFlavorAnalysis/SpecificDecay/interface/BPHDecayToV0DiffMassBuilder.h"
0012 
0013 //-------------------------------
0014 // Collaborating Class Headers --
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 // C++ Headers --
0024 //---------------
0025 #include <cmath>
0026 using namespace std;
0027 
0028 //-------------------
0029 // Initializations --
0030 //-------------------
0031 
0032 //----------------
0033 // Constructors --
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 // Operations --
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   // check daughter masses in V0 CompositeCandidate
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   // choose combination having the best invariant mass
0151   return (fabs(mv0 - cptrX->mass()) < fabs(mv0 - cptrY->mass()) ? candX : candY);
0152 }