CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/CommonTools/UtilAlgos/interface/NtpProducer.h

Go to the documentation of this file.
00001 #ifndef UtilAlgos_NtpProducer_h
00002 #define UtilAlgos_NtpProducer_h
00003 
00013 #include "FWCore/Framework/interface/EDProducer.h"
00014 #include "FWCore/Framework/interface/Event.h"
00015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00016 #include "FWCore/Utilities/interface/InputTag.h"
00017 #include "CommonTools/Utils/interface/StringObjectFunction.h"
00018 
00019 template<typename C>
00020 class NtpProducer : public edm::EDProducer {
00021 public:
00023   NtpProducer( const edm::ParameterSet& );
00025   ~NtpProducer();
00026   
00027 protected:
00029   virtual void produce( edm::Event&, const edm::EventSetup& );
00030 
00031 private:
00033   edm::InputTag src_;
00035   std::vector<std::pair<std::string, StringObjectFunction<typename C::value_type> > > tags_;
00036   bool lazyParser_;
00037   std::string prefix_;
00038   bool eventInfo_;
00039 };
00040 
00041 template<typename C>
00042 NtpProducer<C>::NtpProducer( const edm::ParameterSet& par ) : 
00043   src_( par.template getParameter<edm::InputTag>( "src" ) ),
00044   lazyParser_( par.template getUntrackedParameter<bool>( "lazyParser", false ) ),
00045   prefix_( par.template getUntrackedParameter<std::string>( "prefix","" ) ),
00046   eventInfo_( par.template getUntrackedParameter<bool>( "eventInfo",true ) ){
00047   std::vector<edm::ParameterSet> variables = 
00048                                    par.template getParameter<std::vector<edm::ParameterSet> >("variables");
00049    std::vector<edm::ParameterSet>::const_iterator 
00050      q = variables.begin(), end = variables.end();
00051    if(eventInfo_){
00052      produces<unsigned int>( prefix_+"EventNumber" ).setBranchAlias( prefix_ + "EventNumber" );
00053      produces<unsigned int>( prefix_ + "RunNumber" ).setBranchAlias( prefix_ + "RunNumber" );
00054      produces<unsigned int>( prefix_ + "LumiBlock" ).setBranchAlias( prefix_ + "Lumiblock" );
00055    }
00056    for (; q!=end; ++q) {
00057      std::string tag = prefix_ + q->getUntrackedParameter<std::string>("tag");
00058      StringObjectFunction<typename C::value_type> quantity(q->getUntrackedParameter<std::string>("quantity"), lazyParser_);
00059      tags_.push_back(std::make_pair(tag, quantity));
00060      produces<std::vector<float> >(tag).setBranchAlias(tag);
00061      
00062    }   
00063 }
00064 
00065 template<typename C>
00066 NtpProducer<C>::~NtpProducer() {
00067 }
00068 
00069 template<typename C>
00070 void NtpProducer<C>::produce( edm::Event& iEvent, const edm::EventSetup& ) {
00071    edm::Handle<C> coll;
00072    iEvent.getByLabel(src_, coll);
00073    if(eventInfo_){   
00074      std::auto_ptr<unsigned int> event( new unsigned int );
00075      std::auto_ptr<unsigned int> run( new unsigned int );
00076      std::auto_ptr<unsigned int> lumi( new unsigned int );
00077      *event = iEvent.id().event();
00078      *run = iEvent.id().run();
00079      *lumi = iEvent.luminosityBlock();
00080      iEvent.put( event, prefix_ + "EventNumber" );
00081      iEvent.put( run, prefix_ + "RunNumber" );
00082      iEvent.put( lumi, prefix_ + "LumiBlock" );
00083    }
00084    typename std::vector<std::pair<std::string, StringObjectFunction<typename C::value_type> > >::const_iterator 
00085      q = tags_.begin(), end = tags_.end();
00086    for(;q!=end; ++q) {
00087      std::auto_ptr<std::vector<float> > x(new std::vector<float>);
00088      x->reserve(coll->size());
00089      for (typename C::const_iterator elem=coll->begin(); elem!=coll->end(); ++elem ) {
00090        x->push_back(q->second(*elem));
00091      }
00092      iEvent.put(x, q->first);
00093    }
00094 }
00095 
00096 #endif