CMS 3D CMS Logo

ReferenceTrajectoryFactory.cc

Go to the documentation of this file.
00001 #include "FWCore/Framework/interface/ESHandle.h"
00002 #include "FWCore/Framework/interface/EventSetup.h"
00003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00005 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" 
00006 #include "Alignment/ReferenceTrajectories/interface/TrajectoryFactoryPlugin.h"
00007 // Do not include .h from plugin directory, but locally:
00008 #include "ReferenceTrajectoryFactory.h"
00009 #include "Alignment/ReferenceTrajectories/interface/ReferenceTrajectory.h" 
00010 
00011 
00012 ReferenceTrajectoryFactory::ReferenceTrajectoryFactory( const edm::ParameterSet & config ) :
00013   TrajectoryFactoryBase( config )
00014 {
00015   theMass = config.getParameter< double >( "ParticleMass" );
00016 }
00017 
00018  
00019 ReferenceTrajectoryFactory::~ReferenceTrajectoryFactory( void ) {}
00020 
00021 
00022 const ReferenceTrajectoryFactory::ReferenceTrajectoryCollection
00023 ReferenceTrajectoryFactory::trajectories( const edm::EventSetup & setup,
00024                                           const ConstTrajTrackPairCollection & tracks ) const
00025 {
00026   ReferenceTrajectoryCollection trajectories;
00027 
00028   edm::ESHandle< MagneticField > magneticField;
00029   setup.get< IdealMagneticFieldRecord >().get( magneticField );
00030 
00031   ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin();
00032 
00033   while ( itTracks != tracks.end() )
00034   { 
00035     TrajectoryInput input = this->innermostStateAndRecHits( *itTracks );
00036     // Check input: If all hits were rejected, the TSOS is initialized as invalid.
00037     if ( input.first.isValid() )
00038     {
00039       // set the flag for reversing the RecHits to false, since they are already in the correct order.
00040       trajectories.push_back(ReferenceTrajectoryPtr(new ReferenceTrajectory(input.first, input.second, false,
00041                                                                             magneticField.product(), materialEffects(),
00042                                                                             propagationDirection(), theMass)));
00043     }
00044 
00045     ++itTracks;
00046   }
00047 
00048   return trajectories;
00049 }
00050 
00051 
00052 const ReferenceTrajectoryFactory::ReferenceTrajectoryCollection
00053 ReferenceTrajectoryFactory::trajectories( const edm::EventSetup & setup,
00054                                           const ConstTrajTrackPairCollection& tracks,
00055                                           const ExternalPredictionCollection& external ) const
00056 {
00057   ReferenceTrajectoryCollection trajectories;
00058 
00059   if ( tracks.size() != external.size() )
00060   {
00061     edm::LogInfo("ReferenceTrajectories") << "@SUB=ReferenceTrajectoryFactory::trajectories"
00062                                           << "Inconsistent input:\n"
00063                                           << "\tnumber of tracks = " << tracks.size()
00064                                           << "\tnumber of external predictions = " << external.size();
00065     return trajectories;
00066   }
00067 
00068   edm::ESHandle< MagneticField > magneticField;
00069   setup.get< IdealMagneticFieldRecord >().get( magneticField );
00070 
00071   ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin();
00072   ExternalPredictionCollection::const_iterator itExternal = external.begin();
00073 
00074   while ( itTracks != tracks.end() )
00075   {
00076     TrajectoryInput input = innermostStateAndRecHits( *itTracks );
00077     // Check input: If all hits were rejected, the TSOS is initialized as invalid.
00078     if ( input.first.isValid() )
00079     {
00080       if ( (*itExternal).isValid() && sameSurface( (*itExternal).surface(), input.first.surface() ) )
00081       {
00082         // set the flag for reversing the RecHits to false, since they are already in the correct order.
00083         ReferenceTrajectoryPtr refTraj( new ReferenceTrajectory( *itExternal, input.second, false,
00084                                                                  magneticField.product(), materialEffects(),
00085                                                                  propagationDirection(), theMass) );
00086 
00087         AlgebraicSymMatrix externalParamErrors( asHepMatrix<5>( (*itExternal).localError().matrix() ) );
00088         refTraj->setParameterErrors( externalParamErrors );
00089 
00090         trajectories.push_back( refTraj );
00091       }
00092       else
00093       {
00094         trajectories.push_back(ReferenceTrajectoryPtr(new ReferenceTrajectory(input.first, input.second, false,
00095                                                                               magneticField.product(), materialEffects(),
00096                                                                               propagationDirection(), theMass)));
00097       }
00098     }
00099 
00100     ++itTracks;
00101     ++itExternal;
00102   }
00103 
00104   return trajectories;
00105 }
00106 
00107 
00108 DEFINE_EDM_PLUGIN( TrajectoryFactoryPlugin, ReferenceTrajectoryFactory, "ReferenceTrajectoryFactory" );

Generated on Tue Jun 9 17:24:59 2009 for CMSSW by  doxygen 1.5.4