CMS 3D CMS Logo

Public Member Functions | Private Attributes

SiPixelRawToDigi Class Reference

#include <SiPixelRawToDigi.h>

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

List of all members.

Public Member Functions

virtual void endJob ()
 dummy end of job
virtual void produce (edm::Event &, const edm::EventSetup &)
 get data, convert to digis attach againe to Event
 SiPixelRawToDigi (const edm::ParameterSet &)
 ctor
virtual ~SiPixelRawToDigi ()
 dtor

Private Attributes

const SiPixelQualitybadPixelInfo_
const SiPixelFedCablingcabling_
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
R2DTimerObservertheTimer
bool useCablingTree_
bool useQuality

Detailed Description

Definition at line 23 of file SiPixelRawToDigi.h.


Constructor & Destructor Documentation

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

ctor

Definition at line 38 of file SiPixelRawToDigi.cc.

References config_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), hCPU, hDigi, includeErrors, ndigis, nwords, theTimer, useCablingTree_, and useQuality.

  : config_(conf), 
    cabling_(0), 
    badPixelInfo_(0), 
    hCPU(0), hDigi(0), theTimer(0)
{

  includeErrors = config_.getParameter<bool>("IncludeErrors");
  useQuality = config_.getParameter<bool>("UseQualityInfo");
  useCablingTree_ = config_.getUntrackedParameter<bool>("UseCablingTree",true);

  //start counters
  ndigis = 0;
  nwords = 0;

  // Products
  produces< edm::DetSetVector<PixelDigi> >();
  if(includeErrors) produces< edm::DetSetVector<SiPixelRawDataError> >();

  // Timing
  bool timing = config_.getUntrackedParameter<bool>("Timing",false);
  if (timing) {
    theTimer = new R2DTimerObserver("**** MY TIMING REPORT ***");
    hCPU = new TH1D ("hCPU","hCPU",100,0.,0.050);
    hDigi = new TH1D("hDigi","hDigi",50,0.,15000.);
  }
}
SiPixelRawToDigi::~SiPixelRawToDigi ( ) [virtual]

dtor

Definition at line 68 of file SiPixelRawToDigi.cc.

References cabling_, hCPU, hDigi, BuildWebpage::rootFile, theTimer, and useCablingTree_.

                                    {
  edm::LogInfo("SiPixelRawToDigi")  << " HERE ** SiPixelRawToDigi destructor!";

  if(useCablingTree_) delete cabling_;

  if (theTimer) {
    TFile rootFile("analysis.root", "RECREATE", "my histograms");
    hCPU->Write();
    hDigi->Write();
    delete theTimer;
  }

}

Member Function Documentation

virtual void SiPixelRawToDigi::endJob ( void  ) [inline, virtual]

dummy end of job

Reimplemented from edm::EDProducer.

Definition at line 34 of file SiPixelRawToDigi.h.

{}
void SiPixelRawToDigi::produce ( edm::Event ev,
const edm::EventSetup es 
) [virtual]

get data, convert to digis attach againe to Event

Implements edm::EDProducer.

Definition at line 87 of file SiPixelRawToDigi.cc.

References badPixelInfo_, cabling_, edm::ESWatcher< T >::check(), runEdmFileComparison::collection, config_, edm::DetSet< T >::data, debug, cond::rpcobgas::detid, benchmark_cfg::errors, fedIds, edm::EventSetup::get(), edm::Event::getByLabel(), edm::ParameterSet::getParameter(), hCPU, hDigi, includeErrors, edm::MessageDrop::instance(), PixelDataFormatter::interpretRawData(), label, R2DTimerObserver::lastMeasurement(), LogDebug, PixelDataFormatter::nDigis(), ndigis, nwords, PixelDataFormatter::nWords(), edm::ESTransientHandle< T >::product(), edm::ESHandle< T >::product(), edm::Event::put(), qualityWatcher, recordWatcher, PixelDataFormatter::setErrorStatus(), PixelDataFormatter::setQualityStatus(), R2DTimerObserver::start(), R2DTimerObserver::stop(), theTimer, useCablingTree_, useQuality, and SiPixelFedCabling::version().

{
  const uint32_t dummydetid = 0xffffffff;
  debug = edm::MessageDrop::instance()->debugEnabled;

// initialize cabling map or update if necessary
  if (recordWatcher.check( es )) {
    // cabling map, which maps online address (fed->link->ROC->local pixel) to offline (DetId->global pixel)
    edm::ESTransientHandle<SiPixelFedCablingMap> cablingMap;
    es.get<SiPixelFedCablingMapRcd>().get( cablingMap );
    fedIds = cablingMap->fedIds();
    if (useCablingTree_ && cabling_) delete cabling_; 
    if (useCablingTree_) cabling_ = cablingMap->cablingTree();
    else cabling_ = cablingMap.product();
    LogDebug("map version:")<< cabling_->version();
  }
// initialize quality record or update if necessary
  if (qualityWatcher.check( es )&&useQuality) {
    // quality info for dead pixel modules or ROCs
    edm::ESHandle<SiPixelQuality> qualityInfo;
    es.get<SiPixelQualityRcd>().get( qualityInfo );
    badPixelInfo_ = qualityInfo.product();
    if (!badPixelInfo_) {
      edm::LogError("**SiPixelRawToDigi**")<<" Configured to use SiPixelQuality, but SiPixelQuality not present"<<endl;
    }
  }

  edm::Handle<FEDRawDataCollection> buffers;
  label = config_.getParameter<edm::InputTag>("InputLabel");
  ev.getByLabel( label, buffers);

// create product (digis & errors)
  std::auto_ptr< edm::DetSetVector<PixelDigi> > collection( new edm::DetSetVector<PixelDigi> );
  std::auto_ptr< edm::DetSetVector<SiPixelRawDataError> > errorcollection( new edm::DetSetVector<SiPixelRawDataError> );

  PixelDataFormatter formatter(cabling_);
  formatter.setErrorStatus(includeErrors);
  if (useQuality) formatter.setQualityStatus(useQuality, badPixelInfo_);

  if (theTimer) theTimer->start();
  bool errorsInEvent = false;
  PixelDataFormatter::DetErrors nodeterrors;

  typedef std::vector<unsigned int>::const_iterator IF;
  for (IF aFed = fedIds.begin(); aFed != fedIds.end(); ++aFed) {
    int fedId = *aFed;
    if(debug) LogDebug("SiPixelRawToDigi")<< " PRODUCE DIGI FOR FED: " <<  fedId << endl;
    PixelDataFormatter::Digis digis;
    PixelDataFormatter::Errors errors;

    //get event data for this fed
    const FEDRawData& fedRawData = buffers->FEDData( fedId );

    //convert data to digi and strip off errors
    formatter.interpretRawData( errorsInEvent, fedId, fedRawData, digis, errors);

    //pack digi into collection
    typedef PixelDataFormatter::Digis::iterator ID;
    for (ID it = digis.begin(); it != digis.end(); it++) {
      uint32_t detid = it->first;
      edm::DetSet<PixelDigi>& detSet = collection->find_or_insert(detid);
      detSet.data = it->second;
    }

    //pack errors into collection
    if(includeErrors) {
      typedef PixelDataFormatter::Errors::iterator IE;
      for (IE is = errors.begin(); is != errors.end(); is++) {
        uint32_t errordetid = is->first;
        if (errordetid==dummydetid) {           // errors given dummy detId must be sorted by Fed
          nodeterrors.insert( nodeterrors.end(), errors[errordetid].begin(), errors[errordetid].end() );
        } else {
          edm::DetSet<SiPixelRawDataError>& errorDetSet = errorcollection->find_or_insert(errordetid);
          errorDetSet.data = is->second;
        }
      }
    }
  }

  if(includeErrors) {
    edm::DetSet<SiPixelRawDataError>& errorDetSet = errorcollection->find_or_insert(dummydetid);
    errorDetSet.data = nodeterrors;
  }
  if (errorsInEvent) LogDebug("SiPixelRawToDigi") << "Error words were stored in this event";

  if (theTimer) {
    theTimer->stop();
    LogDebug("SiPixelRawToDigi") << "TIMING IS: (real)" << theTimer->lastMeasurement().real() ;
    ndigis += formatter.nDigis();
    nwords += formatter.nWords();
    LogDebug("SiPixelRawToDigi") << " (Words/Digis) this ev: "
         <<formatter.nWords()<<"/"<<formatter.nDigis() << "--- all :"<<nwords<<"/"<<ndigis;
    hCPU->Fill( theTimer->lastMeasurement().real() ); 
    hDigi->Fill(formatter.nDigis());
  }

  //send digis and errors back to framework 
  ev.put( collection );
  if(includeErrors) ev.put( errorcollection );
}

Member Data Documentation

Definition at line 43 of file SiPixelRawToDigi.h.

Referenced by produce().

Definition at line 42 of file SiPixelRawToDigi.h.

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

Definition at line 41 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

bool SiPixelRawToDigi::debug [private]

Definition at line 49 of file SiPixelRawToDigi.h.

Referenced by produce().

std::vector<unsigned int> SiPixelRawToDigi::fedIds [private]

Definition at line 50 of file SiPixelRawToDigi.h.

Referenced by produce().

TH1D* SiPixelRawToDigi::hCPU [private]

Definition at line 45 of file SiPixelRawToDigi.h.

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

TH1D * SiPixelRawToDigi::hDigi [private]

Definition at line 45 of file SiPixelRawToDigi.h.

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

Definition at line 47 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

Definition at line 53 of file SiPixelRawToDigi.h.

Referenced by produce().

int SiPixelRawToDigi::ndigis [private]

Definition at line 54 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

int SiPixelRawToDigi::nwords [private]

Definition at line 55 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().

Definition at line 52 of file SiPixelRawToDigi.h.

Referenced by produce().

Definition at line 51 of file SiPixelRawToDigi.h.

Referenced by produce().

Definition at line 46 of file SiPixelRawToDigi.h.

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

Definition at line 44 of file SiPixelRawToDigi.h.

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

Definition at line 48 of file SiPixelRawToDigi.h.

Referenced by produce(), and SiPixelRawToDigi().