00001 00008 #include <RecoLocalMuon/CSCSegment/src/CSCSegmentProducer.h> 00009 #include <RecoLocalMuon/CSCSegment/src/CSCSegmentBuilder.h> 00010 00011 #include <DataFormats/Common/interface/Handle.h> 00012 #include <FWCore/Framework/interface/ESHandle.h> 00013 #include <FWCore/MessageLogger/interface/MessageLogger.h> 00014 00015 #include <Geometry/Records/interface/MuonGeometryRecord.h> 00016 00017 #include <DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h> 00018 #include <DataFormats/CSCRecHit/interface/CSCSegmentCollection.h> 00019 #include <DataFormats/CSCRecHit/interface/CSCSegment.h> 00020 00021 CSCSegmentProducer::CSCSegmentProducer(const edm::ParameterSet& pas) : iev(0) { 00022 00023 inputObjectsTag = pas.getParameter<edm::InputTag>("inputObjects"); 00024 segmentBuilder_ = new CSCSegmentBuilder(pas); // pass on the PS 00025 00026 // register what this produces 00027 produces<CSCSegmentCollection>(); 00028 } 00029 00030 CSCSegmentProducer::~CSCSegmentProducer() { 00031 00032 LogDebug("CSC") << "deleting segmentBuilder_ after " << iev << " events.\n"; 00033 delete segmentBuilder_; 00034 } 00035 00036 void CSCSegmentProducer::produce(edm::Event& ev, const edm::EventSetup& setup) { 00037 00038 LogDebug("CSC") << "Start producing segments for event " << ++iev << "\n"; 00039 00040 // find the geometry (& conditions?) for this event & cache it in the builder 00041 00042 edm::ESHandle<CSCGeometry> h; 00043 setup.get<MuonGeometryRecord>().get(h); 00044 const CSCGeometry* pgeom = &*h; 00045 segmentBuilder_->setGeometry(pgeom); 00046 00047 // get the collection of CSCRecHit2D 00048 edm::Handle<CSCRecHit2DCollection> cscRecHits; 00049 ev.getByLabel(inputObjectsTag, cscRecHits); 00050 00051 // create empty collection of Segments 00052 std::auto_ptr<CSCSegmentCollection> oc( new CSCSegmentCollection ); 00053 00054 // fill the collection 00055 segmentBuilder_->build(cscRecHits.product(), *oc); //@@ FILL oc 00056 00057 // put collection in event 00058 ev.put(oc); 00059 }