CMS 3D CMS Logo

Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes

JetTracksAssociationDRCalo Class Reference

#include <JetTracksAssociationDRCalo.h>

Inheritance diagram for JetTracksAssociationDRCalo:
JetTracksAssociationDR

List of all members.

Classes

struct  ImpactPoint
 Definition of track impact point. More...

Public Member Functions

void associateTracksToJet (reco::TrackRefVector &, const reco::Jet &, const TrackRefs &)
 Associate tracks to the given jet.
 JetTracksAssociationDRCalo (double dr_threshold)
 Constructor taking dR threshold as argument.
void produce (Association *, const JetRefs &, const TrackRefs &, const MagneticField &, const Propagator &)
 Associates tracks to jets.
void produce (Association *, const Jets &, const Tracks &, const TrackQuality &, const MagneticField &, const Propagator &)
 Associates tracks to jets (using Handles as input)
void propagateTracks (const TrackRefs &, const MagneticField &, const Propagator &)
 ~JetTracksAssociationDRCalo ()
 Destructor.

Static Public Member Functions

static math::XYZPoint propagateTrackToCalorimeter (const reco::Track &, const MagneticField &, const Propagator &)
 Propagates track to calorimeter face.

Private Member Functions

 JetTracksAssociationDRCalo ()
 Private default constructor.

Static Private Member Functions

static GlobalPoint propagateTrackToCalo (const reco::Track &, const MagneticField &, const Propagator &)
 Propagates track to calorimeter face.

Private Attributes

std::vector< ImpactPointpropagatedTracks_
 Impact points of tracks at calorimeter face.

Detailed Description

Definition at line 17 of file JetTracksAssociationDRCalo.h.


Constructor & Destructor Documentation

JetTracksAssociationDRCalo::JetTracksAssociationDRCalo ( double  dr_threshold) [explicit]

Constructor taking dR threshold as argument.

Definition at line 18 of file JetTracksAssociationDRCalo.cc.

JetTracksAssociationDRCalo::~JetTracksAssociationDRCalo ( )

Destructor.

Definition at line 25 of file JetTracksAssociationDRCalo.cc.

{;}
JetTracksAssociationDRCalo::JetTracksAssociationDRCalo ( ) [private]

Private default constructor.


Member Function Documentation

void JetTracksAssociationDRCalo::associateTracksToJet ( reco::TrackRefVector ,
const reco::Jet ,
const TrackRefs  
) [virtual]

Associate tracks to the given jet.

Implements JetTracksAssociationDR.

Definition at line 59 of file JetTracksAssociationDRCalo.cc.

References edm::RefVector< C, T, F >::clear(), Geom::deltaR2(), reco::LeafCandidate::eta(), JetTracksAssociationDR::mDeltaR2Threshold, reco::LeafCandidate::phi(), propagatedTracks_, and edm::RefVector< C, T, F >::push_back().

{
  associated.clear();
  std::vector<ImpactPoint>::const_iterator ii = propagatedTracks_.begin();
  std::vector<ImpactPoint>::const_iterator jj = propagatedTracks_.end();
  for ( ; ii != jj; ++ii ) {
    double dR2 = deltaR2( fJet.eta(), fJet.phi(), ii->eta, ii->phi );
    if ( dR2 < mDeltaR2Threshold ) { associated.push_back( fTracks[ii->index] ); }
  }
}
void JetTracksAssociationDRCalo::produce ( Association fAssociation,
const JetRefs fJets,
const TrackRefs fTracks,
const MagneticField fField,
const Propagator fPropagator 
)

Associates tracks to jets.

Definition at line 46 of file JetTracksAssociationDRCalo.cc.

References JetTracksAssociationDR::associateTracksToJets(), and propagateTracks().

{
  //clear();
  propagateTracks( fTracks, fField, fPropagator ); 
  associateTracksToJets( fAssociation, fJets, fTracks ); 
}
void JetTracksAssociationDRCalo::produce ( Association fAssociation,
const Jets fJets,
const Tracks fTracks,
const TrackQuality fQuality,
const MagneticField fField,
const Propagator fPropagator 
)

Associates tracks to jets (using Handles as input)

Definition at line 30 of file JetTracksAssociationDRCalo.cc.

References JetTracksAssociationDR::createJetRefs(), JetTracksAssociationDR::createTrackRefs(), analyzePatCleaning_cfg::jets, and testEve_cfg::tracks.

{
  JetRefs jets;
  createJetRefs( jets, fJets );
  TrackRefs tracks;
  createTrackRefs( tracks, fTracks, fQuality );
  produce( fAssociation, jets, tracks, fField, fPropagator );
}
void JetTracksAssociationDRCalo::propagateTracks ( const TrackRefs fTracks,
const MagneticField fField,
const Propagator fPropagator 
)

Definition at line 74 of file JetTracksAssociationDRCalo.cc.

References PV3DBase< T, PVType, FrameType >::barePhi(), JetTracksAssociationDRCalo::ImpactPoint::eta, PV3DBase< T, PVType, FrameType >::eta(), spr::goodTrack(), JetTracksAssociationDRCalo::ImpactPoint::index, PV3DBase< T, PVType, FrameType >::mag(), JetTracksAssociationDRCalo::ImpactPoint::phi, propagatedTracks_, and propagateTrackToCalo().

Referenced by produce().

{
  propagatedTracks_.clear();
  propagatedTracks_.reserve( fTracks.size() );
  TrackRefs::const_iterator ii = fTracks.begin();
  TrackRefs::const_iterator jj = fTracks.end();
  for ( ; ii != jj; ++ii ) {
    GlobalPoint impact = JetTracksAssociationDRCalo::propagateTrackToCalo( **ii, fField, fPropagator );
    if ( impact.mag() > 0 ) { //@@ successful extrapolation
      ImpactPoint goodTrack;
      goodTrack.index = ii - fTracks.begin(); //@@ index
      goodTrack.eta = impact.eta();
      goodTrack.phi = impact.barePhi();
      propagatedTracks_.push_back( goodTrack );
    }
  }
}
GlobalPoint JetTracksAssociationDRCalo::propagateTrackToCalo ( const reco::Track fTrack,
const MagneticField fField,
const Propagator fPropagator 
) [static, private]

Propagates track to calorimeter face.

Definition at line 106 of file JetTracksAssociationDRCalo.cc.

References Plane::build(), Cylinder::build(), reco::TrackBase::charge(), JetTracksAssociationDRCalo::ImpactPoint::eta, funct::exp(), reco::Track::extra(), TrajectoryStateOnSurface::globalPosition(), JetTracksAssociationDRCalo::ImpactPoint::index, TrajectoryStateOnSurface::isValid(), reco::Track::outerPx(), reco::Track::outerPy(), reco::Track::outerPz(), reco::Track::outerX(), reco::Track::outerY(), reco::Track::outerZ(), JetTracksAssociationDRCalo::ImpactPoint::phi, Propagator::propagate(), reco::TrackBase::px(), reco::TrackBase::py(), reco::TrackBase::pz(), query::result, funct::tan(), reco::btau::trackMomentum, reco::TrackBase::vx(), reco::TrackBase::vy(), and reco::TrackBase::vz().

Referenced by propagateTracks(), and propagateTrackToCalorimeter().

{
  
  // basic geometry constants, imported from Geometry/HcalTowerAlgo/src/CaloTowerHardcodeGeometryLoader.cc
  const double rBarrel = 129.;
  const double zEndcap = 320.;
  const double zVF = 1100.;
  const double rEndcapMin = zEndcap * tan ( 2*atan (exp (-3.)));
  const double rVFMin = zEndcap * tan ( 2*atan (exp (-5.191)));

  struct ImpactPoint {
    unsigned index;
    double eta;
    double phi;
  };
  
  GlobalPoint trackPosition (fTrack.vx(), fTrack.vy(), fTrack.vz()); // reference point
  GlobalVector trackMomentum (fTrack.px(), fTrack.py(), fTrack.pz()); // reference momentum
  if (fTrack.extra().isAvailable() ) { // use outer point information, if available
    trackPosition =  GlobalPoint (fTrack.outerX(), fTrack.outerY(), fTrack.outerZ());
    trackMomentum = GlobalVector (fTrack.outerPx(), fTrack.outerPy(), fTrack.outerPz());
  }
  //     std::cout << "propagateTrackToCalo-> start propagating track"
  //          << " x/y/z: " << trackPosition.x() << '/' << trackPosition.y() << '/' << trackPosition.z()
  //          << ", pt/eta/phi: " << trackMomentum.perp() << '/' << trackMomentum.eta() << '/' << trackMomentum.barePhi()
  //          << std::endl;
  GlobalTrajectoryParameters trackParams(trackPosition, trackMomentum, fTrack.charge(), &fField);
  FreeTrajectoryState trackState (trackParams);

  // first propagate to barrel
  TrajectoryStateOnSurface 
    propagatedInfo = fPropagator.propagate (trackState, 
                                            *Cylinder::build (Surface::PositionType (0,0,0),
                                                              Surface::RotationType(),
                                                              rBarrel)
                                            );
  if (propagatedInfo.isValid()) {
    GlobalPoint result (propagatedInfo.globalPosition ());
    if (fabs (result.z()) < zEndcap) {
      //        std::cout << "propagateTrackToCalo-> propagated to barrel:"
      //                  << " x/y/z/r: " << result.x() << '/' << result.y() << '/' << result.z() << '/' << result.perp()
      //                  << std::endl;
      return result;
    }
  }
    
  // failed with barrel, try endcap
  double zTarget = trackMomentum.z() > 0 ? zEndcap : -zEndcap;
  propagatedInfo = fPropagator.propagate (trackState, 
                                          *Plane::build( Surface::PositionType(0, 0, zTarget),
                                                         Surface::RotationType())
                                          );
  if (propagatedInfo.isValid()) {
    GlobalPoint result (propagatedInfo.globalPosition ());
    if (fabs (result.perp()) > rEndcapMin) {
      //        std::cout << "propagateTrackToCalo-> propagated to endcap:"
      //                  << " x/y/z/r: " << result.x() << '/' << result.y() << '/' << result.z() << '/' << result.perp()
      //                  << std::endl;
      return result;
    }
  }
  // failed with endcap, try VF
  zTarget = trackMomentum.z() > 0 ? zVF : -zVF;
  propagatedInfo = fPropagator.propagate (trackState, 
                                          *Plane::build( Surface::PositionType(0, 0, zTarget),
                                                         Surface::RotationType())
                                          );
  if (propagatedInfo.isValid()) {
    GlobalPoint result (propagatedInfo.globalPosition ());
    if (fabs (result.perp()) > rVFMin) {
      //        std::cout << "propagateTrackToCalo-> propagated to VF:"
      //                  << " x/y/z/r: " << result.x() << '/' << result.y() << '/' << result.z() << '/' << result.perp()
      //                  << std::endl;
      return result;
    }
  }
  // no luck
  //     std::cout << "propagateTrackToCalo-> failed to propagate track to calorimeter" << std::endl;
  return GlobalPoint (0, 0, 0);
}
math::XYZPoint JetTracksAssociationDRCalo::propagateTrackToCalorimeter ( const reco::Track fTrack,
const MagneticField fField,
const Propagator fPropagator 
) [static]

Member Data Documentation

Impact points of tracks at calorimeter face.

Definition at line 75 of file JetTracksAssociationDRCalo.h.

Referenced by associateTracksToJet(), and propagateTracks().