CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_2_9/src/RecoTauTag/TauTagTools/src/CaloTauElementsOperators.cc

Go to the documentation of this file.
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   //EcalRecHits_=theCaloTau.caloTauTagInfoRef()->positionAndEnergyECALRecHits();
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          // not implemented yet
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    //this function exists only to provide compatability w/ CMSSW_2_2_3 out of the box.Newer versions recompute the interesting rechits inside RecoTau
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    //this function exists only to provide compatability w/ CMSSW_2_2_3 out of the box.  Newer versions recompute the interesting rechits inside RecoTau
00098    return EcalRecHitsInAnnulus(coneAxis, innerconeMetric, innerconeSize, outerconeMetric, outerconeSize, EcalRecHit_minEt, this->EcalRecHits_);
00099 }
00100 
00101 
00102 
00103