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 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 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(), edm::ParameterSet::getUntrackedParameter(), ExpressReco_HICollisions_FallBack::nuclearInteractionsPurity, ExpressReco_HICollisions_FallBack::useConvBremPFRecTracks, and ExpressReco_HICollisions_FallBack::useIterTracking.

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 
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 }
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:146
edm::InputTag inputTagPFClustersHFHAD_
edm::InputTag inputTagRecMuons_
edm::InputTag inputTagConvBremGsfRecTracks_
bool verbose_
verbose ?
bool useConvBremGsfTracks_
switch on/off Conversions Brem Recovery
edm::InputTag inputTagPFV0_
bool useNuclear_
use NuclearInteractions ?
void setParameters(std::vector< double > &DPtovPtCut, std::vector< unsigned > &NHitCut, bool useConvBremPFRecTracks, bool useIterTracking, int nuclearInteractionsPurity)
Definition: PFBlockAlgo.cc:30
bool useConversions_
switch on/off Conversions
PFBlockProducer::~PFBlockProducer ( )

Definition at line 135 of file PFBlockProducer.cc.

135 { }

Member Function Documentation

void PFBlockProducer::beginJob ( void  )
virtual

Reimplemented from edm::EDProducer.

Definition at line 140 of file PFBlockProducer.cc.

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

Reimplemented from edm::EDProducer.

Definition at line 143 of file PFBlockProducer.cc.

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

Implements edm::EDProducer.

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

149  {
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 
183  found = iEvent.getByLabel(inputTagConvBremGsfRecTracks_,convBremGsfrecTracks);
184 
185  if(!found )
186  LogError("PFBlockProducer")<<" cannot get ConvBremGsfrectracks: "
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  }
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
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_
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 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_)
set input collections of tracks and clusters
Definition: PFBlockAlgo.h:304
edm::InputTag inputTagRecMuons_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:359
edm::InputTag inputTagConvBremGsfRecTracks_
std::auto_ptr< reco::PFBlockCollection > transferBlocks()
Definition: PFBlockAlgo.h:158
void findBlocks()
build blocks
Definition: PFBlockAlgo.cc:54
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 ?
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::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 86 of file PFBlockProducer.h.

bool PFBlockProducer::useConvBremGsfTracks_
private

switch on/off Conversions Brem Recovery

Definition at line 77 of file PFBlockProducer.h.

bool PFBlockProducer::useConversions_
private

switch on/off Conversions

Definition at line 74 of file PFBlockProducer.h.

bool PFBlockProducer::useNuclear_
private

use NuclearInteractions ?

Definition at line 70 of file PFBlockProducer.h.

bool PFBlockProducer::usePFatHLT_
private

Particle Flow at HLT ?

Definition at line 83 of file PFBlockProducer.h.

bool PFBlockProducer::useV0_
private

switch on/off V0

Definition at line 80 of file PFBlockProducer.h.

bool PFBlockProducer::verbose_
private

verbose ?

Definition at line 67 of file PFBlockProducer.h.