CMS 3D CMS Logo

Public Member Functions | Private Attributes

cms::SiPixelRecHitConverter Class Reference

#include <SiPixelRecHitConverter.h>

Inheritance diagram for cms::SiPixelRecHitConverter:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

virtual void beginJob ()
virtual void produce (edm::Event &e, const edm::EventSetup &c)
 The "Event" entrypoint: gets called by framework for every event.
void run (const edmNew::DetSetVector< SiPixelCluster > &input, SiPixelRecHitCollectionNew &output, edm::ESHandle< TrackerGeometry > &geom)
void run (edm::Handle< edmNew::DetSetVector< SiPixelCluster > > inputhandle, SiPixelRecHitCollectionNew &output, edm::ESHandle< TrackerGeometry > &geom)
 SiPixelRecHitConverter (const edm::ParameterSet &conf)
 Constructor: set the ParameterSet and defer all thinking to setupCPE().
virtual ~SiPixelRecHitConverter ()

Private Attributes

edm::ParameterSet conf_
const
PixelClusterParameterEstimator
cpe_
std::string cpeName_
bool m_newCont
bool ready_
edm::InputTag src_
int theVerboseLevel

Detailed Description

Definition at line 63 of file SiPixelRecHitConverter.h.


Constructor & Destructor Documentation

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

Constructor: set the ParameterSet and defer all thinking to setupCPE().

Definition at line 48 of file SiPixelRecHitConverter.cc.

    : 
    conf_(conf),
    cpeName_("None"),     // bogus
    cpe_(0),              // the default, in case we fail to make one
    ready_(false),        // since we obviously aren't
    src_( conf.getParameter<edm::InputTag>( "src" ) ),
    theVerboseLevel(conf.getUntrackedParameter<int>("VerboseLevel",0))
  {
    //--- Declare to the EDM what kind of collections we will be making.
    produces<SiPixelRecHitCollection>();
   
  }
SiPixelRecHitConverter::~SiPixelRecHitConverter ( ) [virtual]

Definition at line 63 of file SiPixelRecHitConverter.cc.

  { 
  }  

Member Function Documentation

void SiPixelRecHitConverter::beginJob ( void  ) [virtual]

Reimplemented from edm::EDProducer.

Definition at line 71 of file SiPixelRecHitConverter.cc.

  {
  }
void SiPixelRecHitConverter::produce ( edm::Event e,
const edm::EventSetup c 
) [virtual]

The "Event" entrypoint: gets called by framework for every event.

Implements edm::EDProducer.

Definition at line 78 of file SiPixelRecHitConverter.cc.

References conf_, cpe_, cpeName_, relativeConstraints::geom, edm::EventSetup::get(), edm::Event::getByLabel(), edm::ParameterSet::getParameter(), collect_tpl::input, convertSQLitetoXML_cfg::output, edm::Event::put(), ready_, run(), and src_.

  {

    // Step A.1: get input data
    edm::Handle< edmNew::DetSetVector<SiPixelCluster> > input;
    e.getByLabel( src_, input);
    
    // Step A.2: get event setup
    edm::ESHandle<TrackerGeometry> geom;
    es.get<TrackerDigiGeometryRecord>().get( geom );

                // Step B: create empty output collection
    std::auto_ptr<SiPixelRecHitCollectionNew> output(new SiPixelRecHitCollectionNew);

    // Step B*: create CPE
    edm::ESHandle<PixelClusterParameterEstimator> hCPE;
    std::string cpeName_ = conf_.getParameter<std::string>("CPE");
    es.get<TkPixelCPERecord>().get(cpeName_,hCPE);
    const PixelClusterParameterEstimator &cpe(*hCPE);
    cpe_ = &cpe;
    
    if(cpe_) ready_ = true;
    
    
    // Step C: Iterate over DetIds and invoke the strip CPE algorithm
    // on each DetUnit

    run( input, *output, geom );


    e.put(output);

  }
void cms::SiPixelRecHitConverter::run ( const edmNew::DetSetVector< SiPixelCluster > &  input,
SiPixelRecHitCollectionNew output,
edm::ESHandle< TrackerGeometry > &  geom 
)

Referenced by produce().

void SiPixelRecHitConverter::run ( edm::Handle< edmNew::DetSetVector< SiPixelCluster > >  inputhandle,
SiPixelRecHitCollectionNew output,
edm::ESHandle< TrackerGeometry > &  geom 
)

Iterate over DetUnits, then over Clusters and invoke the CPE on each, and make a RecHit to store the result. New interface reading DetSetVector by V.Chiochia (May 30th, 2006)

Definition at line 117 of file SiPixelRecHitConverter.cc.

References edmNew::DetSetVector< T >::begin(), cpe_, cpeName_, cond::rpcobgas::detid, edmNew::DetSetVector< T >::end(), collect_tpl::input, asciidump::le, ClusterParameterEstimator< T >::localParameters(), LogDebug, edm::makeRefTo(), edmNew::DetSetVector< T >::FastFiller::push_back(), PixelCPEBase::rawQualityWord(), ready_, SiPixelRecHit::setRawQualityWord(), edmNew::DetSetVector< T >::FastFiller::size(), and theVerboseLevel.

  {
    if ( ! ready_ ) 
      {
        edm::LogError("SiPixelRecHitConverter") << " at least one CPE is not ready -- can't run!";
        // TO DO: throw an exception here?  The user may want to know...
        assert(0);
        return;   // clusterizer is invalid, bail out
      }
    
    int numberOfDetUnits = 0;
    int numberOfClusters = 0;
    
    const edmNew::DetSetVector<SiPixelCluster>& input = *inputhandle;
    
    edmNew::DetSetVector<SiPixelCluster>::const_iterator DSViter=input.begin();
    
    for ( ; DSViter != input.end() ; DSViter++) 
      {
        numberOfDetUnits++;
        unsigned int detid = DSViter->detId();
        DetId detIdObject( detid );  
        const GeomDetUnit * genericDet = geom->idToDetUnit( detIdObject );
        const PixelGeomDetUnit * pixDet = dynamic_cast<const PixelGeomDetUnit*>(genericDet);
        assert(pixDet); 
        SiPixelRecHitCollectionNew::FastFiller recHitsOnDetUnit(output,detid);
        
        edmNew::DetSet<SiPixelCluster>::const_iterator clustIt = DSViter->begin(), clustEnd = DSViter->end();
        
        for ( ; clustIt != clustEnd; clustIt++) 
          {
            numberOfClusters++;
            std::pair<LocalPoint, LocalError> lv = cpe_->localParameters( *clustIt, *genericDet );
            LocalPoint lp( lv.first );
            LocalError le( lv.second );
            // Create a persistent edm::Ref to the cluster
            edm::Ref< edmNew::DetSetVector<SiPixelCluster>, SiPixelCluster > cluster = edmNew::makeRefTo( inputhandle, clustIt);
            // Make a RecHit and add it to the DetSet
            // old : recHitsOnDetUnit.push_back( new SiPixelRecHit( lp, le, detIdObject, &*clustIt) );
            SiPixelRecHit hit( lp, le, detIdObject, cluster);
            // Copy the extra stuff; unfortunately, only the derivatives of PixelCPEBase
            // are capable of doing that.  So until we get rid of CPEFromDetPosition
            // we'll have to dynamic_cast :(
            // &&& This cast can be moved to the setupCPE, so that it's done once per job.
            const PixelCPEBase * cpeBase 
              = dynamic_cast< const PixelCPEBase* >( cpe_ );
            if (cpeBase) 
              {
                hit.setRawQualityWord( cpeBase->rawQualityWord() );
                // hit.setProbabilityX( cpeBase->probabilityX() );
                // hit.setProbabilityY( cpeBase->probabilityY() );
                // hit.setQBin( cpeBase->qBin() );
                // hit.setCotAlphaFromCluster( cpeBase->cotAlphaFromCluster() );
                // hit.setCotBetaFromCluster ( cpeBase->cotBetaFromCluster()  );
              }
            // 
            // Now save it =================
            recHitsOnDetUnit.push_back(hit);
            // =============================
          } //  <-- End loop on Clusters
        
        if ( recHitsOnDetUnit.size()>0 ) 
          {
            if (theVerboseLevel > 2) 
              LogDebug("SiPixelRecHitConverter") << " Found " 
                                                 << recHitsOnDetUnit.size() << " RecHits on " << detid; 
          }
        
      } //    <-- End loop on DetUnits
    
    if ( theVerboseLevel > 2 ) LogDebug ("SiPixelRecHitConverter") 
      << cpeName_ << " converted " << numberOfClusters 
      << " SiPixelClusters into SiPixelRecHits, in " 
      << numberOfDetUnits << " DetUnits.";      
  }

Member Data Documentation

Definition at line 96 of file SiPixelRecHitConverter.h.

Referenced by produce().

Definition at line 99 of file SiPixelRecHitConverter.h.

Referenced by produce(), and run().

Definition at line 98 of file SiPixelRecHitConverter.h.

Referenced by produce(), and run().

Definition at line 104 of file SiPixelRecHitConverter.h.

Definition at line 101 of file SiPixelRecHitConverter.h.

Referenced by produce(), and run().

Definition at line 102 of file SiPixelRecHitConverter.h.

Referenced by produce().

Definition at line 103 of file SiPixelRecHitConverter.h.

Referenced by run().