CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EgammaHLTPixelMatchVarProducer.cc
Go to the documentation of this file.
1 
2 
8 
13 
16 
21 
24 
26 
28 public:
29 
32 
33  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
34  void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override;
35  std::array<float,4> calS2(const reco::ElectronSeed& seed,int charge)const;
36 
37 private:
38  // ----------member data ---------------------------
39 
42 
46 
48 
49 };
50 
52  recoEcalCandidateToken_(consumes<reco::RecoEcalCandidateCollection>(config.getParameter<edm::InputTag>("recoEcalCandidateProducer"))),
53  pixelSeedsToken_(consumes<reco::ElectronSeedCollection>(config.getParameter<edm::InputTag>("pixelSeedsProducer"))),
54  dPhi1Para_(config.getParameter<edm::ParameterSet>("dPhi1SParams")),
55  dPhi2Para_(config.getParameter<edm::ParameterSet>("dPhi2SParams")),
56  dRZ2Para_(config.getParameter<edm::ParameterSet>("dRZ2SParams")),
57  productsToWrite_(config.getParameter<int>("productsToWrite"))
58 
59 {
60  //register your products
61  produces < reco::RecoEcalCandidateIsolationMap >("s2");
62  if(productsToWrite_>=1){
63  produces < reco::RecoEcalCandidateIsolationMap >("dPhi1BestS2");
64  produces < reco::RecoEcalCandidateIsolationMap >("dPhi2BestS2");
65  produces < reco::RecoEcalCandidateIsolationMap >("dzBestS2");
66  }
67 
68 
69 }
70 
72 {}
73 
75 
77  desc.add<edm::InputTag>(("recoEcalCandidateProducer"), edm::InputTag("hltL1SeededRecoEcalCandidate"));
78  desc.add<edm::InputTag>(("pixelSeedsProducer"), edm::InputTag("electronPixelSeeds"));
79 
80  edm::ParameterSetDescription varParamDesc;
81  edm::ParameterSetDescription binParamDesc;
82 
83  auto binDescCases =
84  "AbsEtaClus" >>
85  (edm::ParameterDescription<double>("xMin",0.0,true) and
86  edm::ParameterDescription<double>("xMax",3.0,true) and
87  edm::ParameterDescription<int>("yMin",0,true) and
88  edm::ParameterDescription<int>("yMax",99999,true) and
89  edm::ParameterDescription<std::string>("funcType","pol0",true) and
90  edm::ParameterDescription<std::vector<double>>("funcParams",{0.},true)) or
91  "AbsEtaClusPhi" >>
92  (edm::ParameterDescription<double>("xMin",0.0,true) and
93  edm::ParameterDescription<double>("xMax",3.0,true) and
94  edm::ParameterDescription<int>("yMin",0,true) and
95  edm::ParameterDescription<int>("yMax",99999,true) and
96  edm::ParameterDescription<std::string>("funcType","pol0",true) and
97  edm::ParameterDescription<std::vector<double>>("funcParams",{0.},true)) or
98  "AbsEtaClusEt" >>
99  (edm::ParameterDescription<double>("xMin",0.0,true) and
100  edm::ParameterDescription<double>("xMax",3.0,true) and
101  edm::ParameterDescription<int>("yMin",0,true) and
102  edm::ParameterDescription<int>("yMax",99999,true) and
103  edm::ParameterDescription<std::string>("funcType","pol0",true) and
104  edm::ParameterDescription<std::vector<double>>("funcParams",{0.},true));
105 
106  binParamDesc.ifValue(edm::ParameterDescription<std::string>("binType","AbsEtaClus",true), std::move(binDescCases));
107 
108 
109  varParamDesc.addVPSet("bins",binParamDesc);
110  desc.add("dPhi1SParams",varParamDesc);
111  desc.add("dPhi2SParams",varParamDesc);
112  desc.add("dRZ2SParams",varParamDesc);
113  desc.add<int>("productsToWrite",0);
114  descriptions.add(("hltEgammaHLTPixelMatchVarProducer"), desc);
115 }
116 
118 
119  // Get the HLT filtered objects
121  iEvent.getByToken(recoEcalCandidateToken_,recoEcalCandHandle);
122 
123 
125  iEvent.getByToken(pixelSeedsToken_,pixelSeedsHandle);
126 
127  if(!recoEcalCandHandle.isValid() || !pixelSeedsHandle.isValid()) return;
128 
129  auto dPhi1BestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
130  auto dPhi2BestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
131  auto dzBestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
132  auto s2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
133 
134  for(unsigned int candNr = 0; candNr<recoEcalCandHandle->size(); candNr++) {
135 
136  reco::RecoEcalCandidateRef candRef(recoEcalCandHandle,candNr);
137  reco::SuperClusterRef candSCRef = candRef->superCluster();
138 
140  for(auto & seed : *pixelSeedsHandle){
141  edm::RefToBase<reco::CaloCluster> pixelClusterRef = seed.caloCluster() ;
142  reco::SuperClusterRef pixelSCRef = pixelClusterRef.castTo<reco::SuperClusterRef>() ;
143  if(&(*candSCRef) == &(*pixelSCRef)){
144 
145  std::array<float,4> s2Data = calS2(seed,-1);
146  std::array<float,4> s2DataPos = calS2(seed,+1);
147  if(s2Data[0]<bestS2[0]) bestS2=s2Data;
148  if(s2DataPos[0]<bestS2[0]) bestS2=s2DataPos;
149 
150  }
151  }
152 
153 
154  s2Map->insert(candRef,bestS2[0]);
155  if(productsToWrite_>=1){
156  dPhi1BestS2Map->insert(candRef,bestS2[1]);
157  dPhi2BestS2Map->insert(candRef,bestS2[2]);
158  dzBestS2Map->insert(candRef,bestS2[3]);
159  }
160 
161  }
162 
163  iEvent.put(std::move(s2Map),"s2");
164  if(productsToWrite_>=1){
165  iEvent.put(std::move(dPhi1BestS2Map),"dPhi1BestS2");
166  iEvent.put(std::move(dPhi2BestS2Map),"dPhi2BestS2");
167  iEvent.put(std::move(dzBestS2Map),"dzBestS2");
168  }
169 }
170 
172 {
173  const float dPhi1Const = dPhi1Para_(seed);
174  const float dPhi2Const = dPhi2Para_(seed);
175  const float dRZ2Const = dRZ2Para_(seed);
176 
177  float dPhi1 = (charge <0 ? seed.dPhi1() : seed.dPhi1Pos())/dPhi1Const;
178  float dPhi2 = (charge <0 ? seed.dPhi2() : seed.dPhi2Pos())/dPhi2Const;
179  float dRz2 = (charge <0 ? seed.dRz2() : seed.dRz2Pos())/dRZ2Const;
180 
181  float s2 = dPhi1*dPhi1+dPhi2*dPhi2+dRz2*dRz2;
182  return std::array<float,4>{{s2,dPhi1,dPhi2,dRz2}};
183 }
184 
185 
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:122
float dPhi1() const
Definition: ElectronSeed.h:79
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
Definition: Activities.doc:12
egPM::Param< reco::ElectronSeed > dPhi2Para_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void produce(edm::StreamID sid, edm::Event &, const edm::EventSetup &) const override
egPM::Param< reco::ElectronSeed > dPhi1Para_
float dPhi1Pos() const
Definition: ElectronSeed.h:81
tuple s2
Definition: indexGen.py:106
egPM::Param< reco::ElectronSeed > dRZ2Para_
float dPhi2() const
Definition: ElectronSeed.h:74
int iEvent
Definition: GenABIO.cc:230
float dRz2Pos() const
Definition: ElectronSeed.h:75
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T > > cases)
def move
Definition: eostools.py:510
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< ElectronSeed > ElectronSeedCollection
collection of ElectronSeed objects
const edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandidateToken_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isValid() const
Definition: HandleBase.h:75
std::array< float, 4 > calS2(const reco::ElectronSeed &seed, int charge) const
float dRz2() const
Definition: ElectronSeed.h:73
float dPhi2Pos() const
Definition: ElectronSeed.h:76
REF castTo() const
Definition: RefToBase.h:286
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< RecoEcalCandidate > RecoEcalCandidateCollection
collectin of RecoEcalCandidate objects
const edm::EDGetTokenT< reco::ElectronSeedCollection > pixelSeedsToken_
EgammaHLTPixelMatchVarProducer(const edm::ParameterSet &)