00001
00002
00003 #ifndef XAODBTAGGING_VERSIONS_BTAGGING_V1_H
00004 #define XAODBTAGGING_VERSIONS_BTAGGING_V1_H
00005
00006
00007 #include "AthContainers/AuxElement.h"
00008 #include "AthLinks/ElementLink.h"
00009
00010
00011 #include "xAODBTagging/BTaggingEnums.h"
00012 #include "xAODTracking/TrackParticleContainer.h"
00013 #include "xAODTracking/VertexContainer.h"
00014 #include "xAODBTagging/BTagVertexContainer.h"
00015
00016
00017 #include <map>
00018 #include <vector>
00019 #include <string>
00020 #include <iostream>
00021
00022 namespace xAOD {
00023
00032 class BTagging_v1 : public SG::AuxElement {
00033
00034 public:
00035
00037 typedef std::vector< ElementLink< xAOD::TrackParticleContainer > >
00038 TPELVec_t;
00039 typedef std::vector<ElementLink<xAOD::VertexContainer> > VxELVec_t;
00040 typedef std::vector<ElementLink<xAOD::BTagVertexContainer> > BTagVxELVec_t;
00041
00044
00046 BTagging_v1();
00047
00049
00052
00054 double SV0_significance3D() const;
00056 void setSV0_significance3D(double value);
00058 const TPELVec_t& SV0_TrackParticleLinks() const;
00060 void setSV0_TrackParticleLinks( const TPELVec_t& value );
00062 const xAOD::TrackParticle* SV0_TrackParticle( size_t i ) const;
00064 size_t nSV0_TrackParticles() const;
00066 void addSV0_TrackParticle(const ElementLink< xAOD::TrackParticleContainer >& link);
00068 void clearSV0_TrackParticleLinks();
00069
00071
00074
00076 double SV1_pb() const;
00078 void setSV1_pb(double value);
00080 double SV1_pc() const;
00082 void setSV1_pc(double value);
00084 double SV1_pu() const;
00086 void setSV1_pu(double value);
00088 double SV1_loglikelihoodratio() const { return this->calcLLR(SV1_pb(),SV1_pu()); }
00090 const TPELVec_t& SV1_TrackParticleLinks() const;
00092 void setSV1_TrackParticleLinks( const TPELVec_t& value );
00094 const xAOD::TrackParticle* SV1_TrackParticle( size_t i ) const;
00096 size_t nSV1_TrackParticles() const;
00098 void addSV1_TrackParticle(const ElementLink< xAOD::TrackParticleContainer > & link);
00100 void clearSV1_TrackParticleLinks();
00101
00103
00106
00108 double IP2D_pb() const;
00110 void setIP2D_pb(double value);
00112 double IP2D_pc() const;
00114 void setIP2D_pc(double value);
00116 double IP2D_pu() const;
00118 void setIP2D_pu(double value);
00120 double IP2D_loglikelihoodratio() const { return this->calcLLR(IP2D_pb(),IP2D_pu()); }
00122 const TPELVec_t& IP2D_TrackParticleLinks() const;
00124 void setIP2D_TrackParticleLinks( const TPELVec_t& value );
00126 const xAOD::TrackParticle* IP2D_TrackParticle( size_t i ) const;
00128 size_t nIP2D_TrackParticles() const;
00130 void addIP2D_TrackParticle(const ElementLink< xAOD::TrackParticleContainer > & link);
00132 void clearIP2D_TrackParticleLinks();
00133
00135
00138
00140 double IP3D_pb() const;
00142 void setIP3D_pb(double value);
00144 double IP3D_pc() const;
00146 void setIP3D_pc(double value);
00148 double IP3D_pu() const;
00150 void setIP3D_pu(double value);
00152 double IP3D_loglikelihoodratio() const { return ( (IP3D_pb()==1.&&IP3D_pu()==1.e9) ? 0. :
00153 this->calcLLR(IP3D_pb(),IP3D_pu()) ); }
00155 const TPELVec_t& IP3D_TrackParticleLinks() const;
00157 void setIP3D_TrackParticleLinks( const TPELVec_t& value );
00159 const xAOD::TrackParticle* IP3D_TrackParticle( size_t i ) const;
00161 size_t nIP3D_TrackParticles() const;
00163 void addIP3D_TrackParticle(const ElementLink< xAOD::TrackParticleContainer > & link);
00165 void clearIP3D_TrackParticleLinks();
00166
00168
00171
00172 double SV1plusIP3D_discriminant() const {
00173 return SV1_loglikelihoodratio() + IP3D_loglikelihoodratio();
00174 }
00175
00177
00180
00182 double JetFitter_pb() const;
00184 void setJetFitter_pb(double value);
00186 double JetFitter_pc() const;
00188 void setJetFitter_pc(double value);
00190 double JetFitter_pu() const;
00192 void setJetFitter_pu(double value);
00194 double JetFitter_loglikelihoodratio() const { return this->calcLLR(JetFitter_pb(),JetFitter_pu()); }
00195
00196
00198
00201
00203 double JetFitterCombNN_pb() const;
00205 void setJetFitterCombNN_pb(double value);
00207 double JetFitterCombNN_pc() const;
00209 void setJetFitterCombNN_pc(double value);
00211 double JetFitterCombNN_pu() const;
00213 void setJetFitterCombNN_pu(double value);
00215 double JetFitterCombNN_loglikelihoodratio() const { return this->calcLLR(JetFitterCombNN_pb(),JetFitterCombNN_pu());
00216 }
00217
00218
00220
00223
00225 double MV1_discriminant() const;
00227 void setMV1_discriminant(double value);
00228
00230
00231
00234 bool loglikelihoodratio(const std::string& taggername, double &value,
00235 const std::string& signal="pb", const std::string& bckgd="pu") const;
00236 bool MVx_discriminant(const std::string& taggername, double &value) const;
00237 double calcLLR(double num, double den) const;
00238
00239
00241
00242
00245
00247 bool taggerInfo(int& value, BTagInfo info) const;
00249 bool taggerInfo(float& value, BTagInfo info) const;
00251 bool taggerInfo(bool& value, BTagInfo info) const;
00253 bool taggerInfo(std::string& value, BTagInfo info) const;
00255 bool taggerInfo(std::vector<int>& value, BTagInfo info) const;
00257 bool taggerInfo(std::vector<float>& value, BTagInfo info) const;
00259 bool taggerInfo(std::vector<bool>& value, BTagInfo info) const;
00260
00262 void setTaggerInfo(int value, BTagInfo info);
00264 void setTaggerInfo(float value, BTagInfo info);
00266 void setTaggerInfo(bool value, BTagInfo info);
00268 void setTaggerInfo(const std::string& value, BTagInfo info);
00270 void setTaggerInfo(const std::vector<int>& value, BTagInfo info);
00272 void setTaggerInfo(const std::vector<float>& value, BTagInfo info);
00274 void setTaggerInfo(const std::vector<bool>& value, BTagInfo info);
00275
00277
00280
00282 template< class T >
00283 bool variable(const std::string &taggername,
00284 const std::string &variablename, T &value) const;
00285
00287 template< class T >
00288 void setVariable(const std::string &taggername,
00289 const std::string &variablename, const T &value);
00290
00292
00294 void toPersistent();
00295
00296 void setDynTPELName(const std::string &taggername,
00297 const std::string &variablename);
00298 void setDynVxELName(const std::string &taggername,
00299 const std::string &variablename);
00300 void setDynBTagVxELName(const std::string &taggername,
00301 const std::string &variablename);
00302
00303
00304 };
00305
00306 template< class T >
00307 inline
00308 bool BTagging_v1::variable( const std::string &taggername,
00309 const std::string &variablename,
00310 T& value ) const {
00311
00312 const std::string varname = taggername+ "_" + variablename;
00313 Accessor< T > acc( varname );
00314 if( ! acc.isAvailable( *this ) ) return false;
00315 value = acc( *this );
00316 return true;
00317 }
00318
00319 template< class T >
00320 inline
00321 void BTagging_v1::setVariable( const std::string &taggername,
00322 const std::string &variablename,
00323 const T &value ) {
00324
00325 const std::string varname = taggername+ "_" + variablename;
00326 Accessor< T > acc( varname );
00327 acc( *this ) = value;
00328 return;
00329 }
00330
00331 }
00332
00333 #ifndef XAOD_STANDALONE
00334 #include "SGTools/CLASS_DEF.h"
00335 CLASS_DEF( xAOD::BTagging_v1, 207121524, 1 )
00336 #endif
00337
00338 #endif // XAODBTAGGING_VERSIONS_BTAGGING_V1_H