CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

FakeTrackProducer< T > Class Template Reference

Inheritance diagram for FakeTrackProducer< T >:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

 FakeTrackProducer (const edm::ParameterSet &iConfig)
virtual void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
virtual ~FakeTrackProducer ()

Private Member Functions

TrajectorySeed::range getHits (const TrajectorySeed &seed) const
TrajectorySeed::range getHits (const TrackCandidate &seed) const
const PTrajectoryStateOnDetgetState (const TrajectorySeed &seed) const
const PTrajectoryStateOnDetgetState (const TrackCandidate &seed) const

Private Attributes

edm::InputTag src_
 Labels for input collections.
edm::ESHandle< TrackerGeometrytheGeometry
 Muon selection.
edm::ESHandle< MagneticFieldtheMagField

Detailed Description

template<class T>
class FakeTrackProducer< T >

Definition at line 41 of file FakeTrackProducers.cc.


Constructor & Destructor Documentation

template<typename T >
FakeTrackProducer< T >::FakeTrackProducer ( const edm::ParameterSet iConfig) [explicit]

Definition at line 66 of file FakeTrackProducers.cc.

                                                                       :
    src_(iConfig.getParameter<edm::InputTag>("src"))
    //,selector_(iConfig.existsAs<std::string>("cut") ? iConfig.getParameter<std::string>("cut") : "", true)
{
    produces<std::vector<reco::Track> >(); 
    produces<std::vector<reco::TrackExtra> >();
    produces<edm::OwnVector<TrackingRecHit> >();
}
template<class T >
virtual FakeTrackProducer< T >::~FakeTrackProducer ( ) [inline, virtual]

Definition at line 44 of file FakeTrackProducers.cc.

{ }

Member Function Documentation

template<class T >
TrajectorySeed::range FakeTrackProducer< T >::getHits ( const TrajectorySeed seed) const [inline, private]

Definition at line 60 of file FakeTrackProducers.cc.

References TrajectorySeed::recHits().

{ return seed.recHits(); }
template<class T >
TrajectorySeed::range FakeTrackProducer< T >::getHits ( const TrackCandidate seed) const [inline, private]

Definition at line 61 of file FakeTrackProducers.cc.

References TrackCandidate::recHits().

{ return seed.recHits(); }
template<class T >
const PTrajectoryStateOnDet& FakeTrackProducer< T >::getState ( const TrajectorySeed seed) const [inline, private]

Definition at line 58 of file FakeTrackProducers.cc.

References TrajectorySeed::startingState().

{ return seed.startingState(); }
template<class T >
const PTrajectoryStateOnDet& FakeTrackProducer< T >::getState ( const TrackCandidate seed) const [inline, private]

Definition at line 59 of file FakeTrackProducers.cc.

References TrackCandidate::trajectoryStateOnDet().

{ return seed.trajectoryStateOnDet(); }
template<typename T >
void FakeTrackProducer< T >::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
) [override, virtual]

Implements edm::EDProducer.

Definition at line 77 of file FakeTrackProducers.cc.

References reco::TrackExtraBase::add(), alongMomentum, dtNoiseDBValidation_cfg::cerr, LocalTrajectoryParameters::charge(), DeDxDiscriminatorTools::charge(), PTrajectoryStateOnDet::detId(), TrackingRecHit::geographicalId(), edm::EventSetup::get(), edm::Event::getByLabel(), edm::Event::getRefBeforePut(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::localParameters(), TrackingRecHit::localPosition(), RPCpg::mu, dbtoconf::out, AlCaHLTBitMon_ParallelJobs::p, edm::Event::put(), DetId::rawId(), alcazmumu_cfi::src, GeomDet::surface(), std::swap(), GeomDet::toGlobal(), trajectoryStateTransform::transientState(), PV3DBase< T, PVType, FrameType >::x(), x, PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

                                                                             {
    using namespace edm;
    using namespace std;


    iSetup.get<TrackerDigiGeometryRecord>().get(theGeometry);
    iSetup.get<IdealMagneticFieldRecord>().get(theMagField);

    Handle<vector<T> > src;
    iEvent.getByLabel(src_, src);

    auto_ptr<vector<reco::Track> > out(new vector<reco::Track>());
    out->reserve(src->size());
    auto_ptr<vector<reco::TrackExtra> > outEx(new vector<reco::TrackExtra>());
    outEx->reserve(src->size());
    auto_ptr<OwnVector<TrackingRecHit> > outHits(new OwnVector<TrackingRecHit>());

    TrackingRecHitRefProd rHits = iEvent.getRefBeforePut<TrackingRecHitCollection>();
    reco::TrackExtraRefProd rTrackExtras = iEvent.getRefBeforePut<reco::TrackExtraCollection>();
    for (typename vector<T>::const_iterator it = src->begin(), ed = src->end(); it != ed; ++it) {
        const T &mu = *it;
        //if (!selector_(mu)) continue;
        const PTrajectoryStateOnDet & pstate = getState(mu);
        const GeomDet *det = theGeometry->idToDet(DetId(pstate.detId()));
        if (det == 0) { std::cerr << "ERROR:  bogus detid " << pstate.detId() << std::endl; continue; }
        TrajectoryStateOnSurface state = trajectoryStateTransform::transientState(pstate, & det->surface(), &*theMagField);
        GlobalPoint  gx = state.globalPosition();
        GlobalVector gp = state.globalMomentum();
        reco::Track::Point x(gx.x(), gx.y(), gx.z());
        reco::Track::Vector p(gp.x(), gp.y(), gp.z());
        int charge = state.localParameters().charge();
        out->push_back(reco::Track(1.0,1.0,x,p,charge,reco::Track::CovarianceMatrix()));
        TrajectorySeed::range hits = getHits(mu);
        out->back().setHitPattern(hits.first, hits.second);
        // Now Track Extra
        const TrackingRecHit *hit0 =  &*hits.first;
        const TrackingRecHit *hit1 = &*(hits.second-1);
        const GeomDet *det0 = theGeometry->idToDet(hit0->geographicalId());
        const GeomDet *det1 = theGeometry->idToDet(hit1->geographicalId());
        if (det0 == 0 || det1 == 0) { std::cerr << "ERROR:  bogus detids at beginning or end of range" << std::endl; continue; }
        GlobalPoint gx0 = det0->toGlobal(hit0->localPosition());
        GlobalPoint gx1 = det1->toGlobal(hit1->localPosition());
        reco::Track::Point x0(gx0.x(), gx0.y(), gx0.z());
        reco::Track::Point x1(gx1.x(), gx1.y(), gx1.z());
        if (x0.R() > x1.R()) std::swap(x0,x1);
        outEx->push_back( reco::TrackExtra(x1, p, true, x0, p, true, 
                                reco::Track::CovarianceMatrix(), hit0->geographicalId().rawId(),
                                reco::Track::CovarianceMatrix(), hit1->geographicalId().rawId(),
                                alongMomentum) );
        out->back().setExtra( reco::TrackExtraRef( rTrackExtras, outEx->size()-1 ) );
        reco::TrackExtra &ex = outEx->back();    
        for (OwnVector<TrackingRecHit>::const_iterator it2 = hits.first; it2 != hits.second; ++it2) {
            outHits->push_back(*it2);
            ex.add( TrackingRecHitRef( rHits, outHits->size()-1 ) );
        } 
    }

    iEvent.put(out);
    iEvent.put(outEx);
    iEvent.put(outHits);
}

Member Data Documentation

template<class T >
edm::InputTag FakeTrackProducer< T >::src_ [private]

Labels for input collections.

Definition at line 49 of file FakeTrackProducers.cc.

template<class T >
edm::ESHandle<TrackerGeometry> FakeTrackProducer< T >::theGeometry [private]

Muon selection.

Definition at line 55 of file FakeTrackProducers.cc.

template<class T >
edm::ESHandle<MagneticField> FakeTrackProducer< T >::theMagField [private]

Definition at line 56 of file FakeTrackProducers.cc.