00001 #include "RecoTauTag/TauTagTools/interface/CaloTauElementsOperators.h"
00002
00003 using namespace reco;
00004
00005 CaloTauElementsOperators::CaloTauElementsOperators(CaloTau& theCaloTau) : TauElementsOperators(theCaloTau),CaloTau_(theCaloTau),AreaMetric_recoElements_maxabsEta_(2.5){
00006 Tracks_=theCaloTau.caloTauTagInfoRef()->Tracks();
00007
00008 }
00009
00010 std::vector<std::pair<math::XYZPoint,float> >
00011 CaloTauElementsOperators::EcalRecHitsInCone(const math::XYZVector& coneAxis,const std::string coneMetric,const double coneSize,const double EcalRecHit_minEt,const std::vector<std::pair<math::XYZPoint,float> >& myEcalRecHits)const{
00012 std::vector<std::pair<math::XYZPoint,float> > theFilteredEcalRecHits;
00013 for (std::vector<std::pair<math::XYZPoint,float> >::const_iterator iEcalRecHit=myEcalRecHits.begin();iEcalRecHit!=myEcalRecHits.end();++iEcalRecHit) {
00014 if ((*iEcalRecHit).second*fabs(sin((*iEcalRecHit).first.theta()))>EcalRecHit_minEt)theFilteredEcalRecHits.push_back(*iEcalRecHit);
00015 }
00016 std::vector<std::pair<math::XYZPoint,float> > theFilteredEcalRecHitsInCone;
00017 if (coneMetric=="DR"){
00018 theFilteredEcalRecHitsInCone=EcalRecHitsinCone_DRmetric_(coneAxis,metricDR_,coneSize,theFilteredEcalRecHits);
00019 }else if(coneMetric=="angle"){
00020 theFilteredEcalRecHitsInCone=EcalRecHitsinCone_Anglemetric_(coneAxis,metricAngle_,coneSize,theFilteredEcalRecHits);
00021 }else if(coneMetric=="area"){
00022 int errorFlag = 0;
00023 FixedAreaIsolationCone fixedAreaCone;
00024 fixedAreaCone.setAcceptanceLimit(AreaMetric_recoElements_maxabsEta_);
00025 double coneAngle=fixedAreaCone(coneAxis.theta(),coneAxis.phi(),0,coneSize,errorFlag);
00026 if (errorFlag!=0) return std::vector<std::pair<math::XYZPoint,float> >();
00027 theFilteredEcalRecHitsInCone=EcalRecHitsinCone_Anglemetric_(coneAxis,metricAngle_,coneAngle,theFilteredEcalRecHits);
00028 }else return std::vector<std::pair<math::XYZPoint,float> >();
00029 return theFilteredEcalRecHitsInCone;
00030 }
00031
00032 std::vector<std::pair<math::XYZPoint,float> >
00033 CaloTauElementsOperators::EcalRecHitsInAnnulus(const math::XYZVector& coneAxis,const std::string innerconeMetric,const double innerconeSize,const std::string outerconeMetric,const double outerconeSize,const double EcalRecHit_minEt,const std::vector<std::pair<math::XYZPoint,float> >& myEcalRecHits) const {
00034 std::vector<std::pair<math::XYZPoint,float> > theFilteredEcalRecHits;
00035 for (std::vector<std::pair<math::XYZPoint,float> >::const_iterator iEcalRecHit=myEcalRecHits.begin();iEcalRecHit!=myEcalRecHits.end();++iEcalRecHit) {
00036 if ((*iEcalRecHit).second*fabs(sin((*iEcalRecHit).first.theta()))>EcalRecHit_minEt)theFilteredEcalRecHits.push_back(*iEcalRecHit);
00037 }
00038 std::vector<std::pair<math::XYZPoint,float> > theFilteredEcalRecHitsInAnnulus;
00039 if (outerconeMetric=="DR"){
00040 if (innerconeMetric=="DR"){
00041 theFilteredEcalRecHitsInAnnulus=EcalRecHitsinAnnulus_innerDRouterDRmetrics_(coneAxis,metricDR_,innerconeSize,metricDR_,outerconeSize,theFilteredEcalRecHits);
00042 }else if(innerconeMetric=="angle"){
00043 theFilteredEcalRecHitsInAnnulus=EcalRecHitsinAnnulus_innerAngleouterDRmetrics_(coneAxis,metricAngle_,innerconeSize,metricDR_,outerconeSize,theFilteredEcalRecHits);
00044 }else if(innerconeMetric=="area"){
00045 int errorFlag=0;
00046 FixedAreaIsolationCone theFixedAreaSignalCone;
00047 theFixedAreaSignalCone.setAcceptanceLimit(AreaMetric_recoElements_maxabsEta_);
00048 double innercone_angle=theFixedAreaSignalCone(coneAxis.theta(),coneAxis.phi(),0,innerconeSize,errorFlag);
00049 if (errorFlag!=0)return std::vector<std::pair<math::XYZPoint,float> >();
00050 theFilteredEcalRecHitsInAnnulus=EcalRecHitsinAnnulus_innerAngleouterDRmetrics_(coneAxis,metricAngle_,innercone_angle,metricDR_,outerconeSize,theFilteredEcalRecHits);
00051 }else return std::vector<std::pair<math::XYZPoint,float> >();
00052 }else if(outerconeMetric=="angle"){
00053 if (innerconeMetric=="DR"){
00054 theFilteredEcalRecHitsInAnnulus=EcalRecHitsinAnnulus_innerDRouterAnglemetrics_(coneAxis,metricDR_,innerconeSize,metricAngle_,outerconeSize,theFilteredEcalRecHits);
00055 }else if(innerconeMetric=="angle"){
00056 theFilteredEcalRecHitsInAnnulus=EcalRecHitsinAnnulus_innerAngleouterAnglemetrics_(coneAxis,metricAngle_,innerconeSize,metricAngle_,outerconeSize,theFilteredEcalRecHits);
00057 }else if(innerconeMetric=="area"){
00058 int errorFlag=0;
00059 FixedAreaIsolationCone theFixedAreaSignalCone;
00060 theFixedAreaSignalCone.setAcceptanceLimit(AreaMetric_recoElements_maxabsEta_);
00061 double innercone_angle=theFixedAreaSignalCone(coneAxis.theta(),coneAxis.phi(),0,innerconeSize,errorFlag);
00062 if (errorFlag!=0)return theFilteredEcalRecHitsInAnnulus;
00063 theFilteredEcalRecHitsInAnnulus=EcalRecHitsinAnnulus_innerAngleouterAnglemetrics_(coneAxis,metricAngle_,innercone_angle,metricAngle_,outerconeSize,theFilteredEcalRecHits);
00064 }else return std::vector<std::pair<math::XYZPoint,float> >();
00065 }else if(outerconeMetric=="area"){
00066 int errorFlag=0;
00067 FixedAreaIsolationCone theFixedAreaSignalCone;
00068 theFixedAreaSignalCone.setAcceptanceLimit(AreaMetric_recoElements_maxabsEta_);
00069 if (innerconeMetric=="DR"){
00070
00071 }else if(innerconeMetric=="angle"){
00072 double outercone_angle=theFixedAreaSignalCone(coneAxis.theta(),coneAxis.phi(),innerconeSize,outerconeSize,errorFlag);
00073 if (errorFlag!=0)return theFilteredEcalRecHitsInAnnulus;
00074 theFilteredEcalRecHitsInAnnulus=EcalRecHitsinAnnulus_innerAngleouterAnglemetrics_(coneAxis,metricAngle_,innerconeSize,metricAngle_,outercone_angle,theFilteredEcalRecHits);
00075 }else if(innerconeMetric=="area"){
00076 double innercone_angle=theFixedAreaSignalCone(coneAxis.theta(),coneAxis.phi(),0,innerconeSize,errorFlag);
00077 if (errorFlag!=0)return theFilteredEcalRecHitsInAnnulus;
00078 double outercone_angle=theFixedAreaSignalCone(coneAxis.theta(),coneAxis.phi(),innercone_angle,outerconeSize,errorFlag);
00079 if (errorFlag!=0)return theFilteredEcalRecHitsInAnnulus;
00080 theFilteredEcalRecHitsInAnnulus=EcalRecHitsinAnnulus_innerAngleouterAnglemetrics_(coneAxis,metricAngle_,innercone_angle,metricAngle_,outercone_angle,theFilteredEcalRecHits);
00081 }else return std::vector<std::pair<math::XYZPoint,float> >();
00082 }
00083 return theFilteredEcalRecHitsInAnnulus;
00084 }
00085
00086 std::vector<std::pair<math::XYZPoint,float> >
00087 CaloTauElementsOperators::EcalRecHitsInCone(const math::XYZVector& coneAxis,const std::string coneMetric,const double coneSize,const double EcalRecHit_minEt) const
00088 {
00089
00090 return EcalRecHitsInCone(coneAxis, coneMetric, coneSize, EcalRecHit_minEt, this->EcalRecHits_);
00091 }
00092
00093 std::vector<std::pair<math::XYZPoint,float> >
00094 CaloTauElementsOperators::EcalRecHitsInAnnulus(const math::XYZVector& coneAxis,const std::string innerconeMetric, const double innerconeSize,
00095 const std::string outerconeMetric, const double outerconeSize, const double EcalRecHit_minEt) const
00096 {
00097
00098 return EcalRecHitsInAnnulus(coneAxis, innerconeMetric, innerconeSize, outerconeMetric, outerconeSize, EcalRecHit_minEt, this->EcalRecHits_);
00099 }
00100
00101
00102
00103