32 class LuminosityBlockID;
34 class ThinnedAssociationsHelper;
37 void checkHistoryConsistency(Principal
const& primary, Principal
const& secondary) {
38 ProcessHistory
const& ph1 = primary.processHistory();
39 ProcessHistory
const& ph2 = secondary.processHistory();
42 <<
"The secondary file is not an ancestor of the primary file\n";
45 void checkConsistency(EventPrincipal
const& primary, EventPrincipal
const& secondary) {
48 << primary.id() <<
" has inconsistent EventAuxiliary data in the primary and secondary file\n";
51 void checkConsistency(LuminosityBlockAuxiliary
const& primary, LuminosityBlockAuxiliary
const& secondary) {
52 if (primary.id() != secondary.id()) {
54 << primary.id() <<
" has inconsistent LuminosityBlockAuxiliary data in the primary and secondary file\n";
57 void checkConsistency(RunAuxiliary
const& primary, RunAuxiliary
const& secondary) {
58 if (primary.id() != secondary.id()) {
60 << primary.id() <<
" has inconsistent RunAuxiliary data in the primary and secondary file\n";
67 rootServiceChecker_(),
68 catalog_(pset.getUntrackedParameter<std::
vector<std::
string> >(
"fileNames"),
69 pset.getUntrackedParameter<std::
string>(
"overrideCatalog", std::
string())),
72 pset.getUntrackedParameter<std::
string>(
"overrideCatalog", std::
string())),
73 secondaryRunPrincipal_(),
74 secondaryLumiPrincipal_(),
75 secondaryEventPrincipals_(),
76 branchIDsToReplace_(),
78 skipBadFiles_(pset.getUntrackedParameter<bool>(
"skipBadFiles")),
79 bypassVersionCheck_(pset.getUntrackedParameter<bool>(
"bypassVersionCheck")),
80 treeMaxVirtualSize_(pset.getUntrackedParameter<int>(
"treeMaxVirtualSize")),
81 productSelectorRules_(pset,
"inputCommands",
"InputSource"),
82 dropDescendants_(pset.getUntrackedParameter<bool>(
"dropDescendantsOfDroppedBranches")),
83 labelRawDataLikeMC_(pset.getUntrackedParameter<bool>(
"labelRawDataLikeMC")),
84 delayReadingEventProducts_(pset.getUntrackedParameter<bool>(
"delayReadingEventProducts")),
86 resourceSharedWithDelayedReaderPtr_(),
90 secondaryFileSequence_(
104 std::make_shared<ThinnedAssociationsHelper const>(),
112 std::set<BranchID> associationsFromSecondary;
115 for (
auto const&
item : secondary) {
116 if (
item.second.present()) {
117 idsToReplace[
item.second.branchType()].insert(
item.second.branchID());
119 associationsFromSecondary.insert(
item.second.branchID());
122 auto itFound = fullList.find(
item.first);
123 if (itFound != fullList.end()) {
124 itFound->second.setDropped(
false);
128 for (
auto const&
item : primary) {
129 if (
item.second.present()) {
130 idsToReplace[
item.second.branchType()].erase(
item.second.branchID());
131 associationsFromSecondary.erase(
item.second.branchID());
139 for (
auto const&
id : idsToReplace[
i]) {
189 checkConsistency(runPrincipal.
aux(), *secondaryAuxiliary);
194 runPrincipal.
index());
196 checkHistoryConsistency(runPrincipal, *secondaryRunPrincipal_);
200 <<
" Run " << runPrincipal.
run() <<
" is not found in the secondary input files\n";
210 std::shared_ptr<LuminosityBlockAuxiliary> secondaryAuxiliary =
212 checkConsistency(lumiPrincipal.
aux(), *secondaryAuxiliary);
215 secondaryLumiPrincipal_->setAux(*secondaryAuxiliary);
217 checkHistoryConsistency(lumiPrincipal, *secondaryLumiPrincipal_);
221 <<
" Run " << lumiPrincipal.
run() <<
" LuminosityBlock " << lumiPrincipal.
luminosityBlock()
222 <<
" is not found in the secondary input files\n";
229 assert(readEventSucceeded);
236 checkConsistency(eventPrincipal, secondaryEventPrincipal);
237 checkHistoryConsistency(eventPrincipal, secondaryEventPrincipal);
238 assert(readEventSucceeded);
244 << eventPrincipal.
id() <<
" is not found in the secondary input files\n";
291 std::vector<std::string> defaultStrings;
293 desc.
addUntracked<std::vector<std::string> >(
"fileNames")->setComment(
"Names of files to be processed.");
294 desc.
addUntracked<std::vector<std::string> >(
"secondaryFileNames", defaultStrings)
295 ->setComment(
"Names of secondary files to be processed.");
296 desc.
addUntracked<
bool>(
"needSecondaryFileNames",
false)
297 ->setComment(
"If True, 'secondaryFileNames' must be specified and be non-empty.");
301 "True: Ignore any missing or unopenable input file.\n"
302 "False: Throw exception if missing or unopenable input file.");
305 "True: Bypass release version check.\n"
306 "False: Throw exception if reading file in a release prior to the release in which the file was written.");
308 ->setComment(
"Size of ROOT TTree TBasket cache. Affects performance.");
309 desc.
addUntracked<
bool>(
"dropDescendantsOfDroppedBranches",
true)
310 ->setComment(
"If True, also drop on input any descendent of any branch dropped on input.");
312 ->setComment(
"If True: replace module label for raw data to match MC. Also use 'LHC' as process.");
313 desc.
addUntracked<
bool>(
"delayReadingEventProducts",
true)
315 "If True: do not read a data product from the file until it is requested. If False: all event data "
316 "products are read upfront.");
322 descriptions.
add(
"source", desc);
void fillProcessBlockHelper_() override
edm::propagate_const< std::unique_ptr< RootSecondaryFileSequence > > secondaryFileSequence_
PoolSource(ParameterSet const &pset, InputSourceDescription const &desc)
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
bool goToEvent_(EventID const &eventID) override
bool isSameEvent(EventAuxiliary const &a, EventAuxiliary const &b)
std::unique_ptr< SharedResourcesAcquirer > resourceSharedWithDelayedReaderPtr_
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
bool nextProcessBlock_(ProcessBlockPrincipal &) override
edm::propagate_const< std::unique_ptr< RunHelperBase > > runHelper_
std::map< BranchKey, BranchDescription > ProductList
static void fillDescription(ParameterSetDescription &desc)
edm::propagate_const< std::shared_ptr< RunPrincipal > > secondaryRunPrincipal_
EventID const & id() const
unsigned long long EventNumber_t
void readProcessBlock_(ProcessBlockPrincipal &) override
LuminosityBlockAuxiliary const & aux() const
void readLuminosityBlock_(LuminosityBlockPrincipal &lumiPrincipal) override
LuminosityBlockIndex index() const
static void fillDescription(ParameterSetDescription &desc, char const *parameterName, std::vector< std::string > const &defaultStrings=defaultSelectionStrings())
LuminosityBlockNumber_t luminosityBlock() const
static void fillDescription(ParameterSetDescription &desc)
unsigned int LuminosityBlockNumber_t
static constexpr EventNumber_t invalidEvent
std::shared_ptr< LuminosityBlockAuxiliary > readLuminosityBlockAuxiliary_() override
std::pair< SharedResourcesAcquirer *, std::recursive_mutex * > resourceSharedWithDelayedReader_() override
bool randomAccess_() const override
void mergeProvenanceRetrievers(EventPrincipal &other)
ProcessingController::ReverseState reverseState_() const override
bool delayReadingEventProducts_
void setComment(std::string const &value)
void readRun_(RunPrincipal &runPrincipal) override
std::vector< edm::propagate_const< std::unique_ptr< EventPrincipal > > > secondaryEventPrincipals_
bool isAncestor(ProcessHistory const &a, ProcessHistory const &b)
LuminosityBlockNumber_t luminosityBlock() const
void readEvent_(EventPrincipal &eventPrincipal) override
static constexpr RunNumber_t invalidRun
static SharedResourcesRegistry * instance()
StreamID streamID() const
std::shared_ptr< RunAuxiliary > readRunAuxiliary_() override
RunAuxiliary const & aux() const
ItemType getNextItemType() override
std::unique_ptr< RunHelperBase > makeRunHelper(ParameterSet const &pset)
InputFileCatalog secondaryCatalog_
static void fillDescriptions(ConfigurationDescriptions &descriptions)
unsigned int value() const
ProcessingController::ForwardState forwardState_() const override
static constexpr LuminosityBlockNumber_t invalidLumi
bool readIt(EventID const &id, EventPrincipal &eventPrincipal, StreamContext &streamContext) override
std::array< std::vector< BranchID >, NumBranchTypes > branchIDsToReplace_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
ProductList & productListUpdator()
void skip(int offset) override
void readAllFromSourceAndMergeImmediately(MergeableRunProductMetadata const *mergeableRunProductMetadata=nullptr)
std::shared_ptr< std::recursive_mutex > mutexSharedWithDelayedReader_
std::pair< SharedResourcesAcquirer, std::shared_ptr< std::recursive_mutex > > createAcquirerForSourceDelayedReader()
edm::propagate_const< std::shared_ptr< LuminosityBlockPrincipal > > secondaryLumiPrincipal_
void recombine(Principal &other, std::vector< BranchID > const &bids)
tuple size
Write out results.
edm::propagate_const< std::unique_ptr< RootPrimaryFileSequence > > primaryFileSequence_
std::shared_ptr< FileBlock > readFile_() override
void closeFile_() override