#include <CosmicMuonUtilities.h>
Public Member Functions | |
CosmicMuonUtilities () | |
bool | isTraversing (const Trajectory &) const |
std::string | print (const MuonRecHitContainer &) const |
std::string | print (const ConstRecHitContainer &) const |
std::string | print (const ConstMuonRecHitContainer &) const |
void | reverseDirection (TrajectoryStateOnSurface &, const MagneticField *) const |
TrajectoryStateOnSurface | stepPropagate (const TrajectoryStateOnSurface &, const ConstRecHitPointer &, const Propagator &) const |
virtual | ~CosmicMuonUtilities () |
Definition at line 29 of file CosmicMuonUtilities.h.
CosmicMuonUtilities::CosmicMuonUtilities | ( | ) |
Definition at line 24 of file CosmicMuonUtilities.cc.
{ }
CosmicMuonUtilities::~CosmicMuonUtilities | ( | ) | [virtual] |
Definition at line 31 of file CosmicMuonUtilities.cc.
{ }
bool CosmicMuonUtilities::isTraversing | ( | const Trajectory & | t | ) | const |
Definition at line 133 of file CosmicMuonUtilities.cc.
References PV3DBase< T, PVType, FrameType >::mag(), PV3DBase< T, PVType, FrameType >::perp(), Trajectory::recHits(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
{ TransientTrackingRecHit::ConstRecHitContainer hits = t.recHits(); if ( hits.empty() ) return false; ConstRecHitContainer::const_iterator frontHit = hits.begin(); ConstRecHitContainer::const_iterator backHit = hits.end() - 1; // find first valid hit at both ends of the trajectory while ( !(*frontHit)->isValid() && frontHit != backHit) {++frontHit;} while ( !(*backHit)->isValid() && backHit != frontHit) {--backHit;} if ( frontHit == backHit ) return false; GlobalPoint frontPos = (*frontHit)->globalPosition(); GlobalPoint backPos = (*backHit)->globalPosition(); // are there separate muon hits in 2 different hemispheres GlobalVector deltaPos(frontPos - backPos); if ( deltaPos.mag() < 100.0 ) return false; if ( fabs(deltaPos.z() ) > 500.0 ) return true; if ( deltaPos.perp() > 350.0 ) return true; GlobalPoint middle((frontPos.x()+backPos.x())/2, (frontPos.y()+backPos.y())/2, (frontPos.z()+backPos.z())/2); return ( (middle.perp() < frontPos.perp()) && (middle.perp() < backPos.perp()) ); }
string CosmicMuonUtilities::print | ( | const ConstMuonRecHitContainer & | hits | ) | const |
Definition at line 52 of file CosmicMuonUtilities.cc.
References convertSQLitetoXML_cfg::output, PV3DBase< T, PVType, FrameType >::perp(), and pos.
{ stringstream output; for (ConstMuonRecHitContainer::const_iterator ir = hits.begin(); ir != hits.end(); ir++ ) { if ( !(*ir)->isValid() ) { output << "invalid RecHit"<<endl; continue; } const GlobalPoint& pos = (*ir)->globalPosition(); output << "pos"<<pos << "radius "<<pos.perp() << " dim " << (*ir)->dimension() << " det " << (*ir)->det()->geographicalId().det() << " sub det " << (*ir)->det()->subDetector()<<endl; } return output.str(); }
string CosmicMuonUtilities::print | ( | const MuonRecHitContainer & | hits | ) | const |
Definition at line 79 of file CosmicMuonUtilities.cc.
References convertSQLitetoXML_cfg::output, PV3DBase< T, PVType, FrameType >::perp(), and pos.
{ stringstream output; for (MuonRecHitContainer::const_iterator ir = hits.begin(); ir != hits.end(); ir++ ) { if ( !(*ir)->isValid() ) { output << "invalid RecHit"<<endl; continue; } const GlobalPoint& pos = (*ir)->globalPosition(); output << "pos"<<pos << "radius "<<pos.perp() << " dim " << (*ir)->dimension() << " det " << (*ir)->det()->geographicalId().det() << " sub det " << (*ir)->det()->subDetector()<<endl; } return output.str(); }
string CosmicMuonUtilities::print | ( | const ConstRecHitContainer & | hits | ) | const |
Definition at line 106 of file CosmicMuonUtilities.cc.
References convertSQLitetoXML_cfg::output, PV3DBase< T, PVType, FrameType >::perp(), and pos.
{ stringstream output; for (TransientTrackingRecHit::ConstRecHitContainer::const_iterator ir = hits.begin(); ir != hits.end(); ir++ ) { if ( !(*ir)->isValid() ) { output << "invalid RecHit"<<endl; continue; } const GlobalPoint& pos = (*ir)->globalPosition(); output << "pos"<<pos << "radius "<<pos.perp() << " dim " << (*ir)->dimension() << " det " << (*ir)->det()->geographicalId().det() << " sub det " << (*ir)->det()->subDetector()<<endl; } return output.str(); }
void CosmicMuonUtilities::reverseDirection | ( | TrajectoryStateOnSurface & | tsos, |
const MagneticField * | mgfield | ||
) | const |
Definition at line 35 of file CosmicMuonUtilities.cc.
References TrajectoryStateOnSurface::cartesianError(), TrajectoryStateOnSurface::charge(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), and TrajectoryStateOnSurface::surface().
Referenced by CosmicMuonTrajectoryBuilder::estimateDirection(), CosmicMuonTrajectoryBuilder::flipTrajectory(), and CosmicMuonSmoother::initialState().
{ GlobalTrajectoryParameters gtp(tsos.globalPosition(), -tsos.globalMomentum(), -tsos.charge(), mgfield); TrajectoryStateOnSurface newTsos(gtp, tsos.cartesianError(), tsos.surface()); tsos = newTsos; return; }
TrajectoryStateOnSurface CosmicMuonUtilities::stepPropagate | ( | const TrajectoryStateOnSurface & | tsos, |
const ConstRecHitPointer & | hit, | ||
const Propagator & | prop | ||
) | const |
Definition at line 168 of file CosmicMuonUtilities.cc.
References alignmentValidation::dest, TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::isValid(), LogTrace, PV3DBase< T, PVType, FrameType >::mag(), metname, PlaneBuilder::plane(), pos, Propagator::propagate(), cmsPerfSuiteHarvest::steps, Vector3DBase< T, FrameTag >::unit(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by CosmicMuonSmoother::fit(), and CosmicMuonSmoother::smooth().
{ const std::string metname = "Muon|RecoMuon|CosmicMuonUtilities"; GlobalPoint start = tsos.globalPosition(); GlobalPoint dest = hit->globalPosition(); GlobalVector StepVector = dest - start; GlobalVector UnitStepVector = StepVector.unit(); GlobalPoint GP =start; TrajectoryStateOnSurface currTsos(tsos); TrajectoryStateOnSurface predTsos; float totalDis = StepVector.mag(); LogTrace(metname)<<"stepPropagate: propagate from: "<<start<<" to "<<dest; LogTrace(metname)<<"stepPropagate: their distance: "<<totalDis; int steps = 3; // need to optimize float oneStep = totalDis/steps; Basic3DVector<float> Basic3DV(StepVector.x(),StepVector.y(),StepVector.z()); for ( int istep = 0 ; istep < steps - 1 ; istep++) { GP += oneStep*UnitStepVector; Surface::PositionType pos(GP.x(),GP.y(),GP.z()); LogTrace(metname)<<"stepPropagate: a middle plane: "<<pos<<endl; Surface::RotationType rot( Basic3DV , float(0)); PlaneBuilder::ReturnType SteppingPlane = PlaneBuilder().plane(pos,rot); TrajectoryStateOnSurface predTsos = prop.propagate(currTsos, *SteppingPlane); if (predTsos.isValid()) { currTsos=predTsos; LogTrace(metname)<<"stepPropagate: middle state "<< currTsos.globalPosition()<<endl; } } predTsos = prop.propagate(currTsos, hit->det()->surface()); return predTsos; }