37 for(
size_t hitNr=0;hitNr<seed.
hitInfo().size();hitNr++){
38 int subDetBit = 0x1 <<hitNr;
42 int layerBit = 0x1 << layerOffset << seed.
layerOrDiskNr(hitNr) ;
46 info |=nrLayersAlongTrajShifted;
62 valMap_=std::make_unique<reco::RecoEcalCandidateIsolationMap>(candHandle);
63 valInfoMap_=std::make_unique<reco::RecoEcalCandidateIsolationMap>(candHandle);
90 std::unique_ptr<reco::RecoEcalCandidateIsolationMap>
valMap_;
91 std::unique_ptr<reco::RecoEcalCandidateIsolationMap>
valInfoMap_;
131 productsToWrite_(config.getParameter<
int>(
"productsToWrite")),
136 produces < reco::RecoEcalCandidateIsolationMap >(
"s2");
138 produces < reco::RecoEcalCandidateIsolationMap >(
"dPhi1BestS2");
139 produces < reco::RecoEcalCandidateIsolationMap >(
"dPhi2BestS2");
140 produces < reco::RecoEcalCandidateIsolationMap >(
"dzBestS2");
144 for(
size_t hitNr=1;hitNr<=
nrHits_;hitNr++){
145 produces < reco::RecoEcalCandidateIsolationMap >(
"dPhi"+std::to_string(hitNr));
146 produces < reco::RecoEcalCandidateIsolationMap >(
"dPhi"+std::to_string(hitNr)+
"Info");
147 produces < reco::RecoEcalCandidateIsolationMap >(
"dRZ"+std::to_string(hitNr));
148 produces < reco::RecoEcalCandidateIsolationMap >(
"dRZ"+std::to_string(hitNr)+
"Info");
150 produces < reco::RecoEcalCandidateIsolationMap >(
"nrClus");
151 produces < reco::RecoEcalCandidateIsolationMap >(
"seedClusEFrac");
152 produces < reco::RecoEcalCandidateIsolationMap >(
"phiWidth");
153 produces < reco::RecoEcalCandidateIsolationMap >(
"etaWidth");
175 edm::ParameterDescription<int>(
"yMax",99999,
true) and
180 edm::ParameterDescription<double>(
"xMax",3.0,
true) and
181 edm::ParameterDescription<int>(
"yMin",0,
true) and
182 edm::ParameterDescription<int>(
"yMax",99999,
true) and
183 edm::ParameterDescription<std::string>(
"funcType",
"pol0",
true) and
186 (edm::ParameterDescription<double>(
"xMin",0.0,
true) and
187 edm::ParameterDescription<double>(
"xMax",3.0,
true) and
188 edm::ParameterDescription<int>(
"yMin",0,
true) and
189 edm::ParameterDescription<int>(
"yMax",99999,
true) and
190 edm::ParameterDescription<std::string>(
"funcType",
"pol0",
true) and
193 binParamDesc.
ifValue(edm::ParameterDescription<std::string>(
"binType",
"AbsEtaClus",
true),
std::move(binDescCases));
196 varParamDesc.addVPSet(
"bins",binParamDesc);
197 desc.
add(
"dPhi1SParams",varParamDesc);
198 desc.
add(
"dPhi2SParams",varParamDesc);
199 desc.
add(
"dRZ2SParams",varParamDesc);
200 desc.
add<
int>(
"productsToWrite",0);
201 descriptions.
add((
"hltEgammaHLTPixelMatchVarProducer"), desc);
214 if(!recoEcalCandHandle.
isValid())
return;
215 else if(!pixelSeedsHandle.
isValid()){
216 auto s2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
217 for(
unsigned int candNr = 0; candNr<recoEcalCandHandle->size(); candNr++) {
219 s2Map->insert(candRef,0);
228 auto dPhi1BestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
229 auto dPhi2BestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
230 auto dzBestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
231 auto s2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
233 auto nrClusMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
234 auto seedClusEFracMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
235 auto phiWidthMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
236 auto etaWidthMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
238 std::vector<PixelData> pixelData;
239 for(
size_t hitNr=0;hitNr<
nrHits_;hitNr++){
244 for(
unsigned int candNr = 0; candNr<recoEcalCandHandle->size(); candNr++) {
250 for(
auto & seed : *pixelSeedsHandle){
253 if(&(*candSCRef) == &(*pixelSCRef)){
255 std::array<float,4> s2Data =
calS2(seed,-1);
256 std::array<float,4> s2DataPos =
calS2(seed,+1);
257 if(s2Data[0]<bestS2[0]) bestS2=s2Data;
258 if(s2DataPos[0]<bestS2[0]) bestS2=s2DataPos;
261 for(
auto& pixelDatum : pixelData){
262 pixelDatum.fill(seed);
269 s2Map->insert(candRef,bestS2[0]);
271 dPhi1BestS2Map->insert(candRef,bestS2[1]);
272 dPhi2BestS2Map->insert(candRef,bestS2[2]);
273 dzBestS2Map->insert(candRef,bestS2[3]);
276 nrClusMap->insert(candRef,candSCRef->clustersSize());
277 float seedClusEFrac = candSCRef->rawEnergy()>0 ? candSCRef->seed()->energy() / candSCRef->rawEnergy() : 0.;
280 seedClusEFracMap->insert(candRef,seedClusEFrac);
281 float phiWidth = candSCRef->phiWidth();
282 float etaWidth = candSCRef->etaWidth();
283 phiWidthMap->insert(candRef,phiWidth);
284 etaWidthMap->insert(candRef,etaWidth);
286 for(
auto& pixelDatum : pixelData){
287 pixelDatum.fill(candRef);
299 for(
auto& pixelDatum : pixelData){
300 pixelDatum.putInto(iEvent);
303 iEvent.
put(
std::move(seedClusEFracMap),
"seedClusEFrac");
315 float dPhi1 = (charge <0 ? seed.
dPhiNeg(0) : seed.
dPhiPos(0))/dPhi1Const;
316 float dPhi2 = (charge <0 ? seed.
dPhiNeg(1) : seed.
dPhiPos(1))/dPhi2Const;
317 float dRz2 = (charge <0 ? seed.
dRZNeg(1) : seed.
dRZPos(1))/dRZ2Const;
319 float s2 = dPhi1*dPhi1+dPhi2*dPhi2+dRz2*dRz2;
320 return std::array<float,4>{{
s2,dPhi1,dPhi2,dRz2}};
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T >> cases)
void produce(edm::Event &, const edm::EventSetup &) override
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
egPM::Param< reco::ElectronSeed > dPhi2Para_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
egPM::Param< reco::ElectronSeed > dPhi1Para_
int subDet(size_t hitNr) const
const CaloClusterRef & caloCluster() const
int nrLayersAlongTraj() const
float dRZPos(size_t hitNr) const
void putInto(edm::Event &event)
egPM::Param< reco::ElectronSeed > dRZ2Para_
#define DEFINE_FWK_MODULE(type)
void fill(const reco::ElectronSeed &seed)
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::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Abs< T >::type abs(const T &t)
std::vector< ElectronSeed > ElectronSeedCollection
collection of ElectronSeed objects
const edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandidateToken_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
float dPhiBest(size_t hitNr) const
std::unique_ptr< reco::RecoEcalCandidateIsolationMap > valInfoMap_
std::array< float, 4 > calS2(const reco::ElectronSeed &seed, int charge) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
int layerOrDiskNr(size_t hitNr) const
const std::vector< PMVars > & hitInfo() const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::unique_ptr< reco::RecoEcalCandidateIsolationMap > valMap_
~EgammaHLTPixelMatchVarProducer() override
std::vector< RecoEcalCandidate > RecoEcalCandidateCollection
collectin of RecoEcalCandidate objects
float dRZBest(size_t hitNr) const
float(reco::ElectronSeed::* func_)(size_t) const
float dRZNeg(size_t hitNr) const
const edm::EDGetTokenT< reco::ElectronSeedCollection > pixelSeedsToken_
EgammaHLTPixelMatchVarProducer(const edm::ParameterSet &)
float dPhiNeg(size_t hitNr) const
PixelData(std::string name, size_t hitNr, float(reco::ElectronSeed::*func)(size_t) const, const edm::Handle< reco::RecoEcalCandidateCollection > &candHandle)
float dPhiPos(size_t hitNr) const
void fill(const reco::RecoEcalCandidateRef &candRef)