CMS 3D CMS Logo

Public Types | Public Member Functions | Protected Member Functions | Protected Attributes

MeasurementTracker Class Reference

#include <MeasurementTracker.h>

Inheritance diagram for MeasurementTracker:
MeasurementDetSystem OnDemandMeasurementTracker

List of all members.

Public Types

typedef std::map< DetId,
MeasurementDet * > 
DetContainer
enum  QualityFlags {
  BadModules = 1, BadAPVFibers = 2, BadStrips = 4, MaskBad128StripBlocks = 8,
  BadROCs = 2
}

Public Member Functions

const DetContainerallDets () const
 For debug only.
const GeometricSearchTrackergeometricSearchTracker () const
const TrackingGeometrygeomTracker () const
const std::vector
< TkGluedMeasurementDet * > & 
gluedDets () const
virtual const MeasurementDetidToDet (const DetId &id) const
 MeasurementDetSystem interface.
 MeasurementTracker (const edm::ParameterSet &conf, const PixelClusterParameterEstimator *pixelCPE, const StripClusterParameterEstimator *stripCPE, const SiStripRecHitMatcher *hitMatcher, const TrackerGeometry *trackerGeom, const GeometricSearchTracker *geometricSearchTracker, const SiStripQuality *stripQuality, int stripQualityFlags, int stripQualityDebugFlags, const SiPixelQuality *pixelQuality, const SiPixelFedCabling *pixelCabling, int pixelQualityFlags, int pixelQualityDebugFlags, bool isRegional=false)
const std::vector
< TkPixelMeasurementDet * > & 
pixelDets () const
const std::vector
< TkStripMeasurementDet * > & 
stripDets () const
virtual void update (const edm::Event &) const
void updatePixels (const edm::Event &) const
void updateStrips (const edm::Event &) const
virtual ~MeasurementTracker ()

Protected Member Functions

void addGluedDet (const GluedGeomDet *gd, const SiStripRecHitMatcher *matcher) const
void addPixelDet (const GeomDet *gd, const PixelClusterParameterEstimator *cpe) const
void addPixelDets (const TrackingGeometry::DetContainer &dets) const
void addStripDet (const GeomDet *gd, const StripClusterParameterEstimator *cpe) const
void addStripDets (const TrackingGeometry::DetContainer &dets) const
void initialize () const
void initializePixelStatus (const SiPixelQuality *stripQuality, const SiPixelFedCabling *pixelCabling, int qualityFlags, int qualityDebugFlags) const
void initializeStripStatus (const SiStripQuality *stripQuality, int qualityFlags, int qualityDebugFlags) const

Protected Attributes

bool isRegional_
const std::string name_
const edm::ParameterSetpset_
DetContainer theDetMap
const GeometricSearchTrackertheGeometricSearchTracker
std::vector
< TkGluedMeasurementDet * > 
theGluedDets
const SiStripRecHitMatchertheHitMatcher
const std::vector< edm::InputTagtheInactivePixelDetectorLabels
const std::vector< edm::InputTagtheInactiveStripDetectorLabels
const SiPixelFedCablingthePixelCabling
const
PixelClusterParameterEstimator
thePixelCPE
std::vector
< TkPixelMeasurementDet * > 
thePixelDets
const
StripClusterParameterEstimator
theStripCPE
std::vector
< TkStripMeasurementDet * > 
theStripDets
const TrackerGeometrytheTrackerGeom

Detailed Description

Definition at line 40 of file MeasurementTracker.h.


Member Typedef Documentation

Definition at line 74 of file MeasurementTracker.h.


Member Enumeration Documentation

Enumerator:
BadModules 
BadAPVFibers 
BadStrips 
MaskBad128StripBlocks 
BadROCs 

Definition at line 42 of file MeasurementTracker.h.

                     { BadModules=1, // for everybody
                       /* Strips: */ BadAPVFibers=2, BadStrips=4, MaskBad128StripBlocks=8, 
                       /* Pixels: */ BadROCs=2 }; 

Constructor & Destructor Documentation

MeasurementTracker::MeasurementTracker ( const edm::ParameterSet conf,
const PixelClusterParameterEstimator pixelCPE,
const StripClusterParameterEstimator stripCPE,
const SiStripRecHitMatcher hitMatcher,
const TrackerGeometry trackerGeom,
const GeometricSearchTracker geometricSearchTracker,
const SiStripQuality stripQuality,
int  stripQualityFlags,
int  stripQualityDebugFlags,
const SiPixelQuality pixelQuality,
const SiPixelFedCabling pixelCabling,
int  pixelQualityFlags,
int  pixelQualityDebugFlags,
bool  isRegional = false 
)

Definition at line 86 of file MeasurementTracker.cc.

References initialize(), initializePixelStatus(), and initializeStripStatus().

                                                        :
  pset_(conf),
  name_(conf.getParameter<std::string>("ComponentName")),
  thePixelCPE(pixelCPE),theStripCPE(stripCPE),theHitMatcher(hitMatcher),
  theTrackerGeom(trackerGeom),theGeometricSearchTracker(geometricSearchTracker),
  theInactivePixelDetectorLabels(conf.getParameter<std::vector<edm::InputTag> >("inactivePixelDetectorLabels")),
  theInactiveStripDetectorLabels(conf.getParameter<std::vector<edm::InputTag> >("inactiveStripDetectorLabels")),
  isRegional_(isRegional)
{
  this->initialize();
  this->initializeStripStatus(stripQuality, stripQualityFlags, stripQualityDebugFlags);
  this->initializePixelStatus(pixelQuality, pixelCabling, pixelQualityFlags, pixelQualityDebugFlags);
}
MeasurementTracker::~MeasurementTracker ( ) [virtual]

Definition at line 113 of file MeasurementTracker.cc.

{
  for(vector<TkPixelMeasurementDet*>::const_iterator it=thePixelDets.begin(); it!=thePixelDets.end(); ++it){
    delete *it;
  }

  for(vector<TkStripMeasurementDet*>::const_iterator it=theStripDets.begin(); it!=theStripDets.end(); ++it){
    delete *it;
  }

  for(vector<TkGluedMeasurementDet*>::const_iterator it=theGluedDets.begin(); it!=theGluedDets.end(); ++it){
    delete *it;
  }
}

Member Function Documentation

void MeasurementTracker::addGluedDet ( const GluedGeomDet gd,
const SiStripRecHitMatcher matcher 
) const [protected]

Definition at line 199 of file MeasurementTracker.cc.

References GeomDet::geographicalId(), GluedGeomDet::monoDet(), and GluedGeomDet::stereoDet().

{
  const MeasurementDet* monoDet = idToDet( gd->monoDet()->geographicalId());
  if (monoDet == 0) {
    addStripDet(gd->monoDet(), theStripCPE);  // in case glued det comes before components
    monoDet = idToDet( gd->monoDet()->geographicalId());
  }

  const MeasurementDet* stereoDet = idToDet( gd->stereoDet()->geographicalId());
  if (stereoDet == 0) {
    addStripDet(gd->stereoDet(), theStripCPE);  // in case glued det comes before components
    stereoDet = idToDet( gd->stereoDet()->geographicalId());
  }

  if (monoDet == 0 || stereoDet == 0) {
    edm::LogError("MeasurementDet") << "MeasurementTracker ERROR: GluedDet components not found as MeasurementDets ";
    throw MeasurementDetException("MeasurementTracker ERROR: GluedDet components not found as MeasurementDets");
  }

  TkGluedMeasurementDet* det = new TkGluedMeasurementDet( gd, theHitMatcher,
                                                          monoDet, stereoDet);
  theGluedDets.push_back( det);
  theDetMap[gd->geographicalId()] = det;
}
void MeasurementTracker::addPixelDet ( const GeomDet gd,
const PixelClusterParameterEstimator cpe 
) const [protected]

Definition at line 191 of file MeasurementTracker.cc.

References GeomDet::geographicalId().

{
  TkPixelMeasurementDet* det = new TkPixelMeasurementDet( gd, cpe);
  thePixelDets.push_back(det);
  theDetMap[gd->geographicalId()] = det;
}
void MeasurementTracker::addPixelDets ( const TrackingGeometry::DetContainer dets) const [protected]

Definition at line 145 of file MeasurementTracker.cc.

{
  for (TrackerGeometry::DetContainer::const_iterator gd=dets.begin();
       gd != dets.end(); gd++) {
    addPixelDet(*gd, thePixelCPE);
  }  
}
void MeasurementTracker::addStripDet ( const GeomDet gd,
const StripClusterParameterEstimator cpe 
) const [protected]

Definition at line 178 of file MeasurementTracker.cc.

References GeomDet::geographicalId(), and cms::Exception::what().

{
  try {
    TkStripMeasurementDet* det = new TkStripMeasurementDet( gd, cpe,isRegional_);
    theStripDets.push_back(det);
    theDetMap[gd->geographicalId()] = det;
  }
  catch(MeasurementDetException& err){
    edm::LogError("MeasurementDet") << "Oops, got a MeasurementDetException: " << err.what() ;
  }
}
void MeasurementTracker::addStripDets ( const TrackingGeometry::DetContainer dets) const [protected]

Definition at line 153 of file MeasurementTracker.cc.

{
  for (TrackerGeometry::DetContainer::const_iterator gd=dets.begin();
       gd != dets.end(); gd++) {

    const GeomDetUnit* gdu = dynamic_cast<const GeomDetUnit*>(*gd);

    //    StripSubdetector stripId( (**gd).geographicalId());
    //     bool isDetUnit( gdu != 0);
    //     cout << "StripSubdetector glued? " << stripId.glued() 
    //   << " is DetUnit? " << isDetUnit << endl;

    if (gdu != 0) {
      addStripDet(*gd, theStripCPE);
    }
    else {
      const GluedGeomDet* gluedDet = dynamic_cast<const GluedGeomDet*>(*gd);
      if (gluedDet == 0) {
        throw MeasurementDetException("MeasurementTracker ERROR: GeomDet neither DetUnit nor GluedDet");
      }
      addGluedDet(gluedDet, theHitMatcher);
    }  
  }
}
const DetContainer& MeasurementTracker::allDets ( ) const [inline]

For debug only.

Definition at line 77 of file MeasurementTracker.h.

References theDetMap.

{return theDetMap;}
const GeometricSearchTracker* MeasurementTracker::geometricSearchTracker ( ) const [inline]
const TrackingGeometry* MeasurementTracker::geomTracker ( ) const [inline]
const std::vector<TkGluedMeasurementDet*>& MeasurementTracker::gluedDets ( ) const [inline]

Definition at line 80 of file MeasurementTracker.h.

References theGluedDets.

{return theGluedDets;}
virtual const MeasurementDet* MeasurementTracker::idToDet ( const DetId id) const [virtual]
void MeasurementTracker::initialize ( ) const [protected]

Referenced by MeasurementTracker().

void MeasurementTracker::initializePixelStatus ( const SiPixelQuality stripQuality,
const SiPixelFedCabling pixelCabling,
int  qualityFlags,
int  qualityDebugFlags 
) const [protected]

Definition at line 540 of file MeasurementTracker.cc.

References cond::rpcobgas::detid, SiPixelQuality::getBadRocPositions(), SiPixelQuality::getBadRocs(), i, and SiPixelQuality::IsModuleUsable().

Referenced by MeasurementTracker().

                                                                                                                                                                  {
  if ((quality != 0) && (qualityFlags != 0))  {
    edm::LogInfo("MeasurementTracker") << "qualityFlags = " << qualityFlags;
    unsigned int on = 0, tot = 0, badrocs = 0; 
    for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
         i!=thePixelDets.end(); i++) {
      uint32_t detid = ((**i).geomDet().geographicalId()).rawId();
      if (qualityFlags & BadModules) {
          bool isOn = quality->IsModuleUsable(detid);
          (*i)->setActive(isOn);
          tot++; on += (unsigned int) isOn;
          if (qualityDebugFlags & BadModules) {
            edm::LogInfo("MeasurementTracker")<< "MeasurementTracker::initializePixelStatus : detid " << detid << " is " << (isOn ?  "on" : "off");
          }
       } else {
          (*i)->setActive(true);
       }
       if ((qualityFlags & BadROCs) && (quality->getBadRocs(detid) != 0)) {
          std::vector<LocalPoint> badROCs = quality->getBadRocPositions(detid, *theTrackerGeom, pixelCabling);
          badrocs += badROCs.size();
          (*i)->setBadRocPositions(badROCs);
       } else {
          (*i)->clearBadRocPositions();  
       }
    }
    if (qualityDebugFlags & BadModules) {
        edm::LogInfo("MeasurementTracker PixelModuleStatus") << 
            " Total modules: " << tot << ", active " << on <<", inactive " << (tot - on);
    }
    if (qualityDebugFlags & BadROCs) {
        edm::LogInfo("MeasurementTracker PixelROCStatus") << " Total of bad ROCs: " << badrocs ;
    }
  } else {
    for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
         i!=thePixelDets.end(); i++) {
      (*i)->setActive(true);          // module ON
    }
  }
}
void MeasurementTracker::initializeStripStatus ( const SiStripQuality stripQuality,
int  qualityFlags,
int  qualityDebugFlags 
) const [protected]

Definition at line 462 of file MeasurementTracker.cc.

References ExpressReco_HICollisions_FallBack::badStripCuts, SiStripBadStrip::decode(), cond::rpcobgas::detid, SiStripQuality::getBadApvs(), SiStripQuality::getBadFibers(), edm::ParameterSet::getParameter(), SiStripBadStrip::getRange(), i, SiStripQuality::IsModuleUsable(), j, SiStripDetId::TEC, SiStripDetId::TIB, SiStripDetId::TID, and SiStripDetId::TOB.

Referenced by MeasurementTracker().

                                                                                                                           {
  TkStripMeasurementDet::BadStripCuts badStripCuts[4];
  if (qualityFlags & BadStrips) {
     edm::ParameterSet cutPset = pset_.getParameter<edm::ParameterSet>("badStripCuts");
     badStripCuts[SiStripDetId::TIB-3] = TkStripMeasurementDet::BadStripCuts(cutPset.getParameter<edm::ParameterSet>("TIB"));
     badStripCuts[SiStripDetId::TOB-3] = TkStripMeasurementDet::BadStripCuts(cutPset.getParameter<edm::ParameterSet>("TOB"));
     badStripCuts[SiStripDetId::TID-3] = TkStripMeasurementDet::BadStripCuts(cutPset.getParameter<edm::ParameterSet>("TID"));
     badStripCuts[SiStripDetId::TEC-3] = TkStripMeasurementDet::BadStripCuts(cutPset.getParameter<edm::ParameterSet>("TEC"));
  }

  if ((quality != 0) && (qualityFlags != 0))  {
    edm::LogInfo("MeasurementTracker") << "qualityFlags = " << qualityFlags;
    unsigned int on = 0, tot = 0; 
    unsigned int foff = 0, ftot = 0, aoff = 0, atot = 0; 
    for (std::vector<TkStripMeasurementDet*>::const_iterator i=theStripDets.begin();
         i!=theStripDets.end(); i++) {
      uint32_t detid = ((**i).geomDet().geographicalId()).rawId();
      if (qualityFlags & BadModules) {
          bool isOn = quality->IsModuleUsable(detid);
          (*i)->setActive(isOn);
          tot++; on += (unsigned int) isOn;
          if (qualityDebugFlags & BadModules) {
            edm::LogInfo("MeasurementTracker")<< "MeasurementTracker::initializeStripStatus : detid " << detid << " is " << (isOn ?  "on" : "off");
          }
       } else {
          (*i)->setActive(true);
       }
       // first turn all APVs and fibers ON
       (*i)->set128StripStatus(true); 
       if (qualityFlags & BadAPVFibers) {
          short badApvs   = quality->getBadApvs(detid);
          short badFibers = quality->getBadFibers(detid);
          for (int j = 0; j < 6; j++) {
             atot++;
             if (badApvs & (1 << j)) {
                (*i)->set128StripStatus(false, j);
                aoff++;
             }
          }
          for (int j = 0; j < 3; j++) {
             ftot++;
             if (badFibers & (1 << j)) {
                (*i)->set128StripStatus(false, 2*j);
                (*i)->set128StripStatus(false, 2*j+1);
                foff++;
             }
          }
          (*i)->setMaskBad128StripBlocks((qualityFlags & MaskBad128StripBlocks) != 0);
       } 
       std::vector<TkStripMeasurementDet::BadStripBlock> &badStrips = (*i)->getBadStripBlocks();
       badStrips.clear();
       if (qualityFlags & BadStrips) {
            SiStripBadStrip::Range range = quality->getRange(detid);
            for (SiStripBadStrip::ContainerIterator bit = range.first; bit != range.second; ++bit) {
                badStrips.push_back(quality->decode(*bit));
            }
            (*i)->setBadStripCuts(badStripCuts[SiStripDetId(detid).subdetId()-3]);
       }
    }
    if (qualityDebugFlags & BadModules) {
        edm::LogInfo("MeasurementTracker StripModuleStatus") << 
            " Total modules: " << tot << ", active " << on <<", inactive " << (tot - on);
    }
    if (qualityDebugFlags & BadAPVFibers) {
        edm::LogInfo("MeasurementTracker StripAPVStatus") << 
            " Total APVs: " << atot << ", active " << (atot-aoff) <<", inactive " << (aoff);
        edm::LogInfo("MeasurementTracker StripFiberStatus") << 
            " Total Fibers: " << ftot << ", active " << (ftot-foff) <<", inactive " << (foff);
    }
  } else {
    for (std::vector<TkStripMeasurementDet*>::const_iterator i=theStripDets.begin();
         i!=theStripDets.end(); i++) {
      (*i)->setActive(true);          // module ON
      (*i)->set128StripStatus(true);  // all APVs and fibers ON
    }
  }
}
const std::vector<TkPixelMeasurementDet*>& MeasurementTracker::pixelDets ( ) const [inline]

Definition at line 79 of file MeasurementTracker.h.

References thePixelDets.

{return thePixelDets;}
const std::vector<TkStripMeasurementDet*>& MeasurementTracker::stripDets ( ) const [inline]

Definition at line 78 of file MeasurementTracker.h.

References theStripDets.

{return theStripDets;}
virtual void MeasurementTracker::update ( const edm::Event ) const [virtual]
void MeasurementTracker::updatePixels ( const edm::Event event) const

Definition at line 247 of file MeasurementTracker.cc.

References edmNew::DetSetVector< T >::empty(), edmNew::DetSetVector< T >::end(), edmNew::DetSetVector< T >::find(), i, ExpressReco_HICollisions_FallBack::id, ExpressReco_HICollisions_FallBack::pixelClusterProducer, edm::Handle< T >::product(), python::multivaluedict::sort(), and ExpressReco_HICollisions_FallBack::switchOffPixelsIfEmpty.

Referenced by OnDemandMeasurementTracker::update().

{
  // avoid to update twice from the same event
  if (!edm::Service<UpdaterService>()->checkOnce("MeasurementTracker::updatePixels::"+name_)) return;

  typedef edmNew::DetSet<SiPixelCluster> PixelDetSet;

  bool switchOffPixelsIfEmpty = (!pset_.existsAs<bool>("switchOffPixelsIfEmpty")) ||
                                (pset_.getParameter<bool>("switchOffPixelsIfEmpty"));

  std::vector<uint32_t> rawInactiveDetIds; 
  if (!theInactivePixelDetectorLabels.empty()) {
    edm::Handle<DetIdCollection> detIds;
    for (std::vector<edm::InputTag>::const_iterator itt = theInactivePixelDetectorLabels.begin(), edt = theInactivePixelDetectorLabels.end(); 
            itt != edt; ++itt) {
        event.getByLabel(*itt, detIds);
        rawInactiveDetIds.insert(rawInactiveDetIds.end(), detIds->begin(), detIds->end());
    }
    if (!rawInactiveDetIds.empty()) std::sort(rawInactiveDetIds.begin(), rawInactiveDetIds.end());
  }
  // Pixel Clusters
  std::string pixelClusterProducer = pset_.getParameter<std::string>("pixelClusterProducer");
  if( pixelClusterProducer.empty() ) { //clusters have not been produced
    for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
         i!=thePixelDets.end(); i++) {
      if (switchOffPixelsIfEmpty) {
        (**i).setActiveThisEvent(false);
      }else{
        (**i).setEmpty();
      }
    }
  }else{  
    edm::Handle<edmNew::DetSetVector<SiPixelCluster> > pixelClusters;
    event.getByLabel(pixelClusterProducer, pixelClusters);
    const  edmNew::DetSetVector<SiPixelCluster>* pixelCollection = pixelClusters.product();
   
    if (switchOffPixelsIfEmpty && pixelCollection->empty()) {
        for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
             i!=thePixelDets.end(); i++) {
              (**i).setActiveThisEvent(false);
        }
    } else { 
    for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
         i!=thePixelDets.end(); i++) {

      // foreach det get cluster range
      unsigned int id = (**i).geomDet().geographicalId().rawId();
      if (!rawInactiveDetIds.empty() && std::binary_search(rawInactiveDetIds.begin(), rawInactiveDetIds.end(), id)) {
        (**i).setActiveThisEvent(false); continue;
      }
      edmNew::DetSetVector<SiPixelCluster>::const_iterator it = pixelCollection->find( id );
      if ( it != pixelCollection->end() ){            
        // push cluster range in det
        (**i).update( *it, pixelClusters, id );
      }else{
        (**i).setEmpty();
      }
    }
    }
  }
  
}
void MeasurementTracker::updateStrips ( const edm::Event ) const

Reimplemented in OnDemandMeasurementTracker.


Member Data Documentation

Definition at line 102 of file MeasurementTracker.h.

const std::string MeasurementTracker::name_ [protected]

Definition at line 85 of file MeasurementTracker.h.

Definition at line 84 of file MeasurementTracker.h.

Definition at line 96 of file MeasurementTracker.h.

Referenced by geometricSearchTracker().

std::vector<TkGluedMeasurementDet*> MeasurementTracker::theGluedDets [mutable, protected]

Definition at line 90 of file MeasurementTracker.h.

Referenced by gluedDets().

Definition at line 94 of file MeasurementTracker.h.

Definition at line 99 of file MeasurementTracker.h.

Definition at line 100 of file MeasurementTracker.h.

Definition at line 97 of file MeasurementTracker.h.

Definition at line 92 of file MeasurementTracker.h.

std::vector<TkPixelMeasurementDet*> MeasurementTracker::thePixelDets [mutable, protected]

Definition at line 89 of file MeasurementTracker.h.

Referenced by pixelDets().

Definition at line 93 of file MeasurementTracker.h.

std::vector<TkStripMeasurementDet*> MeasurementTracker::theStripDets [mutable, protected]

Definition at line 88 of file MeasurementTracker.h.

Referenced by stripDets().

Definition at line 95 of file MeasurementTracker.h.

Referenced by geomTracker().