CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/TrackingTools/Producers/src/BeamHaloPropagatorESProducer.cc

Go to the documentation of this file.
00001 
00007 #include "TrackingTools/Producers/interface/BeamHaloPropagatorESProducer.h"
00008 
00009 #include "FWCore/Framework/interface/EventSetup.h"
00010 #include "FWCore/Framework/interface/ESHandle.h"
00011 #include "DataFormats/Common/interface/Handle.h"
00012 #include "FWCore/Framework/interface/ModuleFactory.h"
00013 #include "FWCore/Utilities/interface/Exception.h"
00014 
00015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00016 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
00017 
00018 #include "MagneticField/Engine/interface/MagneticField.h"
00019 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00020 
00021 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00022     
00023 using namespace edm;
00024 using namespace std;
00025     
00026 BeamHaloPropagatorESProducer::BeamHaloPropagatorESProducer(const ParameterSet& parameterSet) 
00027 {
00028   myname = parameterSet.getParameter<string>("ComponentName");
00029 
00030   string propDir = parameterSet.getParameter<string>("PropagationDirection");
00031   
00032   if (propDir == "oppositeToMomentum") thePropagationDirection = oppositeToMomentum;
00033   else if (propDir == "alongMomentum") thePropagationDirection = alongMomentum;
00034   else if (propDir == "anyDirection") thePropagationDirection = anyDirection;
00035   else
00036     throw cms::Exception("BeamHaloPropagatorESProducer") 
00037       << "Wrong fit direction ("<< propDir <<")chosen in BeamHaloPropagatorESProducer";
00038 
00039   theEndCapTrackerPropagatorName = parameterSet.getParameter<string>("EndCapTrackerPropagator");
00040   theCrossingTrackerPropagatorName = parameterSet.getParameter<string>("CrossingTrackerPropagator");
00041 
00042   setWhatProduced(this,myname);
00043 }
00044 
00045 BeamHaloPropagatorESProducer::~BeamHaloPropagatorESProducer() {}
00046 
00047 boost::shared_ptr<Propagator> 
00048 BeamHaloPropagatorESProducer::produce(const TrackingComponentsRecord& iRecord){ 
00049 
00050   ESHandle<MagneticField> magField;
00051   iRecord.getRecord<IdealMagneticFieldRecord>().get(magField);
00052   
00053   ESHandle<Propagator> endcapPropagator;
00054   iRecord.get(theEndCapTrackerPropagatorName,endcapPropagator);
00055 
00056   ESHandle<Propagator> crossPropagator;
00057   iRecord.get(theCrossingTrackerPropagatorName,crossPropagator);
00058   
00059   LogDebug("BeamHaloPropagator")<<"Creating a BeamHaloPropagator: "<<myname
00060                                 <<"\n with EndCap Propagator: "<<theEndCapTrackerPropagatorName
00061                                 <<"\n with Crossing Propagator: "<<theCrossingTrackerPropagatorName;
00062 
00063   thePropagator  = boost::shared_ptr<Propagator>(new BeamHaloPropagator(*endcapPropagator,*crossPropagator,
00064                                                                         &*magField,
00065                                                                         thePropagationDirection));
00066   return thePropagator;
00067 }