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