CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
PFBlockProducer Class Reference

Producer for particle flow blocks. More...

#include <PFBlockProducer.h>

Inheritance diagram for PFBlockProducer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

virtual void beginJob ()
 
virtual void beginRun (edm::Run &r, const edm::EventSetup &c)
 
 PFBlockProducer (const edm::ParameterSet &)
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 
 ~PFBlockProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Attributes

edm::InputTag inputTagConvBremGsfRecTracks_
 
edm::InputTag inputTagEGPhotons_
 
edm::InputTag inputTagGsfRecTracks_
 
edm::InputTag inputTagPFClustersECAL_
 
edm::InputTag inputTagPFClustersHCAL_
 
edm::InputTag inputTagPFClustersHFEM_
 
edm::InputTag inputTagPFClustersHFHAD_
 
edm::InputTag inputTagPFClustersHO_
 
edm::InputTag inputTagPFClustersPS_
 
edm::InputTag inputTagPFConversions_
 
edm::InputTag inputTagPFNuclear_
 
edm::InputTag inputTagPFV0_
 
edm::InputTag inputTagRecMuons_
 
edm::InputTag inputTagRecTracks_
 
PFBlockAlgo pfBlockAlgo_
 Particle flow block algorithm. More...
 
bool useConvBremGsfTracks_
 switch on/off Conversions Brem Recovery More...
 
bool useConversions_
 switch on/off Conversions More...
 
bool useEGPhotons_
 use EG photons ? More...
 
bool useHO_
 
bool useKDTreeTrackEcalLinker_
 
bool useNuclear_
 use NuclearInteractions ? More...
 
bool usePFatHLT_
 Particle Flow at HLT ? More...
 
bool useV0_
 switch on/off V0 More...
 
bool verbose_
 verbose ? More...
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Producer for particle flow blocks.

This producer makes use of PFBlockAlgo, the particle flow block algorithm. Particle flow itself consists in reconstructing particles from the particle flow blocks This is done at a later stage, see PFProducer and PFAlgo.

Author
Colin Bernet
Date
April 2007

Definition at line 34 of file PFBlockProducer.h.

Constructor & Destructor Documentation

PFBlockProducer::PFBlockProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 34 of file PFBlockProducer.cc.

References edm::ParameterSet::getParameter(), and edm::ParameterSet::getUntrackedParameter().

34  {
35 
36 
37  // use configuration file to setup input/output collection names
39  = iConfig.getParameter<InputTag>("RecTracks");
40 
42  = iConfig.getParameter<InputTag>("GsfRecTracks");
43 
45  = iConfig.getParameter<InputTag>("ConvBremGsfRecTracks");
46 
48  = iConfig.getParameter<InputTag>("RecMuons");
49 
51  = iConfig.getParameter<InputTag>("PFNuclear");
52 
54  = iConfig.getParameter<InputTag>("PFConversions");
55 
57  = iConfig.getParameter<InputTag>("PFV0");
58 
60  = iConfig.getParameter<InputTag>("PFClustersECAL");
61 
63  = iConfig.getParameter<InputTag>("PFClustersHCAL");
64 
66  = iConfig.getParameter<InputTag>("PFClustersHO");
67 
69  = iConfig.getParameter<InputTag>("PFClustersHFEM");
70 
72  = iConfig.getParameter<InputTag>("PFClustersHFHAD");
73 
75  = iConfig.getParameter<InputTag>("PFClustersPS");
76 
77  useEGPhotons_ = iConfig.getParameter<bool>("useEGPhotons");
78 
79  if(useEGPhotons_) {
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 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::InputTag inputTagPFNuclear_
edm::InputTag inputTagPFClustersECAL_
edm::InputTag inputTagPFConversions_
edm::InputTag inputTagPFClustersHO_
edm::InputTag inputTagPFClustersPS_
edm::InputTag inputTagRecTracks_
void setHOTag(bool ho)
Definition: PFBlockAlgo.h:196
bool useV0_
switch on/off V0
edm::InputTag inputTagPFClustersHFEM_
edm::InputTag inputTagPFClustersHCAL_
edm::InputTag inputTagGsfRecTracks_
PFBlockAlgo pfBlockAlgo_
Particle flow block algorithm.
bool usePFatHLT_
Particle Flow at HLT ?
void setDebug(bool debug)
sets debug printout flag
Definition: PFBlockAlgo.h:177
edm::InputTag inputTagPFClustersHFHAD_
edm::InputTag inputTagRecMuons_
bool useEGPhotons_
use EG photons ?
edm::InputTag inputTagConvBremGsfRecTracks_
bool verbose_
verbose ?
bool useConvBremGsfTracks_
switch on/off Conversions Brem Recovery
void setParameters(std::vector< double > &DPtovPtCut, std::vector< unsigned > &NHitCut, bool useConvBremPFRecTracks, bool useIterTracking, int nuclearInteractionsPurity, bool useEGPhotons, std::vector< double > &photonSelectionCuts)
Definition: PFBlockAlgo.cc:31
edm::InputTag inputTagPFV0_
bool useKDTreeTrackEcalLinker_
bool useNuclear_
use NuclearInteractions ?
edm::InputTag inputTagEGPhotons_
void setUseOptimization(bool useKDTreeTrackEcalLinker)
Definition: PFBlockAlgo.cc:61
bool useConversions_
switch on/off Conversions
PFBlockProducer::~PFBlockProducer ( )

Definition at line 173 of file PFBlockProducer.cc.

173 { }

Member Function Documentation

void PFBlockProducer::beginJob ( void  )
virtual

Reimplemented from edm::EDProducer.

Definition at line 178 of file PFBlockProducer.cc.

178 { }
void PFBlockProducer::beginRun ( edm::Run r,
const edm::EventSetup c 
)
virtual

Reimplemented from edm::EDProducer.

Definition at line 181 of file PFBlockProducer.cc.

182  { }
void PFBlockProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
virtual

Implements edm::EDProducer.

Definition at line 186 of file PFBlockProducer.cc.

References edm::EventID::event(), newFWLiteAna::found, edm::Event::getByLabel(), edm::EventBase::id(), LogDebug, pfConversions_cfi::pfConversions, pfV0_cfi::pfV0, edm::Event::put(), and edm::EventID::run().

187  {
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 
221  found = iEvent.getByLabel(inputTagConvBremGsfRecTracks_,convBremGsfrecTracks);
222 
223  if(!found )
224  LogError("PFBlockProducer")<<" cannot get ConvBremGsfrectracks: "
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  }
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
EventNumber_t event() const
Definition: EventID.h:44
edm::InputTag inputTagPFNuclear_
edm::InputTag inputTagPFClustersECAL_
edm::InputTag inputTagPFConversions_
edm::InputTag inputTagPFClustersHO_
tuple pfV0
Definition: pfV0_cfi.py:3
edm::InputTag inputTagPFClustersPS_
edm::InputTag inputTagRecTracks_
bool useV0_
switch on/off V0
edm::InputTag inputTagPFClustersHFEM_
edm::InputTag inputTagPFClustersHCAL_
edm::InputTag inputTagGsfRecTracks_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:85
PFBlockAlgo pfBlockAlgo_
Particle flow block algorithm.
bool usePFatHLT_
Particle Flow at HLT ?
edm::InputTag inputTagPFClustersHFHAD_
void setInput(const T< reco::PFRecTrackCollection > &trackh, const T< reco::GsfPFRecTrackCollection > &gsftrackh, const T< reco::GsfPFRecTrackCollection > &convbremgsftrackh, const T< reco::MuonCollection > &muonh, const T< reco::PFDisplacedTrackerVertexCollection > &nuclearh, const T< reco::PFRecTrackCollection > &nucleartrackh, const T< reco::PFConversionCollection > &conv, const T< reco::PFV0Collection > &v0, const T< reco::PFClusterCollection > &ecalh, const T< reco::PFClusterCollection > &hcalh, const T< reco::PFClusterCollection > &hoh, const T< reco::PFClusterCollection > &hfemh, const T< reco::PFClusterCollection > &hfhadh, const T< reco::PFClusterCollection > &psh, const T< reco::PhotonCollection > &egphh, const Mask &trackMask=dummyMask_, const Mask &gsftrackMask=dummyMask_, const Mask &ecalMask=dummyMask_, const Mask &hcalMask=dummyMask_, const Mask &hoMask=dummyMask_, const Mask &hfemMask=dummyMask_, const Mask &hfhadMask=dummyMask_, const Mask &psMask=dummyMask_, const Mask &phMask=dummyMask_)
set input collections of tracks and clusters
Definition: PFBlockAlgo.h:372
edm::InputTag inputTagRecMuons_
bool useEGPhotons_
use EG photons ?
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
edm::InputTag inputTagConvBremGsfRecTracks_
std::auto_ptr< reco::PFBlockCollection > transferBlocks()
Definition: PFBlockAlgo.h:189
void findBlocks()
build blocks
Definition: PFBlockAlgo.cc:81
bool verbose_
verbose ?
bool useConvBremGsfTracks_
switch on/off Conversions Brem Recovery
edm::EventID id() const
Definition: EventBase.h:56
edm::InputTag inputTagPFV0_
bool useNuclear_
use NuclearInteractions ?
edm::InputTag inputTagEGPhotons_
bool useConversions_
switch on/off Conversions

Member Data Documentation

edm::InputTag PFBlockProducer::inputTagConvBremGsfRecTracks_
private

Definition at line 53 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagEGPhotons_
private

Definition at line 64 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagGsfRecTracks_
private

Definition at line 52 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFClustersECAL_
private

Definition at line 56 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFClustersHCAL_
private

Definition at line 57 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFClustersHFEM_
private

Definition at line 59 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFClustersHFHAD_
private

Definition at line 60 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFClustersHO_
private

Definition at line 58 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFClustersPS_
private

Definition at line 61 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFConversions_
private

Definition at line 62 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFNuclear_
private

Definition at line 55 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFV0_
private

Definition at line 63 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagRecMuons_
private

Definition at line 54 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagRecTracks_
private

Definition at line 51 of file PFBlockProducer.h.

PFBlockAlgo PFBlockProducer::pfBlockAlgo_
private

Particle flow block algorithm.

Definition at line 96 of file PFBlockProducer.h.

bool PFBlockProducer::useConvBremGsfTracks_
private

switch on/off Conversions Brem Recovery

Definition at line 82 of file PFBlockProducer.h.

bool PFBlockProducer::useConversions_
private

switch on/off Conversions

Definition at line 79 of file PFBlockProducer.h.

bool PFBlockProducer::useEGPhotons_
private

use EG photons ?

Definition at line 76 of file PFBlockProducer.h.

bool PFBlockProducer::useHO_
private

Definition at line 67 of file PFBlockProducer.h.

bool PFBlockProducer::useKDTreeTrackEcalLinker_
private

Definition at line 92 of file PFBlockProducer.h.

bool PFBlockProducer::useNuclear_
private

use NuclearInteractions ?

Definition at line 73 of file PFBlockProducer.h.

bool PFBlockProducer::usePFatHLT_
private

Particle Flow at HLT ?

Definition at line 88 of file PFBlockProducer.h.

bool PFBlockProducer::useV0_
private

switch on/off V0

Definition at line 85 of file PFBlockProducer.h.

bool PFBlockProducer::verbose_
private

verbose ?

Definition at line 70 of file PFBlockProducer.h.