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
SiPixelRawToDigi Class Reference

#include <SiPixelRawToDigi.h>

Inheritance diagram for SiPixelRawToDigi:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

virtual void produce (edm::Event &, const edm::EventSetup &) override
 get data, convert to digis attach againe to Event More...
 
 SiPixelRawToDigi (const edm::ParameterSet &)
 ctor More...
 
virtual ~SiPixelRawToDigi ()
 dtor More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Attributes

const SiPixelQualitybadPixelInfo_
 
std::unique_ptr
< SiPixelFedCablingTree
cabling_
 
edm::ParameterSet config_
 
bool debug
 
std::vector< unsigned int > fedIds
 
TH1D * hCPU
 
TH1D * hDigi
 
bool includeErrors
 
edm::InputTag label
 
int ndigis
 
int nwords
 
edm::ESWatcher< SiPixelQualityRcdqualityWatcher
 
edm::ESWatcher
< SiPixelFedCablingMapRcd
recordWatcher
 
PixelUnpackingRegionsregions_
 
edm::EDGetTokenT
< FEDRawDataCollection
tFEDRawDataCollection
 
std::unique_ptr< edm::CPUTimertheTimer
 
std::vector< int > tkerrorlist
 
bool useQuality
 
std::vector< int > usererrorlist
 

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, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 26 of file SiPixelRawToDigi.h.

Constructor & Destructor Documentation

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

ctor

Definition at line 39 of file SiPixelRawToDigi.cc.

References config_, edm::EDConsumerBase::consumesCollector(), edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNames(), edm::ParameterSet::getUntrackedParameter(), hCPU, hDigi, includeErrors, ndigis, nwords, regions_, tFEDRawDataCollection, theTimer, tkerrorlist, useQuality, and usererrorlist.

40  : config_(conf),
41  badPixelInfo_(0),
42  regions_(0),
43  hCPU(0), hDigi(0)
44 {
45 
46  includeErrors = config_.getParameter<bool>("IncludeErrors");
47  useQuality = config_.getParameter<bool>("UseQualityInfo");
48  if (config_.exists("ErrorList")) {
49  tkerrorlist = config_.getParameter<std::vector<int> > ("ErrorList");
50  }
51  if (config_.exists("UserErrorList")) {
52  usererrorlist = config_.getParameter<std::vector<int> > ("UserErrorList");
53  }
54  tFEDRawDataCollection = consumes <FEDRawDataCollection> (config_.getParameter<edm::InputTag>("InputLabel"));
55 
56  //start counters
57  ndigis = 0;
58  nwords = 0;
59 
60  // Products
61  produces< edm::DetSetVector<PixelDigi> >();
62  if(includeErrors){
63  produces< edm::DetSetVector<SiPixelRawDataError> >();
64  produces<DetIdCollection>();
65  produces<DetIdCollection>("UserErrorModules");
66  }
67 
68  // regions
69  if (config_.exists("Regions")) {
70  if(config_.getParameter<edm::ParameterSet>("Regions").getParameterNames().size() > 0)
71  {
73  }
74  }
75 
76  // Timing
77  bool timing = config_.getUntrackedParameter<bool>("Timing",false);
78  if (timing) {
79  theTimer.reset( new edm::CPUTimer );
80  hCPU = new TH1D ("hCPU","hCPU",100,0.,0.050);
81  hDigi = new TH1D("hDigi","hDigi",50,0.,15000.);
82  }
83 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::unique_ptr< edm::CPUTimer > theTimer
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::vector< int > usererrorlist
PixelUnpackingRegions * regions_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
edm::EDGetTokenT< FEDRawDataCollection > tFEDRawDataCollection
std::vector< std::string > getParameterNames() const
std::vector< int > tkerrorlist
edm::ParameterSet config_
const SiPixelQuality * badPixelInfo_
SiPixelRawToDigi::~SiPixelRawToDigi ( )
virtual

dtor

Definition at line 87 of file SiPixelRawToDigi.cc.

References hCPU, hDigi, regions_, and theTimer.

87  {
88  edm::LogInfo("SiPixelRawToDigi") << " HERE ** SiPixelRawToDigi destructor!";
89 
90  if (regions_) delete regions_;
91 
92  if (theTimer) {
93  TFile rootFile("analysis.root", "RECREATE", "my histograms");
94  hCPU->Write();
95  hDigi->Write();
96  }
97 
98 }
std::unique_ptr< edm::CPUTimer > theTimer
PixelUnpackingRegions * regions_

Member Function Documentation

void SiPixelRawToDigi::produce ( edm::Event ev,
const edm::EventSetup es 
)
overridevirtual

get data, convert to digis attach againe to Event

Implements edm::stream::EDProducerBase.

Definition at line 105 of file SiPixelRawToDigi.cc.

References badPixelInfo_, edm::DetSet< T >::begin(), cabling_, edm::ESWatcher< T >::check(), runEdmFileComparison::collection, config_, edm::DetSet< T >::data, debug, edm::MessageDrop::debugEnabled, edm::DetSet< T >::end(), benchmark_cfg::errors, fedIds, spr::find(), fff_deleter::formatter, edm::EventSetup::get(), edm::Event::getByToken(), edm::ParameterSet::getParameter(), hCPU, hDigi, includeErrors, edm::MessageDrop::instance(), label, LogDebug, PixelUnpackingRegions::mayUnpackFED(), PixelUnpackingRegions::modulesToUnpack(), PixelUnpackingRegions::nBarrelFEDs(), PixelUnpackingRegions::nBarrelModules(), ndigis, PixelUnpackingRegions::nFEDs(), PixelUnpackingRegions::nForwardFEDs(), PixelUnpackingRegions::nForwardModules(), PixelUnpackingRegions::nModules(), nwords, edm::ESHandle< class >::product(), edm::Event::put(), qualityWatcher, recordWatcher, regions_, PixelUnpackingRegions::run(), tFEDRawDataCollection, theTimer, tkerrorlist, useQuality, and usererrorlist.

Referenced by JSONExport.JsonExport::export(), HTMLExport.HTMLExport::export(), and HTMLExport.HTMLExportStatic::export().

107 {
108  const uint32_t dummydetid = 0xffffffff;
110 
111 // initialize cabling map or update if necessary
112  if (recordWatcher.check( es )) {
113  // cabling map, which maps online address (fed->link->ROC->local pixel) to offline (DetId->global pixel)
115  es.get<SiPixelFedCablingMapRcd>().get( cablingMap );
116  fedIds = cablingMap->fedIds();
117  cabling_ = cablingMap->cablingTree();
118  LogDebug("map version:")<< cabling_->version();
119  }
120 // initialize quality record or update if necessary
121  if (qualityWatcher.check( es )&&useQuality) {
122  // quality info for dead pixel modules or ROCs
123  edm::ESHandle<SiPixelQuality> qualityInfo;
124  es.get<SiPixelQualityRcd>().get( qualityInfo );
125  badPixelInfo_ = qualityInfo.product();
126  if (!badPixelInfo_) {
127  edm::LogError("SiPixelQualityNotPresent")<<" Configured to use SiPixelQuality, but SiPixelQuality not present"<<endl;
128  }
129  }
130 
132  label = config_.getParameter<edm::InputTag>("InputLabel");
133  ev.getByToken(tFEDRawDataCollection, buffers);
134 
135 // create product (digis & errors)
136  std::auto_ptr< edm::DetSetVector<PixelDigi> > collection( new edm::DetSetVector<PixelDigi> );
137  // collection->reserve(8*1024);
138  std::auto_ptr< edm::DetSetVector<SiPixelRawDataError> > errorcollection( new edm::DetSetVector<SiPixelRawDataError> );
139  std::auto_ptr< DetIdCollection > tkerror_detidcollection(new DetIdCollection());
140  std::auto_ptr< DetIdCollection > usererror_detidcollection(new DetIdCollection());
141 
143  formatter.setErrorStatus(includeErrors);
144 
145  if (useQuality) formatter.setQualityStatus(useQuality, badPixelInfo_);
146 
147  if (theTimer) theTimer->start();
148  bool errorsInEvent = false;
149  PixelDataFormatter::DetErrors nodeterrors;
150 
151  if (regions_) {
152  regions_->run(ev, es);
153  formatter.setModulesToUnpack(regions_->modulesToUnpack());
154  LogDebug("SiPixelRawToDigi") << "region2unpack #feds (BPIX,EPIX,total): "<<regions_->nBarrelFEDs()<<" "<<regions_->nForwardFEDs()<<" "<<regions_->nFEDs();
155  LogDebug("SiPixelRawToDigi") << "region2unpack #modules (BPIX,EPIX,total): "<<regions_->nBarrelModules()<<" "<<regions_->nForwardModules()<<" "<<regions_->nModules();
156  }
157 
158  for (auto aFed = fedIds.begin(); aFed != fedIds.end(); ++aFed) {
159  int fedId = *aFed;
160 
161  if (regions_ && !regions_->mayUnpackFED(fedId)) continue;
162 
163  if(debug) LogDebug("SiPixelRawToDigi")<< " PRODUCE DIGI FOR FED: " << fedId << endl;
164 
166 
167  //get event data for this fed
168  const FEDRawData& fedRawData = buffers->FEDData( fedId );
169 
170  //convert data to digi and strip off errors
171  formatter.interpretRawData( errorsInEvent, fedId, fedRawData, *collection, errors);
172 
173  //pack errors into collection
174  if(includeErrors) {
175  typedef PixelDataFormatter::Errors::iterator IE;
176  for (IE is = errors.begin(); is != errors.end(); is++) {
177  uint32_t errordetid = is->first;
178  if (errordetid==dummydetid) { // errors given dummy detId must be sorted by Fed
179  nodeterrors.insert( nodeterrors.end(), errors[errordetid].begin(), errors[errordetid].end() );
180  } else {
181  edm::DetSet<SiPixelRawDataError>& errorDetSet = errorcollection->find_or_insert(errordetid);
182  errorDetSet.data.insert(errorDetSet.data.end(), is->second.begin(), is->second.end());
183  // Fill detid of the detectors where there is error AND the error number is listed
184  // in the configurable error list in the job option cfi.
185  // Code needs to be here, because there can be a set of errors for each
186  // entry in the for loop over PixelDataFormatter::Errors
187  if(!tkerrorlist.empty() || !usererrorlist.empty()){
188  DetId errorDetId(errordetid);
189  edm::DetSet<SiPixelRawDataError>::const_iterator itPixelError=errorDetSet.begin();
190  for(; itPixelError!=errorDetSet.end(); ++itPixelError){
191  // fill list of detIds to be turned off by tracking
192  if(!tkerrorlist.empty()) {
193  std::vector<int>::iterator it_find = find(tkerrorlist.begin(), tkerrorlist.end(), itPixelError->getType());
194  if(it_find != tkerrorlist.end()){
195  tkerror_detidcollection->push_back(errordetid);
196  }
197  }
198  // fill list of detIds with errors to be studied
199  if(!usererrorlist.empty()) {
200  std::vector<int>::iterator it_find = find(usererrorlist.begin(), usererrorlist.end(), itPixelError->getType());
201  if(it_find != usererrorlist.end()){
202  usererror_detidcollection->push_back(errordetid);
203  }
204  }
205  }
206  }
207  }
208  }
209  }
210  }
211 
212  if(includeErrors) {
213  edm::DetSet<SiPixelRawDataError>& errorDetSet = errorcollection->find_or_insert(dummydetid);
214  errorDetSet.data = nodeterrors;
215  }
216  if (errorsInEvent) LogDebug("SiPixelRawToDigi") << "Error words were stored in this event";
217 
218  if (theTimer) {
219  theTimer->stop();
220  LogDebug("SiPixelRawToDigi") << "TIMING IS: (real)" << theTimer->realTime() ;
221  ndigis += formatter.nDigis();
222  nwords += formatter.nWords();
223  LogDebug("SiPixelRawToDigi") << " (Words/Digis) this ev: "
224  <<formatter.nWords()<<"/"<<formatter.nDigis() << "--- all :"<<nwords<<"/"<<ndigis;
225  hCPU->Fill( theTimer->realTime() );
226  hDigi->Fill(formatter.nDigis());
227  }
228 
229  //send digis and errors back to framework
230  ev.put( collection );
231  if(includeErrors){
232  ev.put( errorcollection );
233  ev.put( tkerror_detidcollection );
234  ev.put( usererror_detidcollection, "UserErrorModules" );
235  }
236 }
#define LogDebug(id)
iterator end()
Definition: DetSet.h:60
T getParameter(std::string const &) const
std::unique_ptr< edm::CPUTimer > theTimer
unsigned int nForwardFEDs() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
static MessageDrop * instance()
Definition: MessageDrop.cc:60
std::vector< int > usererrorlist
const std::set< unsigned int > * modulesToUnpack() const
full set of module ids to unpack
edm::InputTag label
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
PixelUnpackingRegions * regions_
std::vector< SiPixelRawDataError > DetErrors
std::vector< unsigned int > fedIds
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
std::unique_ptr< SiPixelFedCablingTree > cabling_
unsigned int nBarrelModules() const
edm::EDGetTokenT< FEDRawDataCollection > tFEDRawDataCollection
std::map< cms_uint32_t, DetErrors > Errors
iterator begin()
Definition: DetSet.h:59
edm::ESWatcher< SiPixelFedCablingMapRcd > recordWatcher
void run(const edm::Event &e, const edm::EventSetup &es)
has to be run during each event
Definition: DetId.h:18
unsigned int nModules() const
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
std::vector< int > tkerrorlist
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
edm::ParameterSet config_
unsigned int nForwardModules() const
collection_type data
Definition: DetSet.h:78
unsigned int nFEDs() const
various informational accessors:
unsigned int nBarrelFEDs() const
tuple formatter
Definition: fff_deleter.py:293
bool mayUnpackFED(unsigned int fed_n) const
check whether a FED has to be unpacked
edm::EDCollection< DetId > DetIdCollection
collection_type::const_iterator const_iterator
Definition: DetSet.h:33
edm::ESWatcher< SiPixelQualityRcd > qualityWatcher
const SiPixelQuality * badPixelInfo_

Member Data Documentation

const SiPixelQuality* SiPixelRawToDigi::badPixelInfo_
private

Definition at line 42 of file SiPixelRawToDigi.h.

Referenced by produce().

std::unique_ptr<SiPixelFedCablingTree> SiPixelRawToDigi::cabling_
private

Definition at line 41 of file SiPixelRawToDigi.h.

Referenced by produce().

edm::ParameterSet SiPixelRawToDigi::config_
private

Definition at line 40 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

bool SiPixelRawToDigi::debug
private
std::vector<unsigned int> SiPixelRawToDigi::fedIds
private

Definition at line 53 of file SiPixelRawToDigi.h.

Referenced by produce().

TH1D* SiPixelRawToDigi::hCPU
private

Definition at line 46 of file SiPixelRawToDigi.h.

Referenced by produce(), SiPixelRawToDigi(), and ~SiPixelRawToDigi().

TH1D * SiPixelRawToDigi::hDigi
private

Definition at line 46 of file SiPixelRawToDigi.h.

Referenced by produce(), SiPixelRawToDigi(), and ~SiPixelRawToDigi().

bool SiPixelRawToDigi::includeErrors
private

Definition at line 48 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

edm::InputTag SiPixelRawToDigi::label
private
int SiPixelRawToDigi::ndigis
private

Definition at line 57 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

int SiPixelRawToDigi::nwords
private

Definition at line 58 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

edm::ESWatcher<SiPixelQualityRcd> SiPixelRawToDigi::qualityWatcher
private

Definition at line 55 of file SiPixelRawToDigi.h.

Referenced by produce().

edm::ESWatcher<SiPixelFedCablingMapRcd> SiPixelRawToDigi::recordWatcher
private

Definition at line 54 of file SiPixelRawToDigi.h.

Referenced by produce().

PixelUnpackingRegions* SiPixelRawToDigi::regions_
private

Definition at line 43 of file SiPixelRawToDigi.h.

Referenced by produce(), SiPixelRawToDigi(), and ~SiPixelRawToDigi().

edm::EDGetTokenT<FEDRawDataCollection> SiPixelRawToDigi::tFEDRawDataCollection
private

Definition at line 44 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

std::unique_ptr<edm::CPUTimer> SiPixelRawToDigi::theTimer
private

Definition at line 47 of file SiPixelRawToDigi.h.

Referenced by produce(), SiPixelRawToDigi(), and ~SiPixelRawToDigi().

std::vector<int> SiPixelRawToDigi::tkerrorlist
private

Definition at line 51 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

bool SiPixelRawToDigi::useQuality
private

Definition at line 49 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

std::vector<int> SiPixelRawToDigi::usererrorlist
private

Definition at line 52 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().