35 useSCRefs_ (config.getParameter<bool>(
"useSCRefs")),
36 useTrackProjectionToEcal_ (config.getParameter<bool>(
"useTrackProjectionToEcal")),
37 variablesAtVtx_ (config.getParameter<bool>(
"variablesAtVtx")) {
41 produces < reco::ElectronIsolationMap >(
"Deta" ).setBranchAlias(
"deta" );
42 produces < reco::ElectronIsolationMap >(
"Dphi" ).setBranchAlias(
"dphi" );
44 produces < reco::RecoEcalCandidateIsolationMap >(
"Deta" ).setBranchAlias(
"deta" );
45 produces < reco::RecoEcalCandidateIsolationMap >(
"Dphi" ).setBranchAlias(
"dphi" );
57 desc.
add<
bool>((
"useSCRefs"),
false);
58 desc.
add<
bool>((
"useTrackProjectionToEcal"),
false);
59 desc.
add<
bool>((
"variablesAtVtx"),
true);
60 descriptions.
add((
"hltEgammaHLTElectronDetaDphiProducer"), desc);
81 for(reco::ElectronCollection::const_iterator iElectron = electronHandle->begin(); iElectron != electronHandle->end(); iElectron++){
86 detaMap.
insert(eleref, dEtaDPhi.first);
87 dphiMap.
insert(eleref, dEtaDPhi.second);
95 for(reco::RecoEcalCandidateCollection::const_iterator iRecoEcalCand = recoEcalCandHandle->begin(); iRecoEcalCand != recoEcalCandHandle->end(); iRecoEcalCand++){
100 std::pair<float,float> dEtaDPhi(999999,999999);
102 detaCandMap.
insert(recoEcalCandRef, dEtaDPhi.first);
103 dphiCandMap.
insert(recoEcalCandRef, dEtaDPhi.second);
108 iEvent.
put(detaCandMapForEvent,
"Deta" );
109 iEvent.
put(dphiCandMapForEvent,
"Dphi" );
116 iEvent.
put(detMap,
"Deta" );
117 iEvent.
put(dphMap,
"Dphi" );
126 math::XYZPoint SCcorrPosition(theClus->x()-bsPosition.x(), theClus->y()-bsPosition.y() , theClus->z()-eleref->track()->vz() );
127 float deltaeta = fabs(SCcorrPosition.eta()-eleref->track()->eta());
128 float deltaphi = 999.;
130 bool recoveryForFailingPropagation =
false;
138 deltaeta = fabs(scAtVtx.dEta());
139 deltaphi = fabs(scAtVtx.dPhi());
141 recoveryForFailingPropagation =
true;
145 const math::XYZPoint vertex(bsPosition.x(),bsPosition.y(),eleref->track()->vz());
147 float phi1= posCalc.
ecalPhi(magField,trackMom,vertex,1);
148 float phi2= posCalc.
ecalPhi(magField,trackMom,vertex,-1);
150 float deltaphi1=fabs( phi1 - theClus->position().phi() );
151 if(deltaphi1>6.283185308) deltaphi1 -= 6.283185308;
152 if(deltaphi1>3.141592654) deltaphi1 = 6.283185308-deltaphi1;
154 float deltaphi2=fabs( phi2 - theClus->position().phi() );
155 if(deltaphi2>6.283185308) deltaphi2 -= 6.283185308;
156 if(deltaphi2>3.141592654) deltaphi2 = 6.283185308-deltaphi2;
158 deltaphi = deltaphi1;
159 if(deltaphi2<deltaphi1){ deltaphi = deltaphi2;}
161 deltaphi=fabs(eleref->track()->outerPosition().phi()-theClus->phi());
162 if(deltaphi>6.283185308) deltaphi -= 6.283185308;
163 if(deltaphi>3.141592654) deltaphi = 6.283185308-deltaphi;
166 return std::make_pair(deltaeta,deltaphi);
172 for(reco::ElectronCollection::const_iterator eleIt = electronHandle->begin(); eleIt != electronHandle->end(); eleIt++){
173 if(eleIt->superCluster()==recoEcalCandRef->superCluster()){
void beginRun(edm::Run const &, edm::EventSetup const &) override
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
std::pair< float, float > calDEtaDPhiSCTrk(reco::ElectronRef &eleref, const reco::BeamSpot::Point &BSPosition, const MagneticField *magField)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const MagneticField * magField_
const bool variablesAtVtx_
Global3DPoint GlobalPoint
GlobalPoint globalPosition() const
math::XYZPoint Point
point in the space
edm::Ref< ElectronCollection > ElectronRef
reference to an object in a collection of Electron objects
~EgammaHLTElectronDetaDphiProducer()
double ecalPhi(const MagneticField *magField, const math::XYZVector &momentum, const math::XYZPoint &vertex, const int charge)
const bool useTrackProjectionToEcal_
const edm::EDGetTokenT< reco::BeamSpot > bsProducer_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::vector< Electron > ElectronCollection
collectin of Electron objects
const edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandidateProducer_
EgammaHLTElectronDetaDphiProducer(const edm::ParameterSet &)
void insert(const key_type &k, const data_type &v)
insert an association
XYZVectorD XYZVector
spatial vector with cartesian internal representation
XYZPointD XYZPoint
point in space with cartesian internal representation
T const * product() const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< RecoEcalCandidate > RecoEcalCandidateCollection
collectin of RecoEcalCandidate objects
TrajectoryStateOnSurface stateOnSurface(const GlobalPoint &point) const
static reco::ElectronRef getEleRef(const reco::RecoEcalCandidateRef &recoEcalCandRef, const edm::Handle< reco::ElectronCollection > &electronHandle)
const edm::EDGetTokenT< reco::ElectronCollection > electronProducer_
void produce(edm::Event &, const edm::EventSetup &) override
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)