CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

TrackTransformerForCosmicMuons Class Reference

#include <TrackTransformerForCosmicMuons.h>

Inheritance diagram for TrackTransformerForCosmicMuons:
TrackTransformerBase

List of all members.

Public Member Functions

edm::ESHandle< TrajectoryFitterfitter (bool, int, float) const
 the refitter used to refit the reco::Track
TransientTrackingRecHit::ConstRecHitContainer getTransientRecHits (const reco::TransientTrack &track) const
const MagneticFieldmagneticField () const
 the magnetic field
virtual void setServices (const edm::EventSetup &)
 set the services needed by the TrackTransformer
bool SlopeSum (const TransientTrackingRecHit::ConstRecHitContainer &) const
 calculate the sum of slopes for the track
edm::ESHandle< TrajectorySmoothersmoother (bool, int, float) const
 the smoother used to smooth the trajectory which came from the refitting step
float SumDy (const TransientTrackingRecHit::ConstRecHitContainer &) const
 decide if the track should be reversed
edm::ESHandle
< GlobalTrackingGeometry
trackingGeometry () const
 the tracking geometry
 TrackTransformerForCosmicMuons (const edm::ParameterSet &)
 Constructor.
virtual std::vector< Trajectorytransform (const reco::Track &) const
 Convert a reco::Track into Trajectory.
virtual ~TrackTransformerForCosmicMuons ()
 Destructor.

Private Member Functions

edm::ESHandle< Propagatorpropagator (bool, int, float) const

Private Attributes

unsigned long long theCacheId_GTG
unsigned long long theCacheId_MG
unsigned long long theCacheId_TC
unsigned long long theCacheId_TRH
edm::ESHandle< TrajectoryFittertheFitterIO
edm::ESHandle< TrajectoryFittertheFitterOI
edm::ESHandle< MagneticFieldtheMGField
edm::ESHandle
< TransientTrackingRecHitBuilder
theMuonRecHitBuilder
std::string theMuonRecHitBuilderName
edm::ESHandle< PropagatorthePropagatorIO
edm::ESHandle< PropagatorthePropagatorOI
bool theRPCInTheFit
edm::ESHandle< TrajectorySmoothertheSmootherIO
edm::ESHandle< TrajectorySmoothertheSmootherOI
edm::ESHandle
< TransientTrackingRecHitBuilder
theTrackerRecHitBuilder
std::string theTrackerRecHitBuilderName
edm::ESHandle
< GlobalTrackingGeometry
theTrackingGeometry

Detailed Description

Definition at line 48 of file TrackTransformerForCosmicMuons.h.


Constructor & Destructor Documentation

TrackTransformerForCosmicMuons::TrackTransformerForCosmicMuons ( const edm::ParameterSet parameterSet)

Constructor.

Definition at line 36 of file TrackTransformerForCosmicMuons.cc.

References edm::ParameterSet::getParameter().

                                                                                              {
  
  theTrackerRecHitBuilderName = parameterSet.getParameter<string>("TrackerRecHitBuilder");
  theMuonRecHitBuilderName = parameterSet.getParameter<string>("MuonRecHitBuilder");

  theRPCInTheFit = parameterSet.getParameter<bool>("RefitRPCHits");

  theCacheId_TC = theCacheId_GTG = theCacheId_MG = theCacheId_TRH = 0;
}
TrackTransformerForCosmicMuons::~TrackTransformerForCosmicMuons ( ) [virtual]

Destructor.

Definition at line 47 of file TrackTransformerForCosmicMuons.cc.

{}

Member Function Documentation

ESHandle< TrajectoryFitter > TrackTransformerForCosmicMuons::fitter ( bool  up,
int  quad,
float  sumy 
) const

the refitter used to refit the reco::Track

Definition at line 185 of file TrackTransformerForCosmicMuons.cc.

                                                                                                    {
  if(quad ==1) {if (sumy < 0) return theFitterOI; else return theFitterIO;}
  if(quad ==2) {if (sumy < 0) return theFitterOI; else return theFitterIO;}
  if(quad ==3) {if (sumy > 0) return theFitterOI; else return theFitterIO;}
  if(quad ==4) {if (sumy > 0) return theFitterOI; else return theFitterIO;}

  if(up) return theFitterOI;
  else return theFitterIO;
}
TransientTrackingRecHit::ConstRecHitContainer TrackTransformerForCosmicMuons::getTransientRecHits ( const reco::TransientTrack track) const

if ( quad1 && slopeSum < 0) printout = true;

if ( quad3 && slopeSum > 0) printout = true; if ( quad4 && slopeSum < 0) printout = true;

Definition at line 96 of file TrackTransformerForCosmicMuons.cc.

References filterCSVwithJSON::copy, CSC(), CSCDetId, DetId::det(), GeomDetEnumerators::DT, LogTrace, DetId::Muon, reco::TransientTrack::recHitsBegin(), reco::TransientTrack::recHitsEnd(), dedefs::RPC, RPCDetId, DetId::subdetId(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

                                                                                         {

  TransientTrackingRecHit::ConstRecHitContainer tkHits;
  TransientTrackingRecHit::ConstRecHitContainer staHits;

  bool printout = false;
  
  bool quad1 = false;
  bool quad2 = false;
  bool quad3 = false;
  bool quad4 = false;

  for (trackingRecHit_iterator hit = track.recHitsBegin(); hit != track.recHitsEnd(); ++hit)
    if((*hit)->isValid())
      if ( (*hit)->geographicalId().det() == DetId::Muon ){
                if( (*hit)->geographicalId().subdetId() == 3 && !theRPCInTheFit){
                        LogTrace("Reco|TrackingTools|TrackTransformer") << "RPC Rec Hit discarged"; 
                        continue;
                }
                staHits.push_back(theMuonRecHitBuilder->build(&**hit));
        DetId hitId = staHits.back()->geographicalId();
        GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
                float gpy=glbpoint.y(); 
                float gpz=glbpoint.z(); 
//              if (gpy != 0 && gpz !=0) slopeSum += gpy / gpz;

                if (gpy > 0 && gpz > 0) quad1 = true; 
                else if (gpy > 0 && gpz < 0) quad2 = true; 
                else if (gpy < 0 && gpz < 0) quad3 = true; 
                else if (gpy < 0 && gpz > 0) quad4 = true; 
                else return tkHits;
      }

  if(staHits.empty()) return staHits;

  if (quad1 && quad2) return tkHits;
  if (quad1 && quad3) return tkHits;
  if (quad1 && quad4) return tkHits;
  if (quad2 && quad3) return tkHits;
  if (quad2 && quad4) return tkHits;
  if (quad3 && quad4) return tkHits;


  bool doReverse = staHits.front()->globalPosition().y()>0 ? true : false;

  if (quad1) doReverse = SlopeSum(staHits); 
  if (quad2) doReverse = SlopeSum(staHits); 
  if (quad3) doReverse = SlopeSum(staHits); 
  if (quad4) doReverse = SlopeSum(staHits); 
  if(doReverse){
    reverse(staHits.begin(),staHits.end());
  }

  copy(staHits.begin(),staHits.end(),back_inserter(tkHits));


//  if ( quad2 && slopeSum > 0) printout = true;
//  swap = printout;

  printout = quad1;  

  if (printout) for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator hit = tkHits.begin();
      hit !=tkHits.end(); ++hit){

    DetId hitId = (*hit)->geographicalId();
    GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();


    if(hitId.det() == DetId::Muon) {
      if(hitId.subdetId() == MuonSubdetId::DT)
                LogTrace("TrackFitters") << glbpoint << " I am DT " << DTWireId(hitId);
//              std::cout<< glbpoint << " I am DT " << DTWireId(hitId)<<std::endl;
      else if (hitId.subdetId() == MuonSubdetId::CSC )
                LogTrace("TrackFitters") << glbpoint << " I am CSC " << CSCDetId(hitId);
//              std::cout<< glbpoint << " I am CSC " << CSCDetId(hitId)<<std::endl;
      else if (hitId.subdetId() == MuonSubdetId::RPC )
                LogTrace("TrackFitters") << glbpoint << " I am RPC " << RPCDetId(hitId);
      else 
                LogTrace("TrackFitters") << " UNKNOWN MUON HIT TYPE ";
    } 
  } 
  return tkHits;
}
const MagneticField* TrackTransformerForCosmicMuons::magneticField ( ) const [inline]

the magnetic field

Definition at line 64 of file TrackTransformerForCosmicMuons.h.

References theMGField.

{return &*theMGField;}
ESHandle< Propagator > TrackTransformerForCosmicMuons::propagator ( bool  up,
int  quad,
float  sumy 
) const [private]

Definition at line 205 of file TrackTransformerForCosmicMuons.cc.

                                                                                                  {
  if(quad ==1) {if (sumy > 0) return thePropagatorOI; else return thePropagatorIO;}
  if(quad ==2) {if (sumy > 0) return thePropagatorOI; else return thePropagatorIO;}
  if(quad ==3) {if (sumy < 0) return thePropagatorOI; else return thePropagatorIO;}
  if(quad ==4) {if (sumy < 0) return thePropagatorOI; else return thePropagatorIO;}
  if(up) return thePropagatorIO;
  else return thePropagatorOI;
}
void TrackTransformerForCosmicMuons::setServices ( const edm::EventSetup setup) [virtual]

set the services needed by the TrackTransformer

Implements TrackTransformerBase.

Definition at line 50 of file TrackTransformerForCosmicMuons.cc.

References edm::EventSetup::get(), LogTrace, metname, and AlCaHLTBitMon_QueryRunRegistry::string.

                                                                       {
  
  const std::string metname = "Reco|TrackingTools|TrackTransformer";

  setup.get<TrajectoryFitter::Record>().get("KFFitterForRefitInsideOut",theFitterIO);
  setup.get<TrajectoryFitter::Record>().get("KFSmootherForRefitInsideOut",theSmootherIO);  
  setup.get<TrajectoryFitter::Record>().get("KFFitterForRefitOutsideIn",theFitterOI);
  setup.get<TrajectoryFitter::Record>().get("KFSmootherForRefitOutsideIn",theSmootherOI);

  unsigned long long newCacheId_TC = setup.get<TrackingComponentsRecord>().cacheIdentifier();

  if ( newCacheId_TC != theCacheId_TC ){
    LogTrace(metname) << "Tracking Component changed!";
    theCacheId_TC = newCacheId_TC;
    setup.get<TrackingComponentsRecord>().get("SmartPropagatorRK",thePropagatorIO);
    setup.get<TrackingComponentsRecord>().get("SmartPropagatorRKOpposite",thePropagatorOI);
  }

  // Global Tracking Geometry
  unsigned long long newCacheId_GTG = setup.get<GlobalTrackingGeometryRecord>().cacheIdentifier();
  if ( newCacheId_GTG != theCacheId_GTG ) {
    LogTrace(metname) << "GlobalTrackingGeometry changed!";
    theCacheId_GTG = newCacheId_GTG;
    setup.get<GlobalTrackingGeometryRecord>().get(theTrackingGeometry); 
  }
  
  // Magfield Field
  unsigned long long newCacheId_MG = setup.get<IdealMagneticFieldRecord>().cacheIdentifier();
  if ( newCacheId_MG != theCacheId_MG ) {
    LogTrace(metname) << "Magnetic Field changed!";
    theCacheId_MG = newCacheId_MG;
    setup.get<IdealMagneticFieldRecord>().get(theMGField);
  }
  
  // Transient Rechit Builders
  unsigned long long newCacheId_TRH = setup.get<TransientRecHitRecord>().cacheIdentifier();
  if ( newCacheId_TRH != theCacheId_TRH ) {
    theCacheId_TRH = newCacheId_TRH;
    LogTrace(metname) << "TransientRecHitRecord changed!";
    setup.get<TransientRecHitRecord>().get(theTrackerRecHitBuilderName,theTrackerRecHitBuilder);
    setup.get<TransientRecHitRecord>().get(theMuonRecHitBuilderName,theMuonRecHitBuilder);
  }
}
bool TrackTransformerForCosmicMuons::SlopeSum ( const TransientTrackingRecHit::ConstRecHitContainer tkHits) const

calculate the sum of slopes for the track

decide if the track should be reversed

Definition at line 351 of file TrackTransformerForCosmicMuons.cc.

References DetId::det(), alignCSCRings::e, first, DetId::Muon, DetId::subdetId(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

                                                                                                            {

        bool retval = false;
        float y1 = 0 ;
        float z1 = 0 ;

        bool first = true;

        std::vector<float> py;
        std::vector<float> pz;
//      int quadrant = -1;
        
        float sumdy = 0;
        float sumdz = 0;

        for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator hit = tkHits.begin();
      hit !=tkHits.end(); ++hit){

        DetId hitId = (*hit)->geographicalId();
        GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
        if ( hitId.det() != DetId::Muon || hitId.subdetId() == 3 )continue;

                float y2 = glbpoint.y();
                float z2 = glbpoint.z();
                float dslope = 0;
                float dy = y2 - y1;
                float dz = z2 - z1;

//              if (y2 > 0 && z2 > 0) quadrant = 1;
//              else if (y2 > 0 && z2 < 0) quadrant = 2;
//              else if (y2 < 0 && z2 < 0) quadrant = 3;
//              else if (y2 < 0 && z2 > 0) quadrant = 4;


                if (fabs(dz) > 1e-3) dslope = dy / dz;
                if ( !first) {
                        retval+=dslope; 
                        sumdy +=dy;
                        sumdz +=dz;
                }
                first = false;
                py.push_back(y1);
                pz.push_back(z1);
                y1 = y2;
                z1 = z2;
        }
//      std::cout<<"quadrant "<<quadrant;
//      std::cout<<"\tsum dy = "<<sumdy;
//      std::cout<<"\tsum dz = "<<sumdz;
//      std::cout<<std::endl;


        if ( sumdz < 0) retval = true;
        
        return retval;

}
ESHandle< TrajectorySmoother > TrackTransformerForCosmicMuons::smoother ( bool  up,
int  quad,
float  sumy 
) const

the smoother used to smooth the trajectory which came from the refitting step

Definition at line 196 of file TrackTransformerForCosmicMuons.cc.

                                                                                                        {
  if(quad ==1){ if (sumy < 0) return theSmootherOI; else return theSmootherIO;}
  if(quad ==2){ if (sumy < 0) return theSmootherOI; else return theSmootherIO;}
  if(quad ==3){ if (sumy > 0) return theSmootherOI; else return theSmootherIO;}
  if(quad ==4){ if (sumy > 0) return theSmootherOI; else return theSmootherIO;}
  if(up) return theSmootherOI;
  else return theSmootherIO;
}
float TrackTransformerForCosmicMuons::SumDy ( const TransientTrackingRecHit::ConstRecHitContainer tkHits) const

decide if the track should be reversed

Definition at line 411 of file TrackTransformerForCosmicMuons.cc.

References DetId::det(), alignCSCRings::e, first, DetId::Muon, DetId::subdetId(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

                                                                                                          {

        bool retval = false;
        float y1 = 0 ;
        float z1 = 0 ;

        bool first = true;

        std::vector<float> py;
        std::vector<float> pz;
//      int quadrant = -1;
        
        float sumdy = 0;
        float sumdz = 0;



        for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator hit = tkHits.begin();
      hit !=tkHits.end(); ++hit){

        DetId hitId = (*hit)->geographicalId();
        GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
        if ( hitId.det() != DetId::Muon || hitId.subdetId() == 3 )continue;

                float y2 = glbpoint.y();
                float z2 = glbpoint.z();
                float dslope = 0;
                float dy = y2 - y1;
                float dz = z2 - z1;

//              if (y2 > 0 && z2 > 0) quadrant = 1;
//              else if (y2 > 0 && z2 < 0) quadrant = 2;
//              else if (y2 < 0 && z2 < 0) quadrant = 3;
//              else if (y2 < 0 && z2 > 0) quadrant = 4;


                if (fabs(dz) > 1e-3) dslope = dy / dz;
                if ( !first) {
                        retval+=dslope; 
                        sumdy +=dy;
                        sumdz +=dz;
                }
                first = false;
                py.push_back(y1);
                pz.push_back(z1);
                y1 = y2;
                z1 = z2;
        }
//      std::cout<<"quadrant "<<quadrant;
//      std::cout<<"\tsum dy = "<<sumdy;
//      std::cout<<"\tsum dz = "<<sumdz;
//      std::cout<<std::endl;

        return sumdy;
}
edm::ESHandle<GlobalTrackingGeometry> TrackTransformerForCosmicMuons::trackingGeometry ( ) const [inline]

the tracking geometry

Definition at line 67 of file TrackTransformerForCosmicMuons.h.

References theTrackingGeometry.

vector< Trajectory > TrackTransformerForCosmicMuons::transform ( const reco::Track tr) const [virtual]

Convert a reco::Track into Trajectory.

Convert Tracks into Trajectories.

Implements TrackTransformerBase.

Definition at line 217 of file TrackTransformerForCosmicMuons.cc.

References alongMomentum, filterCSVwithJSON::copy, gather_cfg::cout, CSC(), CSCDetId, GeomDetEnumerators::DT, reco::TransientTrack::innermostMeasurementState(), LogTrace, metname, DetId::Muon, oppositeToMomentum, reco::TransientTrack::outermostMeasurementState(), LargeD0_PixelPairStep_cff::propagator, reco::TransientTrack::recHitsBegin(), reco::TransientTrack::recHitsEnd(), AlCaHLTBitMon_QueryRunRegistry::string, DetId::subdetId(), reco::TransientTrack::track(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

                                                                                      {

  const std::string metname = "Reco|TrackingTools|TrackTransformer";
  
  reco::TransientTrack track(tr,magneticField(),trackingGeometry());   

  // Build the transient Rechits
  TransientTrackingRecHit::ConstRecHitContainer recHitsForReFit;// = getTransientRecHits(track);
  TransientTrackingRecHit::ConstRecHitContainer staHits;


  bool quad1 = false;
  bool quad2 = false;
  bool quad3 = false;
  bool quad4 = false;
  int quadrant = 0;

  for (trackingRecHit_iterator hit = track.recHitsBegin(); hit != track.recHitsEnd(); ++hit)
    if((*hit)->isValid())
      if ( (*hit)->geographicalId().det() == DetId::Muon ){
                if( (*hit)->geographicalId().subdetId() == 3 && !theRPCInTheFit){
                        LogTrace("Reco|TrackingTools|TrackTransformer") << "RPC Rec Hit discarged"; 
                        continue;
                }
                staHits.push_back(theMuonRecHitBuilder->build(&**hit));
        DetId hitId = staHits.back()->geographicalId();
        GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
                float gpy=glbpoint.y(); 
                float gpz=glbpoint.z(); 
//              if (gpy != 0 && gpz !=0) slopeSum += gpy / gpz;

                if (gpy > 0 && gpz > 0)         {quad1 = true; quadrant = 1;}
                else if (gpy > 0 && gpz < 0){quad2 = true; quadrant = 2;}
                else if (gpy < 0 && gpz < 0){quad3 = true; quadrant = 3;}
                else if (gpy < 0 && gpz > 0){quad4 = true; quadrant = 4;}
                else return vector<Trajectory>();
      }


        if(staHits.empty()) return vector<Trajectory>();

        if (quad1 && quad2) return vector<Trajectory>();
        if (quad1 && quad3) return vector<Trajectory>();
        if (quad1 && quad4) return vector<Trajectory>();
        if (quad2 && quad3) return vector<Trajectory>();
        if (quad2 && quad4) return vector<Trajectory>();
        if (quad3 && quad4) return vector<Trajectory>();

        bool doReverse = false;

        if (quad1) doReverse = SlopeSum(staHits); 
        if (quad2) doReverse = SlopeSum(staHits); 
        if (quad3) doReverse = SlopeSum(staHits); 
        if (quad4) doReverse = SlopeSum(staHits); 


        if(doReverse){
        reverse(staHits.begin(),staHits.end());
        }

        copy(staHits.begin(),staHits.end(),back_inserter(recHitsForReFit));



  if(recHitsForReFit.size() < 2) return vector<Trajectory>();

  bool up = recHitsForReFit.back()->globalPosition().y()>0 ? true : false;
  LogTrace(metname) << "Up ? " << up;

  float sumdy = SumDy(recHitsForReFit);


  PropagationDirection propagationDirection = doReverse ? oppositeToMomentum : alongMomentum;
  TrajectoryStateOnSurface firstTSOS = doReverse ? track.outermostMeasurementState() : track.innermostMeasurementState();
  unsigned int innerId = doReverse ? track.track().outerDetId() : track.track().innerDetId();

  LogTrace(metname) << "Prop Dir: " << propagationDirection << " FirstId " << innerId << " firstTSOS " << firstTSOS;

  TrajectorySeed seed(PTrajectoryStateOnDet(),TrajectorySeed::recHitContainer(),propagationDirection);


  if(recHitsForReFit.front()->geographicalId() != DetId(innerId)){
    LogTrace(metname)<<"Propagation occurring"<<endl;
    firstTSOS = propagator(up, quadrant, sumdy)->propagate(firstTSOS, recHitsForReFit.front()->det()->surface());
    LogTrace(metname)<<"Final destination: " << recHitsForReFit.front()->det()->surface().position() << endl;
    if(!firstTSOS.isValid()){
                std::cout<<"Propagation error! Dumping RecHits..."<<std::endl;
                
                for(TransientTrackingRecHit::ConstRecHitContainer::const_iterator hit = recHitsForReFit.begin();
                hit !=recHitsForReFit.end(); ++hit){

                DetId hitId = (*hit)->geographicalId();
                GlobalPoint glbpoint = trackingGeometry()->idToDet(hitId)->position();
                if(hitId.subdetId() == MuonSubdetId::DT)
                        std::cout<< glbpoint << " I am DT " << DTWireId(hitId)<<std::endl;
                else if (hitId.subdetId() == MuonSubdetId::CSC )
                        std::cout<< glbpoint << " I am CSC " << CSCDetId(hitId)<<std::endl;
                } 


      LogTrace(metname)<<"Propagation error!"<<endl;
      return vector<Trajectory>();
    }
  }
  

  vector<Trajectory> trajectories = fitter(up, quadrant, sumdy)->fit(seed,recHitsForReFit,firstTSOS);
  
  if(trajectories.empty()){
    LogTrace(metname)<<"No Track refitted!"<<endl;
    return vector<Trajectory>();
  }
  
  Trajectory trajectoryBW = trajectories.front();
    
  vector<Trajectory> trajectoriesSM = smoother(up, quadrant, sumdy)->trajectories(trajectoryBW);

  if(trajectoriesSM.empty()){
    LogTrace(metname)<<"No Track smoothed!"<<endl;
    return vector<Trajectory>();
  }
  
  return trajectoriesSM;

}

Member Data Documentation

unsigned long long TrackTransformerForCosmicMuons::theCacheId_GTG [private]

Definition at line 95 of file TrackTransformerForCosmicMuons.h.

unsigned long long TrackTransformerForCosmicMuons::theCacheId_MG [private]

Definition at line 96 of file TrackTransformerForCosmicMuons.h.

unsigned long long TrackTransformerForCosmicMuons::theCacheId_TC [private]

Definition at line 94 of file TrackTransformerForCosmicMuons.h.

unsigned long long TrackTransformerForCosmicMuons::theCacheId_TRH [private]

Definition at line 97 of file TrackTransformerForCosmicMuons.h.

Definition at line 104 of file TrackTransformerForCosmicMuons.h.

Definition at line 105 of file TrackTransformerForCosmicMuons.h.

Definition at line 102 of file TrackTransformerForCosmicMuons.h.

Referenced by magneticField().

Definition at line 114 of file TrackTransformerForCosmicMuons.h.

Definition at line 113 of file TrackTransformerForCosmicMuons.h.

Definition at line 89 of file TrackTransformerForCosmicMuons.h.

Definition at line 90 of file TrackTransformerForCosmicMuons.h.

Definition at line 99 of file TrackTransformerForCosmicMuons.h.

Definition at line 107 of file TrackTransformerForCosmicMuons.h.

Definition at line 108 of file TrackTransformerForCosmicMuons.h.

Definition at line 111 of file TrackTransformerForCosmicMuons.h.

Definition at line 110 of file TrackTransformerForCosmicMuons.h.

Definition at line 101 of file TrackTransformerForCosmicMuons.h.

Referenced by trackingGeometry().