55 #define SET_PAR(TYPE, NAME, PSET) (NAME = PSET.getParameter<TYPE>(#NAME)) 63 useCC = (!
SET_PAR(
string, ccCandsLabel, ps).empty());
65 usePC = (!
SET_PAR(
string, pcCandsLabel, ps).empty());
66 useGP = (!
SET_PAR(
string, gpCandsLabel, ps).empty());
69 useKS = (!
SET_PAR(
string, kSCandsLabel, ps).empty());
70 useLS = (!
SET_PAR(
string, lSCandsLabel, ps).empty());
90 rMap[
"PhiMuMu"] = Pmm;
104 rMap[
"Lambda0"] = Lambda0;
106 rMap[
"Lambdab"] = Lambdab;
108 rMap[
"Psi2S"] = Psi2S;
109 rMap[
"X3872"] = X3872;
111 pMap[
"ptMin"] =
ptMin;
113 pMap[
"mJPsiMin"] = mPsiMin;
114 pMap[
"mJPsiMax"] = mPsiMax;
126 pMap[
"massFitMin"] = mFitMin;
127 pMap[
"massFitMax"] = mFitMax;
135 fMap[
"writeCandidate"] = writeCandidate;
137 recoOnia = recoKx0 = writeKx0 = recoPkk = writePkk = recoBu = writeBu = recoBp = writeBp = recoBd = writeBd = recoBs =
138 writeBs = recoK0s = writeK0s = recoLambda0 = writeLambda0 = recoB0 = writeB0 = recoLambdab = writeLambdab =
139 recoBc = writeBc = recoPsi2S = writePsi2S = recoX3872 = writeX3872 =
false;
145 for (iSel = 0; iSel < nSel; ++iSel)
153 recoOnia = recoKx0 =
true;
155 recoOnia = recoPkk =
true;
157 recoOnia = recoK0s =
true;
159 recoOnia = recoLambda0 =
true;
169 writeOnia = writeKx0 =
true;
171 writeOnia = writePkk =
true;
173 writeOnia = writeK0s =
true;
175 writeOnia = writeLambda0 =
true;
182 if (recoBp && !recoPsi2S && !recoX3872)
184 if (writeBp && !writePsi2S && !writeX3872)
191 esConsume<MagneticField, IdealMagneticFieldRecord>(magFieldToken);
192 esConsume<TransientTrackBuilder, TransientTrackRecord>(ttBToken,
"TransientTrackBuilder");
194 consume<vector<reco::Vertex> >(pVertexToken,
pVertexLabel);
196 consume<pat::MuonCollection>(patMuonToken,
patMuonLabel);
198 consume<vector<pat::CompositeCandidate> >(ccCandsToken, ccCandsLabel);
200 consume<vector<reco::PFCandidate> >(pfCandsToken,
pfCandsLabel);
202 consume<vector<BPHTrackReference::candidate> >(pcCandsToken, pcCandsLabel);
204 consume<vector<pat::GenericParticle> >(gpCandsToken, gpCandsLabel);
206 consume<vector<reco::VertexCompositeCandidate> >(k0CandsToken,
k0CandsLabel);
208 consume<vector<reco::VertexCompositeCandidate> >(l0CandsToken,
l0CandsLabel);
210 consume<vector<reco::VertexCompositePtrCandidate> >(kSCandsToken, kSCandsLabel);
212 consume<vector<reco::VertexCompositePtrCandidate> >(lSCandsToken, lSCandsLabel);
215 produces<pat::CompositeCandidateCollection>(
oniaName);
217 produces<pat::CompositeCandidateCollection>(
sdName);
219 produces<pat::CompositeCandidateCollection>(
ssName);
221 produces<pat::CompositeCandidateCollection>(
buName);
223 produces<pat::CompositeCandidateCollection>(
bpName);
225 produces<pat::CompositeCandidateCollection>(
bdName);
227 produces<pat::CompositeCandidateCollection>(
bsName);
229 produces<pat::CompositeCandidateCollection>(
k0Name);
231 produces<pat::CompositeCandidateCollection>(
l0Name);
233 produces<pat::CompositeCandidateCollection>(
b0Name);
235 produces<pat::CompositeCandidateCollection>(
lbName);
237 produces<pat::CompositeCandidateCollection>(
bcName);
239 produces<pat::CompositeCandidateCollection>(
psi2SName);
241 produces<pat::CompositeCandidateCollection>(x3872Name);
246 desc.add<
string>(
"pVertexLabel",
"");
247 desc.add<
string>(
"patMuonLabel",
"");
248 desc.add<
string>(
"ccCandsLabel",
"");
249 desc.add<
string>(
"pfCandsLabel",
"");
250 desc.add<
string>(
"pcCandsLabel",
"");
251 desc.add<
string>(
"gpCandsLabel",
"");
252 desc.add<
string>(
"k0CandsLabel",
"");
253 desc.add<
string>(
"l0CandsLabel",
"");
254 desc.add<
string>(
"kSCandsLabel",
"");
255 desc.add<
string>(
"lSCandsLabel",
"");
256 desc.add<
string>(
"oniaName",
"oniaCand");
257 desc.add<
string>(
"sdName",
"kx0Cand");
258 desc.add<
string>(
"ssName",
"phiCand");
259 desc.add<
string>(
"buName",
"buFitted");
260 desc.add<
string>(
"bpName",
"bpFitted");
261 desc.add<
string>(
"bdName",
"bdFitted");
262 desc.add<
string>(
"bsName",
"bsFitted");
263 desc.add<
string>(
"k0Name",
"k0Fitted");
264 desc.add<
string>(
"l0Name",
"l0Fitted");
265 desc.add<
string>(
"b0Name",
"b0Fitted");
266 desc.add<
string>(
"lbName",
"lbFitted");
267 desc.add<
string>(
"bcName",
"bcFitted");
268 desc.add<
string>(
"psi2SName",
"psi2SFitted");
269 desc.add<
string>(
"x3872Name",
"x3872Fitted");
270 desc.add<
bool>(
"writeVertex",
true);
271 desc.add<
bool>(
"writeMomentum",
true);
273 dpar.
add<
string>(
"name");
274 dpar.add<
double>(
"ptMin", -2.0e35);
275 dpar.add<
double>(
"etaMax", -2.0e35);
276 dpar.add<
double>(
"mJPsiMin", -2.0e35);
277 dpar.add<
double>(
"mJPsiMax", -2.0e35);
278 dpar.add<
double>(
"mKx0Min", -2.0e35);
279 dpar.add<
double>(
"mKx0Max", -2.0e35);
280 dpar.add<
double>(
"mPhiMin", -2.0e35);
281 dpar.add<
double>(
"mPhiMax", -2.0e35);
282 dpar.add<
double>(
"mK0sMin", -2.0e35);
283 dpar.add<
double>(
"mK0sMax", -2.0e35);
284 dpar.add<
double>(
"mLambda0Min", -2.0e35);
285 dpar.add<
double>(
"mLambda0Max", -2.0e35);
286 dpar.add<
double>(
"massMin", -2.0e35);
287 dpar.add<
double>(
"massMax", -2.0e35);
288 dpar.add<
double>(
"probMin", -2.0e35);
289 dpar.add<
double>(
"massFitMin", -2.0e35);
290 dpar.add<
double>(
"massFitMax", -2.0e35);
291 dpar.add<
double>(
"constrMass", -2.0e35);
292 dpar.add<
double>(
"constrSigma", -2.0e35);
293 dpar.add<
bool>(
"requireJPsi",
true);
294 dpar.add<
bool>(
"constrMJPsi",
true);
295 dpar.add<
bool>(
"constrMPsi2",
true);
296 dpar.add<
bool>(
"writeCandidate",
true);
297 vector<edm::ParameterSet> rpar;
298 desc.addVPSet(
"recoSelect", dpar, rpar);
299 descriptions.
add(
"bphWriteSpecificDecay",
desc);
369 pVertexToken.get(
ev, pVertices);
370 int npv = pVertices->size();
377 pfCandsToken.get(
ev, pfCands);
378 nrc = pfCands->size();
387 pcCandsToken.get(
ev, pcCands);
388 nrc = pcCands->size();
394 gpCandsToken.get(
ev, gpCands);
395 nrc = gpCands->size();
401 patMuonToken.get(
ev, patMuon);
407 k0CandsToken.get(
ev, k0Cand);
413 l0CandsToken.get(
ev, l0Cand);
419 kSCandsToken.get(
ev, kSCand);
425 lSCandsToken.get(
ev, lSCand);
430 vector<const reco::Candidate*> muDaugs;
431 set<const pat::Muon*> muonSet;
432 typedef multimap<const reco::Candidate*, const pat::CompositeCandidate*> mu_cc_map;
436 ccCandsToken.get(
ev, ccCands);
437 int n = ccCands->size();
441 set<const pat::Muon*>::const_iterator iter;
442 set<const pat::Muon*>::const_iterator iend;
444 for (
i = 0;
i <
n; ++
i) {
447 int m =
cc.numberOfDaughters();
448 for (
j = 0;
j <
m; ++
j) {
451 iter = muonSet.
begin();
452 iend = muonSet.end();
453 bool add = (mp !=
nullptr) && (muonSet.find(mp) == iend);
454 while (
add && (iter != iend)) {
461 muCCMap.insert(pair<const reco::Candidate*, const pat::CompositeCandidate*>(
dp, &
cc));
464 iter = muonSet.begin();
465 iend = muonSet.end();
467 muDaugs.push_back(*iter++);
470 map<recoType, map<parType, double> >::const_iterator rIter = parMap.begin();
471 map<recoType, map<parType, double> >::const_iterator rIend = parMap.end();
485 if (onia !=
nullptr) {
486 while (rIter != rIend) {
487 const map<recoType, map<parType, double> >
::value_type& rEntry = *rIter++;
489 const map<parType, double>& pMap = rEntry.second;
516 map<parType, double>::const_iterator pIter = pMap.begin();
517 map<parType, double>::const_iterator pIend = pMap.end();
518 while (pIter != pIend) {
521 double pv = pEntry.second;
549 lFull = onia->
build();
555 int nFull = lFull.size();
556 map<const BPHRecoCandidate*, const reco::Vertex*> oniaVtxMap;
558 typedef mu_cc_map::const_iterator mu_cc_iter;
559 for (iFull = 0; iFull < nFull; ++iFull) {
563 const std::vector<const reco::Candidate*>& daugs = ptr->
daughters();
567 pair<mu_cc_iter, mu_cc_iter> cc0 = muCCMap.equal_range(ptr->
originalReco(daugs[0]));
568 pair<mu_cc_iter, mu_cc_iter> cc1 = muCCMap.equal_range(ptr->
originalReco(daugs[1]));
569 mu_cc_iter iter0 = cc0.first;
570 mu_cc_iter iend0 = cc0.second;
571 mu_cc_iter iter1 = cc1.first;
572 mu_cc_iter iend1 = cc1.second;
573 while ((iter0 != iend0) && (pVtx ==
nullptr)) {
575 while (iter1 != iend1) {
576 if (ccp != iter1++->
second)
581 float dMin = 999999.;
583 for (ipv = 0; ipv < npv; ++ipv) {
586 float dist =
pow(pPos.x() - tPos.x(), 2) +
pow(pPos.y() - tPos.y(), 2) +
pow(pPos.z() - tPos.z(), 2);
600 if (pVtx ==
nullptr) {
610 float minDz = 999999.;
611 float extrapZ = (
state ? ttmd.
points().first.z() : -9e20);
613 for (ipv = 0; ipv < npv; ++ipv) {
624 oniaVtxMap[ptr] = pVtx;
627 pVertexToken.get(
ev, pVertices);
634 bool jPsiFound = !lJPsi.empty();
642 int nj = lJPsi.size();
643 int no = lFull.size();
644 for (ij = 0; ij < nj; ++ij) {
646 for (io = 0; io < no; ++io) {
659 if (recoBu && jPsiFound) {
669 rIter = parMap.find(Bu);
670 if (rIter != rIend) {
671 const map<parType, double>& pMap = rIter->second;
672 map<parType, double>::const_iterator pIter = pMap.begin();
673 map<parType, double>::const_iterator pIend = pMap.end();
674 while (pIter != pIend) {
677 double pv = pEntry.second;
723 vector<BPHPlusMinusConstCandPtr> lKx0;
725 if (recoKx0 && (jPsiFound || allKx0)) {
737 set<BPHRecoConstCandPtr> sKx0;
739 if (kx0 !=
nullptr) {
740 rIter = parMap.find(Kx0);
741 if (rIter != rIend) {
742 const map<parType, double>& pMap = rIter->second;
743 map<parType, double>::const_iterator pIter = pMap.begin();
744 map<parType, double>::const_iterator pIend = pMap.end();
745 while (pIter != pIend) {
748 double pv = pEntry.second;
775 sKx0.insert(lKx0.begin(), lKx0.end());
779 bool kx0Found = !lKx0.empty();
783 if (recoBd && jPsiFound && kx0Found) {
785 rIter = parMap.find(Bd);
786 if (rIter != rIend) {
787 const map<parType, double>& pMap = rIter->second;
788 map<parType, double>::const_iterator pIter = pMap.begin();
789 map<parType, double>::const_iterator pIend = pMap.end();
790 while (pIter != pIend) {
793 double pv = pEntry.second;
796 bd->setJPsiMassMin(
pv);
799 bd->setJPsiMassMax(
pv);
802 bd->setKxMassMin(
pv);
805 bd->setKxMassMax(
pv);
817 bd->setMassFitMin(
pv);
820 bd->setMassFitMax(
pv);
823 bd->setConstr(
pv > 0);
838 int nBd = lBd.size();
839 for (iBd = 0; iBd < nBd; ++iBd)
840 sKx0.insert(lBd[iBd]->getComp(
"Kx0"));
842 set<BPHRecoConstCandPtr>::const_iterator kx0_iter = sKx0.begin();
843 set<BPHRecoConstCandPtr>::const_iterator kx0_iend = sKx0.end();
844 lSd.reserve(sKx0.size());
845 while (kx0_iter != kx0_iend)
846 lSd.push_back(*kx0_iter++);
850 vector<BPHPlusMinusConstCandPtr> lPhi;
852 if (recoPkk && (jPsiFound || allPkk)) {
864 set<BPHRecoConstCandPtr> sPhi;
866 if (phi !=
nullptr) {
867 rIter = parMap.find(Pkk);
868 if (rIter != rIend) {
869 const map<parType, double>& pMap = rIter->second;
870 map<parType, double>::const_iterator pIter = pMap.begin();
871 map<parType, double>::const_iterator pIend = pMap.end();
872 while (pIter != pIend) {
875 double pv = pEntry.second;
902 sPhi.insert(lPhi.begin(), lPhi.end());
906 bool phiFound = !lPhi.empty();
910 if (recoBs && jPsiFound && phiFound) {
912 rIter = parMap.find(Bs);
913 if (rIter != rIend) {
914 const map<parType, double>& pMap = rIter->second;
915 map<parType, double>::const_iterator pIter = pMap.begin();
916 map<parType, double>::const_iterator pIend = pMap.end();
917 while (pIter != pIend) {
920 double pv = pEntry.second;
923 bs->setJPsiMassMin(
pv);
926 bs->setJPsiMassMax(
pv);
929 bs->setPhiMassMin(
pv);
932 bs->setPhiMassMax(
pv);
944 bs->setMassFitMin(
pv);
947 bs->setMassFitMax(
pv);
950 bs->setConstr(
pv > 0);
965 int nBs = lBs.size();
966 for (iBs = 0; iBs < nBs; ++iBs)
967 sPhi.insert(lBs[iBs]->getComp(
"Phi"));
969 set<BPHRecoConstCandPtr>::const_iterator phi_iter = sPhi.begin();
970 set<BPHRecoConstCandPtr>::const_iterator phi_iend = sPhi.end();
971 lSs.reserve(sPhi.size());
972 while (phi_iter != phi_iend)
973 lSs.push_back(*phi_iter++);
978 if (recoK0s && (jPsiFound || allK0s)) {
984 if (k0s !=
nullptr) {
985 rIter = parMap.find(K0s);
986 if (rIter != rIend) {
987 const map<parType, double>& pMap = rIter->second;
988 map<parType, double>::const_iterator pIter = pMap.begin();
989 map<parType, double>::const_iterator pIend = pMap.end();
990 while (pIter != pIend) {
993 double pv = pEntry.second;
1010 case writeCandidate:
1011 writeK0s = (
pv > 0);
1022 bool k0Found = !lK0.empty();
1027 if (recoLambda0 && (jPsiFound || allLambda0)) {
1033 if (l0s !=
nullptr) {
1034 rIter = parMap.find(Lambda0);
1035 if (rIter != rIend) {
1036 const map<parType, double>& pMap = rIter->second;
1037 map<parType, double>::const_iterator pIter = pMap.begin();
1038 map<parType, double>::const_iterator pIend = pMap.end();
1039 while (pIter != pIend) {
1042 double pv = pEntry.second;
1059 case writeCandidate:
1060 writeLambda0 = (
pv > 0);
1071 bool l0Found = !lL0.empty();
1075 if (recoB0 && jPsiFound && k0Found) {
1077 rIter = parMap.find(B0);
1078 if (rIter != rIend) {
1079 const map<parType, double>& pMap = rIter->second;
1080 map<parType, double>::const_iterator pIter = pMap.begin();
1081 map<parType, double>::const_iterator pIend = pMap.end();
1082 while (pIter != pIend) {
1085 double pv = pEntry.second;
1088 b0->setJPsiMassMin(
pv);
1091 b0->setJPsiMassMax(
pv);
1094 b0->setK0MassMin(
pv);
1097 b0->setK0MassMax(
pv);
1109 b0->setMassFitMin(
pv);
1112 b0->setMassFitMax(
pv);
1115 b0->setConstr(
pv > 0);
1117 case writeCandidate:
1127 const map<const BPHRecoCandidate*, const BPHRecoCandidate*>& b0Map =
b0->daughMap();
1128 daughMap.insert(b0Map.begin(), b0Map.end());
1134 if (recoLambdab && jPsiFound && l0Found) {
1136 rIter = parMap.find(Lambdab);
1137 if (rIter != rIend) {
1138 const map<parType, double>& pMap = rIter->second;
1139 map<parType, double>::const_iterator pIter = pMap.begin();
1140 map<parType, double>::const_iterator pIend = pMap.end();
1141 while (pIter != pIend) {
1144 double pv = pEntry.second;
1176 case writeCandidate:
1177 writeLambdab = (
pv > 0);
1186 const map<const BPHRecoCandidate*, const BPHRecoCandidate*>& ldMap = lb->
daughMap();
1187 daughMap.insert(ldMap.begin(), ldMap.end());
1194 if (recoBc && jPsiFound) {
1203 if (bc !=
nullptr) {
1204 rIter = parMap.find(Bc);
1205 if (rIter != rIend) {
1206 const map<parType, double>& pMap = rIter->second;
1207 map<parType, double>::const_iterator pIter = pMap.begin();
1208 map<parType, double>::const_iterator pIend = pMap.end();
1209 while (pIter != pIend) {
1212 double pv = pEntry.second;
1244 case writeCandidate:
1259 if (recoPsi2S && jPsiFound) {
1271 if (psi2S !=
nullptr) {
1272 rIter = parMap.find(Psi2S);
1273 if (rIter != rIend) {
1274 const map<parType, double>& pMap = rIter->second;
1275 map<parType, double>::const_iterator pIter = pMap.begin();
1276 map<parType, double>::const_iterator pIend = pMap.end();
1277 while (pIter != pIend) {
1280 double pv = pEntry.second;
1312 case writeCandidate:
1313 writePsi2S = (
pv > 0);
1320 lPsi2S = psi2S->
build();
1327 if (recoX3872 && jPsiFound) {
1339 if (x3872 !=
nullptr) {
1340 rIter = parMap.find(X3872);
1341 if (rIter != rIend) {
1342 const map<parType, double>& pMap = rIter->second;
1343 map<parType, double>::const_iterator pIter = pMap.begin();
1344 map<parType, double>::const_iterator pIend = pMap.end();
1345 while (pIter != pIend) {
1348 double pv = pEntry.second;
1380 case writeCandidate:
1381 writeX3872 = (
pv > 0);
1388 lX3872 = x3872->
build();
1393 class ResTrkTrkCompare {
1396 vector<const reco::Track*> tl =
l->tracks();
1397 vector<const reco::Track*> tr = r->tracks();
1398 if (tl.size() < tr.size())
1400 sort(tl.begin(), tl.end());
1401 sort(tr.begin(), tr.end());
1404 for (
i = 0;
i <
n; ++
i) {
1413 set<BPHRecoConstCandPtr, ResTrkTrkCompare> sjpPiPi(rttc);
1414 sjpPiPi.insert(lPsi2S.begin(), lPsi2S.end());
1415 sjpPiPi.insert(lX3872.begin(), lX3872.end());
1416 vector<BPHRecoConstCandPtr> ljpPiPi;
1417 ljpPiPi.insert(ljpPiPi.end(), sjpPiPi.begin(), sjpPiPi.end());
1418 bool jpPiPiFound = !ljpPiPi.empty();
1423 if (recoBp && jpPiPiFound) {
1432 if (bp !=
nullptr) {
1435 BPHBuToPsi2SSelect()
1437 ~BPHBuToPsi2SSelect()
override =
default;
1444 bool mcJPsi =
false;
1446 rIter = parMap.find(Bp);
1447 if (rIter != rIend) {
1448 const map<parType, double>& pMap = rIter->second;
1449 map<parType, double>::const_iterator pIter = pMap.begin();
1450 map<parType, double>::const_iterator pIend = pMap.end();
1451 while (pIter != pIend) {
1454 double pv = pEntry.second;
1489 case writeCandidate:
1507 const map<const BPHRecoCandidate*, const BPHRecoCandidate*>& bpMap = bp->
daughMap();
1508 daughMap.insert(bpMap.begin(), bpMap.end());
1517 bool writeCandidate = ps.
getParameter<
bool>(
"writeCandidate");
1518 switch (rMap[
name]) {
1521 writeOnia = writeCandidate;
1535 writeKx0 = writeCandidate;
1540 writePkk = writeCandidate;
1544 writeBu = writeCandidate;
1548 writeBp = writeCandidate;
1552 writeBd = writeCandidate;
1556 writeBs = writeCandidate;
1561 writeK0s = writeCandidate;
1566 writeLambda0 = writeCandidate;
1570 writeB0 = writeCandidate;
1574 writeLambdab = writeCandidate;
1578 writeBc = writeCandidate;
1582 writePsi2S = writeCandidate;
1586 writeX3872 = writeCandidate;
1590 map<string, parType>::const_iterator pIter = pMap.begin();
1591 map<string, parType>::const_iterator pIend = pMap.end();
1592 while (pIter != pIend) {
1594 const string& pn =
entry.first;
1598 edm::LogVerbatim(
"Configuration") <<
"BPHWriteSpecificDecay::setRecoParameters: set " << pn <<
" for " <<
name 1599 <<
" : " << (parMap[rMap[
name]][
id] =
pv);
1602 map<string, parType>::const_iterator fIter = fMap.begin();
1603 map<string, parType>::const_iterator fIend = fMap.end();
1604 while (fIter != fIend) {
1606 const string&
fn =
entry.first;
1610 edm::LogVerbatim(
"Configuration") <<
"BPHWriteSpecificDecay::setRecoParameters: set " <<
fn <<
" for " <<
name 1611 <<
" : " << (parMap[rMap[
name]][
id] =
pv);
virtual const reco::Candidate * originalReco(const reco::Candidate *daug) const
get the original particle from the clone
Analysis-level particle class.
Log< level::Info, true > LogVerbatim
static bool sameTrack(const reco::Candidate *lCand, const reco::Candidate *rCand, double minPDifference)
T getParameter(std::string const &) const
void setEtaMax(double eta)
void setMassMax(oniaType type, double m)
void setConstr(bool flag)
BPHGenericPtr< const BPHRecoCandidate >::type BPHRecoConstCandPtr
static const double jPsiMWidth
const Point & position() const
position
uint32_t cc[maxCellsPerHit]
void setJPsiMassMin(double m)
T const * product() const
void setKPtMin(double pt)
set cuts
void setKEtaMax(double eta)
virtual std::vector< prod_ptr > build()
build candidates
static const double jPsiMass
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
#define SET_PAR(TYPE, NAME, PSET)
const pat::CompositeCandidate & composite() const override
get a composite by the simple sum of simple particles
void setLambda0MassMin(double m)
void setJPsiMassMax(double m)
void setProbMin(oniaType type, double p)
bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb) override
void setMassFitSelect(BPHMassFitSelect *mfs)
static BPHGenericCollection * createCollection(const edm::Handle< T > &collection, const std::string &list="cfhpmig")
U second(std::pair< T, U > const &p)
deep_tau::DeepTauBase::BasicDiscriminator bd
double getConstrSigma(oniaType type) const
virtual const reco::Candidate * getDaug(const std::string &name) const
Container::value_type value_type
BPHWriteSpecificDecay(const edm::ParameterSet &ps)
std::vector< BPHPlusMinusConstCandPtr > getList(oniaType type, BPHRecoSelect *dSel=nullptr, BPHMomentumSelect *mSel=nullptr, BPHVertexSelect *vSel=nullptr, BPHFitSelect *kSel=nullptr)
void setProbMin(double p)
void setEtaMax(double eta)
void setEtaMax(double eta)
void setMassMax(double m)
void setJPsiMassMin(double m)
set cuts
math::XYZPoint Point
point in the space
#define DEFINE_FWK_MODULE(type)
std::pair< GlobalPoint, GlobalPoint > points() const override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void setMassFitMin(double m)
double getConstrMass(oniaType type) const
const T * userData(const std::string &key) const
Returns user-defined data. Returns NULL if the data is not present, or not of type T...
virtual const reco::Vertex & vertex(VertexFitter< 5 > *fitter=nullptr, const reco::BeamSpot *bs=nullptr, const GlobalPoint *priorPos=nullptr, const GlobalError *priorError=nullptr) const
get reconstructed vertex
void setPsi2SMassMax(double m)
double getMassFitMax() const
void setLambda0MassMax(double m)
void setKEtaMax(double eta)
static const double psi2Mass
virtual void fill(edm::Event &ev, const BPHEventSetupWrapper &es)
void setMassFitMax(double m)
void setPiEtaMax(double eta)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void setPiPtMin(double pt)
set cuts
void add(std::map< std::string, TH1 *> &h, TH1 *hist)
const edm::EventSetup * get() const
void setJPsiMassMin(double m)
void setConstr(oniaType type, double mass, double sigma)
void setEtaMax(oniaType type, double eta)
void setPtMin(double pt)
set cuts
double getMassFitMin() const
void setMassMin(double m)
set cuts
virtual const std::vector< const reco::Candidate * > & daughters() const
const std::map< const BPHRecoCandidate *, const BPHRecoCandidate * > & daughMap() const
get original daughters map
static constexpr float b0
void setKPtMin(double pt)
set cuts
void setMassMin(oniaType type, double m)
void setPiEtaMax(double eta)
const std::map< const BPHRecoCandidate *, const BPHRecoCandidate * > & daughMap() const
get original daughters map
bool accept(const BPHKinematicFit &cand) const override
select particle
void setJPsiMassMin(double m)
void produce(edm::Event &ev, const edm::EventSetup &es) override
static void addTrackModes(const std::string &name, const BPHRecoCandidate &cand, std::string &modes, bool &count)
Analysis-level muon class.
void setRecoParameters(const edm::ParameterSet &ps)
void setJPsiMassMax(double m)
void setPsi2SMassMin(double m)
Power< A, B >::type pow(const A &a, const B &b)
static const double psi2MWidth
void setPtMin(oniaType type, double pt)
set cuts
void setJPsiMassMax(double m)
void setJPsiMassMax(double m)
void setPtMin(double pt)
set cuts
const_iterator begin() const
first daughter const_iterator
void setPiPtMin(double pt)
set cuts