00001 #ifndef RecoTauTag_RecoTau_TauElementsOperators_H_
00002 #define RecoTauTag_RecoTau_TauElementsOperators_H_
00003
00004 #include "DataFormats/TauReco/interface/BaseTau.h"
00005 #include "DataFormats/TrackReco/interface/Track.h"
00006
00007 #include "RecoTauTag/TauTagTools/interface/ElementsInCone.h"
00008 #include "RecoTauTag/TauTagTools/interface/ElementsInAnnulus.h"
00009
00010 #include "PhysicsTools/IsolationUtils/interface/FixedAreaIsolationCone.h"
00011 #include "PhysicsTools/Utilities/interface/deltaR.h"
00012 #include "PhysicsTools/Utilities/interface/Angle.h"
00013
00014 #include "TFormula.h"
00015
00016 using namespace edm;
00017 using namespace std;
00018 using namespace reco;
00019
00020 class TauElementsOperators{
00021 public:
00022 TauElementsOperators();
00023 TauElementsOperators(BaseTau&);
00024 ~TauElementsOperators(){}
00025
00026 double computeConeSize(const TFormula& ConeSizeTFormula,double ConeSizeMin,double ConeSizeMax);
00027 double computeConeSize(const TFormula& ConeSizeTFormula,double ConeSizeMin,double ConeSizeMax, double transverseEnergy, double energy);
00028 TFormula computeConeSizeTFormula(const string& ConeSizeFormula,const char* errorMessage);
00029 void replaceSubStr(string& s,const string& oldSubStr,const string& newSubStr);
00030
00031 const TrackRef leadTk(string matchingConeMetric,double matchingConeSize,double ptTrackMin)const;
00032 const TrackRef leadTk(const math::XYZVector& jetAxis,string matchingConeMetric,double matchingConeSize,double ptTrackMin)const;
00033
00034
00035 const TrackRefVector tracksInCone(const math::XYZVector& coneAxis,const string coneMetric,const double coneSize,const double ptTrackMin)const;
00036 const TrackRefVector tracksInCone(const math::XYZVector& coneAxis,const string coneMetric,const double coneSize,const double ptTrackMin,const double tracktorefpoint_maxDZ,const double refpoint_Z)const;
00037
00038 const TrackRefVector tracksInAnnulus(const math::XYZVector& coneAxis,const string innerconeMetric,const double innerconeSize,const string outerconeMetric,const double outerconeSize,const double ptTrackMin)const;
00039 const TrackRefVector tracksInAnnulus(const math::XYZVector& coneAxis,const string innerconeMetric,const double innerconeSize,const string outerconeMetric,const double outerconeSize,const double ptTrackMin,const double tracktorefpoint_maxDZ,const double refpoint_Z)const;
00040
00041
00042 double discriminatorByIsolTracksN(unsigned int isolationAnnulus_Tracksmaxn)const;
00043 double discriminatorByIsolTracksN(const math::XYZVector& coneAxis,
00044 string matchingConeMetric,double matchingConeSize, double ptLeadingTrackMin, double ptOtherTracksMin,
00045 string signalConeMetric,double signalConeSize,string isolationConeMetric,double isolationConeSize,
00046 unsigned int isolationAnnulus_Tracksmaxn)const;
00047
00048 double discriminatorByIsolTracksN(string matchingConeMetric,double matchingConeSize, double ptLeadingTrackMin, double ptOtherTracksMin,
00049 string signalConeMetric,double signalConeSize,string isolationConeMetric,double isolationConeSize,
00050 unsigned int isolationAnnulus_Tracksmaxn)const;
00051 protected:
00052 TFormula ConeSizeTFormula;
00053
00054 BaseTau& BaseTau_;
00055 double AreaMetric_recoElements_maxabsEta_;
00056 TrackRefVector Tracks_;
00057 TrackRefVector IsolTracks_;
00058
00059 DeltaR<math::XYZVector> metricDR_;
00060 Angle<math::XYZVector> metricAngle_;
00061 ElementsInCone<math::XYZVector,DeltaR<math::XYZVector>,reco::TrackCollection> TracksinCone_DRmetric_;
00062 ElementsInCone<math::XYZVector,Angle<math::XYZVector>,reco::TrackCollection> TracksinCone_Anglemetric_;
00063 ElementsInAnnulus<math::XYZVector,DeltaR<math::XYZVector>,DeltaR<math::XYZVector>,reco::TrackCollection> TracksinAnnulus_innerDRouterDRmetrics_;
00064 ElementsInAnnulus<math::XYZVector,DeltaR<math::XYZVector>,Angle<math::XYZVector>,reco::TrackCollection> TracksinAnnulus_innerDRouterAnglemetrics_;
00065 ElementsInAnnulus<math::XYZVector,Angle<math::XYZVector>,Angle<math::XYZVector>,reco::TrackCollection> TracksinAnnulus_innerAngleouterAnglemetrics_;
00066 ElementsInAnnulus<math::XYZVector,Angle<math::XYZVector>,DeltaR<math::XYZVector>,reco::TrackCollection> TracksinAnnulus_innerAngleouterDRmetrics_;
00067 };
00068
00069
00070 #endif
00071
00072