Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:15:38

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/BPHDecayToV0Builder.h"
0012 
0013 //-------------------------------
0014 // Collaborating Class Headers --
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 // C++ Headers --
0025 //---------------
0026 #include <cmath>
0027 using namespace std;
0028 
0029 //-------------------
0030 // Initializations --
0031 //-------------------
0032 
0033 //----------------
0034 // Constructors --
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 // Destructor --
0080 //--------------
0081 BPHDecayToV0Builder::~BPHDecayToV0Builder() { v0Clear(); }
0082 
0083 //--------------
0084 // Operations --
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   // cycle over V0 collection
0106   for (iv0 = 0; iv0 < nv0; ++iv0) {
0107     const typename T::value_type& v0 = v0Collection->at(iv0);
0108 
0109     // every reco::VertexCompositeCandidate must have exactly two daughters
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     // filters
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 }