CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
GEDPhotonProducer Class Reference

#include <GEDPhotonProducer.h>

Inheritance diagram for GEDPhotonProducer:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

virtual void beginRun (edm::Run const &r, edm::EventSetup const &es) overridefinal
 
virtual void endRun (edm::Run const &, edm::EventSetup const &) overridefinal
 
 GEDPhotonProducer (const edm::ParameterSet &ps)
 
virtual void produce (edm::Event &evt, const edm::EventSetup &es)
 
 ~GEDPhotonProducer ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (std::string const &iProcessName, std::string const &iModuleLabel, bool iPrint, std::vector< char const * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

void fillPhotonCollection (edm::Event &evt, edm::EventSetup const &es, const edm::Handle< reco::PhotonCoreCollection > &photonCoreHandle, const CaloTopology *topology, const EcalRecHitCollection *ecalBarrelHits, const EcalRecHitCollection *ecalEndcapHits, const EcalRecHitCollection *preshowerHits, const edm::Handle< CaloTowerCollection > &hcalTowersHandle, const reco::VertexCollection &pvVertices, reco::PhotonCollection &outputCollection, int &iSC)
 
void fillPhotonCollection (edm::Event &evt, edm::EventSetup const &es, const edm::Handle< reco::PhotonCollection > &photonHandle, const edm::Handle< reco::PFCandidateCollection > pfCandidateHandle, const edm::Handle< reco::PFCandidateCollection > pfEGCandidateHandle, edm::ValueMap< reco::PhotonRef > pfEGCandToPhotonMap, edm::Handle< reco::VertexCollection > &pvVertices, reco::PhotonCollection &outputCollection, int &iSC)
 

Private Attributes

edm::EDGetTokenT
< EcalRecHitCollection
barrelEcalHits_
 
std::string candidateP4type_
 
edm::ParameterSet conf_
 
std::string conversionCollection_
 
std::string conversionProducer_
 
edm::EDGetTokenT
< EcalRecHitCollection
endcapEcalHits_
 
EcalClusterFunctionBaseClassenergyCorrectionF
 
std::vector< int > flagsexclEB_
 
std::vector< int > flagsexclEE_
 
edm::EDGetTokenT
< CaloTowerCollection
hcalTowers_
 
double highEt_
 
double hOverEConeSize_
 
double maxHOverE_
 
double minR9Barrel_
 
double minR9Endcap_
 
double minSCEt_
 
edm::EDGetTokenT
< reco::PFCandidateCollection
pfCandidates_
 
edm::EDGetTokenT
< reco::PFCandidateCollection
pfEgammaCandidates_
 
std::string photonCollection_
 
edm::EDGetTokenT
< reco::PhotonCoreCollection
photonCoreProducerT_
 
edm::InputTag photonProducer_
 
edm::EDGetTokenT
< reco::PhotonCollection
photonProducerT_
 
PositionCalc posCalculator_
 
std::vector< double > preselCutValuesBarrel_
 
std::vector< double > preselCutValuesEndcap_
 
edm::EDGetTokenT
< EcalRecHitCollection
preshowerHits_
 
std::string reconstructionStep_
 
bool runMIPTagger_
 
std::vector< int > severitiesexclEB_
 
std::vector< int > severitiesexclEE_
 
edm::ESHandle< CaloGeometrytheCaloGeom_
 
edm::ESHandle< CaloTopologytheCaloTopo_
 
PFPhotonIsolationCalculatorthePFBasedIsolationCalculator_
 
PhotonEnergyCorrectorthePhotonEnergyCorrector_
 
PhotonIsolationCalculatorthePhotonIsolationCalculator_
 
PhotonMIPHaloTaggerthePhotonMIPHaloTagger_
 
bool usePrimaryVertex_
 
bool validConversions_
 
bool validPixelSeeds_
 
std::string valueMapPFCandPhoton_
 
edm::EDGetTokenT
< reco::VertexCollection
vertexProducer_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Author
Nancy Marinelli, U. of Notre Dame, US

Definition at line 41 of file GEDPhotonProducer.h.

Constructor & Destructor Documentation

GEDPhotonProducer::GEDPhotonProducer ( const edm::ParameterSet ps)

Definition at line 54 of file GEDPhotonProducer.cc.

References barrelEcalHits_, candidateP4type_, conf_, edm::EDConsumerBase::consumesCollector(), endcapEcalHits_, edm::ParameterSet::existsAs(), flagsexclEB_, flagsexclEE_, edm::ParameterSet::getParameter(), hcalTowers_, highEt_, hOverEConeSize_, minR9Barrel_, minR9Endcap_, pfCandidates_, pfEgammaCandidates_, photonCollection_, photonCoreProducerT_, photonProducer_, photonProducerT_, HLT_FULL_cff::posCalcParameters, posCalculator_, preselCutValuesBarrel_, preselCutValuesEndcap_, preshowerHits_, reconstructionStep_, runMIPTagger_, PhotonMIPHaloTagger::setup(), PhotonIsolationCalculator::setup(), severitiesexclEB_, severitiesexclEE_, AlCaHLTBitMon_QueryRunRegistry::string, thePhotonEnergyCorrector_, thePhotonIsolationCalculator_, thePhotonMIPHaloTagger_, usePrimaryVertex_, valueMapPFCandPhoton_, and vertexProducer_.

54  :
55 
56  conf_(config)
57 {
58 
59  // use configuration file to setup input/output collection names
60  //
61  photonProducer_ = conf_.getParameter<edm::InputTag>("photonProducer");
62  reconstructionStep_ = conf_.getParameter<std::string>("reconstructionStep");
63 
64  if ( reconstructionStep_ == "final" ) {
66  consumes<reco::PhotonCollection>(photonProducer_);
67  pfCandidates_ =
68  consumes<reco::PFCandidateCollection>(conf_.getParameter<edm::InputTag>("pfCandidates"));
69 
70  } else {
71 
73  consumes<reco::PhotonCoreCollection>(photonProducer_);
74 
75  }
76 
78  consumes<reco::PFCandidateCollection>(conf_.getParameter<edm::InputTag>("pfEgammaCandidates"));
80  consumes<EcalRecHitCollection>(conf_.getParameter<edm::InputTag>("barrelEcalHits"));
82  consumes<EcalRecHitCollection>(conf_.getParameter<edm::InputTag>("endcapEcalHits"));
84  consumes<EcalRecHitCollection>(conf_.getParameter<edm::InputTag>("preshowerHits"));
86  consumes<reco::VertexCollection>(conf_.getParameter<edm::InputTag>("primaryVertexProducer"));
87 
88  hcalTowers_ =
89  consumes<CaloTowerCollection>(conf_.getParameter<edm::InputTag>("hcalTowers"));
90  //
91  photonCollection_ = conf_.getParameter<std::string>("outputPhotonCollection");
92  hOverEConeSize_ = conf_.getParameter<double>("hOverEConeSize");
93  highEt_ = conf_.getParameter<double>("highEt");
94  // R9 value to decide converted/unconverted
95  minR9Barrel_ = conf_.getParameter<double>("minR9Barrel");
96  minR9Endcap_ = conf_.getParameter<double>("minR9Endcap");
97  usePrimaryVertex_ = conf_.getParameter<bool>("usePrimaryVertex");
98  runMIPTagger_ = conf_.getParameter<bool>("runMIPTagger");
99 
100  candidateP4type_ = config.getParameter<std::string>("candidateP4type") ;
101  valueMapPFCandPhoton_ = config.getParameter<std::string>("valueMapPhotons");
102 
103 
105  config.getParameter<edm::ParameterSet>("posCalcParameters");
107 
108 
109  //AA
110  //Flags and Severities to be excluded from photon calculations
111  const std::vector<std::string> flagnamesEB =
112  config.getParameter<std::vector<std::string> >("RecHitFlagToBeExcludedEB");
113 
114  const std::vector<std::string> flagnamesEE =
115  config.getParameter<std::vector<std::string> >("RecHitFlagToBeExcludedEE");
116 
117  flagsexclEB_=
118  StringToEnumValue<EcalRecHit::Flags>(flagnamesEB);
119 
120  flagsexclEE_=
121  StringToEnumValue<EcalRecHit::Flags>(flagnamesEE);
122 
123  const std::vector<std::string> severitynamesEB =
124  config.getParameter<std::vector<std::string> >("RecHitSeverityToBeExcludedEB");
125 
127  StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesEB);
128 
129  const std::vector<std::string> severitynamesEE =
130  config.getParameter<std::vector<std::string> >("RecHitSeverityToBeExcludedEE");
131 
133  StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesEE);
134 
137  if( conf_.existsAs<edm::ParameterSet>("regressionConfig") ) {
138  auto sumes = consumesCollector();
139  thePhotonEnergyCorrector_->gedRegression()->setConsumes(sumes);
140  }
141 
142  //AA
143 
144  //
145 
146  // Parameters for the position calculation:
147  // std::map<std::string,double> providedParameters;
148  // providedParameters.insert(std::make_pair("LogWeighted",conf_.getParameter<bool>("posCalc_logweight")));
149  //providedParameters.insert(std::make_pair("T0_barl",conf_.getParameter<double>("posCalc_t0_barl")));
150  //providedParameters.insert(std::make_pair("T0_endc",conf_.getParameter<double>("posCalc_t0_endc")));
151  //providedParameters.insert(std::make_pair("T0_endcPresh",conf_.getParameter<double>("posCalc_t0_endcPresh")));
152  //providedParameters.insert(std::make_pair("W0",conf_.getParameter<double>("posCalc_w0")));
153  //providedParameters.insert(std::make_pair("X0",conf_.getParameter<double>("posCalc_x0")));
154  //posCalculator_ = PositionCalc(providedParameters);
155  // cut values for pre-selection
156  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("minSCEtBarrel"));
157  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("maxHoverEBarrel"));
158  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("ecalRecHitSumEtOffsetBarrel"));
159  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("ecalRecHitSumEtSlopeBarrel"));
160  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("hcalTowerSumEtOffsetBarrel"));
161  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("hcalTowerSumEtSlopeBarrel"));
162  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("nTrackSolidConeBarrel"));
163  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("nTrackHollowConeBarrel"));
164  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("trackPtSumSolidConeBarrel"));
165  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("trackPtSumHollowConeBarrel"));
166  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("sigmaIetaIetaCutBarrel"));
167  //
168  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("minSCEtEndcap"));
169  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("maxHoverEEndcap"));
170  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("ecalRecHitSumEtOffsetEndcap"));
171  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("ecalRecHitSumEtSlopeEndcap"));
172  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("hcalTowerSumEtOffsetEndcap"));
173  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("hcalTowerSumEtSlopeEndcap"));
174  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("nTrackSolidConeEndcap"));
175  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("nTrackHollowConeEndcap"));
176  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("trackPtSumSolidConeEndcap"));
177  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("trackPtSumHollowConeEndcap"));
178  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("sigmaIetaIetaCutEndcap"));
179  //
180 
181  //moved from beginRun to here, I dont see how this could cause harm as its just reading in the exactly same parameters each run
182  if ( reconstructionStep_ != "final"){
184  edm::ParameterSet isolationSumsCalculatorSet = conf_.getParameter<edm::ParameterSet>("isolationSumsCalculatorSet");
187  edm::ParameterSet mipVariableSet = conf_.getParameter<edm::ParameterSet>("mipVariableSet");
189 
190  }else{
193  }
194  // Register the product
195  produces< reco::PhotonCollection >(photonCollection_);
196  produces< edm::ValueMap<reco::PhotonRef> > (valueMapPFCandPhoton_);
197 
198 
199 }
edm::InputTag photonProducer_
T getParameter(std::string const &) const
PhotonEnergyCorrector * thePhotonEnergyCorrector_
PhotonMIPHaloTagger * thePhotonMIPHaloTagger_
edm::EDGetTokenT< reco::PFCandidateCollection > pfCandidates_
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:186
edm::EDGetTokenT< CaloTowerCollection > hcalTowers_
std::vector< int > flagsexclEB_
edm::EDGetTokenT< EcalRecHitCollection > endcapEcalHits_
std::string reconstructionStep_
PhotonIsolationCalculator * thePhotonIsolationCalculator_
std::vector< int > severitiesexclEE_
std::unique_ptr< ModifyObjectValueBase > & gedRegression()
std::string photonCollection_
edm::EDGetTokenT< EcalRecHitCollection > barrelEcalHits_
PositionCalc posCalculator_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
void setup(const edm::ParameterSet &conf, std::vector< int > const &flagsEB_, std::vector< int > const &flagsEE_, std::vector< int > const &severitiesEB_, std::vector< int > const &severitiesEE_, edm::ConsumesCollector &&iC)
std::vector< int > flagsexclEE_
edm::EDGetTokenT< reco::PhotonCoreCollection > photonCoreProducerT_
tuple posCalcParameters
void setup(const edm::ParameterSet &conf, edm::ConsumesCollector &&iC)
edm::EDGetTokenT< reco::PFCandidateCollection > pfEgammaCandidates_
std::vector< int > severitiesexclEB_
std::vector< double > preselCutValuesBarrel_
edm::EDGetTokenT< reco::PhotonCollection > photonProducerT_
std::vector< double > preselCutValuesEndcap_
std::string candidateP4type_
edm::ParameterSet conf_
edm::EDGetTokenT< reco::VertexCollection > vertexProducer_
edm::EDGetTokenT< EcalRecHitCollection > preshowerHits_
std::string valueMapPFCandPhoton_
GEDPhotonProducer::~GEDPhotonProducer ( )

Definition at line 201 of file GEDPhotonProducer.cc.

References thePhotonEnergyCorrector_, thePhotonIsolationCalculator_, and thePhotonMIPHaloTagger_.

202 {
206  //delete energyCorrectionF;
207 }
PhotonEnergyCorrector * thePhotonEnergyCorrector_
PhotonMIPHaloTagger * thePhotonMIPHaloTagger_
PhotonIsolationCalculator * thePhotonIsolationCalculator_

Member Function Documentation

void GEDPhotonProducer::beginRun ( edm::Run const &  r,
edm::EventSetup const &  es 
)
finaloverridevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 211 of file GEDPhotonProducer.cc.

References conf_, edm::ParameterSet::getParameter(), init, reconstructionStep_, PFPhotonIsolationCalculator::setup(), thePFBasedIsolationCalculator_, and thePhotonEnergyCorrector_.

211  {
212 
213  if ( reconstructionStep_ == "final" ) {
215  edm::ParameterSet pfIsolationCalculatorSet = conf_.getParameter<edm::ParameterSet>("PFIsolationCalculatorSet");
216  thePFBasedIsolationCalculator_->setup(pfIsolationCalculatorSet);
217  }else{
218  thePhotonEnergyCorrector_ -> init(theEventSetup);
219  }
220 
221 }
T getParameter(std::string const &) const
PhotonEnergyCorrector * thePhotonEnergyCorrector_
int init
Definition: HydjetWrapper.h:67
std::string reconstructionStep_
void setup(const edm::ParameterSet &conf)
PFPhotonIsolationCalculator * thePFBasedIsolationCalculator_
edm::ParameterSet conf_
void GEDPhotonProducer::endRun ( edm::Run const &  r,
edm::EventSetup const &  theEventSetup 
)
finaloverridevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 223 of file GEDPhotonProducer.cc.

References reconstructionStep_, and thePFBasedIsolationCalculator_.

223  {
224 
225  if ( reconstructionStep_ == "final" ) {
227  }
228 }
std::string reconstructionStep_
PFPhotonIsolationCalculator * thePFBasedIsolationCalculator_
void GEDPhotonProducer::fillPhotonCollection ( edm::Event evt,
edm::EventSetup const &  es,
const edm::Handle< reco::PhotonCoreCollection > &  photonCoreHandle,
const CaloTopology topology,
const EcalRecHitCollection ecalBarrelHits,
const EcalRecHitCollection ecalEndcapHits,
const EcalRecHitCollection preshowerHits,
const edm::Handle< CaloTowerCollection > &  hcalTowersHandle,
const reco::VertexCollection pvVertices,
reco::PhotonCollection outputCollection,
int &  iSC 
)
private

fill shower shape block

fill extra shower shapes

fill full5x5 shower shape block

fill extra full5x5 shower shapes

get ecal photon specific corrected energy plus values from regressions and store them in the Photon

Pre-selection loose isolation cuts

Definition at line 437 of file GEDPhotonProducer.cc.

References barrelEcalHits_, PhotonEnergyCorrector::calculate(), candidateP4type_, EcalClusterToolsT< noZS >::covariances(), EcalClusterToolsT< noZS >::e1x3(), reco::Photon::ShowerShape::e1x3, EcalClusterToolsT< noZS >::e1x5(), reco::Photon::ShowerShape::e1x5, EcalClusterToolsT< noZS >::e2nd(), reco::Photon::ShowerShape::e2nd, EcalClusterToolsT< noZS >::e2x2(), reco::Photon::ShowerShape::e2x2, reco::Photon::ShowerShape::e2x5, EcalClusterToolsT< noZS >::e2x5Bottom(), reco::Photon::ShowerShape::e2x5Bottom, EcalClusterToolsT< noZS >::e2x5Left(), reco::Photon::ShowerShape::e2x5Left, EcalClusterToolsT< noZS >::e2x5Max(), reco::Photon::ShowerShape::e2x5Max, EcalClusterToolsT< noZS >::e2x5Right(), reco::Photon::ShowerShape::e2x5Right, EcalClusterToolsT< noZS >::e2x5Top(), reco::Photon::ShowerShape::e2x5Top, EcalClusterToolsT< noZS >::e3x3(), reco::Photon::ShowerShape::e3x3, EcalClusterToolsT< noZS >::e5x5(), reco::Photon::ShowerShape::e5x5, EcalClusterToolsT< noZS >::eBottom(), reco::Photon::ShowerShape::eBottom, reco::Photon::ecal_photons, EcalBarrel, EcalEndcap, reco::Photon::ShowerShape::effSigmaRR, EcalClusterToolsT< noZS >::eLeft(), reco::Photon::ShowerShape::eLeft, EcalClusterToolsT< noZS >::eMax(), endcapEcalHits_, EcalClusterToolsT< noZS >::eRight(), reco::Photon::ShowerShape::eRight, EcalClusterToolsT< noZS >::eTop(), reco::Photon::ShowerShape::eTop, flagsexclEB_, flagsexclEE_, geometry, EgammaHadTower::getDepth1HcalESum(), EgammaHadTower::getDepth2HcalESum(), EgammaTowerIsolation::getTowerESum(), reco::Photon::ShowerShape::hcalDepth1OverEcal, reco::Photon::ShowerShape::hcalDepth1OverEcalBc, reco::Photon::ShowerShape::hcalDepth2OverEcal, reco::Photon::ShowerShape::hcalDepth2OverEcalBc, reco::Photon::ShowerShape::hcalTowersBehindClusters, highEt_, hOverEConeSize_, edm::isFinite(), edm::Ref< C, T, F >::isNonnull(), EcalClusterToolsT< noZS >::localCovariances(), reco::Photon::ShowerShape::maxEnergyXtal, p4, preselCutValuesBarrel_, preselCutValuesEndcap_, preshowerHits_, edm::Handle< T >::product(), edm::ESHandle< class >::product(), ptFast(), reco::Photon::regression1, reco::Photon::regression2, runMIPTagger_, cmsHarvester::sep, EgammaHadTower::setTowerCollection(), severitiesexclEB_, severitiesexclEE_, reco::Photon::ShowerShape::sigmaEtaEta, reco::Photon::ShowerShape::sigmaIetaIeta, reco::Photon::ShowerShape::sigmaIetaIphi, reco::Photon::ShowerShape::sigmaIphiIphi, mathSSE::sqrt(), theCaloGeom_, thePhotonEnergyCorrector_, thePhotonIsolationCalculator_, thePhotonMIPHaloTagger_, and EgammaHadTower::towersOf().

Referenced by produce().

446  {
447 
448 
450  const EcalRecHitCollection* hits = 0 ;
451  std::vector<double> preselCutValues;
452  std::vector<int> flags_, severitiesexcl_;
453 
454  for(unsigned int lSC=0; lSC < photonCoreHandle->size(); lSC++) {
455 
456  reco::PhotonCoreRef coreRef(reco::PhotonCoreRef(photonCoreHandle, lSC));
457  reco::SuperClusterRef parentSCRef = coreRef->parentSuperCluster();
458  reco::SuperClusterRef scRef=coreRef->superCluster();
459 
460 
461 
462  // const reco::SuperCluster* pClus=&(*scRef);
463  iSC++;
464 
465  int subdet = scRef->seed()->hitsAndFractions()[0].first.subdetId();
466  if (subdet==EcalBarrel) {
467  preselCutValues = preselCutValuesBarrel_;
468  hits = ecalBarrelHits;
469  flags_ = flagsexclEB_;
470  severitiesexcl_ = severitiesexclEB_;
471  } else if (subdet==EcalEndcap) {
472  preselCutValues = preselCutValuesEndcap_;
473  hits = ecalEndcapHits;
474  flags_ = flagsexclEE_;
475  severitiesexcl_ = severitiesexclEE_;
476  } else {
477  edm::LogWarning("")<<"GEDPhotonProducer: do not know if it is a barrel or endcap SuperCluster";
478  }
479 
480 
481 
482 
483  // SC energy preselection
484  if (parentSCRef.isNonnull() &&
485  ptFast(parentSCRef->energy(),parentSCRef->position(),math::XYZPoint(0,0,0)) <= preselCutValues[0] ) continue;
486  // calculate HoE
487 
488  const CaloTowerCollection* hcalTowersColl = hcalTowersHandle.product();
489  EgammaTowerIsolation towerIso1(hOverEConeSize_,0.,0.,1,hcalTowersColl) ;
490  EgammaTowerIsolation towerIso2(hOverEConeSize_,0.,0.,2,hcalTowersColl) ;
491  double HoE1=towerIso1.getTowerESum(&(*scRef))/scRef->energy();
492  double HoE2=towerIso2.getTowerESum(&(*scRef))/scRef->energy();
493 
494  EgammaHadTower towerIsoBehindClus(es);
495  towerIsoBehindClus.setTowerCollection(hcalTowersHandle.product());
496  std::vector<CaloTowerDetId> TowersBehindClus = towerIsoBehindClus.towersOf(*scRef);
497  float hcalDepth1OverEcalBc = towerIsoBehindClus.getDepth1HcalESum(TowersBehindClus)/scRef->energy();
498  float hcalDepth2OverEcalBc = towerIsoBehindClus.getDepth2HcalESum(TowersBehindClus)/scRef->energy();
499  // std::cout << " GEDPhotonProducer calculation of HoE with towers in a cone " << HoE1 << " " << HoE2 << std::endl;
500  //std::cout << " GEDPhotonProducer calcualtion of HoE with towers behind the BCs " << hcalDepth1OverEcalBc << " " << hcalDepth2OverEcalBc << std::endl;
501 
502  float maxXtal = EcalClusterTools::eMax( *(scRef->seed()), &(*hits) );
503  //AA
504  //Change these to consider severity level of hits
505  float e1x5 = EcalClusterTools::e1x5( *(scRef->seed()), &(*hits), &(*topology));
506  float e2x5 = EcalClusterTools::e2x5Max( *(scRef->seed()), &(*hits), &(*topology));
507  float e3x3 = EcalClusterTools::e3x3( *(scRef->seed()), &(*hits), &(*topology));
508  float e5x5 = EcalClusterTools::e5x5( *(scRef->seed()), &(*hits), &(*topology));
509  std::vector<float> cov = EcalClusterTools::covariances( *(scRef->seed()), &(*hits), &(*topology), geometry);
510  std::vector<float> locCov = EcalClusterTools::localCovariances( *(scRef->seed()), &(*hits), &(*topology));
511 
512  float sigmaEtaEta = sqrt(cov[0]);
513  float sigmaIetaIeta = sqrt(locCov[0]);
514 
515  float full5x5_maxXtal = noZS::EcalClusterTools::eMax( *(scRef->seed()), &(*hits) );
516  //AA
517  //Change these to consider severity level of hits
518  float full5x5_e1x5 = noZS::EcalClusterTools::e1x5( *(scRef->seed()), &(*hits), &(*topology));
519  float full5x5_e2x5 = noZS::EcalClusterTools::e2x5Max( *(scRef->seed()), &(*hits), &(*topology));
520  float full5x5_e3x3 = noZS::EcalClusterTools::e3x3( *(scRef->seed()), &(*hits), &(*topology));
521  float full5x5_e5x5 = noZS::EcalClusterTools::e5x5( *(scRef->seed()), &(*hits), &(*topology));
522  std::vector<float> full5x5_cov = noZS::EcalClusterTools::covariances( *(scRef->seed()), &(*hits), &(*topology), geometry);
523  std::vector<float> full5x5_locCov = noZS::EcalClusterTools::localCovariances( *(scRef->seed()), &(*hits), &(*topology));
524 
525  float full5x5_sigmaEtaEta = sqrt(full5x5_cov[0]);
526  float full5x5_sigmaIetaIeta = sqrt(full5x5_locCov[0]);
527 
528  // compute position of ECAL shower
529  math::XYZPoint caloPosition = scRef->position();
530 
531 
533  double photonEnergy=1.;
534  math::XYZPoint vtx(0.,0.,0.);
535  if (vertexCollection.size()>0) vtx = vertexCollection.begin()->position();
536  // compute momentum vector of photon from primary vertex and cluster position
537  math::XYZVector direction = caloPosition - vtx;
538  //math::XYZVector momentum = direction.unit() * photonEnergy ;
539  math::XYZVector momentum = direction.unit() ;
540 
541  // Create dummy candidate with unit momentum and zero energy to allow setting of all variables. The energy is set for last.
542  math::XYZTLorentzVectorD p4(momentum.x(), momentum.y(), momentum.z(), photonEnergy );
543  reco::Photon newCandidate(p4, caloPosition, coreRef, vtx);
544 
545  //std::cout << " standard p4 before " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
546  //std::cout << " type " <<newCandidate.getCandidateP4type() << " standard p4 after " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
547 
548  // Calculate fiducial flags and isolation variable. Blocked are filled from the isolationCalculator
549  reco::Photon::FiducialFlags fiducialFlags;
550  reco::Photon::IsolationVariables isolVarR03, isolVarR04;
551  thePhotonIsolationCalculator_-> calculate ( &newCandidate,evt,es,fiducialFlags,isolVarR04, isolVarR03);
552  newCandidate.setFiducialVolumeFlags( fiducialFlags );
553  newCandidate.setIsolationVariables(isolVarR04, isolVarR03 );
554 
556  reco::Photon::ShowerShape showerShape;
557  showerShape.e1x5= e1x5;
558  showerShape.e2x5= e2x5;
559  showerShape.e3x3= e3x3;
560  showerShape.e5x5= e5x5;
561  showerShape.maxEnergyXtal = maxXtal;
562  showerShape.sigmaEtaEta = sigmaEtaEta;
563  showerShape.sigmaIetaIeta = sigmaIetaIeta;
564  showerShape.hcalDepth1OverEcal = HoE1;
565  showerShape.hcalDepth2OverEcal = HoE2;
566  showerShape.hcalDepth1OverEcalBc = hcalDepth1OverEcalBc;
567  showerShape.hcalDepth2OverEcalBc = hcalDepth2OverEcalBc;
568  showerShape.hcalTowersBehindClusters = TowersBehindClus;
570  const float spp = (!edm::isFinite(locCov[2]) ? 0. : sqrt(locCov[2]));
571  const float sep = locCov[1];
572  showerShape.sigmaIetaIphi = sep;
573  showerShape.sigmaIphiIphi = spp;
574  showerShape.e2nd = EcalClusterTools::e2nd(*(scRef->seed()),&(*hits));
575  showerShape.eTop = EcalClusterTools::eTop(*(scRef->seed()), &(*hits), &(*topology));
576  showerShape.eLeft = EcalClusterTools::eLeft(*(scRef->seed()), &(*hits), &(*topology));
577  showerShape.eRight = EcalClusterTools::eRight(*(scRef->seed()), &(*hits), &(*topology));
578  showerShape.eBottom = EcalClusterTools::eBottom(*(scRef->seed()), &(*hits), &(*topology));
579  showerShape.e1x3 = EcalClusterTools::e1x3(*(scRef->seed()), &(*hits), &(*topology));
580  showerShape.e2x2 = EcalClusterTools::e2x2(*(scRef->seed()), &(*hits), &(*topology));
581  showerShape.e2x5Max = EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology));
582  showerShape.e2x5Left = EcalClusterTools::e2x5Left(*(scRef->seed()), &(*hits), &(*topology));
583  showerShape.e2x5Right = EcalClusterTools::e2x5Right(*(scRef->seed()), &(*hits), &(*topology));
584  showerShape.e2x5Top = EcalClusterTools::e2x5Top(*(scRef->seed()), &(*hits), &(*topology));
585  showerShape.e2x5Bottom = EcalClusterTools::e2x5Bottom(*(scRef->seed()), &(*hits), &(*topology));
586  // fill preshower shapes
588  const float sigmaRR = toolsforES.eseffsirir( *scRef );
589  showerShape.effSigmaRR = sigmaRR;
590  newCandidate.setShowerShapeVariables ( showerShape );
591 
593  reco::Photon::ShowerShape full5x5_showerShape;
594  full5x5_showerShape.e1x5= full5x5_e1x5;
595  full5x5_showerShape.e2x5= full5x5_e2x5;
596  full5x5_showerShape.e3x3= full5x5_e3x3;
597  full5x5_showerShape.e5x5= full5x5_e5x5;
598  full5x5_showerShape.maxEnergyXtal = full5x5_maxXtal;
599  full5x5_showerShape.sigmaEtaEta = full5x5_sigmaEtaEta;
600  full5x5_showerShape.sigmaIetaIeta = full5x5_sigmaIetaIeta;
602  const float full5x5_spp = (!edm::isFinite(full5x5_locCov[2]) ? 0. : sqrt(full5x5_locCov[2]));
603  const float full5x5_sep = full5x5_locCov[1];
604  full5x5_showerShape.sigmaIetaIphi = full5x5_sep;
605  full5x5_showerShape.sigmaIphiIphi = full5x5_spp;
606  full5x5_showerShape.e2nd = noZS::EcalClusterTools::e2nd(*(scRef->seed()),&(*hits));
607  full5x5_showerShape.eTop = noZS::EcalClusterTools::eTop(*(scRef->seed()), &(*hits), &(*topology));
608  full5x5_showerShape.eLeft = noZS::EcalClusterTools::eLeft(*(scRef->seed()), &(*hits), &(*topology));
609  full5x5_showerShape.eRight = noZS::EcalClusterTools::eRight(*(scRef->seed()), &(*hits), &(*topology));
610  full5x5_showerShape.eBottom = noZS::EcalClusterTools::eBottom(*(scRef->seed()), &(*hits), &(*topology));
611  full5x5_showerShape.e1x3 = noZS::EcalClusterTools::e1x3(*(scRef->seed()), &(*hits), &(*topology));
612  full5x5_showerShape.e2x2 = noZS::EcalClusterTools::e2x2(*(scRef->seed()), &(*hits), &(*topology));
613  full5x5_showerShape.e2x5Max = noZS::EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology));
614  full5x5_showerShape.e2x5Left = noZS::EcalClusterTools::e2x5Left(*(scRef->seed()), &(*hits), &(*topology));
615  full5x5_showerShape.e2x5Right = noZS::EcalClusterTools::e2x5Right(*(scRef->seed()), &(*hits), &(*topology));
616  full5x5_showerShape.e2x5Top = noZS::EcalClusterTools::e2x5Top(*(scRef->seed()), &(*hits), &(*topology));
617  full5x5_showerShape.e2x5Bottom = noZS::EcalClusterTools::e2x5Bottom(*(scRef->seed()), &(*hits), &(*topology));
618  // fill preshower shapes
619  full5x5_showerShape.effSigmaRR = sigmaRR;
620  newCandidate.full5x5_setShowerShapeVariables ( full5x5_showerShape );
621 
622 
623 
626  // Photon candidate takes by default (set in photons_cfi.py)
627  // a 4-momentum derived from the ecal photon-specific corrections.
628  thePhotonEnergyCorrector_->calculate(evt, newCandidate, subdet, vertexCollection, es);
629  if ( candidateP4type_ == "fromEcalEnergy") {
630  newCandidate.setP4( newCandidate.p4(reco::Photon::ecal_photons) );
631  newCandidate.setCandidateP4type(reco::Photon::ecal_photons);
632  } else if ( candidateP4type_ == "fromRegression1") {
633  newCandidate.setP4( newCandidate.p4(reco::Photon::regression1) );
634  newCandidate.setCandidateP4type(reco::Photon::regression1);
635  } else if ( candidateP4type_ == "fromRegression2") {
636  newCandidate.setP4( newCandidate.p4(reco::Photon::regression2) );
637  newCandidate.setCandidateP4type(reco::Photon::regression2);
638  } else if ( candidateP4type_ == "fromRefinedSCRegression" ) {
639  newCandidate.setP4( newCandidate.p4(reco::Photon::regression2) );
640  newCandidate.setCandidateP4type(reco::Photon::regression2);
641  }
642 
643  // std::cout << " final p4 " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
644 
645 
646  // std::cout << " GEDPhotonProducer from candidate HoE with towers in a cone " << newCandidate.hadronicOverEm() << " " << newCandidate.hadronicDepth1OverEm() << " " << newCandidate.hadronicDepth2OverEm() << std::endl;
647  // std::cout << " GEDPhotonProducer from candidate of HoE with towers behind the BCs " << newCandidate.hadTowOverEm() << " " << newCandidate.hadTowDepth1OverEm() << " " << newCandidate.hadTowDepth2OverEm() << std::endl;
648 
649 
650  // fill MIP Vairables for Halo: Block for MIP are filled from PhotonMIPHaloTagger
652  if(subdet==EcalBarrel && runMIPTagger_ )
653  {
654 
655  thePhotonMIPHaloTagger_-> MIPcalculate( &newCandidate,evt,es,mipVar);
656  newCandidate.setMIPVariables(mipVar);
657  }
658 
659 
660 
662  bool isLooseEM=true;
663  if ( newCandidate.pt() < highEt_) {
664  if ( newCandidate.hadronicOverEm() >= preselCutValues[1] ) isLooseEM=false;
665  if ( newCandidate.ecalRecHitSumEtConeDR04() > preselCutValues[2]+ preselCutValues[3]*newCandidate.pt() ) isLooseEM=false;
666  if ( newCandidate.hcalTowerSumEtConeDR04() > preselCutValues[4]+ preselCutValues[5]*newCandidate.pt() ) isLooseEM=false;
667  if ( newCandidate.nTrkSolidConeDR04() > int(preselCutValues[6]) ) isLooseEM=false;
668  if ( newCandidate.nTrkHollowConeDR04() > int(preselCutValues[7]) ) isLooseEM=false;
669  if ( newCandidate.trkSumPtSolidConeDR04() > preselCutValues[8] ) isLooseEM=false;
670  if ( newCandidate.trkSumPtHollowConeDR04() > preselCutValues[9] ) isLooseEM=false;
671  if ( newCandidate.sigmaIetaIeta() > preselCutValues[10] ) isLooseEM=false;
672  }
673 
674 
675 
676  if ( isLooseEM)
677  outputPhotonCollection.push_back(newCandidate);
678 
679 
680  }
681 }
PhotonEnergyCorrector * thePhotonEnergyCorrector_
PhotonMIPHaloTagger * thePhotonMIPHaloTagger_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
edm::ESHandle< CaloGeometry > theCaloGeom_
static float e2x5Bottom(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
std::vector< CaloTowerDetId > hcalTowersBehindClusters
Definition: Photon.h:151
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
static std::vector< float > covariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, const CaloGeometry *geometry, float w0=4.7)
static float eMax(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits)
std::vector< int > flagsexclEB_
edm::EDGetTokenT< EcalRecHitCollection > endcapEcalHits_
PhotonIsolationCalculator * thePhotonIsolationCalculator_
std::vector< int > severitiesexclEE_
tuple vertexCollection
double ptFast(const double energy, const math::XYZPoint &position, const math::XYZPoint &origin)
static float e2x5Top(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
bool isFinite(T x)
edm::EDGetTokenT< EcalRecHitCollection > barrelEcalHits_
static float e2x2(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
T sqrt(T t)
Definition: SSEVec.h:18
double p4[4]
Definition: TauolaWrapper.h:92
static float e2nd(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits)
std::vector< int > flagsexclEE_
static float e2x5Max(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float eBottom(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float e2x5Right(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
std::vector< int > severitiesexclEB_
static float eTop(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
void calculate(edm::Event &evt, reco::Photon &, int subdet, const reco::VertexCollection &vtxcol, const edm::EventSetup &iSetup)
T const * product() const
Definition: Handle.h:81
std::vector< double > preselCutValuesBarrel_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
std::vector< double > preselCutValuesEndcap_
T const * product() const
Definition: ESHandle.h:86
static float e2x5Left(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
std::string candidateP4type_
ESHandle< TrackerGeometry > geometry
static float eRight(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float e3x3(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float e1x3(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float eLeft(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static std::vector< float > localCovariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, float w0=4.7)
edm::EDGetTokenT< EcalRecHitCollection > preshowerHits_
static float e1x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float e5x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
void GEDPhotonProducer::fillPhotonCollection ( edm::Event evt,
edm::EventSetup const &  es,
const edm::Handle< reco::PhotonCollection > &  photonHandle,
const edm::Handle< reco::PFCandidateCollection pfCandidateHandle,
const edm::Handle< reco::PFCandidateCollection pfEGCandidateHandle,
edm::ValueMap< reco::PhotonRef pfEGCandToPhotonMap,
edm::Handle< reco::VertexCollection > &  pvVertices,
reco::PhotonCollection outputCollection,
int &  iSC 
)
private

Definition at line 686 of file GEDPhotonProducer.cc.

References PhotonEnergyCorrector::calculate(), PFPhotonIsolationCalculator::calculate(), candidateP4type_, reco::Photon::ecal_photons, EcalBarrel, EcalEndcap, edm::Ref< C, T, F >::isNonnull(), reco::Photon::p4(), preselCutValuesBarrel_, preselCutValuesEndcap_, ptFast(), reco::Photon::regression1, reco::Photon::regression2, reco::Photon::setCandidateP4type(), reco::Photon::setP4(), reco::Photon::setPflowIDVariables(), reco::Photon::setPflowIsolationVariables(), thePFBasedIsolationCalculator_, and thePhotonEnergyCorrector_.

693  {
694 
695 
696 
697  std::vector<double> preselCutValues;
698 
699 
700  for(unsigned int lSC=0; lSC < photonHandle->size(); lSC++) {
701  reco::PhotonRef phoRef(reco::PhotonRef(photonHandle, lSC));
702  reco::SuperClusterRef parentSCRef = phoRef->parentSuperCluster();
703  reco::SuperClusterRef scRef=phoRef->superCluster();
704  int subdet = scRef->seed()->hitsAndFractions()[0].first.subdetId();
705  if (subdet==EcalBarrel) {
706  preselCutValues = preselCutValuesBarrel_;
707  } else if (subdet==EcalEndcap) {
708  preselCutValues = preselCutValuesEndcap_;
709  } else {
710  edm::LogWarning("")<<"GEDPhotonProducer: do not know if it is a barrel or endcap SuperCluster";
711  }
712 
713 
714 
715  // SC energy preselection
716  if (parentSCRef.isNonnull() &&
717  ptFast(parentSCRef->energy(),parentSCRef->position(),math::XYZPoint(0,0,0)) <= preselCutValues[0] ) continue;
718  reco::Photon newCandidate(*phoRef);
719  iSC++;
720 
721 
722  // Calculate the PF isolation and ID - for the time being there is no calculation. Only the setting
725  thePFBasedIsolationCalculator_->calculate (&newCandidate, pfCandidateHandle, vertexHandle, evt, es, pfIso );
726  newCandidate.setPflowIsolationVariables(pfIso);
727  newCandidate.setPflowIDVariables(pfID);
728 
729  // do the regression
730  thePhotonEnergyCorrector_->calculate(evt, newCandidate, subdet, *vertexHandle, es);
731  if ( candidateP4type_ == "fromEcalEnergy") {
732  newCandidate.setP4( newCandidate.p4(reco::Photon::ecal_photons) );
733  newCandidate.setCandidateP4type(reco::Photon::ecal_photons);
734  } else if ( candidateP4type_ == "fromRegression1") {
735  newCandidate.setP4( newCandidate.p4(reco::Photon::regression1) );
736  newCandidate.setCandidateP4type(reco::Photon::regression1);
737  } else if ( candidateP4type_ == "fromRegression2") {
738  newCandidate.setP4( newCandidate.p4(reco::Photon::regression2) );
739  newCandidate.setCandidateP4type(reco::Photon::regression2);
740  } else if ( candidateP4type_ == "fromRefinedSCRegression" ) {
741  newCandidate.setP4( newCandidate.p4(reco::Photon::regression2) );
742  newCandidate.setCandidateP4type(reco::Photon::regression2);
743  }
744 
745  // std::cout << " GEDPhotonProducer pf based isolation chargedHadron " << newCandidate.chargedHadronIso() << " neutralHadron " << newCandidate.neutralHadronIso() << " Photon " << newCandidate.photonIso() << std::endl;
746  //std::cout << " GEDPhotonProducer from candidate HoE with towers in a cone " << newCandidate.hadronicOverEm() << " " << newCandidate.hadronicDepth1OverEm() << " " << newCandidate.hadronicDepth2OverEm() << std::endl;
747  //std::cout << " GEDPhotonProducer from candidate of HoE with towers behind the BCs " << newCandidate.hadTowOverEm() << " " << newCandidate.hadTowDepth1OverEm() << " " << newCandidate.hadTowDepth2OverEm() << std::endl;
748  //std::cout << " standard p4 before " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
749  //std::cout << " type " <<newCandidate.getCandidateP4type() << " standard p4 after " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
750  //std::cout << " final p4 " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
751 
752  outputPhotonCollection.push_back(newCandidate);
753 
754  }
755 
756 }
PhotonEnergyCorrector * thePhotonEnergyCorrector_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
double ptFast(const double energy, const math::XYZPoint &position, const math::XYZPoint &origin)
PFPhotonIsolationCalculator * thePFBasedIsolationCalculator_
void calculate(edm::Event &evt, reco::Photon &, int subdet, const reco::VertexCollection &vtxcol, const edm::EventSetup &iSetup)
std::vector< double > preselCutValuesBarrel_
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
std::vector< double > preselCutValuesEndcap_
std::string candidateP4type_
void calculate(const reco::Photon *, const edm::Handle< reco::PFCandidateCollection > pfCandidateHandle, edm::Handle< reco::VertexCollection > &vertices, const edm::Event &e, const edm::EventSetup &es, reco::Photon::PflowIsolationVariables &phoisol03)
void GEDPhotonProducer::produce ( edm::Event evt,
const edm::EventSetup es 
)
virtual

Implements edm::stream::EDProducerBase.

Definition at line 231 of file GEDPhotonProducer.cc.

References barrelEcalHits_, endcapEcalHits_, Exception, edm::helper::Filler< Map >::fill(), fillPhotonCollection(), PhotonEnergyCorrector::gedRegression(), edm::EventSetup::get(), edm::Event::getByToken(), hcalTowers_, PhotonEnergyCorrector::init(), edm::helper::Filler< Map >::insert(), edm::InputTag::label(), pfCandidates_, pfEgammaCandidates_, photonCollection_, photonCoreProducerT_, photonProducer_, photonProducerT_, preshowerHits_, edm::ESHandle< class >::product(), edm::Event::put(), reconstructionStep_, theCaloGeom_, theCaloTopo_, thePhotonEnergyCorrector_, ecaldqm::topology(), usePrimaryVertex_, valueMapPFCandPhoton_, makeHLTPrescaleTable::values, GoodVertex_cfg::vertexCollection, and vertexProducer_.

231  {
232 
233  using namespace edm;
234  // nEvt_++;
235 
236  reco::PhotonCollection outputPhotonCollection;
237  std::auto_ptr< reco::PhotonCollection > outputPhotonCollection_p(new reco::PhotonCollection);
238  edm::ValueMap<reco::PhotonRef> pfEGCandToPhotonMap;
239 
240 
241  // Get the PhotonCore collection
242  bool validPhotonCoreHandle=false;
243  Handle<reco::PhotonCoreCollection> photonCoreHandle;
244  bool validPhotonHandle= false;
245  Handle<reco::PhotonCollection> photonHandle;
246 
247  if ( reconstructionStep_ == "final" ) {
248  theEvent.getByToken(photonProducerT_,photonHandle);
249  if ( photonHandle.isValid()) {
250  validPhotonHandle=true;
251  } else {
252  throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the product " << photonProducer_.label() << "\n";
253  }
254  } else {
255 
256  theEvent.getByToken(photonCoreProducerT_,photonCoreHandle);
257  if (photonCoreHandle.isValid()) {
258  validPhotonCoreHandle=true;
259  } else {
260  throw cms::Exception("GEDPhotonProducer")
261  << "Error! Can't get the photonCoreProducer" << photonProducer_.label() << "\n";
262  }
263  }
264 
265  // Get EcalRecHits
266  bool validEcalRecHits=true;
267  Handle<EcalRecHitCollection> barrelHitHandle;
268  const EcalRecHitCollection dummyEB;
269  theEvent.getByToken(barrelEcalHits_, barrelHitHandle);
270  if (!barrelHitHandle.isValid()) {
271  validEcalRecHits=false;
272  throw cms::Exception("GEDPhotonProducer")
273  << "Error! Can't get the barrelEcalHits";
274  }
275  const EcalRecHitCollection& barrelRecHits(validEcalRecHits ? *(barrelHitHandle.product()) : dummyEB);
276 
277  Handle<EcalRecHitCollection> endcapHitHandle;
278  theEvent.getByToken(endcapEcalHits_, endcapHitHandle);
279  const EcalRecHitCollection dummyEE;
280  if (!endcapHitHandle.isValid()) {
281  validEcalRecHits=false;
282  throw cms::Exception("GEDPhotonProducer")
283  << "Error! Can't get the endcapEcalHits";
284  }
285  const EcalRecHitCollection& endcapRecHits(validEcalRecHits ? *(endcapHitHandle.product()) : dummyEE);
286 
287  bool validPreshowerRecHits=true;
288  Handle<EcalRecHitCollection> preshowerHitHandle;
289  theEvent.getByToken(preshowerHits_, preshowerHitHandle);
290  EcalRecHitCollection preshowerRecHits;
291  if (!preshowerHitHandle.isValid()) {
292  validPreshowerRecHits=false;
293  throw cms::Exception("GEDPhotonProducer")
294  << "Error! Can't get the preshowerEcalHits";
295  }
296  if( validPreshowerRecHits ) preshowerRecHits = *(preshowerHitHandle.product());
297 
298 
299 
300  Handle<reco::PFCandidateCollection> pfEGCandidateHandle;
301  // Get the PF refined cluster collection
302  theEvent.getByToken(pfEgammaCandidates_,pfEGCandidateHandle);
303  if (!pfEGCandidateHandle.isValid()) {
304  throw cms::Exception("GEDPhotonProducer")
305  << "Error! Can't get the pfEgammaCandidates";
306  }
307 
308  Handle<reco::PFCandidateCollection> pfCandidateHandle;
309 
310  if ( reconstructionStep_ == "final" ) {
311  // Get the PF candidates collection
312  theEvent.getByToken(pfCandidates_,pfCandidateHandle);
313  if (!pfCandidateHandle.isValid()) {
314  throw cms::Exception("GEDPhotonProducer")
315  << "Error! Can't get the pfCandidates";
316  }
317  }
318 
319  //AA
320  //Get the severity level object
322  theEventSetup.get<EcalSeverityLevelAlgoRcd>().get(sevLv);
323  //
324 
325 
326 // get Hcal towers collection
327  Handle<CaloTowerCollection> hcalTowersHandle;
328  theEvent.getByToken(hcalTowers_, hcalTowersHandle);
329 
330 
331  // get the geometry from the event setup:
332  theEventSetup.get<CaloGeometryRecord>().get(theCaloGeom_);
333 
334  //
335  // update energy correction function
336  // energyCorrectionF->init(theEventSetup);
337 
338  edm::ESHandle<CaloTopology> pTopology;
339  theEventSetup.get<CaloTopologyRecord>().get(theCaloTopo_);
341 
342  // Get the primary event vertex
343  Handle<reco::VertexCollection> vertexHandle;
344  const reco::VertexCollection dummyVC;
345  bool validVertex=true;
346  if ( usePrimaryVertex_ ) {
347  theEvent.getByToken(vertexProducer_, vertexHandle);
348  if (!vertexHandle.isValid()) {
349  validVertex=false;
350  throw cms::Exception("GEDPhotonProducer")
351  << "Error! Can't get the product primary Vertex Collection";
352  }
353  }
354  const reco::VertexCollection& vertexCollection(usePrimaryVertex_ && validVertex ? *(vertexHandle.product()) : dummyVC);
355 
356  // math::XYZPoint vtx(0.,0.,0.);
357  //if (vertexCollection.size()>0) vtx = vertexCollection.begin()->position();
358 
359  // get the regression calculator ready
360  thePhotonEnergyCorrector_->init(theEventSetup);
362  thePhotonEnergyCorrector_->gedRegression()->setEvent(theEvent);
363  thePhotonEnergyCorrector_->gedRegression()->setEventContent(theEventSetup);
364  }
365 
366 
367  int iSC=0; // index in photon collection
368  // Loop over barrel and endcap SC collections and fill the photon collection
369  if ( validPhotonCoreHandle)
370  fillPhotonCollection(theEvent,
371  theEventSetup,
372  photonCoreHandle,
373  topology,
374  &barrelRecHits,
375  &endcapRecHits,
376  &preshowerRecHits,
377  hcalTowersHandle,
378  //vtx,
380  outputPhotonCollection,
381  iSC);
382 
383  iSC=0;
384  if ( validPhotonHandle && reconstructionStep_ == "final" )
385  fillPhotonCollection(theEvent,
386  theEventSetup,
387  photonHandle,
388  pfCandidateHandle,
389  pfEGCandidateHandle,
390  pfEGCandToPhotonMap,
391  vertexHandle,
392  outputPhotonCollection,
393  iSC);
394 
395 
396 
397  // put the product in the event
398  edm::LogInfo("GEDPhotonProducer") << " Put in the event " << iSC << " Photon Candidates \n";
399  outputPhotonCollection_p->assign(outputPhotonCollection.begin(),outputPhotonCollection.end());
400  const edm::OrphanHandle<reco::PhotonCollection> photonOrphHandle = theEvent.put(outputPhotonCollection_p, photonCollection_);
401 
402 
403  if ( reconstructionStep_ != "final" ) {
405  std::auto_ptr<edm::ValueMap<reco::PhotonRef> > pfEGCandToPhotonMap_p(new edm::ValueMap<reco::PhotonRef>());
406  edm::ValueMap<reco::PhotonRef>::Filler filler(*pfEGCandToPhotonMap_p);
407  unsigned nObj = pfEGCandidateHandle->size();
408  std::vector<reco::PhotonRef> values(nObj);
410  for(unsigned int lCand=0; lCand < nObj; lCand++) {
411  reco::PFCandidateRef pfCandRef (reco::PFCandidateRef(pfEGCandidateHandle,lCand));
412  reco::SuperClusterRef pfScRef = pfCandRef -> superClusterRef();
413 
414  for(unsigned int lSC=0; lSC < photonOrphHandle->size(); lSC++) {
415  reco::PhotonRef photonRef(reco::PhotonRef(photonOrphHandle, lSC));
416  reco::SuperClusterRef scRef=photonRef->superCluster();
417  if ( pfScRef != scRef ) continue;
418  values[lCand] = photonRef;
419  }
420  }
421 
422 
423  filler.insert(pfEGCandidateHandle,values.begin(),values.end());
424  filler.fill();
425  theEvent.put(pfEGCandToPhotonMap_p,valueMapPFCandPhoton_);
426 
427 
428  }
429 
430 
431 
432 
433 
434 
435 }
edm::InputTag photonProducer_
PhotonEnergyCorrector * thePhotonEnergyCorrector_
edm::EDGetTokenT< reco::PFCandidateCollection > pfCandidates_
edm::ESHandle< CaloGeometry > theCaloGeom_
edm::EDGetTokenT< CaloTowerCollection > hcalTowers_
CaloTopology const * topology(0)
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
edm::EDGetTokenT< EcalRecHitCollection > endcapEcalHits_
std::string reconstructionStep_
tuple vertexCollection
std::unique_ptr< ModifyObjectValueBase > & gedRegression()
std::string photonCollection_
edm::ESHandle< CaloTopology > theCaloTopo_
edm::EDGetTokenT< EcalRecHitCollection > barrelEcalHits_
edm::EDGetTokenT< reco::PhotonCoreCollection > photonCoreProducerT_
void init(const edm::EventSetup &theEventSetup)
edm::EDGetTokenT< reco::PFCandidateCollection > pfEgammaCandidates_
edm::EDGetTokenT< reco::PhotonCollection > photonProducerT_
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
T const * product() const
Definition: ESHandle.h:86
void fillPhotonCollection(edm::Event &evt, edm::EventSetup const &es, const edm::Handle< reco::PhotonCoreCollection > &photonCoreHandle, const CaloTopology *topology, const EcalRecHitCollection *ecalBarrelHits, const EcalRecHitCollection *ecalEndcapHits, const EcalRecHitCollection *preshowerHits, const edm::Handle< CaloTowerCollection > &hcalTowersHandle, const reco::VertexCollection &pvVertices, reco::PhotonCollection &outputCollection, int &iSC)
std::string const & label() const
Definition: InputTag.h:36
edm::EDGetTokenT< reco::VertexCollection > vertexProducer_
edm::EDGetTokenT< EcalRecHitCollection > preshowerHits_
std::string valueMapPFCandPhoton_

Member Data Documentation

edm::EDGetTokenT<EcalRecHitCollection> GEDPhotonProducer::barrelEcalHits_
private

Definition at line 84 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), GEDPhotonProducer(), and produce().

std::string GEDPhotonProducer::candidateP4type_
private

Definition at line 136 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

edm::ParameterSet GEDPhotonProducer::conf_
private

Definition at line 120 of file GEDPhotonProducer.h.

Referenced by beginRun(), and GEDPhotonProducer().

std::string GEDPhotonProducer::conversionCollection_
private

Definition at line 93 of file GEDPhotonProducer.h.

std::string GEDPhotonProducer::conversionProducer_
private

Definition at line 92 of file GEDPhotonProducer.h.

edm::EDGetTokenT<EcalRecHitCollection> GEDPhotonProducer::endcapEcalHits_
private

Definition at line 85 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), GEDPhotonProducer(), and produce().

EcalClusterFunctionBaseClass* GEDPhotonProducer::energyCorrectionF
private

Definition at line 134 of file GEDPhotonProducer.h.

std::vector<int> GEDPhotonProducer::flagsexclEB_
private

Definition at line 102 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

std::vector<int> GEDPhotonProducer::flagsexclEE_
private

Definition at line 103 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

edm::EDGetTokenT<CaloTowerCollection> GEDPhotonProducer::hcalTowers_
private

Definition at line 89 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

double GEDPhotonProducer::highEt_
private

Definition at line 111 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

double GEDPhotonProducer::hOverEConeSize_
private

Definition at line 108 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

double GEDPhotonProducer::maxHOverE_
private

Definition at line 109 of file GEDPhotonProducer.h.

double GEDPhotonProducer::minR9Barrel_
private

Definition at line 112 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer().

double GEDPhotonProducer::minR9Endcap_
private

Definition at line 113 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer().

double GEDPhotonProducer::minSCEt_
private

Definition at line 110 of file GEDPhotonProducer.h.

edm::EDGetTokenT<reco::PFCandidateCollection> GEDPhotonProducer::pfCandidates_
private

Definition at line 88 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

edm::EDGetTokenT<reco::PFCandidateCollection> GEDPhotonProducer::pfEgammaCandidates_
private

Definition at line 87 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

std::string GEDPhotonProducer::photonCollection_
private

Definition at line 79 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

edm::EDGetTokenT<reco::PhotonCoreCollection> GEDPhotonProducer::photonCoreProducerT_
private

Definition at line 82 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

edm::InputTag GEDPhotonProducer::photonProducer_
private

Definition at line 80 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

edm::EDGetTokenT<reco::PhotonCollection> GEDPhotonProducer::photonProducerT_
private

Definition at line 83 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

PositionCalc GEDPhotonProducer::posCalculator_
private

Definition at line 121 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer().

std::vector<double> GEDPhotonProducer::preselCutValuesBarrel_
private

Definition at line 131 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

std::vector<double> GEDPhotonProducer::preselCutValuesEndcap_
private

Definition at line 132 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

edm::EDGetTokenT<EcalRecHitCollection> GEDPhotonProducer::preshowerHits_
private

Definition at line 86 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), GEDPhotonProducer(), and produce().

std::string GEDPhotonProducer::reconstructionStep_
private

Definition at line 117 of file GEDPhotonProducer.h.

Referenced by beginRun(), endRun(), GEDPhotonProducer(), and produce().

bool GEDPhotonProducer::runMIPTagger_
private

Definition at line 114 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

std::vector<int> GEDPhotonProducer::severitiesexclEB_
private

Definition at line 104 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

std::vector<int> GEDPhotonProducer::severitiesexclEE_
private

Definition at line 105 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and GEDPhotonProducer().

edm::ESHandle<CaloGeometry> GEDPhotonProducer::theCaloGeom_
private

Definition at line 123 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), and produce().

edm::ESHandle<CaloTopology> GEDPhotonProducer::theCaloTopo_
private

Definition at line 124 of file GEDPhotonProducer.h.

Referenced by produce().

PFPhotonIsolationCalculator* GEDPhotonProducer::thePFBasedIsolationCalculator_
private

Definition at line 96 of file GEDPhotonProducer.h.

Referenced by beginRun(), endRun(), and fillPhotonCollection().

PhotonEnergyCorrector* GEDPhotonProducer::thePhotonEnergyCorrector_
private
PhotonIsolationCalculator* GEDPhotonProducer::thePhotonIsolationCalculator_
private

Definition at line 97 of file GEDPhotonProducer.h.

Referenced by fillPhotonCollection(), GEDPhotonProducer(), and ~GEDPhotonProducer().

PhotonMIPHaloTagger* GEDPhotonProducer::thePhotonMIPHaloTagger_
private
bool GEDPhotonProducer::usePrimaryVertex_
private

Definition at line 119 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

bool GEDPhotonProducer::validConversions_
private

Definition at line 116 of file GEDPhotonProducer.h.

bool GEDPhotonProducer::validPixelSeeds_
private

Definition at line 126 of file GEDPhotonProducer.h.

std::string GEDPhotonProducer::valueMapPFCandPhoton_
private

Definition at line 94 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().

edm::EDGetTokenT<reco::VertexCollection> GEDPhotonProducer::vertexProducer_
private

Definition at line 90 of file GEDPhotonProducer.h.

Referenced by GEDPhotonProducer(), and produce().