00001
00002
00003
00004
00005
00016
00017
00018
00019
00020
00021
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
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
00067
00068 LumiProducer::LumiProducer(const edm::ParameterSet& iConfig)
00069 {
00070
00071 produces<LumiSummary, edm::InLumi>();
00072 produces<LumiDetails, edm::InLumi>();
00073
00074 pset_ = iConfig;
00075 }
00076
00077 LumiProducer::~LumiProducer()
00078 { }
00079
00080
00081
00082
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
00096
00097
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
00119
00120
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
00160
00161 }
00162
00163 DEFINE_FWK_MODULE(LumiProducer);