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);
83 for(reco::ElectronCollection::const_iterator iElectron = electronHandle->begin(); iElectron != electronHandle->end(); iElectron++){
88 detaMap.
insert(eleref, dEtaDPhi.first);
89 dphiMap.
insert(eleref, dEtaDPhi.second);
94 for(reco::RecoEcalCandidateCollection::const_iterator iRecoEcalCand = recoEcalCandHandle->begin(); iRecoEcalCand != recoEcalCandHandle->end(); iRecoEcalCand++){
99 std::pair<float,float> dEtaDPhi(999999,999999);
101 detaCandMap.
insert(recoEcalCandRef, dEtaDPhi.first);
102 dphiCandMap.
insert(recoEcalCandRef, dEtaDPhi.second);
109 iEvent.
put(detMap,
"Deta" );
110 iEvent.
put(dphMap,
"Dphi" );
114 iEvent.
put(detaCandMapForEvent,
"Deta" );
115 iEvent.
put(dphiCandMapForEvent,
"Dphi" );
124 math::XYZPoint SCcorrPosition(theClus->x()-bsPosition.x(), theClus->y()-bsPosition.y() , theClus->z()-eleref->track()->vz() );
125 float deltaeta = fabs(SCcorrPosition.eta()-eleref->track()->eta());
126 float deltaphi = 999.;
128 bool recoveryForFailingPropagation =
false;
136 deltaeta = fabs(scAtVtx.dEta());
137 deltaphi = fabs(scAtVtx.dPhi());
139 recoveryForFailingPropagation =
true;
143 const math::XYZPoint vertex(bsPosition.x(),bsPosition.y(),eleref->track()->vz());
145 float phi1= posCalc.
ecalPhi(magField,trackMom,vertex,1);
146 float phi2= posCalc.
ecalPhi(magField,trackMom,vertex,-1);
148 float deltaphi1=fabs( phi1 - theClus->position().phi() );
149 if(deltaphi1>6.283185308) deltaphi1 -= 6.283185308;
150 if(deltaphi1>3.141592654) deltaphi1 = 6.283185308-deltaphi1;
152 float deltaphi2=fabs( phi2 - theClus->position().phi() );
153 if(deltaphi2>6.283185308) deltaphi2 -= 6.283185308;
154 if(deltaphi2>3.141592654) deltaphi2 = 6.283185308-deltaphi2;
156 deltaphi = deltaphi1;
157 if(deltaphi2<deltaphi1){ deltaphi = deltaphi2;}
159 deltaphi=fabs(eleref->track()->outerPosition().phi()-theClus->phi());
160 if(deltaphi>6.283185308) deltaphi -= 6.283185308;
161 if(deltaphi>3.141592654) deltaphi = 6.283185308-deltaphi;
164 return std::make_pair(deltaeta,deltaphi);
170 for(reco::ElectronCollection::const_iterator eleIt = electronHandle->begin(); eleIt != electronHandle->end(); eleIt++){
171 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)