1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
// -*- C++ -*-
//
// Package: Castor
// Class: CastorDumpConditions
//
/**\class Castor CastorDumpConditions.cc CondTools/Castor/src/CastorDumpConditions.cc
Description: <one line class summary>
Implementation:
<Notes on implementation>
*/
//
// Original Author: Luiz Mundim Filho
// Created: Thu Mar 12 14:45:44 CET 2009
// $Id: CastorDumpConditions.cc,v 1.1 2011/05/09 19:38:47 mundim Exp $
//
//
// system include files
#include <memory>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
// user include files
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Utilities/interface/Exception.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "CondFormats/DataRecord/interface/CastorPedestalsRcd.h"
#include "CondFormats/DataRecord/interface/CastorPedestalWidthsRcd.h"
#include "CondFormats/DataRecord/interface/CastorGainsRcd.h"
#include "CondFormats/DataRecord/interface/CastorGainWidthsRcd.h"
#include "CondFormats/DataRecord/interface/CastorQIEDataRcd.h"
#include "CondFormats/DataRecord/interface/CastorChannelQualityRcd.h"
#include "CondFormats/DataRecord/interface/CastorElectronicsMapRcd.h"
#include "CondFormats/DataRecord/interface/CastorRecoParamsRcd.h"
#include "CondFormats/DataRecord/interface/CastorSaturationCorrsRcd.h"
#include "CondFormats/CastorObjects/interface/AllObjects.h"
#include "CalibCalorimetry/CastorCalib/interface/CastorDbASCIIIO.h"
//
// class decleration
//
class CastorDumpConditions : public edm::one::EDAnalyzer<> {
public:
explicit CastorDumpConditions(const edm::ParameterSet&);
template <class S, class SRcd>
void dumpIt(const std::vector<std::string>& mDumpRequest,
const edm::Event& e,
const edm::EventSetup& context,
const std::string name);
private:
std::string file_prefix;
std::vector<std::string> mDumpRequest;
void analyze(const edm::Event&, const edm::EventSetup&) override;
// ----------member data ---------------------------
};
//
// constants, enums and typedefs
//
//
// static data member definitions
//
//
// constructors and destructor
//
CastorDumpConditions::CastorDumpConditions(const edm::ParameterSet& iConfig)
{
file_prefix = iConfig.getUntrackedParameter<std::string>("outFilePrefix", "Dump");
mDumpRequest = iConfig.getUntrackedParameter<std::vector<std::string> >("dump", std::vector<std::string>());
if (mDumpRequest.empty()) {
throw cms::Exception("Bad Config") << "CastorDumpConditions: No record to dump.";
}
}
//
// member functions
//
// ------------ method called to for each event ------------
void CastorDumpConditions::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
using namespace edm;
{
edm::LogAbsolute log("CastorDumpConditions");
log << "I AM IN THE RUN " << iEvent.id().run() << "\n";
log << "What to dump? " << std::endl;
if (mDumpRequest.empty()) {
log << "CastorDumpConditions: Empty request \n";
return;
}
}
for (std::vector<std::string>::const_iterator it = mDumpRequest.begin(); it != mDumpRequest.end(); it++)
LogAbsolute("CastorDumpConditions") << *it << "\n";
// dumpIt called for all possible ValueMaps. The function checks if the dump is actually requested.
dumpIt<CastorElectronicsMap, CastorElectronicsMapRcd>(mDumpRequest, iEvent, iSetup, "ElectronicsMap");
dumpIt<CastorQIEData, CastorQIEDataRcd>(mDumpRequest, iEvent, iSetup, "QIEData");
dumpIt<CastorPedestals, CastorPedestalsRcd>(mDumpRequest, iEvent, iSetup, "Pedestals");
dumpIt<CastorPedestalWidths, CastorPedestalWidthsRcd>(mDumpRequest, iEvent, iSetup, "PedestalWidths");
dumpIt<CastorGains, CastorGainsRcd>(mDumpRequest, iEvent, iSetup, "Gains");
dumpIt<CastorGainWidths, CastorGainWidthsRcd>(mDumpRequest, iEvent, iSetup, "GainWidths");
dumpIt<CastorChannelQuality, CastorChannelQualityRcd>(mDumpRequest, iEvent, iSetup, "ChannelQuality");
dumpIt<CastorRecoParams, CastorRecoParamsRcd>(mDumpRequest, iEvent, iSetup, "RecoParams");
dumpIt<CastorSaturationCorrs, CastorSaturationCorrsRcd>(mDumpRequest, iEvent, iSetup, "SaturationCorrs");
}
template <class S, class SRcd>
void CastorDumpConditions::dumpIt(const std::vector<std::string>& mDumpRequest,
const edm::Event& e,
const edm::EventSetup& context,
const std::string name) {
if (std::find(mDumpRequest.begin(), mDumpRequest.end(), name) != mDumpRequest.end()) {
int myrun = e.id().run();
edm::ESGetToken<S, SRcd> tok = esConsumes<S, SRcd>();
const S& myobject = context.getData(tok);
std::ostringstream file;
file << file_prefix << name.c_str() << "_Run" << myrun << ".txt";
std::ofstream outStream(file.str().c_str());
CastorDbASCIIIO::dumpObject(outStream, myobject);
}
}
//define this as a plug-in
DEFINE_FWK_MODULE(CastorDumpConditions);
|