00001 #ifndef DataFormats_BTauReco_TaggingVariable_h
00002 #define DataFormats_BTauReco_TaggingVariable_h
00003
00004 #include <utility>
00005 #include <vector>
00006 #include <string>
00007
00008 #include <boost/static_assert.hpp>
00009 #include <boost/pointee.hpp>
00010 #include <boost/type_traits/is_convertible.hpp>
00011
00012 #include "DataFormats/BTauReco/interface/RefMacros.h"
00013
00014 namespace reco {
00015
00016 namespace btau {
00017
00018
00019 enum TaggingVariableName {
00020 jetEnergy = 0,
00021 jetPt,
00022 jetEta,
00023 jetPhi,
00024 jetNTracks,
00025
00026 trackMomentum,
00027 trackEta,
00028 trackPhi,
00029
00030 trackPtRel,
00031 trackPPar,
00032 trackEtaRel,
00033 trackDeltaR,
00034 trackPtRatio,
00035 trackPParRatio,
00036
00037 trackIp2dSig,
00038 trackSip2dVal,
00039 trackSip2dSig,
00040 trackSip3dVal,
00041 trackSip3dSig,
00042 trackDecayLenVal,
00043 trackDecayLenSig,
00044 trackJetDistVal,
00045 trackJetDistSig,
00046 trackGhostTrackDistVal,
00047 trackGhostTrackDistSig,
00048 trackGhostTrackWeight,
00049
00050 trackSumJetEtRatio,
00051 trackSumJetDeltaR,
00052
00053 vertexCategory,
00054
00055 jetNSecondaryVertices,
00056 jetNSingleTrackVertices,
00057
00058 vertexMass,
00059 vertexNTracks,
00060 vertexFitProb,
00061
00062 vertexEnergyRatio,
00063 vertexJetDeltaR,
00064
00065 flightDistance2dVal,
00066 flightDistance2dSig,
00067 flightDistance3dVal,
00068 flightDistance3dSig,
00069
00070 trackSip2dValAboveCharm,
00071 trackSip2dSigAboveCharm,
00072 trackSip3dValAboveCharm,
00073 trackSip3dSigAboveCharm,
00074
00075 neutralEnergy,
00076 neutralEnergyOverCombinedEnergy,
00077 neutralIsolEnergy,
00078 neutralIsolEnergyOverCombinedEnergy,
00079 neutralEnergyRatio,
00080 neutralclusterNumber,
00081 neutralclusterRadius,
00082
00083 leptonQuality,
00084 leptonQuality2,
00085 trackP0Par,
00086 trackP0ParRatio,
00087 trackChi2,
00088 trackNTotalHits,
00089 trackNPixelHits,
00090
00091 algoDiscriminator,
00092
00093 lastTaggingVariable
00094 };
00095 }
00096
00097
00098 using btau::TaggingVariableName;
00099
00100 extern const char* TaggingVariableDescription[];
00101 extern const char* TaggingVariableTokens[];
00102
00103 TaggingVariableName getTaggingVariableName ( const std::string & name );
00104
00105 typedef float TaggingValue;
00106
00107
00108
00109 typedef std::pair< TaggingVariableName, TaggingValue > TaggingVariable;
00110
00111 struct TaggingVariableCompare {
00112 bool operator() (const TaggingVariable& i, const TaggingVariable& j) {
00113 return i.first < j.first;
00114 }
00115
00116 bool operator() (const TaggingVariable& i, TaggingVariableName tag) {
00117 return i.first < tag;
00118 }
00119
00120 bool operator() (TaggingVariableName tag, const TaggingVariable& i) {
00121 return tag < i.first;
00122 }
00123
00124 };
00125
00126
00127
00128
00129 class TaggingVariableList {
00130 public:
00131 TaggingVariableList() : m_list() { }
00132 TaggingVariableList( const TaggingVariableList& list ) : m_list( list.m_list ) { }
00133
00134
00135 template <typename InputIterator>
00136 TaggingVariableList( const InputIterator begin, const InputIterator end ) : m_list() {
00137 BOOST_STATIC_ASSERT(( boost::is_convertible< const TaggingVariableList, typename boost::pointee<InputIterator>::type >::value ));
00138 for (const InputIterator i = begin; i != end; i++)
00139 insert(*i);
00140 }
00141
00145 typedef std::vector < TaggingVariable >::const_iterator const_iterator;
00146 typedef std::pair < const_iterator, const_iterator > range;
00147 size_t size() const { return m_list.size(); }
00148 const_iterator begin() const { return m_list.begin(); }
00149 const_iterator end() const { return m_list.end(); }
00150 void push_back ( const TaggingVariable & t ) { m_list.push_back ( t ); }
00151
00152 ~TaggingVariableList() { }
00153
00154
00155 private:
00156 std::vector< TaggingVariable > m_list;
00157
00158 public:
00159 bool checkTag( TaggingVariableName tag ) const;
00160
00161 void insert( const TaggingVariable & variable, bool delayed = false );
00162 void insert( const TaggingVariableList & list );
00163 void insert( TaggingVariableName tag, TaggingValue value, bool delayed = false );
00164 void insert( TaggingVariableName tag, const std::vector<TaggingValue> & values, bool delayed = false );
00165
00166 void finalize( void );
00167
00168 TaggingValue get( TaggingVariableName tag ) const;
00169 TaggingValue get( TaggingVariableName tag, TaggingValue defaultValue ) const;
00170 std::vector<TaggingValue> getList( TaggingVariableName tag, bool throwOnEmptyList = true ) const;
00171
00172 range getRange( TaggingVariableName tag ) const;
00173
00174 TaggingValue operator[]( TaggingVariableName tag ) const {
00175 return get( tag );
00176 }
00177 };
00178
00179 DECLARE_EDM_REFS( TaggingVariableList )
00180
00181 }
00182
00183 #endif // DataFormats_BTauReco_TaggingVariable_h