CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
edm::CFWriter Class Reference

#include <CFWriter.h>

Inheritance diagram for edm::CFWriter:
edm::stream::EDProducer<>

Public Member Functions

void beginRun (const edm::Run &run, const edm::EventSetup &es) override
 
 CFWriter (const edm::ParameterSet &conf)
 
void produce (edm::Event &e, const edm::EventSetup &c) override
 
virtual void put (edm::Event &e)
 
 ~CFWriter () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Private Types

typedef std::vector< edm::HepMCProductHepMCProductContainer
 

Private Member Functions

virtual void branchesActivate (const std::string &friendlyName, std::string subdet, InputTag &tag, std::string &label)
 
PCrossingFrame< SimTrackfctTest (const PCrossingFrame< SimTrack > &p)
 

Private Attributes

bool flagHepMCProduct_
 
bool flagPCaloHit_
 
bool flagPSimHit_
 
bool flagSimTrack_
 
bool flagSimVertex_
 
std::vector< std::string > labCaloHit
 
std::vector< std::string > labSimHit
 
bool useCurrentProcessOnly_
 
std::vector< std::string > wantedBranches_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 30 of file CFWriter.h.

Member Typedef Documentation

Definition at line 59 of file CFWriter.h.

Constructor & Destructor Documentation

CFWriter::CFWriter ( const edm::ParameterSet conf)
explicit

Definition at line 34 of file CFWriter.cc.

References branchesActivate(), edm::InputTag::encode(), edm::ParameterSet::exists(), flagHepMCProduct_, flagPCaloHit_, flagPSimHit_, flagSimTrack_, flagSimVertex_, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNames(), cuy::ii, labCaloHit, label, labSimHit, names, muonDTDigis_cfi::pset, AlCaHLTBitMon_QueryRunRegistry::string, fireworks::subdets, GlobalPosition_Frontier_DevDB_cff::tag, and triggerMatcherToHLTDebug_cfi::tags.

35  : flagSimTrack_(false),
36  flagSimVertex_(false),
37  flagHepMCProduct_(false),
38  flagPCaloHit_(false),
39  flagPSimHit_(false) {
40  //register your products
41  ParameterSet ps = iConfig.getParameter<ParameterSet>("mixObjects");
42  std::vector<std::string> names = ps.getParameterNames();
43  for (std::vector<std::string>::iterator it = names.begin(); it != names.end(); ++it) {
44  ParameterSet pset = ps.getParameter<ParameterSet>((*it));
45  if (!pset.exists("type"))
46  continue; //to allow replacement by empty pset
47 
48  std::string object = pset.getParameter<std::string>("type");
49  std::vector<InputTag> tags = pset.getParameter<std::vector<InputTag>>("input");
50 
51  //SimTracks
52  if (object == "SimTrack") {
53  flagSimTrack_ = true;
54 
55  InputTag tag;
56  if (!tags.empty())
57  tag = tags[0];
59  branchesActivate(TypeID(typeid(std::vector<SimTrack>)).friendlyClassName(), std::string(""), tag, label);
60  produces<PCrossingFrame<SimTrack>>(label);
61  consumes<std::vector<SimTrack>>(tag);
62  LogInfo("MixingModule") << "Add PCrossingFrame<SimTrack> " << object << "s with InputTag= " << tag.encode()
63  << ", label will be " << label;
64 
65  }
66  //SimVertices
67  else if (object == "SimVertex") {
68  flagSimVertex_ = true;
69 
70  InputTag tag;
71  if (!tags.empty())
72  tag = tags[0];
74  branchesActivate(TypeID(typeid(std::vector<SimVertex>)).friendlyClassName(), std::string(""), tag, label);
75  produces<PCrossingFrame<SimVertex>>(label);
76  consumes<std::vector<SimVertex>>(tag);
77  LogInfo("MixingModule") << "Add SimVertexContainer " << object << "s with InputTag= " << tag.encode()
78  << ", label will be " << label;
79 
80  }
81  // PCaloHit
82  else if (object == "PCaloHit") {
83  flagPCaloHit_ = true;
84 
85  std::vector<std::string> subdets = pset.getParameter<std::vector<std::string>>("subdets");
86  for (unsigned int ii = 0; ii < subdets.size(); ii++) {
87  InputTag tag;
88  if (tags.size() == 1)
89  tag = tags[0];
90  else if (tags.size() > 1)
91  tag = tags[ii];
93 
94  branchesActivate(TypeID(typeid(std::vector<PCaloHit>)).friendlyClassName(), subdets[ii], tag, label);
95  produces<PCrossingFrame<PCaloHit>>(label);
96  consumes<std::vector<PCaloHit>>(tag);
97  LogInfo("MixingModule") << "Add PCrossingFrame<PCaloHit> " << object << "s with InputTag= " << tag.encode()
98  << ", label will be " << label;
99 
100  // fill table with labels
101  labCaloHit.push_back(label);
102  }
103  }
104 
105  // PSimHit
106  else if (object == "PSimHit") {
107  flagPSimHit_ = true;
108 
109  std::vector<std::string> subdets = pset.getParameter<std::vector<std::string>>("subdets");
110  for (unsigned int ii = 0; ii < subdets.size(); ii++) {
111  InputTag tag;
112  if (tags.size() == 1)
113  tag = tags[0];
114 
115  else if (tags.size() > 1)
116  tag = tags[ii];
118 
119  branchesActivate(TypeID(typeid(std::vector<PSimHit>)).friendlyClassName(), subdets[ii], tag, label);
120  produces<PCrossingFrame<PSimHit>>(label);
121  consumes<std::vector<PSimHit>>(tag);
122  LogInfo("MixingModule") << "Add PSimHitContainer " << object << "s with InputTag= " << tag.encode()
123  << ", label will be " << label;
124 
125  // fill table with labels
126  labSimHit.push_back(label);
127  } //end for
128  }
129 
130  // HepMCProduct
131  else if (object == "HepMCProduct") {
132  flagHepMCProduct_ = true;
133 
134  InputTag tag;
135  if (!tags.empty())
136  tag = tags[0];
138 
139  branchesActivate(TypeID(typeid(HepMCProduct)).friendlyClassName(), std::string(""), tag, label);
140  produces<PCrossingFrame<edm::HepMCProduct>>(label);
141  consumes<HepMCProduct>(tag);
142  LogInfo("MixingModule") << "Add HepMCProduct " << object << "s with InputTag= " << tag.encode()
143  << ", label will be " << label;
144  } else
145  LogWarning("MixingModule") << "You did not mix a type of object(" << object << ").";
146 
147  } //end for
148  }
std::vector< std::string > labCaloHit
Definition: CFWriter.h:61
bool flagSimVertex_
Definition: CFWriter.h:54
bool flagPSimHit_
Definition: CFWriter.h:57
const std::string names[nVars_]
char const * label
std::vector< std::string > labSimHit
Definition: CFWriter.h:60
bool flagPCaloHit_
Definition: CFWriter.h:56
virtual void branchesActivate(const std::string &friendlyName, std::string subdet, InputTag &tag, std::string &label)
Definition: CFWriter.cc:235
ii
Definition: cuy.py:590
bool flagHepMCProduct_
Definition: CFWriter.h:55
bool flagSimTrack_
Definition: CFWriter.h:53
static const std::string subdets[7]
Definition: TrackUtils.cc:60
CFWriter::~CFWriter ( )
override

Definition at line 152 of file CFWriter.cc.

152 {}

Member Function Documentation

void CFWriter::beginRun ( const edm::Run run,
const edm::EventSetup es 
)
override

Definition at line 150 of file CFWriter.cc.

150 {}
void CFWriter::branchesActivate ( const std::string &  friendlyName,
std::string  subdet,
InputTag tag,
std::string &  label 
)
privatevirtual

Definition at line 235 of file CFWriter.cc.

References EgammaHLTValidationUtils::getProcessName(), HLT_2018_cff::InputTag, edm::InputTag::instance(), edm::InputTag::label(), SimL1EmulatorRepack_CalouGT_cff::processName, AlCaHLTBitMon_QueryRunRegistry::string, useCurrentProcessOnly_, and wantedBranches_.

Referenced by CFWriter(), and fctTest().

238  {
239  label = tag.label() + tag.instance();
240  wantedBranches_.push_back(friendlyName + '_' + tag.label() + '_' + tag.instance());
241 
242  //if useCurrentProcessOnly, we have to change the input tag
245  tag = InputTag(tag.label(), tag.instance(), processName);
246  }
247  }
bool useCurrentProcessOnly_
Definition: CFWriter.h:52
char const * label
std::string friendlyName(std::string const &iFullName)
std::vector< std::string > wantedBranches_
Definition: CFWriter.h:51
def getProcessName(pdgGen, requiredNumberOfGeneratedObjects)
PCrossingFrame<SimTrack> edm::CFWriter::fctTest ( const PCrossingFrame< SimTrack > &  p)
inlineprivate
void CFWriter::produce ( edm::Event e,
const edm::EventSetup c 
)
override

Definition at line 154 of file CFWriter.cc.

References flagHepMCProduct_, flagPCaloHit_, flagPSimHit_, flagSimTrack_, flagSimVertex_, edm::Event::getByLabel(), cuy::ii, labCaloHit, labSimHit, eostools::move(), edm::Handle< T >::product(), and edm::Event::put().

154  {
155  if (flagSimTrack_) {
156  bool gotTracks;
158  gotTracks = iEvent.getByLabel("mix", "g4SimHits", cf_simtrack);
159 
160  if (gotTracks) {
161  PCrossingFrame<SimTrack>* PCFbis = new PCrossingFrame<SimTrack>(*cf_simtrack.product());
162  std::unique_ptr<PCrossingFrame<SimTrack>> pOutTrack(PCFbis);
163  iEvent.put(std::move(pOutTrack), "g4SimHits");
164  } else {
165  LogInfo("MixingModule") << " Please, check if the object <SimTrack> has been mixed by the MixingModule!";
166  }
167  } //end if flagSimTrack_
168 
169  //SimVertex
170  if (flagSimVertex_) {
171  bool gotSimVertex;
173  gotSimVertex = iEvent.getByLabel("mix", "g4SimHits", cf_simvtx);
174 
175  if (gotSimVertex) {
176  PCrossingFrame<SimVertex>* PCFvtx = new PCrossingFrame<SimVertex>(*cf_simvtx.product());
177  std::unique_ptr<PCrossingFrame<SimVertex>> pOutVertex(PCFvtx);
178  iEvent.put(std::move(pOutVertex), "g4SimHits");
179  } else {
180  LogInfo("MixingModule") << " Please, check if the object <SimVertex> has been mixed by the MixingModule!";
181  }
182  }
183 
184  // PCaloHit
185  if (flagPCaloHit_) {
186  for (unsigned int ii = 0; ii < labCaloHit.size(); ii++) {
187  bool gotPCaloHit;
189  gotPCaloHit = iEvent.getByLabel("mix", labCaloHit[ii], cf_calohit);
190 
191  if (gotPCaloHit) {
192  PCrossingFrame<PCaloHit>* PCFPhCaloHit = new PCrossingFrame<PCaloHit>(*cf_calohit.product());
193  std::unique_ptr<PCrossingFrame<PCaloHit>> pOutHCalo(PCFPhCaloHit);
194  iEvent.put(std::move(pOutHCalo), labCaloHit[ii]);
195  } else {
196  LogInfo("MixingModule") << " Please, check if the object <PCaloHit> " << labCaloHit[ii]
197  << " has been mixed by the MixingModule!";
198  }
199  }
200  }
201 
202  if (flagPSimHit_) {
203  for (unsigned int ii = 0; ii < labSimHit.size(); ii++) {
204  bool gotPSimHit;
206  gotPSimHit = iEvent.getByLabel("mix", labSimHit[ii], cf_simhit);
207 
208  if (gotPSimHit) {
209  PCrossingFrame<PSimHit>* PCFSimHit = new PCrossingFrame<PSimHit>(*cf_simhit.product());
210  std::unique_ptr<PCrossingFrame<PSimHit>> pOutSimHit(PCFSimHit);
211  iEvent.put(std::move(pOutSimHit), labSimHit[ii]);
212  } else {
213  LogInfo("MixingModule") << " Please, check if the object <PSimHit> " << labSimHit[ii]
214  << " has been mixed by the MixingModule!";
215  }
216  }
217  }
218 
219  //HepMCProduct
220  if (flagHepMCProduct_) {
221  bool gotHepMCProduct;
223  gotHepMCProduct = iEvent.getByLabel("mix", "generatorSmeared", cf_hepmc);
224  if (gotHepMCProduct) {
226  std::unique_ptr<PCrossingFrame<edm::HepMCProduct>> pOuthepmcpr(PCFHepMC);
227  iEvent.put(std::move(pOuthepmcpr), "generator");
228  } else {
229  LogInfo("MixingModule") << " Please, check if the object <HepMCProduct> has been mixed by the MixingModule!";
230  }
231 
232  } // end if flagHepMCProduct_
233  }
std::vector< std::string > labCaloHit
Definition: CFWriter.h:61
bool flagSimVertex_
Definition: CFWriter.h:54
bool flagPSimHit_
Definition: CFWriter.h:57
int iEvent
Definition: GenABIO.cc:224
std::vector< std::string > labSimHit
Definition: CFWriter.h:60
bool flagPCaloHit_
Definition: CFWriter.h:56
ii
Definition: cuy.py:590
T const * product() const
Definition: Handle.h:69
bool flagHepMCProduct_
Definition: CFWriter.h:55
bool flagSimTrack_
Definition: CFWriter.h:53
def move(src, dest)
Definition: eostools.py:511
virtual void edm::CFWriter::put ( edm::Event e)
inlinevirtual

Definition at line 39 of file CFWriter.h.

39 { ; }

Member Data Documentation

bool edm::CFWriter::flagHepMCProduct_
private

Definition at line 55 of file CFWriter.h.

Referenced by CFWriter(), and produce().

bool edm::CFWriter::flagPCaloHit_
private

Definition at line 56 of file CFWriter.h.

Referenced by CFWriter(), and produce().

bool edm::CFWriter::flagPSimHit_
private

Definition at line 57 of file CFWriter.h.

Referenced by CFWriter(), and produce().

bool edm::CFWriter::flagSimTrack_
private

Definition at line 53 of file CFWriter.h.

Referenced by CFWriter(), and produce().

bool edm::CFWriter::flagSimVertex_
private

Definition at line 54 of file CFWriter.h.

Referenced by CFWriter(), and produce().

std::vector<std::string> edm::CFWriter::labCaloHit
private

Definition at line 61 of file CFWriter.h.

Referenced by CFWriter(), and produce().

std::vector<std::string> edm::CFWriter::labSimHit
private

Definition at line 60 of file CFWriter.h.

Referenced by CFWriter(), and produce().

bool edm::CFWriter::useCurrentProcessOnly_
private

Definition at line 52 of file CFWriter.h.

Referenced by branchesActivate().

std::vector<std::string> edm::CFWriter::wantedBranches_
private

Definition at line 51 of file CFWriter.h.

Referenced by branchesActivate().