96 verbosity(pSet.getUntrackedParameter<unsigned
int>(
"verbosity", 0))
98 std::vector<std::string> measuredFiles;
99 for (
const auto &
f: pSet.
getParameter< vector<string> >(
"MeasuredFiles"))
103 std::vector<std::string> realFiles;
104 for (
const auto &
f: pSet.
getParameter< vector<string> >(
"RealFiles"))
108 std::vector<std::string> misalignedFiles;
109 for (
const auto &
f: pSet.
getParameter< vector<string> >(
"MisalignedFiles"))
117 findingRecord<CTPPSRPAlignmentCorrectionsDataRcd>();
118 findingRecord<RPRealAlignmentRecord>();
119 findingRecord<RPMisalignedAlignmentRecord>();
133 map< edm::EventID, vector< pair<bool, const CTPPSRPAlignmentCorrectionsData*> > > bounds;
135 for (
const auto & seq : seqs)
137 for (
const auto &
p : seq)
143 bounds[event_first].emplace_back( pair<bool, const CTPPSRPAlignmentCorrectionsData*>(
true, corr) );
146 bounds[event_after].emplace_back( pair<bool, const CTPPSRPAlignmentCorrectionsData*>(
false, corr) );
151 set<const CTPPSRPAlignmentCorrectionsData*>
accumulator;
153 for (
map<
EventID, vector< pair<bool, const CTPPSRPAlignmentCorrectionsData*> > >::const_iterator tit = bounds.begin(); tit != bounds.end(); ++tit)
155 for (
const auto & cit : tit->second)
157 bool add = cit.first;
161 accumulator.insert(corr);
163 accumulator.erase(corr);
168 if (tit_next == bounds.end())
171 const EventID &event_first = tit->first;
176 LogVerbatim(
"CTPPSRPAlignmentCorrectionsDataESSourceXML")
179 <<
": alignment blocks " << accumulator.size();
183 for (
auto sit : accumulator)
197 LogVerbatim(
">> CTPPSRPAlignmentCorrectionsDataESSourceXML") <<
"CTPPSRPAlignmentCorrectionsDataESSourceXML::PrepareSequence(" << label <<
")";
199 vector<CTPPSRPAlignmentCorrectionsDataSequence> sequences;
200 for (
const auto &
file : files)
203 seq =
Merge(sequences);
210 return std::make_unique<CTPPSRPAlignmentCorrectionsData>(
acMeasured);
217 return std::make_unique<CTPPSRPAlignmentCorrectionsData>(
acReal);
224 return std::make_unique<CTPPSRPAlignmentCorrectionsData>(
acMisaligned);
236 strftime(timeStr, 50,
"%F %T", localtime(&unixTime));
238 LogVerbatim(
"CTPPSRPAlignmentCorrectionsDataESSourceXML")
239 <<
">> CTPPSRPAlignmentCorrectionsDataESSourceXML::setIntervalFor(" << key.
name() <<
")";
241 LogVerbatim(
"CTPPSRPAlignmentCorrectionsDataESSourceXML")
242 <<
" event=" << iosv.
eventID() <<
", UNIX timestamp=" << unixTime <<
" (" << timeStr <<
")";
249 if (strcmp(key.
name(),
"CTPPSRPAlignmentCorrectionsDataRcd") == 0)
255 if (strcmp(key.
name(),
"RPRealAlignmentRecord") == 0)
261 if (strcmp(key.
name(),
"RPMisalignedAlignmentRecord") == 0)
267 if (p_corr ==
nullptr)
268 throw cms::Exception(
"CTPPSRPAlignmentCorrectionsDataESSourceXML::setIntervalFor") <<
"Unknown record " << key.
name();
271 bool next_exists =
false;
275 for (
const auto &it: *p_seq)
277 const auto &it_event_first = it.first.first().eventID();
278 const auto &it_event_last = it.first.last().eventID();
280 bool it_contained_lo = ( (it_event_first.run() < event_curr.
run()) ||
281 ((it_event_first.run() == event_curr.
run()) && (it_event_first.luminosityBlock() <= event_curr.
luminosityBlock())) );
283 bool it_contained_up = ( (it_event_last.run() > event_curr.
run()) ||
284 ((it_event_last.run() == event_curr.
run()) && (it_event_last.luminosityBlock() >= event_curr.
luminosityBlock())) );
286 if (it_contained_lo && it_contained_up)
293 LogVerbatim(
"CTPPSRPAlignmentCorrectionsDataESSourceXML")
294 <<
" setting validity interval [" 302 bool it_in_future = ( (it_event_first.run() > event_curr.
run()) ||
303 ((it_event_first.run() == event_curr.
run() && (it_event_first.luminosityBlock() > event_curr.
luminosityBlock()))) );
308 if (event_next_start > it_event_first)
309 event_next_start = it_event_first;
326 LogVerbatim(
"CTPPSRPAlignmentCorrectionsDataESSourceXML")
327 <<
" setting validity interval ["
T getParameter(std::string const &) const
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
EventNumber_t event() const
static RunNumber_t maxRunNumber()
const EventID & eventID() const
Time sequence of alignment corrections. I/O methods have been factored out to: CondFormats/CTPPSReado...
CTPPSRPAlignmentCorrectionsDataESSourceXML(const edm::ParameterSet &p)
CTPPSRPAlignmentCorrectionsDataSequence acsMeasured
static const IOVSyncValue & endOfTime()
CTPPSRPAlignmentCorrectionsData acReal
CTPPSRPAlignmentCorrectionsData acMeasured
std::pair< Time_t, Time_t > ValidityInterval
LuminosityBlockNumber_t luminosityBlock() const
std::unique_ptr< CTPPSRPAlignmentCorrectionsData > produceMeasured(const CTPPSRPAlignmentCorrectionsDataRcd &)
CTPPSRPAlignmentCorrectionsDataSequence Merge(const std::vector< CTPPSRPAlignmentCorrectionsDataSequence > &) const
merges an array of sequences to one
const IOVSyncValue & last() const
static CTPPSRPAlignmentCorrectionsDataSequence loadFromXML(const std::string &fileName)
loads sequence of alignment corrections from XML file
std::unique_ptr< CTPPSRPAlignmentCorrectionsData > produceMisaligned(const RPMisalignedAlignmentRecord &)
static LuminosityBlockNumber_t maxLuminosityBlockNumber()
static std::string iovValueToString(const edm::IOVSyncValue &)
void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &) override
const char * name() const
unsigned int unixTime() const
Time in seconds since January 1, 1970.
void addCorrections(const CTPPSRPAlignmentCorrectionsData &, bool sumErrors=true, bool addSh=true, bool addRot=true)
adds (merges) corrections on top of the current values
void insert(const edm::ValidityInterval &iov, const CTPPSRPAlignmentCorrectionsData &data)
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
static edm::EventID nextLS(const edm::EventID &src)
~CTPPSRPAlignmentCorrectionsDataESSourceXML() override
CTPPSRPAlignmentCorrectionsData acMisaligned
static edm::EventID previousLS(const edm::EventID &src)
Container for CTPPS RP alignment corrections. The corrections are stored on two levels - RP and senso...
const Timestamp & time() const
void PrepareSequence(const std::string &label, CTPPSRPAlignmentCorrectionsDataSequence &seq, const std::vector< std::string > &files) const
builds a sequence of corrections from provided sources and runs a few checks
#define DEFINE_FWK_EVENTSETUP_SOURCE(type)
CTPPSRPAlignmentCorrectionsDataSequence acsReal
const IOVSyncValue & first() const
std::unique_ptr< CTPPSRPAlignmentCorrectionsData > produceReal(const RPRealAlignmentRecord &)
CTPPSRPAlignmentCorrectionsDataSequence acsMisaligned