16 mergeableRunProductProcesses_(&mergeableRunProductProcesses),
17 metadataForProcesses_(mergeableRunProductProcesses.
size()) {
28 long long inputRunEntry,
32 unsigned int processIndex {0};
36 std::vector<LuminosityBlockNumber_t>::const_iterator lumisInRunBeingReadBegin;
37 std::vector<LuminosityBlockNumber_t>::const_iterator lumisInRunBeingReadEnd;
41 if (inputStoredMergeableRunProductMetadata.
getLumiContent(inputRunEntry,
44 lumisInRunBeingReadBegin,
45 lumisInRunBeingReadEnd)) {
51 std::vector<LuminosityBlockNumber_t>&
lumis = metadataForProcess.lumis();
56 bool elementsIn2NotIn1 =
false;
57 bool elementsIn1NotIn2 =
false;
58 bool sharedElements =
false;
60 std::vector<LuminosityBlockNumber_t>
temp;
61 temp.reserve(lumis.size() + (lumisInRunBeingReadEnd - lumisInRunBeingReadBegin));
62 std::vector<LuminosityBlockNumber_t>::const_iterator end1 = lumis.end();
63 std::vector<LuminosityBlockNumber_t>::const_iterator end2 = lumisInRunBeingReadEnd;
64 for (std::vector<LuminosityBlockNumber_t>::const_iterator iter1 = lumis.begin(),
65 iter2 = lumisInRunBeingReadBegin;
66 iter1 != end1 || iter2 != end2;) {
68 temp.push_back(*iter2);
70 elementsIn2NotIn1 =
true;
72 }
else if (iter2 == end2) {
73 temp.push_back(*iter1);
75 elementsIn1NotIn2 =
true;
77 }
else if (*iter1 < *iter2) {
78 temp.push_back(*iter1);
80 elementsIn1NotIn2 =
true;
81 }
else if (*iter1 > *iter2) {
82 temp.push_back(*iter2);
84 elementsIn2NotIn1 =
true;
87 sharedElements =
true;
88 temp.push_back(*iter1);
94 if (!sharedElements && elementsIn2NotIn1 && elementsIn1NotIn2) {
95 metadataForProcess.setMergeDecision(
MERGE);
97 metadataForProcess.setValid(
false);
99 }
else if (!elementsIn2NotIn1) {
100 metadataForProcess.setMergeDecision(
IGNORE);
101 }
else if (!elementsIn1NotIn2) {
102 metadataForProcess.setMergeDecision(
REPLACE);
104 metadataForProcess.setValid(
false);
109 metadataForProcess.setMergeDecision(
MERGE);
110 metadataForProcess.setValid(
false);
115 metadataForProcess.setMergeDecision(
MERGE);
117 metadataForProcess.setValid(
false);
119 metadataForProcess.setUseIndexIntoFile(
true);
154 lumisProcessed.push_back(
lumi);
157 std::sort(lumisProcessed.begin(), lumisProcessed.end());
158 auto uniqueEnd =
std::unique(lumisProcessed.begin(), lumisProcessed.end());
164 metadataForProcess.setAllLumisProcessed(
166 metadataForProcess.lumis().begin(),
167 metadataForProcess.lumis().end()));
175 metadataForProcess.reset();
187 if (storedProcesses.empty()) {
192 unsigned long long endProcess = beginProcess;
195 std::vector<std::string>
const& processesWithMergeableRunProducts =
198 for (
unsigned int storedProcessIndex = 0;
199 storedProcessIndex < storedProcesses.size();
200 ++storedProcessIndex) {
210 for (
unsigned int transientProcessIndex = 0;
211 transientProcessIndex < processesWithMergeableRunProducts.size();
212 ++transientProcessIndex) {
217 if (processesWithMergeableRunProducts[transientProcessIndex] ==
218 storedProcesses[storedProcessIndex]) {
237 unsigned int storedProcessIndex,
238 unsigned long long beginProcess,
239 unsigned long long endProcess)
const {
241 if (metadataForProcess.
valid() &&
248 unsigned long long iBeginLumi = 0;
249 unsigned long long iEndLumi = 0;
265 for (
unsigned long long kProcess = beginProcess;
266 kProcess < endProcess;
271 if (metadataForProcess.
lumis().size() ==
272 (storedSingleRunEntryAndProcess.
endLumi() - storedSingleRunEntryAndProcess.
beginLumi())) {
274 iBeginLumi = storedSingleRunEntryAndProcess.
beginLumi();
275 iEndLumi = storedSingleRunEntryAndProcess.
endLumi();
281 std::vector<LuminosityBlockNumber_t>& storedLumis = storedMetadata.
lumis();
282 std::vector<LuminosityBlockNumber_t>
const& metdataLumis = metadataForProcess.
lumis();
283 iBeginLumi = storedLumis.size();
284 storedLumis.insert( storedLumis.end(), metdataLumis.begin(), metdataLumis.end() );
285 iEndLumi = storedLumis.size();
291 metadataForProcess.
valid(),
300 if (metadataForProcess) {
304 <<
"MergeableRunProductMetadata::getMergeDecision could not find process.\n" 305 <<
"It should not be possible for this error to occur.\n" 306 <<
"Contact a Framework developer\n";
314 if (metadataForProcess) {
315 return !metadataForProcess->
valid();
322 mergeDecision_ =
MERGE;
323 useIndexIntoFile_ =
false;
325 allLumisProcessed_ =
false;
330 unsigned int processIndex = 0;
335 return &metadataForProcess;
345 if (metadataForProcess.useIndexIntoFile()) {
346 metadataForProcess.setUseIndexIntoFile(
false);
348 std::vector<LuminosityBlockNumber_t>
temp;
350 std::vector<LuminosityBlockNumber_t>::const_iterator end1 = metadataForProcess.lumis().end();
352 for (std::vector<LuminosityBlockNumber_t>::const_iterator iter1 = metadataForProcess.lumis().begin(),
354 iter1 != end1 || iter2 != end2;) {
356 temp.push_back(*iter2);
359 }
else if (iter2 == end2) {
360 temp.push_back(*iter1);
363 }
else if (*iter1 < *iter2) {
364 temp.push_back(*iter1);
366 }
else if (*iter1 > *iter2) {
367 temp.push_back(*iter2);
371 temp.push_back(*iter1);
376 metadataForProcess.lumis().swap(temp);
static const uint16_t valid_
unsigned int LuminosityBlockNumber_t
unsigned long long beginLumi() const
unsigned long long endLumi() const
def unique(seq, keepstr=True)
std::vector< std::string > const & processesWithMergeableRunProducts() const
void getLumisInRun(std::vector< LuminosityBlockNumber_t > &lumis) const
std::vector< xml::Document > includes