CMS 3D CMS Logo

SiStripRawToClusters.cc

Go to the documentation of this file.
00001 #include "EventFilter/SiStripRawToDigi/plugins/SiStripRawToClusters.h"
00002 #include "CalibTracker/Records/interface/SiStripRegionCablingRcd.h"
00003 #include "CalibFormats/SiStripObjects/interface/SiStripRegionCabling.h"
00004 #include "DataFormats/Common/interface/Handle.h"
00005 #include "DataFormats/SiStripCommon/interface/SiStripConstants.h"
00006 #include "FWCore/Framework/interface/Event.h"
00007 #include "FWCore/Framework/interface/EventSetup.h"
00008 #include "FWCore/Framework/interface/ESHandle.h"
00009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00010 
00011 using namespace std;
00012 using namespace sistrip;
00013 
00014 SiStripRawToClusters::SiStripRawToClusters( const edm::ParameterSet& conf ) :
00015 
00016   productLabel_(conf.getUntrackedParameter<string>("ProductLabel","source")),
00017   productInstance_(conf.getUntrackedParameter<string>("ProductInstance","")),
00018   cabling_(0),
00019   cacheId_(0),
00020   clusterizer_(0)
00021 {
00022   if ( edm::isDebugEnabled() ) {
00023     LogTrace(mlRawToDigi_)
00024       << "[SiStripRawToClusters::" << __func__ << "]"
00025       << " Constructing object...";
00026   }
00027   clusterizer_ = new SiStripClusterizerFactory(conf);
00028   produces<LazyGetter>();
00029 }
00030 
00031 SiStripRawToClusters::~SiStripRawToClusters() {
00032   if (clusterizer_) { delete clusterizer_; }
00033   if ( edm::isDebugEnabled() ) {
00034     LogTrace(mlRawToDigi_)
00035       << "[SiStripRawToClusters::" << __func__ << "]"
00036       << " Destructing object...";
00037   }
00038 }
00039 
00040 void SiStripRawToClusters::beginJob( const edm::EventSetup& setup) {
00041   //@@ unstable behaviour if uncommented!
00042   //updateCabling( setup );  
00043   //clusterizer_->eventSetup(setup);
00044 }
00045 
00046 void SiStripRawToClusters::beginRun( edm::Run&, const edm::EventSetup& setup) {
00047   updateCabling( setup );  
00048   clusterizer_->eventSetup(setup);
00049 }
00050 
00051 void SiStripRawToClusters::produce( edm::Event& event,const edm::EventSetup& setup ) {
00052   
00053   updateCabling( setup );  
00054   clusterizer_->eventSetup( setup );
00055   
00056   edm::Handle<FEDRawDataCollection> buffers;
00057   event.getByLabel( productLabel_, productInstance_, buffers ); 
00058   boost::shared_ptr<LazyUnpacker> unpacker( new LazyUnpacker( *cabling_, *clusterizer_, *buffers ) );
00059   std::auto_ptr<LazyGetter> collection( new LazyGetter( cabling_->getRegionCabling().size() * 
00060                                                         SiStripRegionCabling::ALLSUBDETS * 
00061                                                         SiStripRegionCabling::ALLLAYERS,
00062                                                         unpacker ) );
00063   
00064   event.put( collection );
00065   
00066 }
00067 
00068 // -----------------------------------------------------------------------------
00070 void SiStripRawToClusters::updateCabling( const edm::EventSetup& setup ) {
00071   uint32_t cache_id = setup.get<SiStripRegionCablingRcd>().cacheIdentifier();
00072   if ( cacheId_ != cache_id ) {
00073     edm::ESHandle<SiStripRegionCabling> c;
00074     setup.get<SiStripRegionCablingRcd>().get( c );
00075     cabling_ = c.product();
00076     cacheId_ = cache_id;
00077   }
00078 }

Generated on Tue Jun 9 17:34:50 2009 for CMSSW by  doxygen 1.5.4