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 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 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)
 
- 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>("PFClustersHFEM");
67 
69  = iConfig.getParameter<InputTag>("PFClustersHFHAD");
70 
72  = iConfig.getParameter<InputTag>("PFClustersPS");
73 
74  useEGPhotons_ = iConfig.getParameter<bool>("useEGPhotons");
75 
76  if(useEGPhotons_) {
78  = iConfig.getParameter<InputTag>("EGPhotons");
79  }
80 
81  verbose_ =
82  iConfig.getUntrackedParameter<bool>("verbose",false);
83 
84  bool debug_ =
85  iConfig.getUntrackedParameter<bool>("debug",false);
86 
87  usePFatHLT_ = iConfig.getParameter<bool>("usePFatHLT");
88 
89  useNuclear_ = iConfig.getParameter<bool>("useNuclear");
90 
91  useConversions_ = iConfig.getParameter<bool>("useConversions");
92 
93  useConvBremGsfTracks_ = iConfig.getParameter<bool>("useConvBremGsfTracks");
94 
95  bool useConvBremPFRecTracks = iConfig.getParameter<bool>("useConvBremPFRecTracks");
96 
97  useV0_ = iConfig.getParameter<bool>("useV0");
98 
99  produces<reco::PFBlockCollection>();
100 
101 
102 
103  // particle flow parameters -----------------------------------
104 
105  std::vector<double> DPtovPtCut
106  = iConfig.getParameter<std::vector<double> >("pf_DPtoverPt_Cut");
107 
108  std::vector<unsigned> NHitCut
109  = iConfig.getParameter<std::vector<unsigned> >("pf_NHit_Cut");
110 
111  bool useIterTracking
112  = iConfig.getParameter<bool>("useIterTracking");
113 
114  int nuclearInteractionsPurity
115  = iConfig.getParameter<unsigned>("nuclearInteractionsPurity");
116 
117  // if first parameter 0, deactivated
118  std::vector<double> EGPhotonSelectionCuts ;
119 
120  if (useEGPhotons_)
121  EGPhotonSelectionCuts = iConfig.getParameter<std::vector<double> >("PhotonSelectionCuts");
122 
123 
124  if (useNuclear_){
125  if (nuclearInteractionsPurity > 3 || nuclearInteractionsPurity < 1) {
126  nuclearInteractionsPurity = 1;
127  edm::LogInfo("PFBlockProducer") << "NI purity not properly implemented. Set it to the strongest level " << nuclearInteractionsPurity << endl;
128  }
129  vector<string> securityLevel;
130  securityLevel.push_back("isNucl"); securityLevel.push_back("isNucl && isNuclLoose"); securityLevel.push_back("isNucl && isNuclLoose && isNuclKink");
131  edm::LogInfo("PFBlockProducer") << "NI interactions are corrected in PFlow for " << securityLevel[nuclearInteractionsPurity-1].c_str() << endl;
132  }
133 
134 
135  pfBlockAlgo_.setParameters( DPtovPtCut,
136  NHitCut,
137  useConvBremPFRecTracks,
138  useIterTracking,
139  nuclearInteractionsPurity,
140  useEGPhotons_,
141  EGPhotonSelectionCuts );
142 
143  pfBlockAlgo_.setDebug(debug_);
144 
145 }
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 inputTagPFClustersPS_
edm::InputTag inputTagRecTracks_
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:160
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 useNuclear_
use NuclearInteractions ?
edm::InputTag inputTagEGPhotons_
bool useConversions_
switch on/off Conversions
PFBlockProducer::~PFBlockProducer ( )

Definition at line 149 of file PFBlockProducer.cc.

149 { }

Member Function Documentation

void PFBlockProducer::beginJob ( void  )
virtual

Reimplemented from edm::EDProducer.

Definition at line 154 of file PFBlockProducer.cc.

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

Reimplemented from edm::EDProducer.

Definition at line 157 of file PFBlockProducer.cc.

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

Implements edm::EDProducer.

Definition at line 162 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().

163  {
164 
165  LogDebug("PFBlockProducer")<<"START event: "<<iEvent.id().event()
166  <<" in run "<<iEvent.id().run()<<endl;
167 
168 
169  // get rectracks
170 
172 
173  // LogDebug("PFBlockProducer")<<"get reco tracks"<<endl;
174  bool found = iEvent.getByLabel(inputTagRecTracks_, recTracks);
175 
176  if(!found )
177  LogError("PFBlockProducer")<<" cannot get rectracks: "
178  <<inputTagRecTracks_<<endl;
179 
180 
181 
182  // get GsfTracks
184 
185  if(!usePFatHLT_) {
186  found = iEvent.getByLabel(inputTagGsfRecTracks_,GsfrecTracks);
187 
188  if(!found )
189  LogError("PFBlockProducer")<<" cannot get Gsfrectracks: "
190  << inputTagGsfRecTracks_ <<endl;
191  }
192 
193  // get ConvBremGsfTracks
194  Handle< reco::GsfPFRecTrackCollection > convBremGsfrecTracks;
195 
197  found = iEvent.getByLabel(inputTagConvBremGsfRecTracks_,convBremGsfrecTracks);
198 
199  if(!found )
200  LogError("PFBlockProducer")<<" cannot get ConvBremGsfrectracks: "
202  }
203 
204  // get recmuons
206 
207  // LogDebug("PFBlockProducer")<<"get reco muons"<<endl;
208  //if(!usePFatHLT_) {
209  found = iEvent.getByLabel(inputTagRecMuons_, recMuons);
210 
211  //if(!found )
212  // LogError("PFBlockProducer")<<" cannot get recmuons: "
213  // <<inputTagRecMuons_<<endl;
214 
215  // get PFNuclearInteractions
216  //}
217  //---------- Gouzevitch
218  // Handle< reco::PFNuclearInteractionCollection > pfNuclears;
220 
221  if( useNuclear_ ) {
222 
223  found = iEvent.getByLabel(inputTagPFNuclear_, pfNuclears);
224  if(!found )
225  LogError("PFBlockProducer")<<" cannot get PFNuclearInteractions : "
226  <<inputTagPFNuclear_<<endl;
227  }
228 
229 
230 
231 
232  // get conversions
234  if( useConversions_ ) {
235  found = iEvent.getByLabel(inputTagPFConversions_, pfConversions);
236 
237  if(!found )
238  LogError("PFBlockProducer")<<" cannot get PFConversions : "
239  <<inputTagPFConversions_<<endl;
240  }
241 
242 
243  // get V0s
245  if( useV0_ ) {
246  found = iEvent.getByLabel(inputTagPFV0_, pfV0);
247 
248  if(!found )
249  LogError("PFBlockProducer")<<" cannot get PFV0 : "
250  <<inputTagPFV0_<<endl;
251  }
252 
253 
254 
255  // get ECAL, HCAL and PS clusters
256 
257 
259  found = iEvent.getByLabel(inputTagPFClustersECAL_,
260  clustersECAL);
261  if(!found )
262  LogError("PFBlockProducer")<<" cannot get ECAL clusters: "
263  <<inputTagPFClustersECAL_<<endl;
264 
265 
267  found = iEvent.getByLabel(inputTagPFClustersHCAL_,
268  clustersHCAL);
269  if(!found )
270  LogError("PFBlockProducer")<<" cannot get HCAL clusters: "
271  <<inputTagPFClustersHCAL_<<endl;
272 
274  found = iEvent.getByLabel(inputTagPFClustersHFEM_,
275  clustersHFEM);
276  if(!found )
277  LogError("PFBlockProducer")<<" cannot get HFEM clusters: "
278  <<inputTagPFClustersHFEM_<<endl;
279 
281  found = iEvent.getByLabel(inputTagPFClustersHFHAD_,
282  clustersHFHAD);
283  if(!found )
284  LogError("PFBlockProducer")<<" cannot get HFHAD clusters: "
285  <<inputTagPFClustersHFHAD_<<endl;
286 
287 
289  found = iEvent.getByLabel(inputTagPFClustersPS_,
290  clustersPS);
291  if(!found )
292  LogError("PFBlockProducer")<<" cannot get PS clusters: "
293  <<inputTagPFClustersPS_<<endl;
294 
295  // dummy. Not used in the full framework
296  Handle< reco::PFRecTrackCollection > nuclearRecTracks;
297 
298 
300  found = iEvent.getByLabel(inputTagEGPhotons_,
301  egPhotons);
302 
303  if(!found && useEGPhotons_ )
304  LogError("PFBlockProducer")<<" cannot get photons"
305  << inputTagEGPhotons_ << endl;
306 
307  if( usePFatHLT_ ) {
308  pfBlockAlgo_.setInput( recTracks,
309  recMuons,
310  clustersECAL,
311  clustersHCAL,
312  clustersHFEM,
313  clustersHFHAD,
314  clustersPS );
315  } else {
316  pfBlockAlgo_.setInput( recTracks,
317  GsfrecTracks,
318  convBremGsfrecTracks,
319  recMuons,
320  pfNuclears,
321  nuclearRecTracks,
322  pfConversions,
323  pfV0,
324  clustersECAL,
325  clustersHCAL,
326  clustersHFEM,
327  clustersHFHAD,
328  clustersPS,
329  egPhotons);
330  }
332 
333  if(verbose_) {
334  ostringstream str;
335  str<<pfBlockAlgo_<<endl;
336  LogInfo("PFBlockProducer") << str.str()<<endl;
337  }
338 
339  auto_ptr< reco::PFBlockCollection >
340  pOutputBlockCollection( pfBlockAlgo_.transferBlocks() );
341 
342 
343  iEvent.put(pOutputBlockCollection);
344 
345  LogDebug("PFBlockProducer")<<"STOP event: "<<iEvent.id().event()
346  <<" in run "<<iEvent.id().run()<<endl;
347 }
#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_
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:84
PFBlockAlgo pfBlockAlgo_
Particle flow block algorithm.
bool usePFatHLT_
Particle Flow at HLT ?
edm::InputTag inputTagPFClustersHFHAD_
edm::InputTag inputTagRecMuons_
bool useEGPhotons_
use EG photons ?
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
edm::InputTag inputTagConvBremGsfRecTracks_
std::auto_ptr< reco::PFBlockCollection > transferBlocks()
Definition: PFBlockAlgo.h:172
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 > &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 &hfemMask=dummyMask_, const Mask &hfhadMask=dummyMask_, const Mask &psMask=dummyMask_, const Mask &phMask=dummyMask_)
set input collections of tracks and clusters
Definition: PFBlockAlgo.h:328
void findBlocks()
build blocks
Definition: PFBlockAlgo.cc:66
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 63 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 58 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFClustersHFHAD_
private

Definition at line 59 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFClustersPS_
private

Definition at line 60 of file PFBlockProducer.h.

edm::InputTag PFBlockProducer::inputTagPFConversions_
private

Definition at line 61 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 62 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 87 of file PFBlockProducer.h.

bool PFBlockProducer::useConvBremGsfTracks_
private

switch on/off Conversions Brem Recovery

Definition at line 78 of file PFBlockProducer.h.

bool PFBlockProducer::useConversions_
private

switch on/off Conversions

Definition at line 75 of file PFBlockProducer.h.

bool PFBlockProducer::useEGPhotons_
private

use EG photons ?

Definition at line 72 of file PFBlockProducer.h.

bool PFBlockProducer::useNuclear_
private

use NuclearInteractions ?

Definition at line 69 of file PFBlockProducer.h.

bool PFBlockProducer::usePFatHLT_
private

Particle Flow at HLT ?

Definition at line 84 of file PFBlockProducer.h.

bool PFBlockProducer::useV0_
private

switch on/off V0

Definition at line 81 of file PFBlockProducer.h.

bool PFBlockProducer::verbose_
private

verbose ?

Definition at line 66 of file PFBlockProducer.h.