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  inputTagPFClustersHFEM_
66  = iConfig.getParameter<InputTag>("PFClustersHFEM");
67 
68  inputTagPFClustersHFHAD_
69  = iConfig.getParameter<InputTag>("PFClustersHFHAD");
70 
71  inputTagPFClustersPS_
72  = iConfig.getParameter<InputTag>("PFClustersPS");
73 
74 
75 
76  verbose_ =
77  iConfig.getUntrackedParameter<bool>("verbose",false);
78 
79  bool debug_ =
80  iConfig.getUntrackedParameter<bool>("debug",false);
81 
82  usePFatHLT_ = iConfig.getParameter<bool>("usePFatHLT");
83 
84  useNuclear_ = iConfig.getParameter<bool>("useNuclear");
85 
86  useConversions_ = iConfig.getParameter<bool>("useConversions");
87 
88  useConvBremGsfTracks_ = iConfig.getParameter<bool>("useConvBremGsfTracks");
89 
90  bool useConvBremPFRecTracks = iConfig.getParameter<bool>("useConvBremPFRecTracks");
91 
92  useV0_ = iConfig.getParameter<bool>("useV0");
93 
94  produces<reco::PFBlockCollection>();
95 
96 
97 
98  // particle flow parameters -----------------------------------
99 
100  std::vector<double> DPtovPtCut
101  = iConfig.getParameter<std::vector<double> >("pf_DPtoverPt_Cut");
102 
103  std::vector<unsigned> NHitCut
104  = iConfig.getParameter<std::vector<unsigned> >("pf_NHit_Cut");
105 
106  bool useIterTracking
107  = iConfig.getParameter<bool>("useIterTracking");
108 
110  = iConfig.getParameter<unsigned>("nuclearInteractionsPurity");
111 
112  if (useNuclear_){
113  if (nuclearInteractionsPurity > 3 || nuclearInteractionsPurity < 1) {
114  nuclearInteractionsPurity = 1;
115  edm::LogInfo("PFBlockProducer") << "NI purity not properly implemented. Set it to the strongest level " << nuclearInteractionsPurity << endl;
116  }
117  vector<string> securityLevel;
118  securityLevel.push_back("isNucl"); securityLevel.push_back("isNucl && isNuclLoose"); securityLevel.push_back("isNucl && isNuclLoose && isNuclKink");
119  edm::LogInfo("PFBlockProducer") << "NI interactions are corrected in PFlow for " << securityLevel[nuclearInteractionsPurity-1].c_str() << endl;
120  }
121 
122 
123  pfBlockAlgo_.setParameters( DPtovPtCut,
124  NHitCut,
125  useConvBremPFRecTracks,
126  useIterTracking,
127  nuclearInteractionsPurity);
128 
129  pfBlockAlgo_.setDebug(debug_);
130 
131 }
132 
133 
134 
136 
137 
138 
139 void
141 
142 void
144  const edm::EventSetup & es) { }
145 
146 
147 void
149  const EventSetup& iSetup) {
150 
151  LogDebug("PFBlockProducer")<<"START event: "<<iEvent.id().event()
152  <<" in run "<<iEvent.id().run()<<endl;
153 
154 
155  // get rectracks
156 
158 
159  // LogDebug("PFBlockProducer")<<"get reco tracks"<<endl;
160  bool found = iEvent.getByLabel(inputTagRecTracks_, recTracks);
161 
162  if(!found )
163  LogError("PFBlockProducer")<<" cannot get rectracks: "
164  <<inputTagRecTracks_<<endl;
165 
166 
167 
168  // get GsfTracks
170 
171  if(!usePFatHLT_) {
172  found = iEvent.getByLabel(inputTagGsfRecTracks_,GsfrecTracks);
173 
174  if(!found )
175  LogError("PFBlockProducer")<<" cannot get Gsfrectracks: "
176  << inputTagGsfRecTracks_ <<endl;
177  }
178 
179  // get ConvBremGsfTracks
180  Handle< reco::GsfPFRecTrackCollection > convBremGsfrecTracks;
181 
182  if(useConvBremGsfTracks_) {
183  found = iEvent.getByLabel(inputTagConvBremGsfRecTracks_,convBremGsfrecTracks);
184 
185  if(!found )
186  LogError("PFBlockProducer")<<" cannot get ConvBremGsfrectracks: "
187  << inputTagConvBremGsfRecTracks_ <<endl;
188  }
189 
190  // get recmuons
192 
193  // LogDebug("PFBlockProducer")<<"get reco muons"<<endl;
194  if(!usePFatHLT_) {
195  found = iEvent.getByLabel(inputTagRecMuons_, recMuons);
196 
197  //if(!found )
198  // LogError("PFBlockProducer")<<" cannot get recmuons: "
199  // <<inputTagRecMuons_<<endl;
200 
201  // get PFNuclearInteractions
202  }
203  //---------- Gouzevitch
204  // Handle< reco::PFNuclearInteractionCollection > pfNuclears;
206 
207  if( useNuclear_ ) {
208 
209  found = iEvent.getByLabel(inputTagPFNuclear_, pfNuclears);
210  if(!found )
211  LogError("PFBlockProducer")<<" cannot get PFNuclearInteractions : "
212  <<inputTagPFNuclear_<<endl;
213  }
214 
215 
216 
217 
218  // get conversions
220  if( useConversions_ ) {
221  found = iEvent.getByLabel(inputTagPFConversions_, pfConversions);
222 
223  if(!found )
224  LogError("PFBlockProducer")<<" cannot get PFConversions : "
225  <<inputTagPFConversions_<<endl;
226  }
227 
228 
229  // get V0s
231  if( useV0_ ) {
232  found = iEvent.getByLabel(inputTagPFV0_, pfV0);
233 
234  if(!found )
235  LogError("PFBlockProducer")<<" cannot get PFV0 : "
236  <<inputTagPFV0_<<endl;
237  }
238 
239 
240 
241  // get ECAL, HCAL and PS clusters
242 
243 
245  found = iEvent.getByLabel(inputTagPFClustersECAL_,
246  clustersECAL);
247  if(!found )
248  LogError("PFBlockProducer")<<" cannot get ECAL clusters: "
249  <<inputTagPFClustersECAL_<<endl;
250 
251 
253  found = iEvent.getByLabel(inputTagPFClustersHCAL_,
254  clustersHCAL);
255  if(!found )
256  LogError("PFBlockProducer")<<" cannot get HCAL clusters: "
257  <<inputTagPFClustersHCAL_<<endl;
258 
260  found = iEvent.getByLabel(inputTagPFClustersHFEM_,
261  clustersHFEM);
262  if(!found )
263  LogError("PFBlockProducer")<<" cannot get HFEM clusters: "
264  <<inputTagPFClustersHFEM_<<endl;
265 
267  found = iEvent.getByLabel(inputTagPFClustersHFHAD_,
268  clustersHFHAD);
269  if(!found )
270  LogError("PFBlockProducer")<<" cannot get HFHAD clusters: "
271  <<inputTagPFClustersHFHAD_<<endl;
272 
273 
275  found = iEvent.getByLabel(inputTagPFClustersPS_,
276  clustersPS);
277  if(!found )
278  LogError("PFBlockProducer")<<" cannot get PS clusters: "
279  <<inputTagPFClustersPS_<<endl;
280 
281  Handle< reco::PFRecTrackCollection > nuclearRecTracks;
282 
283  if( usePFatHLT_ ) {
284  pfBlockAlgo_.setInput( recTracks,
285  clustersECAL,
286  clustersHCAL,
287  clustersHFEM,
288  clustersHFHAD,
289  clustersPS );
290  } else {
291  pfBlockAlgo_.setInput( recTracks,
292  GsfrecTracks,
293  convBremGsfrecTracks,
294  recMuons,
295  pfNuclears,
296  nuclearRecTracks,
297  pfConversions,
298  pfV0,
299  clustersECAL,
300  clustersHCAL,
301  clustersHFEM,
302  clustersHFHAD,
303  clustersPS );
304  }
305  pfBlockAlgo_.findBlocks();
306 
307  if(verbose_) {
308  ostringstream str;
309  str<<pfBlockAlgo_<<endl;
310  LogInfo("PFBlockProducer") << str.str()<<endl;
311  }
312 
313  auto_ptr< reco::PFBlockCollection >
314  pOutputBlockCollection( pfBlockAlgo_.transferBlocks() );
315 
316 
317  iEvent.put(pOutputBlockCollection);
318 
319  LogDebug("PFBlockProducer")<<"STOP event: "<<iEvent.id().event()
320  <<" in run "<<iEvent.id().run()<<endl;
321 }
#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:84
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:359
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:31