CMS 3D CMS Logo

Public Member Functions | Private Attributes

CosmicParametersDefinerForTP Class Reference

#include <CosmicParametersDefinerForTP.h>

Inheritance diagram for CosmicParametersDefinerForTP:
ParametersDefinerForTP

List of all members.

Public Member Functions

 CosmicParametersDefinerForTP ()
void initEvent (edm::Handle< SimHitTPAssociationProducer::SimHitTPAssociationList > simHitsTPAssocToSet) const
virtual TrackingParticle::Vector momentum (const edm::Event &iEvent, const edm::EventSetup &iSetup, const Charge ch, const Point &vertex, const LorentzVector &lv) const
virtual TrackingParticle::Vector momentum (const edm::Event &iEvent, const edm::EventSetup &iSetup, const TrackingParticleRef tpr) const
virtual TrackingParticle::Point vertex (const edm::Event &iEvent, const edm::EventSetup &iSetup, const Charge ch, const Point &vertex, const LorentzVector &lv) const
virtual TrackingParticle::Point vertex (const edm::Event &iEvent, const edm::EventSetup &iSetup, const TrackingParticleRef tpr) const
virtual ~CosmicParametersDefinerForTP ()

Private Attributes

edm::Handle
< SimHitTPAssociationProducer::SimHitTPAssociationList
simHitsTPAssoc

Detailed Description

Author:
Boris Mangano (UCSD) 5/7/2009

Definition at line 13 of file CosmicParametersDefinerForTP.h.


Constructor & Destructor Documentation

CosmicParametersDefinerForTP::CosmicParametersDefinerForTP ( ) [inline]

Definition at line 16 of file CosmicParametersDefinerForTP.h.

{};
virtual CosmicParametersDefinerForTP::~CosmicParametersDefinerForTP ( ) [inline, virtual]

Definition at line 17 of file CosmicParametersDefinerForTP.h.

{};

Member Function Documentation

void CosmicParametersDefinerForTP::initEvent ( edm::Handle< SimHitTPAssociationProducer::SimHitTPAssociationList simHitsTPAssocToSet) const [inline, virtual]

Reimplemented from ParametersDefinerForTP.

Definition at line 32 of file CosmicParametersDefinerForTP.h.

References simHitsTPAssoc.

                                                                                                          {
    simHitsTPAssoc = simHitsTPAssocToSet;
  }
TrackingParticle::Vector CosmicParametersDefinerForTP::momentum ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const TrackingParticleRef  tpr 
) const [virtual]

Reimplemented from ParametersDefinerForTP.

Definition at line 23 of file CosmicParametersDefinerForTP.cc.

References newFWLiteAna::found, edm::EventSetup::get(), edm::Event::getByLabel(), edm::HandleBase::isValid(), TrajectoryStateClosestToBeamLine::isValid(), FreeTrajectoryState::momentum(), AlCaHLTBitMon_ParallelJobs::p, PV3DBase< T, PVType, FrameType >::perp(), CosmicsPD_Skims::radius, L1Trigger_dataformats::reco, simHitsTPAssoc, SimHitTPAssociationProducer::simHitTPAssociationListGreater(), GeomDet::surface(), Surface::toGlobal(), patCandidatesForDimuonsSequences_cff::tracker, TrajectoryStateClosestToBeamLine::trackStateAtPCA(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

                                                                                                                               {
  // to add a new implementation for cosmic. For the moment, it is just as for the base class:
  using namespace edm;
  using namespace std;
  using namespace reco;

  ESHandle<TrackerGeometry> tracker;
  iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
  
  edm::ESHandle<MagneticField> theMF;
  iSetup.get<IdealMagneticFieldRecord>().get(theMF);
  
  edm::Handle<reco::BeamSpot> bs;
  iEvent.getByLabel(InputTag("offlineBeamSpot"),bs);

  // cout<<"TrackingParticle pdgId = "<<tpr->pdgId()<<endl;
  // cout<<"with tpr->vertex(): ("<<tpr->vertex().x()<<", "<<tpr->vertex().y()<<", "<<tpr->vertex().z()<<")"<<endl;
  // cout<<"with tpr->momentum(): ("<<tpr->momentum().x()<<", "<<tpr->momentum().y()<<", "<<tpr->momentum().z()<<")"<<endl;
  
  GlobalVector finalGV;
  GlobalPoint finalGP;
  double radius(9999);
  bool found(0);
  TrackingParticle::Vector momentum(0,0,0);

  if (simHitsTPAssoc.isValid()==0) {
    LogError("TrackAssociation") << "Invalid handle!";
    return momentum;
  }
  std::pair<TrackingParticleRef, TrackPSimHitRef> clusterTPpairWithDummyTP(tpr,TrackPSimHitRef());//SimHit is dummy: for simHitTPAssociationListGreater 
                                                                                                 // sorting only the cluster is needed
  auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(), 
                                clusterTPpairWithDummyTP, SimHitTPAssociationProducer::simHitTPAssociationListGreater);
  for(auto ip = range.first; ip != range.second; ++ip) {
    TrackPSimHitRef it = ip->second;
    const GeomDet* tmpDet  = tracker->idToDet( DetId(it->detUnitId()) ) ;
    LocalVector  lv = it->momentumAtEntry();
    Local3DPoint lp = it->localPosition ();
    GlobalVector gv = tmpDet->surface().toGlobal( lv );
    GlobalPoint  gp = tmpDet->surface().toGlobal( lp );
    if(gp.perp()<radius){
      found=true;
      radius = gp.perp();
      finalGV = gv;
      finalGP = gp;
    }
  }

  //cout<<"found = "<<found<<endl;
  // cout<<"Closest Hit Position: ("<<finalGP.x()<<", "<<finalGP.y()<<", "<<finalGP.z()<<")"<<endl;
  //cout<<"Momentum at Closest Hit to BL: ("<<finalGV.x()<<", "<<finalGV.y()<<", "<<finalGV.z()<<")"<<endl;

  if(found) 
    {
      FreeTrajectoryState ftsAtProduction(finalGP,finalGV,TrackCharge(tpr->charge()),theMF.product());
      TSCBLBuilderNoMaterial tscblBuilder;
      TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(ftsAtProduction,*bs);//as in TrackProducerAlgorithm
      if(tsAtClosestApproach.isValid()){
        GlobalVector p = tsAtClosestApproach.trackStateAtPCA().momentum();
        momentum = TrackingParticle::Vector(p.x(), p.y(), p.z());
      }
      return momentum;
    }
  return momentum;
}
virtual TrackingParticle::Vector CosmicParametersDefinerForTP::momentum ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const Charge  ch,
const Point vertex,
const LorentzVector lv 
) const [inline, virtual]

Reimplemented from ParametersDefinerForTP.

Definition at line 22 of file CosmicParametersDefinerForTP.h.

                                                                              {
    return TrackingParticle::Vector();
  }
virtual TrackingParticle::Point CosmicParametersDefinerForTP::vertex ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const Charge  ch,
const Point vertex,
const LorentzVector lv 
) const [inline, virtual]

Reimplemented from ParametersDefinerForTP.

Definition at line 27 of file CosmicParametersDefinerForTP.h.

                                                                              {
    return TrackingParticle::Point();
  }
TrackingParticle::Point CosmicParametersDefinerForTP::vertex ( const edm::Event iEvent,
const edm::EventSetup iSetup,
const TrackingParticleRef  tpr 
) const [virtual]

Definition at line 89 of file CosmicParametersDefinerForTP.cc.

References newFWLiteAna::found, edm::EventSetup::get(), edm::Event::getByLabel(), edm::HandleBase::isValid(), TrajectoryStateClosestToBeamLine::isValid(), PV3DBase< T, PVType, FrameType >::perp(), FreeTrajectoryState::position(), CosmicsPD_Skims::radius, L1Trigger_dataformats::reco, simHitsTPAssoc, SimHitTPAssociationProducer::simHitTPAssociationListGreater(), GeomDet::surface(), Surface::toGlobal(), patCandidatesForDimuonsSequences_cff::tracker, TrajectoryStateClosestToBeamLine::trackStateAtPCA(), findQualityFiles::v, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

                                                                                                                                                  {
  
  using namespace edm;
  using namespace std;
  using namespace reco;

  ESHandle<TrackerGeometry> tracker;
  iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
  
  edm::ESHandle<MagneticField> theMF;
  iSetup.get<IdealMagneticFieldRecord>().get(theMF);
  
  edm::Handle<reco::BeamSpot> bs;
  iEvent.getByLabel(InputTag("offlineBeamSpot"),bs);

  GlobalVector finalGV;
  GlobalPoint finalGP;
  double radius(9999);
  bool found(0);
  TrackingParticle::Point vertex(0,0,0);

  if (simHitsTPAssoc.isValid()==0) {
    LogError("TrackAssociation") << "Invalid handle!";
    return vertex;
  }
  std::pair<TrackingParticleRef, TrackPSimHitRef> clusterTPpairWithDummyTP(tpr,TrackPSimHitRef());//SimHit is dummy: for simHitTPAssociationListGreater 
                                                                                                 // sorting only the cluster is needed
  auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(), 
                                clusterTPpairWithDummyTP, SimHitTPAssociationProducer::simHitTPAssociationListGreater);
  for(auto ip = range.first; ip != range.second; ++ip) {
    TrackPSimHitRef it = ip->second;
    const GeomDet* tmpDet  = tracker->idToDet( DetId(it->detUnitId()) ) ;
    LocalVector  lv = it->momentumAtEntry();
    Local3DPoint lp = it->localPosition ();
    GlobalVector gv = tmpDet->surface().toGlobal( lv );
    GlobalPoint  gp = tmpDet->surface().toGlobal( lp );
    if(gp.perp()<radius){
      found=true;
      radius = gp.perp();
      finalGV = gv;
      finalGP = gp;
    }
  }
  if(found)
    {
      FreeTrajectoryState ftsAtProduction(finalGP,finalGV,TrackCharge(tpr->charge()),theMF.product());
      TSCBLBuilderNoMaterial tscblBuilder;
      TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(ftsAtProduction,*bs);//as in TrackProducerAlgorithm
      if(tsAtClosestApproach.isValid()){
        GlobalPoint v = tsAtClosestApproach.trackStateAtPCA().position();
        vertex = TrackingParticle::Point(v.x()-bs->x0(),v.y()-bs->y0(),v.z()-bs->z0());
      }
      return vertex;
    }
  return vertex;
}

Member Data Documentation

Definition at line 37 of file CosmicParametersDefinerForTP.h.

Referenced by initEvent(), momentum(), and vertex().