@@ -384,17 +384,15 @@ bool trackAcceptanceWithDca(T const& track, float trackDcaXYMax, float trackDcaZ
384384}
385385
386386/* *
387- * retrun acceptance of prong about chi2 and error of decay length due to cut for high quality secondary vertex
387+ * retrun acceptance of prong due to cut for high quality secondary vertex
388388 */
389389template <typename T>
390- bool prongAcceptance (T const & prong, float prongChi2PCAMin, float prongChi2PCAMax, float prongsigmaLxyMax, float prongIPxyMin, float prongIPxyMax, float prongDispersionMax, bool doXYZ)
390+ bool prongAcceptance (T const & prong, float prongChi2PCAMin, float prongChi2PCAMax, float prongsigmaLxyMax, float prongIPxyMin, float prongIPxyMax, bool doXYZ)
391391{
392392 if (prong.chi2PCA () < prongChi2PCAMin)
393393 return false ;
394394 if (prong.chi2PCA () > prongChi2PCAMax)
395395 return false ;
396- if (prong.dispersion () > prongDispersionMax)
397- return false ;
398396 if (!doXYZ) {
399397 if (prong.errorDecayLengthXY () > prongsigmaLxyMax)
400398 return false ;
@@ -414,6 +412,17 @@ bool prongAcceptance(T const& prong, float prongChi2PCAMin, float prongChi2PCAMa
414412 return true ;
415413}
416414
415+ /* *
416+ * retrun acceptance of secondary vertex due to cut for high quality secondary vertex
417+ */
418+ template <typename T>
419+ bool svAcceptance (T const & sv, float svDispersionMax)
420+ {
421+ if (sv.dispersion () > svDispersionMax)
422+ return false ;
423+ return true ;
424+ }
425+
417426/* *
418427 * return geometric sign which is calculated scalar product between jet axis with DCA (track propagated to PV )
419428 * positive and negative value are expected from primary vertex
@@ -569,166 +578,27 @@ float getJetProbability(T const& fResoFuncjet, U const& jet, V const& jtracks, f
569578}
570579
571580// For secaondy vertex method utilites
572- class bjetCandSV
573- {
574- public:
575- bjetCandSV () = default ;
576-
577- bjetCandSV (float xpv, float ypv, float zpv, float xsv, float ysv, float zsv,
578- float pxVal, float pyVal, float pzVal, float eVal, float mVal , float chi2Val,
579- float dispersion, float errDecayLength, float errDecayLengthXY,
580- float rSecVertex, float ptVal, float pVal,
581- std::array<float , 3 > pVec, float etaVal, float phiVal,
582- float yVal, float decayLen, float decayLenXY,
583- float decayLenNorm, float decayLenXYNorm,
584- float cpaVal, float impParXY)
585- : m_xPVertex(xpv), m_yPVertex(ypv), m_zPVertex(zpv), m_xSecondaryVertex(xsv), m_ySecondaryVertex(ysv), m_zSecondaryVertex(zsv), m_px(pxVal), m_py(pyVal), m_pz(pzVal), m_e(eVal), m_m(mVal ), m_chi2PCA(chi2Val), m_dispersion(dispersion), m_errorDecayLength(errDecayLength), m_errorDecayLengthXY(errDecayLengthXY), m_rSecondaryVertex(rSecVertex), m_pt(ptVal), m_p(pVal), m_pVector(pVec), m_eta(etaVal), m_phi(phiVal), m_y(yVal), m_decayLength(decayLen), m_decayLengthXY(decayLenXY), m_decayLengthNormalised(decayLenNorm), m_decayLengthXYNormalised(decayLenXYNorm), m_cpa(cpaVal), m_impactParameterXY(impParXY)
586- {
587- }
588-
589- float xPVertex () const { return m_xPVertex; }
590- float yPVertex () const { return m_yPVertex; }
591- float zPVertex () const { return m_zPVertex; }
592-
593- float xSecondaryVertex () const { return m_xSecondaryVertex; }
594- float ySecondaryVertex () const { return m_ySecondaryVertex; }
595- float zSecondaryVertex () const { return m_zSecondaryVertex; }
596-
597- float px () const { return m_px; }
598- float py () const { return m_py; }
599- float pz () const { return m_pz; }
600- float e () const { return m_e; }
601- float m () const { return m_m; }
602- float chi2PCA () const { return m_chi2PCA; }
603- float dispersion () const { return m_dispersion; }
604-
605- float errorDecayLength () const { return m_errorDecayLength; }
606- float errorDecayLengthXY () const { return m_errorDecayLengthXY; }
607-
608- float rSecondaryVertex () const { return m_rSecondaryVertex; }
609- float pt () const { return m_pt; }
610- float p () const { return m_p; }
611-
612- std::array<float , 3 > pVector () const { return m_pVector; }
613-
614- float eta () const { return m_eta; }
615- float phi () const { return m_phi; }
616- float y () const { return m_y; }
617-
618- float decayLength () const { return m_decayLength; }
619- float decayLengthXY () const { return m_decayLengthXY; }
620- float decayLengthNormalised () const { return m_decayLengthNormalised; }
621- float decayLengthXYNormalised () const { return m_decayLengthXYNormalised; }
622-
623- float cpa () const { return m_cpa; }
624- float impactParameterXY () const { return m_impactParameterXY; }
625-
626- private:
627- float m_xPVertex, m_yPVertex, m_zPVertex;
628- float m_xSecondaryVertex, m_ySecondaryVertex, m_zSecondaryVertex;
629- float m_px, m_py, m_pz, m_e, m_m, m_chi2PCA, m_dispersion;
630- float m_errorDecayLength, m_errorDecayLengthXY;
631- float m_rSecondaryVertex, m_pt, m_p;
632- std::array<float , 3 > m_pVector;
633- float m_eta, m_phi, m_y;
634- float m_decayLength, m_decayLengthXY, m_decayLengthNormalised, m_decayLengthXYNormalised;
635- float m_cpa, m_impactParameterXY;
636- };
637-
638581template <typename ProngType, typename JetType>
639- bjetCandSV jetFromProngMaxDecayLength (const JetType& jet, float const & prongChi2PCAMin, float const & prongChi2PCAMax, float const & prongsigmaLxyMax, float const & prongIPxyMin, float const & prongIPxyMax, const bool & doXYZ = false )
582+ typename ProngType::iterator jetFromProngMaxDecayLength (const JetType& jet, float const & prongChi2PCAMin, float const & prongChi2PCAMax, float const & prongsigmaLxyMax, float const & prongIPxyMin, float const & prongIPxyMax, const bool & doXYZ = false )
640583{
641- float xPVertex = 0 .0f ;
642- float yPVertex = 0 .0f ;
643- float zPVertex = 0 .0f ;
644- float xSecondaryVertex = 0 .0f ;
645- float ySecondaryVertex = 0 .0f ;
646- float zSecondaryVertex = 0 .0f ;
647- float px = 0 .0f ;
648- float py = 0 .0f ;
649- float pz = 0 .0f ;
650- float e = 0 .0f ;
651- float m = 0 .0f ;
652- float chi2PCA = 0 .0f ;
653- float dispersion = 0 .0f ;
654- float errorDecayLength = 0 .0f ;
655- float errorDecayLengthXY = 0 .0f ;
656-
657- float rSecondaryVertex = 0 .0f ;
658- float pt = 0 .0f ;
659- float p = 0 .0f ;
660- std::array<float , 3 > pVector = {0 .0f , 0 .0f , 0 .0f };
661- float eta = 0 .0f ;
662- float phi = 0 .0f ;
663- float y = 0 .0f ;
664- float decayLength = 0 .0f ;
665- float decayLengthXY = 0 .0f ;
666- float decayLengthNormalised = 0 .0f ;
667- float decayLengthXYNormalised = 0 .0f ;
668- float cpa = 0 .0f ;
669- float impactParameterXY = 0 .0f ;
670-
671584 float maxSxy = -1 .0f ;
672-
585+ typename ProngType::iterator bjetCand;
673586 for (const auto & prong : jet.template secondaryVertices_as <ProngType>()) {
674- float Sxy = -1 .;
675- if (!doXYZ) {
676- Sxy = prong.decayLengthXY () / prong.errorDecayLengthXY ();
677- } else {
678- Sxy = prong.decayLength () / prong.errorDecayLength ();
679- }
680-
587+ if (!prongAcceptance (prong, prongChi2PCAMin, prongChi2PCAMax, prongsigmaLxyMax, prongIPxyMin, prongIPxyMax, doXYZ))
588+ continue ;
589+ auto Sxy = prong.decayLengthXY () / prong.errorDecayLengthXY ();
681590 if (maxSxy < Sxy) {
682- maxSxy = Sxy;
683-
684- xPVertex = prong.xPVertex ();
685- yPVertex = prong.yPVertex ();
686- zPVertex = prong.zPVertex ();
687- xSecondaryVertex = prong.xSecondaryVertex ();
688- ySecondaryVertex = prong.ySecondaryVertex ();
689- zSecondaryVertex = prong.zSecondaryVertex ();
690- px = prong.px ();
691- py = prong.py ();
692- pz = prong.pz ();
693- e = prong.e ();
694- m = prong.m ();
695- chi2PCA = prong.chi2PCA ();
696- dispersion = prong.dispersion ();
697- errorDecayLength = prong.errorDecayLength ();
698- errorDecayLengthXY = prong.errorDecayLengthXY ();
699- rSecondaryVertex = prong.rSecondaryVertex ();
700- pt = prong.pt ();
701- p = prong.p ();
702- pVector = prong.pVector ();
703- eta = prong.eta ();
704- phi = prong.phi ();
705- y = prong.y ();
706- decayLength = prong.decayLength ();
707- decayLengthXY = prong.decayLengthXY ();
708- decayLengthNormalised = prong.decayLengthNormalised ();
709- decayLengthXYNormalised = prong.decayLengthXYNormalised ();
710- cpa = prong.cpa ();
711- impactParameterXY = prong.impactParameterXY ();
591+ bjetCand = prong;
712592 }
713593 }
714-
715- return bjetCandSV (
716- xPVertex, yPVertex, zPVertex,
717- xSecondaryVertex, ySecondaryVertex, zSecondaryVertex,
718- px, py, pz, e, m, chi2PCA,
719- dispersion, errorDecayLength, errorDecayLengthXY,
720- rSecondaryVertex, pt, p,
721- pVector, eta, phi,
722- y, decayLength, decayLengthXY,
723- decayLengthNormalised, decayLengthXYNormalised,
724- cpa, impactParameterXY);
594+ return bjetCand;
725595}
726596
727597template <typename T, typename U>
728598bool isTaggedJetSV (T const jet, U const & /* prongs*/ , float const & prongChi2PCAMin, float const & prongChi2PCAMax, float const & prongsigmaLxyMax, float const & prongIPxyMin, float const & prongIPxyMax, float prongDispersionMax, float const & doXYZ = false , float const & tagPointForSV = 15 .)
729599{
730600 auto bjetCand = jetFromProngMaxDecayLength<U>(jet, prongChi2PCAMin, prongChi2PCAMax, prongsigmaLxyMax, prongIPxyMin, prongIPxyMax, doXYZ);
731- if (!prongAcceptance (bjetCand, prongChi2PCAMin, prongChi2PCAMax, prongsigmaLxyMax, prongIPxyMin, prongIPxyMax, prongDispersionMax, doXYZ ))
601+ if (!svAcceptance (bjetCand, prongDispersionMax))
732602 return false ;
733603 if (!doXYZ) {
734604 auto maxSxy = bjetCand.decayLengthXY () / bjetCand.errorDecayLengthXY ();
0 commit comments