CMS 3D CMS Logo

Public Member Functions | Private Types | Private Member Functions | Private Attributes

reco::modules::CosmicTrackSelector Class Reference

#include <CosmicTrackSelector.h>

Inheritance diagram for reco::modules::CosmicTrackSelector:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

 CosmicTrackSelector (const edm::ParameterSet &cfg)
virtual ~CosmicTrackSelector ()

Private Types

typedef math::XYZPoint Point

Private Member Functions

void produce (edm::Event &evt, const edm::EventSetup &es)
bool select (const reco::BeamSpot &vertexBeamSpot, const reco::Track &tk)

Private Attributes

edm::InputTag beamspot_
double chi2n_par_
bool copyExtras_
bool copyTrajectories_
bool keepAllTracks_
double max_d0_
double max_eta_
uint32_t max_lostLayers_
double max_z0_
uint32_t min_3Dlayers_
uint32_t min_layers_
uint32_t min_nHit_
uint32_t min_nPixelHit_
double min_pt_
TrackBase::TrackQuality qualityToSet_
std::vector< double > res_par_
TrackingRecHitRefProd rHits_
reco::TrackExtraRefProd rTrackExtras_
reco::TrackRefProd rTracks_
edm::RefProd< std::vector
< Trajectory > > 
rTrajectories_
std::auto_ptr
< TrackingRecHitCollection
selHits_
std::auto_ptr
< reco::TrackExtraCollection
selTrackExtras_
std::auto_ptr
< reco::TrackCollection
selTracks_
std::auto_ptr< std::vector
< const Trajectory * > > 
selTrajPtrs_
std::auto_ptr< std::vector
< Trajectory > > 
selTrajs_
std::auto_ptr
< TrajTrackAssociationCollection
selTTAss_
bool setQualityBit_
edm::InputTag src_
std::vector< reco::TrackReftrackRefs_

Detailed Description

Definition at line 37 of file CosmicTrackSelector.h.


Member Typedef Documentation

Definition at line 46 of file CosmicTrackSelector.h.


Constructor & Destructor Documentation

CosmicTrackSelector::CosmicTrackSelector ( const edm::ParameterSet cfg) [explicit]

Definition at line 8 of file CosmicTrackSelector.cc.

References copyExtras_, copyTrajectories_, Exception, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), keepAllTracks_, reco::TrackBase::qualityByName(), qualityToSet_, setQualityBit_, and reco::TrackBase::undefQuality.

                                                                      :
  src_( cfg.getParameter<edm::InputTag>( "src" ) ),
  beamspot_( cfg.getParameter<edm::InputTag>( "beamspot" ) ),
  copyExtras_(cfg.getUntrackedParameter<bool>("copyExtras", false)),
  copyTrajectories_(cfg.getUntrackedParameter<bool>("copyTrajectories", false)),
  keepAllTracks_( cfg.exists("keepAllTracks") ?
                  cfg.getParameter<bool>("keepAllTracks") :
                  false ),  // as this is what you expect from a well behaved selector
  setQualityBit_( false ),
  qualityToSet_( TrackBase::undefQuality ),
  chi2n_par_( cfg.getParameter<double>("chi2n_par") ),
  // Impact parameter absolute cuts.
  max_d0_(cfg.getParameter<double>("max_d0")),
  max_z0_(cfg.getParameter<double>("max_z0")),
  // Track parameter cuts.
  min_pt_(cfg.getParameter<double>("min_pt")),
  max_eta_(cfg.getParameter<double>("max_eta")),
  // Cut on number of valid hits
  min_nHit_(cfg.getParameter<uint32_t>("min_nHit")),
  // Cut on number of valid hits
  min_nPixelHit_(cfg.getParameter<uint32_t>("min_nPixelHit")),
  // Cuts on numbers of layers with hits/3D hits/lost hits.
  min_layers_(cfg.getParameter<uint32_t>("minNumberLayers") ),
  min_3Dlayers_(cfg.getParameter<uint32_t>("minNumber3DLayers") ),
  max_lostLayers_(cfg.getParameter<uint32_t>("maxNumberLostLayers") )
{
  if (cfg.exists("qualityBit")) {
    std::string qualityStr = cfg.getParameter<std::string>("qualityBit");
    if (qualityStr != "") {
      setQualityBit_ = true;
      qualityToSet_  = TrackBase::qualityByName(cfg.getParameter<std::string>("qualityBit"));
    }
  }
  if (keepAllTracks_ && !setQualityBit_) throw cms::Exception("Configuration") << 
    "If you set 'keepAllTracks' to true, you must specify which qualityBit to set.\n";
  if (setQualityBit_ && (qualityToSet_ == TrackBase::undefQuality)) throw cms::Exception("Configuration") <<
    "You can't set the quality bit " << cfg.getParameter<std::string>("qualityBit") << " as it is 'undefQuality' or unknown.\n";
  
  std::string alias( cfg.getParameter<std::string>( "@module_label" ) );
  produces<reco::TrackCollection>().setBranchAlias( alias + "Tracks");
  if (copyExtras_) {
    produces<reco::TrackExtraCollection>().setBranchAlias( alias + "TrackExtras");
    produces<TrackingRecHitCollection>().setBranchAlias( alias + "RecHits");
  }
  if (copyTrajectories_) {
    produces< std::vector<Trajectory> >().setBranchAlias( alias + "Trajectories");
    produces< TrajTrackAssociationCollection >().setBranchAlias( alias + "TrajectoryTrackAssociations");
  }
  
}
CosmicTrackSelector::~CosmicTrackSelector ( ) [virtual]

Definition at line 59 of file CosmicTrackSelector.cc.

                                          {
}

Member Function Documentation

void CosmicTrackSelector::produce ( edm::Event evt,
const edm::EventSetup es 
) [private, virtual]

Implements edm::EDProducer.

Definition at line 62 of file CosmicTrackSelector.cc.

References reco::TrackExtraBase::add(), beamspot_, copyExtras_, copyTrajectories_, cond::rpcobimon::current, edm::friendlyname::emptyString(), edm::Event::getByLabel(), edm::Event::getRefBeforePut(), i, reco::Track::innerDetId(), reco::Track::innerMomentum(), reco::Track::innerOk(), reco::Track::innerPosition(), reco::Track::innerStateCovariance(), keepAllTracks_, edm::Ref< C, T, F >::key(), match(), n, convertSQLiteXML::ok, reco::Track::outerDetId(), reco::Track::outerMomentum(), reco::Track::outerOk(), reco::Track::outerPosition(), reco::Track::outerStateCovariance(), edm::Event::put(), qualityToSet_, reco::Track::recHitsBegin(), reco::Track::recHitsEnd(), dt_dqm_sourceclient_common_cff::reco, reco::Track::residuals(), rHits_, rTrackExtras_, rTracks_, rTrajectories_, reco::Track::seedDirection(), reco::Track::seedRef(), select(), selHits_, selTrackExtras_, selTracks_, selTrajs_, selTTAss_, setQualityBit_, reco::TrackExtra::setResiduals(), src_, and trackRefs_.

{
  using namespace std; 
  using namespace edm;
  using namespace reco;
  
  Handle<TrackCollection> hSrcTrack;
  Handle< vector<Trajectory> > hTraj;
  Handle< vector<Trajectory> > hTrajP;
  Handle< TrajTrackAssociationCollection > hTTAss;
  
  // looking for the beam spot
  edm::Handle<reco::BeamSpot> hBsp;
  evt.getByLabel(beamspot_, hBsp);
  reco::BeamSpot vertexBeamSpot;
  vertexBeamSpot = *hBsp;
  
  // Get tracks 
  evt.getByLabel( src_, hSrcTrack );
  
  selTracks_ = auto_ptr<TrackCollection>(new TrackCollection());
  rTracks_ = evt.getRefBeforePut<TrackCollection>();      
  if (copyExtras_) {
    selTrackExtras_ = auto_ptr<TrackExtraCollection>(new TrackExtraCollection());
    selHits_ = auto_ptr<TrackingRecHitCollection>(new TrackingRecHitCollection());
    rHits_ = evt.getRefBeforePut<TrackingRecHitCollection>();
    rTrackExtras_ = evt.getRefBeforePut<TrackExtraCollection>();
  }
  
  if (copyTrajectories_) trackRefs_.resize(hSrcTrack->size());
  
  // Loop over tracks
  size_t current = 0;
  for (TrackCollection::const_iterator it = hSrcTrack->begin(), ed = hSrcTrack->end(); it != ed; ++it, ++current) {
    const Track & trk = * it;
    // Check if this track passes cuts
    bool ok = select(vertexBeamSpot, trk);
    if (!ok) {
      if (copyTrajectories_) trackRefs_[current] = reco::TrackRef();
      if (!keepAllTracks_) continue;
    }
    selTracks_->push_back( Track( trk ) ); // clone and store
    if (ok && setQualityBit_) selTracks_->back().setQuality(qualityToSet_);
    if (copyExtras_) {
      // TrackExtras
      selTrackExtras_->push_back( TrackExtra( trk.outerPosition(), trk.outerMomentum(), trk.outerOk(),
                                              trk.innerPosition(), trk.innerMomentum(), trk.innerOk(),
                                              trk.outerStateCovariance(), trk.outerDetId(),
                                              trk.innerStateCovariance(), trk.innerDetId(),
                                              trk.seedDirection(), trk.seedRef() ) );
      selTracks_->back().setExtra( TrackExtraRef( rTrackExtras_, selTrackExtras_->size() - 1) );
      TrackExtra & tx = selTrackExtras_->back();
      tx.setResiduals(trk.residuals());
      // TrackingRecHits
      for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit ) {
        selHits_->push_back( (*hit)->clone() );
        tx.add( TrackingRecHitRef( rHits_, selHits_->size() - 1) );
      }
    }
    if (copyTrajectories_) {
      trackRefs_[current] = TrackRef(rTracks_, selTracks_->size() - 1);
    }
    }
  if ( copyTrajectories_ ) {
    Handle< vector<Trajectory> > hTraj;
    Handle< TrajTrackAssociationCollection > hTTAss;
    evt.getByLabel(src_, hTTAss);
    evt.getByLabel(src_, hTraj);
    selTrajs_ = auto_ptr< vector<Trajectory> >(new vector<Trajectory>()); 
    rTrajectories_ = evt.getRefBeforePut< vector<Trajectory> >();
    selTTAss_ = auto_ptr< TrajTrackAssociationCollection >(new TrajTrackAssociationCollection());
    for (size_t i = 0, n = hTraj->size(); i < n; ++i) {
      Ref< vector<Trajectory> > trajRef(hTraj, i);
      TrajTrackAssociationCollection::const_iterator match = hTTAss->find(trajRef);
      if (match != hTTAss->end()) {
        const Ref<TrackCollection> &trkRef = match->val; 
        short oldKey = static_cast<short>(trkRef.key());
        if (trackRefs_[oldKey].isNonnull()) {
          selTrajs_->push_back( Trajectory(*trajRef) );
          selTTAss_->insert ( Ref< vector<Trajectory> >(rTrajectories_, selTrajs_->size() - 1), trackRefs_[oldKey] );
        }
      }
    }
  }
  
  static const std::string emptyString;
  evt.put(selTracks_);
  if (copyExtras_ ) {
    evt.put(selTrackExtras_); 
    evt.put(selHits_);
  }
  if ( copyTrajectories_ ) {
    evt.put(selTrajs_);
    evt.put(selTTAss_);
  }
}
bool CosmicTrackSelector::select ( const reco::BeamSpot vertexBeamSpot,
const reco::Track tk 
) [private]

Definition at line 160 of file CosmicTrackSelector.cc.

References abs, chi2n_par_, debug_cff::d0, reco::TrackBase::dxy(), reco::TrackBase::dz(), eta(), reco::TrackBase::eta(), reco::TrackBase::hitPattern(), max_d0_, max_eta_, max_lostLayers_, max_z0_, min_3Dlayers_, min_layers_, min_nHit_, min_nPixelHit_, min_pt_, reco::TrackBase::normalizedChi2(), reco::HitPattern::numberOfValidStripLayersWithMonoAndStereo(), PixelSubdetector::PixelBarrel, GeomDetEnumerators::PixelEndcap, reco::HitPattern::pixelLayersWithMeasurement(), reco::BeamSpot::position(), reco::TrackBase::pt(), reco::Track::recHitsBegin(), reco::Track::recHitsEnd(), reco::HitPattern::trackerLayersWithMeasurement(), and reco::HitPattern::trackerLayersWithoutMeasurement().

Referenced by produce().

                                                                                        {
  // Decide if the given track passes selection cuts.
  
  using namespace std; 
  
  // Cuts on numbers of layers with hits/3D hits/lost hits.
  uint32_t nlayers     = tk.hitPattern().trackerLayersWithMeasurement();
  uint32_t nlayers3D   = tk.hitPattern().pixelLayersWithMeasurement() +
    tk.hitPattern().numberOfValidStripLayersWithMonoAndStereo();
  uint32_t nlayersLost = tk.hitPattern().trackerLayersWithoutMeasurement();
  
  // Get the number of valid hits and PixelHits
  uint32_t nHit = 0;
  uint32_t nPixelHit = 0;
  for ( trackingRecHit_iterator recHit = tk.recHitsBegin(); recHit != tk.recHitsEnd(); ++recHit ) {
    if ( !((*recHit)->isValid()) ) continue; 
    ++nHit;
    DetId id((*recHit)->geographicalId());
    if ( (unsigned int)id.subdetId() == PixelSubdetector::PixelBarrel 
         || (unsigned int)id.subdetId() == PixelSubdetector::PixelEndcap )
      ++nPixelHit;
  }  
  
  // Cut on the number of valid hits
  if (nHit < min_nHit_) return false;
  // Cut on the number of valid Pixel hits
  if (nPixelHit < min_nPixelHit_) return false;
  if (nlayers < min_layers_) return false;
  if (nlayers3D < min_3Dlayers_) return false;
  if (nlayersLost > max_lostLayers_) return false;
  
  // Get track parameters
  double pt = tk.pt(),eta = tk.eta(), chi2n =  tk.normalizedChi2();
  double d0 = -tk.dxy(vertexBeamSpot.position()), dz = tk.dz();
  
  // Absolute cuts on all tracks impact parameters with respect to beam-spot.
  if (abs(d0) > max_d0_) return false;
  if (abs(dz) > max_z0_) return false;
  
  // optimized cuts adapted to the track eta, pt and  chiquare/ndof 
  if (abs(eta) > max_eta_) return false;
  if (pt < min_pt_) return false;
  if (chi2n > chi2n_par_*nlayers) return false;

  
  else    
    return true;
  
}

Member Data Documentation

Definition at line 53 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 67 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 55 of file CosmicTrackSelector.h.

Referenced by CosmicTrackSelector(), and produce().

Definition at line 57 of file CosmicTrackSelector.h.

Referenced by CosmicTrackSelector(), and produce().

Definition at line 60 of file CosmicTrackSelector.h.

Referenced by CosmicTrackSelector(), and produce().

Definition at line 70 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 74 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 82 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 71 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 81 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 80 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 76 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 78 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 73 of file CosmicTrackSelector.h.

Referenced by select().

Definition at line 63 of file CosmicTrackSelector.h.

Referenced by CosmicTrackSelector(), and produce().

std::vector<double> reco::modules::CosmicTrackSelector::res_par_ [private]

Definition at line 66 of file CosmicTrackSelector.h.

Definition at line 93 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 92 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 91 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 94 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 87 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 86 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 85 of file CosmicTrackSelector.h.

Referenced by produce().

std::auto_ptr< std::vector<const Trajectory *> > reco::modules::CosmicTrackSelector::selTrajPtrs_ [private]

Definition at line 89 of file CosmicTrackSelector.h.

std::auto_ptr< std::vector<Trajectory> > reco::modules::CosmicTrackSelector::selTrajs_ [private]

Definition at line 88 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 90 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 62 of file CosmicTrackSelector.h.

Referenced by CosmicTrackSelector(), and produce().

Definition at line 52 of file CosmicTrackSelector.h.

Referenced by produce().

Definition at line 95 of file CosmicTrackSelector.h.

Referenced by produce().