CMS 3D CMS Logo

SimpleSecondaryVertexComputer.h

Go to the documentation of this file.
00001 #ifndef RecoBTag_SecondaryVertex_SimpleSecondaryVertexComputer_h
00002 #define RecoBTag_SecondaryVertex_SimpleSecondaryVertexComputer_h
00003 
00004 #include <cmath>
00005 
00006 #include "Math/GenVector/VectorUtil.h"
00007 
00008 #include "DataFormats/TrackReco/interface/Track.h"
00009 #include "DataFormats/VertexReco/interface/Vertex.h"
00010 #include "DataFormats/BTauReco/interface/SecondaryVertexTagInfo.h"
00011 
00012 #include "RecoBTau/JetTagComputer/interface/JetTagComputer.h"
00013 
00014 #include "RecoBTag/SecondaryVertex/interface/TrackKinematics.h"
00015 
00016 class SimpleSecondaryVertexComputer : public JetTagComputer {
00017     public:
00018         SimpleSecondaryVertexComputer(const edm::ParameterSet &parameters) :
00019                 use2d(!parameters.getParameter<bool>("use3d")),
00020                 useSig(parameters.getParameter<bool>("useSignificance")),
00021                 unBoost(parameters.getParameter<bool>("unBoost"))
00022         { uses("svTagInfos"); }
00023 
00024         float discriminator(const TagInfoHelper &tagInfos) const
00025         {
00026                 const reco::SecondaryVertexTagInfo &info =
00027                                 tagInfos.get<reco::SecondaryVertexTagInfo>();
00028                 if (info.nVertices() == 0)
00029                         return -1.0;
00030 
00031                 double gamma;
00032                 if (unBoost) {
00033                         reco::TrackKinematics kinematics(
00034                                                 info.secondaryVertex(0));
00035                         gamma = kinematics.vectorSum().Gamma();
00036                 } else
00037                         gamma = 1.0;
00038 
00039                 double value;
00040                 if (useSig)
00041                         value = info.flightDistance(0, use2d).significance();
00042                 else
00043                         value = info.flightDistance(0, use2d).value();
00044 
00045                 value /= gamma;
00046 
00047                 if (useSig)
00048                         value = (value > 0) ? +std::log(1 + value)
00049                                             : -std::log(1 - value);
00050 
00051                 return value;
00052         }
00053 
00054     private:
00055         bool    use2d;
00056         bool    useSig;
00057         bool    unBoost;
00058 };
00059 
00060 #endif // RecoBTag_SecondaryVertex_SimpleSecondaryVertexComputer_h

Generated on Tue Jun 9 17:43:04 2009 for CMSSW by  doxygen 1.5.4