CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PFBlockProducer.cc
Go to the documentation of this file.
2 
5 
15 
18 
20 
24 
26 
28 
29 #include <set>
30 
31 using namespace std;
32 using namespace edm;
33 
35 
36 
37  // use configuration file to setup input/output collection names
38  inputTagRecTracks_
39  = iConfig.getParameter<InputTag>("RecTracks");
40 
41  inputTagGsfRecTracks_
42  = iConfig.getParameter<InputTag>("GsfRecTracks");
43 
44  inputTagConvBremGsfRecTracks_
45  = iConfig.getParameter<InputTag>("ConvBremGsfRecTracks");
46 
47  inputTagRecMuons_
48  = iConfig.getParameter<InputTag>("RecMuons");
49 
50  inputTagPFNuclear_
51  = iConfig.getParameter<InputTag>("PFNuclear");
52 
53  inputTagPFConversions_
54  = iConfig.getParameter<InputTag>("PFConversions");
55 
56  inputTagPFV0_
57  = iConfig.getParameter<InputTag>("PFV0");
58 
59  inputTagPFClustersECAL_
60  = iConfig.getParameter<InputTag>("PFClustersECAL");
61 
62  inputTagPFClustersHCAL_
63  = iConfig.getParameter<InputTag>("PFClustersHCAL");
64 
65  inputTagPFClustersHO_
66  = iConfig.getParameter<InputTag>("PFClustersHO");
67 
68  inputTagPFClustersHFEM_
69  = iConfig.getParameter<InputTag>("PFClustersHFEM");
70 
71  inputTagPFClustersHFHAD_
72  = iConfig.getParameter<InputTag>("PFClustersHFHAD");
73 
74  inputTagPFClustersPS_
75  = iConfig.getParameter<InputTag>("PFClustersPS");
76 
77  useEGPhotons_ = iConfig.getParameter<bool>("useEGPhotons");
78 
79  if(useEGPhotons_) {
80  inputTagEGPhotons_
81  = iConfig.getParameter<InputTag>("EGPhotons");
82  }
83 
84  verbose_ =
85  iConfig.getUntrackedParameter<bool>("verbose",false);
86 
87  bool debug_ =
88  iConfig.getUntrackedParameter<bool>("debug",false);
89 
90  usePFatHLT_ = iConfig.getParameter<bool>("usePFatHLT");
91 
92  useNuclear_ = iConfig.getParameter<bool>("useNuclear");
93 
94  useConversions_ = iConfig.getParameter<bool>("useConversions");
95 
96  useConvBremGsfTracks_ = iConfig.getParameter<bool>("useConvBremGsfTracks");
97 
98  bool useConvBremPFRecTracks = iConfig.getParameter<bool>("useConvBremPFRecTracks");
99 
100  useV0_ = iConfig.getParameter<bool>("useV0");
101 
102  useHO_= iConfig.getParameter<bool>("useHO");
103 
104  produces<reco::PFBlockCollection>();
105 
106  // Glowinski & Gouzevitch
107  useKDTreeTrackEcalLinker_ = iConfig.getParameter<bool>("useKDTreeTrackEcalLinker");
108  // !Glowinski & Gouzevitch
109 
110  // particle flow parameters -----------------------------------
111 
112  std::vector<double> DPtovPtCut
113  = iConfig.getParameter<std::vector<double> >("pf_DPtoverPt_Cut");
114  if (DPtovPtCut.size()!=5)
115  {
116  edm::LogError("MisConfiguration")<<" vector pf_DPtoverPt_Cut has to be of size 5";
117  throw;
118  }
119 
120  std::vector<unsigned> NHitCut
121  = iConfig.getParameter<std::vector<unsigned> >("pf_NHit_Cut");
122  if (NHitCut.size()!=5)
123  {
124  edm::LogError("MisConfiguration")<<" vector pf_NHit_Cut has to be of size 5";
125  throw;
126  }
127 
128  bool useIterTracking
129  = iConfig.getParameter<bool>("useIterTracking");
130 
131  int nuclearInteractionsPurity
132  = iConfig.getParameter<unsigned>("nuclearInteractionsPurity");
133 
134  // if first parameter 0, deactivated
135  std::vector<double> EGPhotonSelectionCuts ;
136 
137  if (useEGPhotons_)
138  EGPhotonSelectionCuts = iConfig.getParameter<std::vector<double> >("PhotonSelectionCuts");
139 
140 
141  if (useNuclear_){
142  if (nuclearInteractionsPurity > 3 || nuclearInteractionsPurity < 1) {
143  nuclearInteractionsPurity = 1;
144  edm::LogInfo("PFBlockProducer") << "NI purity not properly implemented. Set it to the strongest level " << nuclearInteractionsPurity << endl;
145  }
146  vector<string> securityLevel;
147  securityLevel.push_back("isNucl"); securityLevel.push_back("isNucl && isNuclLoose"); securityLevel.push_back("isNucl && isNuclLoose && isNuclKink");
148  edm::LogInfo("PFBlockProducer") << "NI interactions are corrected in PFlow for " << securityLevel[nuclearInteractionsPurity-1].c_str() << endl;
149  }
150 
151 
152  pfBlockAlgo_.setParameters( DPtovPtCut,
153  NHitCut,
154  useConvBremPFRecTracks,
155  useIterTracking,
156  nuclearInteractionsPurity,
157  useEGPhotons_,
158  EGPhotonSelectionCuts );
159 
160  pfBlockAlgo_.setDebug(debug_);
161 
162  // Glowinski & Gouzevitch
163  pfBlockAlgo_.setUseOptimization(useKDTreeTrackEcalLinker_);
164  // !Glowinski & Gouzevitch
165 
166  // Use HO clusters for link
167  pfBlockAlgo_.setHOTag(useHO_);
168 
169 }
170 
171 
172 
174 
175 
176 
177 void
179 
180 void
182  const edm::EventSetup & es) { }
183 
184 
185 void
187  const EventSetup& iSetup) {
188 
189  LogDebug("PFBlockProducer")<<"START event: "<<iEvent.id().event()
190  <<" in run "<<iEvent.id().run()<<endl;
191 
192 
193  // get rectracks
194 
196 
197  // LogDebug("PFBlockProducer")<<"get reco tracks"<<endl;
198  bool found = iEvent.getByLabel(inputTagRecTracks_, recTracks);
199 
200  if(!found )
201  LogError("PFBlockProducer")<<" cannot get rectracks: "
202  <<inputTagRecTracks_<<endl;
203 
204 
205 
206  // get GsfTracks
208 
209  if(!usePFatHLT_) {
210  found = iEvent.getByLabel(inputTagGsfRecTracks_,GsfrecTracks);
211 
212  if(!found )
213  LogError("PFBlockProducer")<<" cannot get Gsfrectracks: "
214  << inputTagGsfRecTracks_ <<endl;
215  }
216 
217  // get ConvBremGsfTracks
218  Handle< reco::GsfPFRecTrackCollection > convBremGsfrecTracks;
219 
220  if(useConvBremGsfTracks_) {
221  found = iEvent.getByLabel(inputTagConvBremGsfRecTracks_,convBremGsfrecTracks);
222 
223  if(!found )
224  LogError("PFBlockProducer")<<" cannot get ConvBremGsfrectracks: "
225  << inputTagConvBremGsfRecTracks_ <<endl;
226  }
227 
228  // get recmuons
230 
231  // LogDebug("PFBlockProducer")<<"get reco muons"<<endl;
232  //if(!usePFatHLT_) {
233  found = iEvent.getByLabel(inputTagRecMuons_, recMuons);
234 
235  //if(!found )
236  // LogError("PFBlockProducer")<<" cannot get recmuons: "
237  // <<inputTagRecMuons_<<endl;
238 
239  // get PFNuclearInteractions
240  //}
241  //---------- Gouzevitch
242  // Handle< reco::PFNuclearInteractionCollection > pfNuclears;
244 
245  if( useNuclear_ ) {
246 
247  found = iEvent.getByLabel(inputTagPFNuclear_, pfNuclears);
248  if(!found )
249  LogError("PFBlockProducer")<<" cannot get PFNuclearInteractions : "
250  <<inputTagPFNuclear_<<endl;
251  }
252 
253  // get conversions
255  if( useConversions_ ) {
256  found = iEvent.getByLabel(inputTagPFConversions_, pfConversions);
257 
258  if(!found )
259  LogError("PFBlockProducer")<<" cannot get PFConversions : "
260  <<inputTagPFConversions_<<endl;
261  }
262 
263 
264  // get V0s
266  if( useV0_ ) {
267  found = iEvent.getByLabel(inputTagPFV0_, pfV0);
268 
269  if(!found )
270  LogError("PFBlockProducer")<<" cannot get PFV0 : "
271  <<inputTagPFV0_<<endl;
272  }
273 
274 
275 
276  // get ECAL, HCAL, HO and PS clusters
277 
278 
280  found = iEvent.getByLabel(inputTagPFClustersECAL_,
281  clustersECAL);
282  if(!found )
283  LogError("PFBlockProducer")<<" cannot get ECAL clusters: "
284  <<inputTagPFClustersECAL_<<endl;
285 
286 
288  found = iEvent.getByLabel(inputTagPFClustersHCAL_,
289  clustersHCAL);
290  if(!found )
291  LogError("PFBlockProducer")<<" cannot get HCAL clusters: "
292  <<inputTagPFClustersHCAL_<<endl;
293 
295  if (useHO_) {
296  found = iEvent.getByLabel(inputTagPFClustersHO_,
297  clustersHO);
298  if(!found )
299  LogError("PFBlockProducer")<<" cannot get HO clusters: "
300  <<inputTagPFClustersHO_<<endl;
301  }
302 
304  found = iEvent.getByLabel(inputTagPFClustersHFEM_,
305  clustersHFEM);
306  if(!found )
307  LogError("PFBlockProducer")<<" cannot get HFEM clusters: "
308  <<inputTagPFClustersHFEM_<<endl;
309 
311  found = iEvent.getByLabel(inputTagPFClustersHFHAD_,
312  clustersHFHAD);
313  if(!found )
314  LogError("PFBlockProducer")<<" cannot get HFHAD clusters: "
315  <<inputTagPFClustersHFHAD_<<endl;
316 
317 
319  found = iEvent.getByLabel(inputTagPFClustersPS_,
320  clustersPS);
321  if(!found )
322  LogError("PFBlockProducer")<<" cannot get PS clusters: "
323  <<inputTagPFClustersPS_<<endl;
324 
325  // dummy. Not used in the full framework
326  Handle< reco::PFRecTrackCollection > nuclearRecTracks;
327 
328 
330  found = iEvent.getByLabel(inputTagEGPhotons_,
331  egPhotons);
332 
333  if(!found && useEGPhotons_ )
334  LogError("PFBlockProducer")<<" cannot get photons"
335  << inputTagEGPhotons_ << endl;
336 
337  if( usePFatHLT_ ) {
338  pfBlockAlgo_.setInput( recTracks,
339  recMuons,
340  clustersECAL,
341  clustersHCAL,
342  clustersHO,
343  clustersHFEM,
344  clustersHFHAD,
345  clustersPS);
346  } else {
347  pfBlockAlgo_.setInput( recTracks,
348  GsfrecTracks,
349  convBremGsfrecTracks,
350  recMuons,
351  pfNuclears,
352  nuclearRecTracks,
353  pfConversions,
354  pfV0,
355  clustersECAL,
356  clustersHCAL,
357  clustersHO,
358  clustersHFEM,
359  clustersHFHAD,
360  clustersPS,
361  egPhotons);
362  }
363  pfBlockAlgo_.findBlocks();
364 
365  if(verbose_) {
366  ostringstream str;
367  str<<pfBlockAlgo_<<endl;
368  LogInfo("PFBlockProducer") << str.str()<<endl;
369  }
370 
371  auto_ptr< reco::PFBlockCollection >
372  pOutputBlockCollection( pfBlockAlgo_.transferBlocks() );
373 
374  iEvent.put(pOutputBlockCollection);
375 
376  LogDebug("PFBlockProducer")<<"STOP event: "<<iEvent.id().event()
377  <<" in run "<<iEvent.id().run()<<endl;
378 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:42
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:44
T getUntrackedParameter(std::string const &, T const &) const
tuple pfV0
Definition: pfV0_cfi.py:3
PFBlockProducer(const edm::ParameterSet &)
int iEvent
Definition: GenABIO.cc:243
virtual void beginJob()
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:85
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
virtual void beginRun(edm::Run &r, const edm::EventSetup &c)
virtual void produce(edm::Event &, const edm::EventSetup &)
edm::EventID id() const
Definition: EventBase.h:56
Definition: Run.h:33