CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

MuonSeedTrack Class Reference

#include <MuonSeedTrack.h>

Inheritance diagram for MuonSeedTrack:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

 MuonSeedTrack (const edm::ParameterSet &)
 constructor with config
 ~MuonSeedTrack ()
 destructor

Private Member Functions

virtual void beginJob ()
 pre-job booking
std::pair< bool, reco::TrackbuildTrackAtPCA (const TrajectorySeed &) const
 Build a track at the PCA WITHOUT any vertex constriant.
double computeNDOF (const TrajectorySeed &) const
 compute the TrajectorySeed's degree of freedom
virtual void endJob ()
 post-job
TrajectoryStateOnSurface getSeedTSOS (const TrajectorySeed &seed) const
 get the TrajectorySeed's TrajectoryStateOnSurface
virtual void produce (edm::Event &, const edm::EventSetup &)
 construct proto-tracks
void setAlias (std::string alias)
 set the Branch alias

Private Attributes

std::string theAlias
 the Branch alias
bool theAllowNoVtxFlag
edm::InputTag theSeedsLabel
 the propagator used for extracting TSOS from seed
MuonServiceProxytheService
 the event setup proxy, it takes care the services update
MuonUpdatorAtVertextheUpdatorAtVtx
 the class used for updating a Trajectory State at veretex

Detailed Description

Make a (fake) reco::Track from a TrajectorySeed. The (fake) track can be associated to a TrackingParticle (SimTrack) using SimTracker/TrackAssociation. The association can then be used in Validation packages, such as Validation/RecoMuon/MuonTrackValidator.cc

Date:
2010/03/22 08:49:54
Revision:
1.3
Author:
Adam Everett Purdue University

Definition at line 43 of file MuonSeedTrack.h.


Constructor & Destructor Documentation

MuonSeedTrack::MuonSeedTrack ( const edm::ParameterSet pset) [explicit]

constructor with config

Definition at line 42 of file MuonSeedTrack.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), MuonServiceProxy_cff::MuonServiceProxy, and MuonUpdatorAtVertex_cff::MuonUpdatorAtVertex.

{
  // service parameters
  ParameterSet serviceParameters = pset.getParameter<ParameterSet>("ServiceParameters");
  theService = new MuonServiceProxy(serviceParameters);
  
  ParameterSet updatorPar = pset.getParameter<ParameterSet>("MuonUpdatorAtVertexParameters");
  //theSeedPropagatorName = updatorPar.getParameter<string>("Propagator");
  theSeedsLabel = pset.getParameter<InputTag>("MuonSeed");
  theUpdatorAtVtx = new MuonUpdatorAtVertex(updatorPar,theService);

  theAllowNoVtxFlag = pset.getUntrackedParameter<bool>("AllowNoVertex",false);

  //register products
  setAlias(pset.getParameter<std::string>("@module_label"));
  produces<reco::TrackCollection>().setBranchAlias(theAlias + "Tracks");

}
MuonSeedTrack::~MuonSeedTrack ( )

destructor

Definition at line 64 of file MuonSeedTrack.cc.

{
  if (theService) delete theService;
  if (theUpdatorAtVtx) delete theUpdatorAtVtx;
}

Member Function Documentation

void MuonSeedTrack::beginJob ( void  ) [private, virtual]

pre-job booking

empty method

Reimplemented from edm::EDProducer.

Definition at line 112 of file MuonSeedTrack.cc.

{
}
pair< bool, reco::Track > MuonSeedTrack::buildTrackAtPCA ( const TrajectorySeed seed) const [private]

Build a track at the PCA WITHOUT any vertex constriant.

First calls getSeedTSOS, then propagates to the vertex. Creates a reco::Track from the propagated initial FreeTrajectoryState.

Definition at line 172 of file MuonSeedTrack.cc.

References FreeTrajectoryState::charge(), FreeTrajectoryState::curvilinearError(), debug, MuonPatternRecoDumper::dumpFTS(), TrajectoryStateOnSurface::freeState(), TrajectoryStateOnSurface::globalPosition(), TrackerBounds::isInside(), LogTrace, metname, FreeTrajectoryState::momentum(), AlCaHLTBitMon_ParallelJobs::p, FreeTrajectoryState::position(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

                                                                                    {

  const string metname = "MuonSeedTrack";

  MuonPatternRecoDumper debug;

  TSOS seedTSOS = getSeedTSOS(seed);
  // This is needed to extrapolate the tsos at vertex
  LogTrace(metname) << "Propagate to PCA...";
  pair<bool,FreeTrajectoryState> 
    extrapolationResult = theUpdatorAtVtx->propagateToNominalLine(seedTSOS);
  FreeTrajectoryState ftsAtVtx;
  
  if(extrapolationResult.first) {
    ftsAtVtx = extrapolationResult.second;
  }  else {    
    if(TrackerBounds::isInside(seedTSOS.globalPosition())){
      LogWarning(metname) << "Track in the Tracker: taking the innermost state instead of the state at PCA";
      ftsAtVtx = *seedTSOS.freeState();
    }
    else{
      if ( theAllowNoVtxFlag ) {
        LogWarning(metname) << "Propagation to PCA failed, taking the innermost state instead of the state at PCA";
        ftsAtVtx = *seedTSOS.freeState();
      } else {
        LogWarning(metname) << "Stand Alone track: this track will be rejected";
        return pair<bool,reco::Track>(false,reco::Track());
      }
    }
  }
    
  LogTrace(metname) << "TSOS after the extrapolation at vtx";
  LogTrace(metname) << debug.dumpFTS(ftsAtVtx);
  
  GlobalPoint pca = ftsAtVtx.position();
  math::XYZPoint persistentPCA(pca.x(),pca.y(),pca.z());
  GlobalVector p = ftsAtVtx.momentum();
  math::XYZVector persistentMomentum(p.x(),p.y(),p.z());
  
  double dummyNDOF = 1.0;
  //double ndof = computeNDOF(seed);
  double dummyChi2 = 1.0;
  
  reco::Track track(dummyChi2, 
                    dummyNDOF,
                    persistentPCA,
                    persistentMomentum,
                    ftsAtVtx.charge(),
                    ftsAtVtx.curvilinearError());
  
  return pair<bool,reco::Track>(true,track);
}
double MuonSeedTrack::computeNDOF ( const TrajectorySeed trajectory) const [private]

compute the TrajectorySeed's degree of freedom

Calculates number of degrees of freedom for the TrajectorySeed

Definition at line 228 of file MuonSeedTrack.cc.

References max(), metname, and TrajectorySeed::recHits().

                                                                        {
  const string metname = "MuonSeedTrack";

  BasicTrajectorySeed::const_iterator recHits1 = (trajectory.recHits().first);
  BasicTrajectorySeed::const_iterator recHits2 = (trajectory.recHits().second);
  
  double ndof = 0.;

  if ((*recHits1).isValid()) ndof += (*recHits1).dimension();
  if ((*recHits2).isValid()) ndof += (*recHits2).dimension();

  //const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
  //for(Trajectory::RecHitContainer::const_iterator rechit = transRecHits.begin();
  //  rechit != transRecHits.end(); ++rechit)
  //if ((*rechit)->isValid()) ndof += (*rechit)->dimension();
  
  // FIXME! in case of Boff is dof - 4
  return max(ndof - 5., 0.);
}
void MuonSeedTrack::endJob ( void  ) [private, virtual]

post-job

empty method

Reimplemented from edm::EDProducer.

Definition at line 121 of file MuonSeedTrack.cc.

                      {
}
TrajectoryStateOnSurface MuonSeedTrack::getSeedTSOS ( const TrajectorySeed seed) const [private]

get the TrajectorySeed's TrajectoryStateOnSurface

Get the TrajectoryStateOnSurface from the TrajectorySeed

Definition at line 128 of file MuonSeedTrack.cc.

References PTrajectoryStateOnDet::detId(), TrajectorySeed::startingState(), and trajectoryStateTransform::transientState().

                                                                                   {

  // Get the Trajectory State on Det (persistent version of a TSOS) from the seed
  PTrajectoryStateOnDet pTSOD = seed.startingState();

  // Transform it in a TrajectoryStateOnSurface
  

  DetId seedDetId(pTSOD.detId());

  const GeomDet* gdet = theService->trackingGeometry()->idToDet( seedDetId );

  TrajectoryStateOnSurface initialState = trajectoryStateTransform::transientState(pTSOD, &(gdet->surface()), &*theService->magneticField());

  /*
  // Get the layer on which the seed relies
  const DetLayer *initialLayer = theService->detLayerGeometry()->idToLayer( seedDetId );

  PropagationDirection detLayerOrder = oppositeToMomentum;

  // ask for compatible layers
  vector<const DetLayer*> detLayers;
  detLayers = initialLayer->compatibleLayers( *initialState.freeState(),detLayerOrder);
  
  TrajectoryStateOnSurface result = initialState;
  if(detLayers.size()){
    const DetLayer* finalLayer = detLayers.back();
    const TrajectoryStateOnSurface propagatedState = theService->propagator(theSeedPropagatorName)->propagate(initialState, finalLayer->surface());
    if(propagatedState.isValid())
      result = propagatedState;
  }
  
  return result;
  */

  return initialState;

}
void MuonSeedTrack::produce ( edm::Event event,
const edm::EventSetup eventSetup 
) [private, virtual]

construct proto-tracks

For each seed, make a (fake) reco::Track

Implements edm::EDProducer.

Definition at line 78 of file MuonSeedTrack.cc.

{
   using namespace edm;

  // Update the services
  theService->update(eventSetup);

  // the track collectios; they will be loaded in the event  
  auto_ptr<reco::TrackCollection> trackCollection(new reco::TrackCollection());
  // ... and its reference into the event
  reco::TrackRefProd trackCollectionRefProd = event.getRefBeforePut<reco::TrackCollection>();


  Handle<TrajectorySeedCollection> seeds;
  event.getByLabel(theSeedsLabel, seeds);

  for ( TrajectorySeedCollection::const_iterator iSeed = seeds->begin();
        iSeed != seeds->end(); iSeed++ ) {
    pair<bool,reco::Track> resultOfTrackExtrapAtPCA = buildTrackAtPCA(*iSeed);
    if(!resultOfTrackExtrapAtPCA.first) continue;
    // take the "bare" track at PCA
    reco::Track &track = resultOfTrackExtrapAtPCA.second;
    // fill the TrackCollection
    trackCollection->push_back(track);
  }
  
  event.put(trackCollection);

}
void MuonSeedTrack::setAlias ( std::string  alias) [inline, private]

set the Branch alias

Definition at line 65 of file MuonSeedTrack.h.

References theAlias.

                                  {
    alias.erase( alias.size() - 1, alias.size() );
    theAlias=alias;
  }

Member Data Documentation

std::string MuonSeedTrack::theAlias [private]

the Branch alias

Definition at line 85 of file MuonSeedTrack.h.

Referenced by setAlias().

Definition at line 94 of file MuonSeedTrack.h.

the propagator used for extracting TSOS from seed

the TrajectorySeed label

Definition at line 91 of file MuonSeedTrack.h.

the event setup proxy, it takes care the services update

Definition at line 79 of file MuonSeedTrack.h.

the class used for updating a Trajectory State at veretex

Definition at line 82 of file MuonSeedTrack.h.