Go to the documentation of this file.00001 #include "RecoLocalTracker/SiStripRecHitConverter/plugins/StripCPEESProducer.h"
00002 #include "RecoLocalTracker/SiStripRecHitConverter/interface/StripCPE.h"
00003 #include "RecoLocalTracker/SiStripRecHitConverter/interface/StripCPEfromTrackAngle.h"
00004 #include "RecoLocalTracker/SiStripRecHitConverter/interface/StripCPEfromTemplate.h"
00005 #include "RecoLocalTracker/SiStripRecHitConverter/interface/StripCPEgeometric.h"
00006 #include "CondFormats/SiStripObjects/interface/SiStripConfObject.h"
00007 #include "CondFormats/SiStripObjects/interface/SiStripLatency.h"
00008 #include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
00009 #include "CondFormats/SiStripObjects/interface/SiStripApvGain.h"
00010 #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h"
00011 #include "FWCore/Framework/interface/ESHandle.h"
00012
00013 StripCPEESProducer::StripCPEESProducer(const edm::ParameterSet & p)
00014 {
00015 std::string name = p.getParameter<std::string>("ComponentName");
00016 std::string type=name;
00017 if (!p.exists("ComponentType"))
00018 edm::LogWarning("StripCPEESProducer")<<" the CPE producer should contain a ComponentType, probably identical to ComponentName in the first step of migration. Falling back to:"<<type;
00019 else
00020 type=p.getParameter<std::string>("ComponentType");
00021
00022 enumMap[std::string("SimpleStripCPE")]=SIMPLE;
00023 enumMap[std::string("StripCPEfromTrackAngle")]=TRACKANGLE;
00024 enumMap[std::string("StripCPEgeometric")]=GEOMETRIC;
00025 enumMap[std::string("StripCPEfromTemplate")]=TEMPLATE;
00026 if(enumMap.find(type)==enumMap.end())
00027 throw cms::Exception("Unknown StripCPE type") << type;
00028
00029 cpeNum = enumMap[type];
00030 pset = p;
00031 setWhatProduced(this,name);
00032 }
00033
00034 boost::shared_ptr<StripClusterParameterEstimator> StripCPEESProducer::
00035 produce(const TkStripCPERecord & iRecord)
00036 {
00037 edm::ESHandle<TrackerGeometry> pDD; iRecord.getRecord<TrackerDigiGeometryRecord>().get( pDD );
00038 edm::ESHandle<MagneticField> magfield; iRecord.getRecord<IdealMagneticFieldRecord>().get(magfield );
00039 edm::ESHandle<SiStripLorentzAngle> lorentzAngle;
00040 iRecord.getRecord<SiStripLorentzAngleDepRcd>().get(lorentzAngle);
00041 edm::ESHandle<SiStripConfObject> confObj; iRecord.getRecord<SiStripConfObjectRcd>().get(confObj);
00042 edm::ESHandle<SiStripLatency> latency; iRecord.getRecord<SiStripLatencyRcd>().get(latency);
00043 edm::ESHandle<SiStripNoises> noise; iRecord.getRecord<SiStripNoisesRcd>().get(noise);
00044 edm::ESHandle<SiStripApvGain> gain; iRecord.getRecord<SiStripApvGainRcd>().get(gain);
00045 edm::ESHandle<SiStripBadStrip> bad; iRecord.getRecord<SiStripBadChannelRcd>().get(bad);
00046
00047
00048 switch(cpeNum) {
00049
00050 case SIMPLE:
00051 cpe = boost::shared_ptr<StripClusterParameterEstimator>(new StripCPE( pset, *magfield, *pDD, *lorentzAngle, *confObj, *latency ));
00052 break;
00053
00054 case TRACKANGLE:
00055 cpe = boost::shared_ptr<StripClusterParameterEstimator>(new StripCPEfromTrackAngle( pset, *magfield, *pDD, *lorentzAngle, *confObj, *latency ));
00056 break;
00057
00058 case GEOMETRIC:
00059 cpe = boost::shared_ptr<StripClusterParameterEstimator>(new StripCPEgeometric(pset, *magfield, *pDD, *lorentzAngle, *confObj, *latency ));
00060 break;
00061
00062 case TEMPLATE:
00063 cpe = boost::shared_ptr<StripClusterParameterEstimator>(new StripCPEfromTemplate( pset, *magfield, *pDD, *lorentzAngle, *confObj, *latency ));
00064 break;
00065
00066
00067 }
00068
00069 return cpe;
00070 }