CMS 3D CMS Logo

LumiProducer.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    LumiProducer
00004 // Class:      LumiProducer
00005 // 
00016 //
00017 // Original Author:  Valerie Halyo
00018 //                   David Dagenhart
00019 //       
00020 //         Created:  Tue Jun 12 00:47:28 CEST 2007
00021 // $Id: LumiProducer.cc,v 1.4 2008/02/06 20:57:29 wdd Exp $
00022 
00023 #include "FWCore/Framework/interface/EDProducer.h"
00024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00025 #include "FWCore/Framework/interface/Event.h"
00026 #include "FWCore/Framework/interface/LuminosityBlock.h"
00027 
00028 #include "DataFormats/Provenance/interface/BranchType.h"
00029 #include "DataFormats/Provenance/interface/LuminosityBlockID.h"
00030 #include "DataFormats/Luminosity/interface/LumiSummary.h"
00031 #include "DataFormats/Luminosity/interface/LumiDetails.h"
00032 
00033 #include "FWCore/Framework/interface/MakerMacros.h"
00034 
00035 
00036 #include <sstream>
00037 #include <string>
00038 #include <memory>
00039 #include <vector>
00040 
00041 namespace edm {
00042   class EventSetup;
00043 }
00044 
00045 //
00046 // class declaration
00047 //
00048 
00049 class LumiProducer : public edm::EDProducer {
00050 
00051   public:
00052 
00053     explicit LumiProducer(const edm::ParameterSet&);
00054     ~LumiProducer();
00055 
00056   private:
00057 
00058     virtual void produce(edm::Event&, const edm::EventSetup&);
00059 
00060     virtual void beginLuminosityBlock(edm::LuminosityBlock & iLBlock,
00061                                       edm::EventSetup const& iSetup);
00062     edm::ParameterSet pset_;
00063 };
00064 
00065 //
00066 // constructors and destructor
00067 //
00068 LumiProducer::LumiProducer(const edm::ParameterSet& iConfig)
00069 {
00070   // register your products
00071   produces<LumiSummary, edm::InLumi>();
00072   produces<LumiDetails, edm::InLumi>();
00073 
00074   pset_ = iConfig;
00075 }
00076 
00077 LumiProducer::~LumiProducer()
00078 { }
00079 
00080 
00081 //
00082 // member functions
00083 //
00084 
00085 void LumiProducer::produce(edm::Event&, const edm::EventSetup&)
00086 { }
00087 
00088 void LumiProducer::beginLuminosityBlock(edm::LuminosityBlock &iLBlock, edm::EventSetup const &iSetup) {
00089 
00090   unsigned int lumiNumber = iLBlock.id().luminosityBlock();
00091   std::stringstream ss;
00092   ss << "LS" << lumiNumber;
00093   std::string psetName = ss.str();
00094 
00095   // Some defaults that are used only if the configuration file
00096   // does not have the necessary parameters, We do not
00097   // want a crash in this case.
00098   edm::ParameterSet def;
00099   std::vector<int> defveci;
00100   std::vector<double> defvecd;
00101 
00102   edm::ParameterSet lumiBlockPSet =
00103     pset_.getUntrackedParameter<edm::ParameterSet>(psetName, def);
00104 
00105   std::auto_ptr<LumiSummary> pOut1(new LumiSummary(
00106                           static_cast<float>(lumiBlockPSet.getUntrackedParameter<double>("avginsdellumi", -99.0)),
00107                           static_cast<float>(lumiBlockPSet.getUntrackedParameter<double>("avginsdellumierr", -99.0)),
00108                           lumiBlockPSet.getUntrackedParameter<int>("lumisecqual", -1),
00109                           static_cast<float>(lumiBlockPSet.getUntrackedParameter<double>("deadfrac", -99.0)),
00110                           lumiBlockPSet.getUntrackedParameter<int>("lsnumber", -1),
00111                           lumiBlockPSet.getUntrackedParameter<std::vector<int> >("l1ratecounter", defveci),
00112                           lumiBlockPSet.getUntrackedParameter<std::vector<int> >("l1scaler", defveci),
00113                           lumiBlockPSet.getUntrackedParameter<std::vector<int> >("hltratecounter", defveci),
00114                           lumiBlockPSet.getUntrackedParameter<std::vector<int> >("hltscaler", defveci),
00115                           lumiBlockPSet.getUntrackedParameter<std::vector<int> >("hltinput", defveci) ) );
00116   iLBlock.put(pOut1);
00117 
00118   // One minor complication here.  The configuration language allows double or
00119   // vector<double> but not float or vector<float> so we need to explicitly
00120   // convert from double to float
00121 
00122   typedef std::vector<double>::const_iterator DIter;
00123 
00124   std::vector<double> temp =
00125     lumiBlockPSet.getUntrackedParameter<std::vector<double> >("lumietsum", defvecd);
00126   std::vector<float> lumietsum;
00127   for (DIter i = temp.begin(), e = temp.end(); i != e; ++i) {
00128     lumietsum.push_back(static_cast<float>(*i));
00129   }
00130 
00131   temp =
00132     lumiBlockPSet.getUntrackedParameter<std::vector<double> >("lumietsumerr", defvecd);
00133   std::vector<float> lumietsumerr;
00134   for (DIter i = temp.begin(), e = temp.end(); i != e; ++i) {
00135     lumietsumerr.push_back(static_cast<float>(*i));
00136   }
00137 
00138   temp = lumiBlockPSet.getUntrackedParameter<std::vector<double> >("lumiocc", defvecd);
00139   std::vector<float> lumiocc;
00140   for (DIter i = temp.begin(), e = temp.end(); i != e; ++i) {
00141     lumiocc.push_back(static_cast<float>(*i));
00142   }
00143 
00144   temp = lumiBlockPSet.getUntrackedParameter<std::vector<double> >("lumioccerr", defvecd);
00145   std::vector<float> lumioccerr;
00146   for (DIter i = temp.begin(), e = temp.end(); i != e; ++i) {
00147     lumioccerr.push_back(static_cast<float>(*i));
00148   }
00149 
00150   std::auto_ptr<LumiDetails> pOut2(new LumiDetails(
00151                           lumietsum,
00152                           lumietsumerr,
00153                           lumiBlockPSet.getUntrackedParameter<std::vector<int> >("lumietsumqual", defveci),
00154                           lumiocc,
00155                           lumioccerr,
00156                           lumiBlockPSet.getUntrackedParameter<std::vector<int> >("lumioccqual", defveci) ) );
00157   iLBlock.put(pOut2);
00158 
00159   //  ESHandle<SetupData> pLumiSetup; 
00160   //  iSetup.get<SetupRecord>().get(pLumiSetup); 
00161 }
00162 
00163 DEFINE_FWK_MODULE(LumiProducer);

Generated on Tue Jun 9 17:44:03 2009 for CMSSW by  doxygen 1.5.4