CMS 3D CMS Logo

MeasurementTracker Class Reference

#include <RecoTracker/MeasurementDet/interface/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 }

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 *quality, int qualityFlags, int qualityDebugFlags, 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 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
PixelClusterParameterEstimator
thePixelCPE
std::vector
< TkPixelMeasurementDet * > 
thePixelDets
const
StripClusterParameterEstimator
theStripCPE
std::vector
< TkStripMeasurementDet * > 
theStripDets
const SiStripQualitytheStripQuality
const TrackerGeometrytheTrackerGeom


Detailed Description

Definition at line 37 of file MeasurementTracker.h.


Member Typedef Documentation

typedef std::map<DetId,MeasurementDet*> MeasurementTracker::DetContainer

Definition at line 65 of file MeasurementTracker.h.


Member Enumeration Documentation

enum MeasurementTracker::QualityFlags

Enumerator:
BadModules 
BadAPVFibers 
BadStrips 
MaskBad128StripBlocks 

Definition at line 39 of file MeasurementTracker.h.


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 quality,
int  qualityFlags,
int  qualityDebugFlags,
bool  isRegional = false 
)

Definition at line 47 of file MeasurementTracker.cc.

References initialize(), and initializeStripStatus().

00056                                                         :
00057   pset_(conf),
00058   name_(conf.getParameter<std::string>("ComponentName")),
00059   thePixelCPE(pixelCPE),theStripCPE(stripCPE),theHitMatcher(hitMatcher),
00060   theTrackerGeom(trackerGeom),theGeometricSearchTracker(geometricSearchTracker)
00061   ,isRegional_(isRegional)
00062 {
00063   this->initialize();
00064   this->initializeStripStatus(stripQuality, qualityFlags, qualityDebugFlags);
00065 }

MeasurementTracker::~MeasurementTracker (  )  [virtual]

Definition at line 67 of file MeasurementTracker.cc.

References it, theGluedDets, thePixelDets, and theStripDets.

00068 {
00069   for(vector<TkPixelMeasurementDet*>::const_iterator it=thePixelDets.begin(); it!=thePixelDets.end(); ++it){
00070     delete *it;
00071   }
00072 
00073   for(vector<TkStripMeasurementDet*>::const_iterator it=theStripDets.begin(); it!=theStripDets.end(); ++it){
00074     delete *it;
00075   }
00076 
00077   for(vector<TkGluedMeasurementDet*>::const_iterator it=theGluedDets.begin(); it!=theGluedDets.end(); ++it){
00078     delete *it;
00079   }
00080 }


Member Function Documentation

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

Definition at line 148 of file MeasurementTracker.cc.

References addStripDet(), GeomDet::geographicalId(), GluedGeomDet::geographicalId(), idToDet(), GluedGeomDet::monoDet(), GluedGeomDet::stereoDet(), theDetMap, theGluedDets, theHitMatcher, and theStripCPE.

Referenced by addStripDets().

00150 {
00151   const MeasurementDet* monoDet = idToDet( gd->monoDet()->geographicalId());
00152   if (monoDet == 0) {
00153     addStripDet(gd->monoDet(), theStripCPE);  // in case glued det comes before components
00154     monoDet = idToDet( gd->monoDet()->geographicalId());
00155   }
00156 
00157   const MeasurementDet* stereoDet = idToDet( gd->stereoDet()->geographicalId());
00158   if (stereoDet == 0) {
00159     addStripDet(gd->stereoDet(), theStripCPE);  // in case glued det comes before components
00160     stereoDet = idToDet( gd->stereoDet()->geographicalId());
00161   }
00162 
00163   if (monoDet == 0 || stereoDet == 0) {
00164     edm::LogError("MeasurementDet") << "MeasurementTracker ERROR: GluedDet components not found as MeasurementDets ";
00165     throw MeasurementDetException("MeasurementTracker ERROR: GluedDet components not found as MeasurementDets");
00166   }
00167 
00168   TkGluedMeasurementDet* det = new TkGluedMeasurementDet( gd, theHitMatcher,
00169                                                           monoDet, stereoDet);
00170   theGluedDets.push_back( det);
00171   theDetMap[gd->geographicalId()] = det;
00172 }

void MeasurementTracker::addPixelDet ( const GeomDet gd,
const PixelClusterParameterEstimator cpe 
) const [protected]

Definition at line 140 of file MeasurementTracker.cc.

References GeomDet::geographicalId(), theDetMap, and thePixelDets.

Referenced by addPixelDets().

00142 {
00143   TkPixelMeasurementDet* det = new TkPixelMeasurementDet( gd, cpe);
00144   thePixelDets.push_back(det);
00145   theDetMap[gd->geographicalId()] = det;
00146 }

void MeasurementTracker::addPixelDets ( const TrackingGeometry::DetContainer dets  )  const [protected]

Definition at line 94 of file MeasurementTracker.cc.

References addPixelDet(), and thePixelCPE.

Referenced by initialize().

00095 {
00096   for (TrackerGeometry::DetContainer::const_iterator gd=dets.begin();
00097        gd != dets.end(); gd++) {
00098     addPixelDet(*gd, thePixelCPE);
00099   }  
00100 }

void MeasurementTracker::addStripDet ( const GeomDet gd,
const StripClusterParameterEstimator cpe 
) const [protected]

Definition at line 127 of file MeasurementTracker.cc.

References err, GeomDet::geographicalId(), isRegional_, theDetMap, theStripDets, and cms::Exception::what().

Referenced by addGluedDet(), and addStripDets().

00129 {
00130   try {
00131     TkStripMeasurementDet* det = new TkStripMeasurementDet( gd, cpe,isRegional_);
00132     theStripDets.push_back(det);
00133     theDetMap[gd->geographicalId()] = det;
00134   }
00135   catch(MeasurementDetException& err){
00136     edm::LogError("MeasurementDet") << "Oops, got a MeasurementDetException: " << err.what() ;
00137   }
00138 }

void MeasurementTracker::addStripDets ( const TrackingGeometry::DetContainer dets  )  const [protected]

Definition at line 102 of file MeasurementTracker.cc.

References addGluedDet(), addStripDet(), theHitMatcher, and theStripCPE.

Referenced by initialize().

00103 {
00104   for (TrackerGeometry::DetContainer::const_iterator gd=dets.begin();
00105        gd != dets.end(); gd++) {
00106 
00107     const GeomDetUnit* gdu = dynamic_cast<const GeomDetUnit*>(*gd);
00108 
00109     //    StripSubdetector stripId( (**gd).geographicalId());
00110     //     bool isDetUnit( gdu != 0);
00111     //     cout << "StripSubdetector glued? " << stripId.glued() 
00112     //   << " is DetUnit? " << isDetUnit << endl;
00113 
00114     if (gdu != 0) {
00115       addStripDet(*gd, theStripCPE);
00116     }
00117     else {
00118       const GluedGeomDet* gluedDet = dynamic_cast<const GluedGeomDet*>(*gd);
00119       if (gluedDet == 0) {
00120         throw MeasurementDetException("MeasurementTracker ERROR: GeomDet neither DetUnit nor GluedDet");
00121       }
00122       addGluedDet(gluedDet, theHitMatcher);
00123     }  
00124   }
00125 }

const DetContainer& MeasurementTracker::allDets (  )  const [inline]

For debug only.

Definition at line 68 of file MeasurementTracker.h.

References theDetMap.

00068 {return theDetMap;}

const GeometricSearchTracker* MeasurementTracker::geometricSearchTracker (  )  const [inline]

Definition at line 60 of file MeasurementTracker.h.

References theGeometricSearchTracker.

Referenced by CkfDebugger::analyseCompatibleMeasurements(), StartingLayerFinder::checkPixelLayers(), MuonRoadTrajectoryBuilder::cleanTrajectory(), RoadSearchTrackCandidateMakerAlgorithm::extrapolateTrajectory(), RoadSearchTrackCandidateMakerAlgorithm::FindBestHit(), RoadSearchTrackCandidateMakerAlgorithm::FindBestHits(), RoadSearchTrackCandidateMakerAlgorithm::FindBestHitsByDet(), MuonCkfTrajectoryBuilder::findCompatibleMeasurements(), BaseCkfTrajectoryBuilder::findStateAndLayers(), MuonRoadTrajectoryBuilder::makeTrajectories_0(), RoadSearchTrackCandidateMakerAlgorithm::PrepareTrackCandidates(), RoadSearchTrackCandidateMakerAlgorithm::run(), BaseCkfTrajectoryBuilder::seedMeasurements(), PixelHitMatcher::setES(), and StartingLayerFinder::startingLayers().

00060 {return theGeometricSearchTracker;}

const TrackingGeometry* MeasurementTracker::geomTracker (  )  const [inline]

Definition at line 58 of file MeasurementTracker.h.

References theTrackerGeom.

Referenced by MuonCkfTrajectoryBuilder::findCompatibleMeasurements(), BaseCkfTrajectoryBuilder::findStateAndLayers(), MuonRoadTrajectoryBuilder::makeTrajectories_0(), BaseCkfTrajectoryBuilder::seedMeasurements(), ConversionSeedFinder::setEvent(), StartingLayerFinder::startingLayers(), and OutInConversionTrackFinder::tracks().

00058 { return theTrackerGeom;}

const std::vector<TkGluedMeasurementDet*>& MeasurementTracker::gluedDets (  )  const [inline]

Definition at line 71 of file MeasurementTracker.h.

References theGluedDets.

00071 {return theGluedDets;}

const MeasurementDet * MeasurementTracker::idToDet ( const DetId id  )  const [virtual]

MeasurementDetSystem interface.

Implements MeasurementDetSystem.

Reimplemented in OnDemandMeasurementTracker.

Definition at line 364 of file MeasurementTracker.cc.

References it, and theDetMap.

Referenced by addGluedDet(), CkfDebugger::analyseRecHitExistance(), MuonRoadTrajectoryBuilder::GatherHits(), SimpleDAFHitCollector::recHits(), TrajectorySegmentBuilder::redoMeasurements(), and updateStrips().

00365 {
00366   std::map<DetId,MeasurementDet*>::const_iterator it = theDetMap.find(id);
00367   if(it !=theDetMap.end()) {
00368     return it->second;
00369   }else{
00370     //throw exception;
00371   }
00372   
00373   return 0; //to avoid compile warning
00374 }

void MeasurementTracker::initialize ( void   )  const [protected]

Definition at line 83 of file MeasurementTracker.cc.

References addPixelDets(), addStripDets(), TrackerGeometry::detsPXB(), TrackerGeometry::detsPXF(), TrackerGeometry::detsTEC(), TrackerGeometry::detsTIB(), TrackerGeometry::detsTID(), TrackerGeometry::detsTOB(), and theTrackerGeom.

Referenced by MeasurementTracker().

void MeasurementTracker::initializeStripStatus ( const SiStripQuality stripQuality,
int  qualityFlags,
int  qualityDebugFlags 
) const [protected]

Definition at line 376 of file MeasurementTracker.cc.

References BadAPVFibers, BadModules, BadStrips, SiStripBadStrip::decode(), SiStripQuality::getBadApvs(), SiStripQuality::getBadFibers(), SiStripBadStrip::getRange(), i, int, SiStripQuality::IsModuleUsable(), j, MaskBad128StripBlocks, range, and theStripDets.

Referenced by MeasurementTracker().

00376                                                                                                                            {
00377   if ((quality != 0) && (qualityFlags != 0))  {
00378     edm::LogInfo("MeasurementTracker") << "qualityFlags = " << qualityFlags;
00379     unsigned int on = 0, tot = 0; 
00380     unsigned int foff = 0, ftot = 0, aoff = 0, atot = 0; 
00381     for (std::vector<TkStripMeasurementDet*>::const_iterator i=theStripDets.begin();
00382          i!=theStripDets.end(); i++) {
00383       uint32_t detid = ((**i).geomDet().geographicalId()).rawId();
00384       if (qualityFlags & BadModules) {
00385           bool isOn = quality->IsModuleUsable(detid);
00386           (*i)->setActive(isOn);
00387           tot++; on += (unsigned int) isOn;
00388           if (qualityDebugFlags & BadModules) {
00389             edm::LogInfo("MeasurementTracker")<< "MeasurementTracker::initializeStripStatus : detid " << detid << " is " << (isOn ?  "on" : "off");
00390           }
00391        } else {
00392           (*i)->setActive(true);
00393        }
00394        // first turn all APVs and fibers ON
00395        (*i)->set128StripStatus(true); 
00396        if (qualityFlags & BadAPVFibers) {
00397           short badApvs   = quality->getBadApvs(detid);
00398           short badFibers = quality->getBadFibers(detid);
00399           for (int j = 0; j < 6; j++) {
00400              atot++;
00401              if (badApvs & (1 << j)) {
00402                 (*i)->set128StripStatus(false, j);
00403                 aoff++;
00404              }
00405           }
00406           for (int j = 0; j < 3; j++) {
00407              ftot++;
00408              if (badFibers & (1 << j)) {
00409                 (*i)->set128StripStatus(false, 2*j);
00410                 (*i)->set128StripStatus(false, 2*j+1);
00411                 foff++;
00412              }
00413           }
00414           (*i)->setMaskBad128StripBlocks(qualityFlags & MaskBad128StripBlocks != 0);
00415        } 
00416        std::vector<TkStripMeasurementDet::BadStripBlock> &badStrips = (*i)->getBadStripBlocks();
00417        badStrips.clear();
00418        if (qualityFlags & BadStrips) {
00419             SiStripBadStrip::Range range = quality->getRange(detid);
00420             for (SiStripBadStrip::ContainerIterator bit = range.first; bit != range.second; ++bit) {
00421                 badStrips.push_back(quality->decode(*bit));
00422             }
00423        }
00424     }
00425     if (qualityDebugFlags & BadModules) {
00426         edm::LogInfo("MeasurementTracker StripModuleStatus") << 
00427             " Total modules: " << tot << ", active " << on <<", inactive " << (tot - on);
00428     }
00429     if (qualityDebugFlags & BadAPVFibers) {
00430         edm::LogInfo("MeasurementTracker StripAPVStatus") << 
00431             " Total APVs: " << atot << ", active " << (atot-aoff) <<", inactive " << (aoff);
00432         edm::LogInfo("MeasurementTracker StripFiberStatus") << 
00433             " Total Fibers: " << ftot << ", active " << (ftot-foff) <<", inactive " << (foff);
00434     }
00435   } else {
00436     for (std::vector<TkStripMeasurementDet*>::const_iterator i=theStripDets.begin();
00437          i!=theStripDets.end(); i++) {
00438       (*i)->setActive(true);          // module ON
00439       (*i)->set128StripStatus(true);  // all APVs and fibers ON
00440     }
00441   }
00442 }

const std::vector<TkPixelMeasurementDet*>& MeasurementTracker::pixelDets (  )  const [inline]

Definition at line 70 of file MeasurementTracker.h.

References thePixelDets.

00070 {return thePixelDets;}

const std::vector<TkStripMeasurementDet*>& MeasurementTracker::stripDets (  )  const [inline]

Definition at line 69 of file MeasurementTracker.h.

References theStripDets.

00069 {return theStripDets;}

void MeasurementTracker::update ( const edm::Event event  )  const [virtual]

Reimplemented in OnDemandMeasurementTracker.

Definition at line 174 of file MeasurementTracker.cc.

References updatePixels(), and updateStrips().

Referenced by RectangularEtaPhiTrackingRegion::hits(), ElectronPixelSeedGenerator::run(), RoadSearchTrackCandidateMakerAlgorithm::run(), MuonRoadTrajectoryBuilder::setEvent(), NuclearInteractionFinder::setEvent(), HICTrajectoryBuilder::setEvent(), ConversionTrackFinder::setEvent(), GroupedCkfTrajectoryBuilder::setEvent(), ConversionSeedFinder::setEvent(), CkfTrajectoryBuilder::setEvent(), and MultiRecHitCollector::updateEvent().

00175 {
00176   updatePixels(event);
00177   updateStrips(event);
00178   
00179   /*
00180   for (std::vector<TkStripMeasurementDet*>::const_iterator i=theStripDets.begin();
00181        i!=theStripDets.end(); i++) {
00182     if( (*i)->isEmpty()){
00183       std::cout << "stripDet id, #hits: " 
00184                 <<  (*i)->geomDet().geographicalId().rawId() << " , "
00185                 << 0 << std::endl;
00186     }else{
00187       std::cout << "stripDet id, #hits: " 
00188                 <<  (*i)->geomDet().geographicalId().rawId() << " , "
00189                 << (*i)->size() << std::endl;
00190     }
00191   }
00192   */
00193 }

void MeasurementTracker::updatePixels ( const edm::Event event  )  const

Definition at line 196 of file MeasurementTracker.cc.

References edmNew::DetSetVector< T >::empty(), edmNew::DetSetVector< T >::end(), edm::ParameterSet::existsAs(), edmNew::DetSetVector< T >::find(), edm::ParameterSet::getParameter(), i, it, name_, HLT_VtxMuL3::pixelClusterProducer, edm::Handle< T >::product(), pset_, and thePixelDets.

Referenced by update(), and OnDemandMeasurementTracker::update().

00197 {
00198   // avoid to update twice from the same event
00199   if (!edm::Service<UpdaterService>()->checkOnce("MeasurementTracker::updatePixels::"+name_)) return;
00200 
00201   typedef edmNew::DetSet<SiPixelCluster> PixelDetSet;
00202 
00203   bool switchOffPixelsIfEmpty = (!pset_.existsAs<bool>("switchOffPixelsIfEmpty")) ||
00204                                 (pset_.getParameter<bool>("switchOffPixelsIfEmpty") == false);
00205   // Pixel Clusters
00206   std::string pixelClusterProducer = pset_.getParameter<std::string>("pixelClusterProducer");
00207   if( pixelClusterProducer.empty() ) { //clusters have not been produced
00208     for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
00209          i!=thePixelDets.end(); i++) {
00210       if (switchOffPixelsIfEmpty) {
00211         (**i).setActive(false);
00212       }else{
00213         (**i).setEmpty();
00214       }
00215     }
00216   }else{  
00217     edm::Handle<edmNew::DetSetVector<SiPixelCluster> > pixelClusters;
00218     event.getByLabel(pixelClusterProducer, pixelClusters);
00219     const  edmNew::DetSetVector<SiPixelCluster>* pixelCollection = pixelClusters.product();
00220    
00221     if (switchOffPixelsIfEmpty && pixelCollection->empty()) {
00222         for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
00223              i!=thePixelDets.end(); i++) {
00224               (**i).setActive(false);
00225         }
00226     } else { 
00227     for (std::vector<TkPixelMeasurementDet*>::const_iterator i=thePixelDets.begin();
00228          i!=thePixelDets.end(); i++) {
00229 
00230       (**i).setActive(true);
00231       // foreach det get cluster range
00232       unsigned int id = (**i).geomDet().geographicalId().rawId();
00233       edmNew::DetSetVector<SiPixelCluster>::const_iterator it = pixelCollection->find( id );
00234       if ( it != pixelCollection->end() ){            
00235         // push cluster range in det
00236         (**i).update( *it, pixelClusters, id );
00237       }else{
00238         (**i).setEmpty();
00239       }
00240     }
00241     }
00242   }
00243   
00244 }

void MeasurementTracker::updateStrips ( const edm::Event event  )  const

Reimplemented in OnDemandMeasurementTracker.

Definition at line 246 of file MeasurementTracker.cc.

References edm::RegionIndex< T >::begin(), edmNew::DetSetVector< T >::end(), edm::RegionIndex< T >::end(), edmNew::DetSetVector< T >::find(), edm::ParameterSet::getParameter(), i, idToDet(), isRegional_, it, name_, edm::Handle< T >::product(), pset_, HLT_VtxMuL3::stripClusterProducer, theStripDets, and TkStripMeasurementDet::update().

Referenced by update(), and OnDemandMeasurementTracker::update().

00247 {
00248   // avoid to update twice from the same event
00249   if (!edm::Service<UpdaterService>()->checkOnce("MeasurementTracker::updateStrips::"+name_)) return;
00250 
00251   typedef edmNew::DetSet<SiStripCluster>   StripDetSet;
00252 
00253   // Strip Clusters
00254   std::string stripClusterProducer = pset_.getParameter<std::string>("stripClusterProducer");
00255   if( !stripClusterProducer.compare("") ) { //clusters have not been produced
00256     for (std::vector<TkStripMeasurementDet*>::const_iterator i=theStripDets.begin();
00257          i!=theStripDets.end(); i++) {
00258       (**i).setEmpty();
00259     }
00260   }else{
00261     //=========  actually load cluster =============
00262     if(!isRegional_){
00263       edm::Handle<edmNew::DetSetVector<SiStripCluster> > clusterHandle;
00264       event.getByLabel(stripClusterProducer, clusterHandle);
00265       const edmNew::DetSetVector<SiStripCluster>* clusterCollection = clusterHandle.product();
00266 
00267       for (std::vector<TkStripMeasurementDet*>::const_iterator i=theStripDets.begin();
00268            i!=theStripDets.end(); i++) {
00269         
00270         // foreach det get cluster range
00271         unsigned int id = (**i).geomDet().geographicalId().rawId();
00272         edmNew::DetSetVector<SiStripCluster>::const_iterator it = clusterCollection->find( id );
00273         if ( it != clusterCollection->end() ){
00274           StripDetSet detSet = (*clusterCollection)[ id ];
00275           // push cluster range in det
00276           (**i).update( detSet, clusterHandle, id );
00277           
00278         }else{
00279           (**i).setEmpty();
00280         }
00281       }
00282     }else{
00283       //first clear all of them
00284       for (std::vector<TkStripMeasurementDet*>::const_iterator i=theStripDets.begin();
00285            i!=theStripDets.end(); i++) {
00286         (**i).setEmpty();
00287       }
00288             
00289       //then set the not-empty ones only
00290       edm::Handle<edm::RefGetter<SiStripCluster> > refClusterHandle;
00291       event.getByLabel(stripClusterProducer, refClusterHandle);
00292       
00293       std::string lazyGetter = pset_.getParameter<std::string>("stripLazyGetterProducer");
00294       edm::Handle<edm::LazyGetter<SiStripCluster> > lazyClusterHandle;
00295       event.getByLabel(lazyGetter,lazyClusterHandle);
00296 
00297       uint32_t tmpId=0;
00298       vector<SiStripCluster>::const_iterator beginIterator;
00299       edm::RefGetter<SiStripCluster>::const_iterator iregion = refClusterHandle->begin();
00300       for(;iregion!=refClusterHandle->end();++iregion) {
00301         const edm::RegionIndex<SiStripCluster>& region = *iregion;
00302         vector<SiStripCluster>::const_iterator icluster = region.begin();
00303         const vector<SiStripCluster>::const_iterator endIterator = region.end();
00304         tmpId = icluster->geographicalId();
00305         beginIterator = icluster;
00306 
00307         //std::cout << "== tmpId ad inizio loop dentro region: " << tmpId << std::endl;
00308 
00309         for (;icluster!=endIterator;icluster++) {
00310           //std::cout << "===== cluster id,pos " 
00311           //  << icluster->geographicalId() << " , " << icluster->barycenter()
00312           //  << std::endl;
00313           //std::cout << "=====making ref in recHits() " << std::endl;
00314           if( icluster->geographicalId() != tmpId){ 
00315             //std::cout << "geo!=tmpId" << std::endl;
00316             //we should find a way to avoid this casting. it is slow
00317             //create also another map for TkStripMeasurementDet ??
00318 
00319             // the following castings are really ugly. To be corrected ASAP
00320             const TkStripMeasurementDet* theConcreteDet = 
00321               dynamic_cast<const TkStripMeasurementDet*>(idToDet(DetId(tmpId)));
00322             
00323             if(theConcreteDet == 0)
00324               throw MeasurementDetException("failed casting to TkStripMeasurementDet*");            
00325             TkStripMeasurementDet*  theConcreteDetUpdatable = 
00326               const_cast<TkStripMeasurementDet*>(theConcreteDet);
00327             theConcreteDetUpdatable->update(beginIterator,icluster,lazyClusterHandle,tmpId);
00328             //cannot we avoid to update the det with detId of itself??
00329 
00330             tmpId = icluster->geographicalId();
00331             beginIterator = icluster;
00332             if( icluster == (endIterator-1)){
00333               const TkStripMeasurementDet* theConcreteDet = 
00334               dynamic_cast<const TkStripMeasurementDet*>(idToDet(DetId(tmpId)));
00335               
00336               if(theConcreteDet == 0)
00337               throw MeasurementDetException("failed casting to TkStripMeasurementDet*");            
00338               TkStripMeasurementDet*  theConcreteDetUpdatable = 
00339               const_cast<TkStripMeasurementDet*>(theConcreteDet);
00340               theConcreteDetUpdatable->update(icluster,endIterator,lazyClusterHandle,tmpId);
00341             }    
00342           }else if( icluster == (endIterator-1)){          
00343             const TkStripMeasurementDet* theConcreteDet = 
00344               dynamic_cast<const TkStripMeasurementDet*>(idToDet(DetId(tmpId)));
00345             
00346             if(theConcreteDet == 0)
00347               throw MeasurementDetException("failed casting to TkStripMeasurementDet*");            
00348             TkStripMeasurementDet*  theConcreteDetUpdatable = 
00349               const_cast<TkStripMeasurementDet*>(theConcreteDet);
00350             //std::cout << "=== option3. fill det with id,#clust: " << tmpId  << " , " 
00351             //      << iregion->end() - beginIterator << std::endl;
00352             theConcreteDetUpdatable->update(beginIterator,endIterator,lazyClusterHandle,tmpId);  
00353           }       
00354         }//end loop cluster in one ragion
00355       }
00356     }//end of block for updating with regional clusters 
00357   }
00358 
00359 }


Member Data Documentation

bool MeasurementTracker::isRegional_ [protected]

Definition at line 90 of file MeasurementTracker.h.

Referenced by addStripDet(), and updateStrips().

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

Definition at line 76 of file MeasurementTracker.h.

Referenced by updatePixels(), OnDemandMeasurementTracker::updateStrips(), and updateStrips().

const edm::ParameterSet& MeasurementTracker::pset_ [protected]

Definition at line 75 of file MeasurementTracker.h.

Referenced by updatePixels(), OnDemandMeasurementTracker::updateStrips(), and updateStrips().

DetContainer MeasurementTracker::theDetMap [mutable, protected]

Definition at line 78 of file MeasurementTracker.h.

Referenced by addGluedDet(), addPixelDet(), addStripDet(), allDets(), idToDet(), and OnDemandMeasurementTracker::OnDemandMeasurementTracker().

const GeometricSearchTracker* MeasurementTracker::theGeometricSearchTracker [protected]

Definition at line 87 of file MeasurementTracker.h.

Referenced by geometricSearchTracker().

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

Definition at line 81 of file MeasurementTracker.h.

Referenced by addGluedDet(), gluedDets(), and ~MeasurementTracker().

const SiStripRecHitMatcher* MeasurementTracker::theHitMatcher [protected]

Definition at line 85 of file MeasurementTracker.h.

Referenced by addGluedDet(), and addStripDets().

const PixelClusterParameterEstimator* MeasurementTracker::thePixelCPE [protected]

Definition at line 83 of file MeasurementTracker.h.

Referenced by addPixelDets().

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

Definition at line 80 of file MeasurementTracker.h.

Referenced by addPixelDet(), pixelDets(), updatePixels(), and ~MeasurementTracker().

const StripClusterParameterEstimator* MeasurementTracker::theStripCPE [protected]

Definition at line 84 of file MeasurementTracker.h.

Referenced by addGluedDet(), and addStripDets().

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

Definition at line 79 of file MeasurementTracker.h.

Referenced by addStripDet(), initializeStripStatus(), stripDets(), updateStrips(), and ~MeasurementTracker().

const SiStripQuality* MeasurementTracker::theStripQuality [protected]

Definition at line 88 of file MeasurementTracker.h.

const TrackerGeometry* MeasurementTracker::theTrackerGeom [protected]

Definition at line 86 of file MeasurementTracker.h.

Referenced by geomTracker(), and initialize().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:28:14 2009 for CMSSW by  doxygen 1.5.4