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"),
70 secondaryCatalog_(pset.getUntrackedParameter<
std::vector<
std::
string> >(
"secondaryFileNames",
std::vector<
std::
string>()),
72 secondaryRunPrincipal_(),
73 secondaryLumiPrincipal_(),
74 secondaryEventPrincipals_(),
75 branchIDsToReplace_(),
76 nStreams_(desc.allocations_->numberOfStreams()),
77 skipBadFiles_(pset.getUntrackedParameter<
bool>(
"skipBadFiles")),
78 bypassVersionCheck_(pset.getUntrackedParameter<
bool>(
"bypassVersionCheck")),
79 treeMaxVirtualSize_(pset.getUntrackedParameter<
int>(
"treeMaxVirtualSize")),
80 productSelectorRules_(pset,
"inputCommands",
"InputSource"),
81 dropDescendants_(pset.getUntrackedParameter<
bool>(
"dropDescendantsOfDroppedBranches")),
82 labelRawDataLikeMC_(pset.getUntrackedParameter<
bool>(
"labelRawDataLikeMC")),
83 delayReadingEventProducts_(pset.getUntrackedParameter<
bool>(
"delayReadingEventProducts")),
85 resourceSharedWithDelayedReaderPtr_(),
89 secondaryFileSequence_(secondaryCatalog_.
empty() ?
nullptr :
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());
118 if(item.second.branchType() ==
InEvent &&
120 associationsFromSecondary.insert(item.second.branchID());
123 auto itFound = fullList.find(item.first);
124 if(itFound != fullList.end()) {
125 itFound->second.setDropped(
false);
129 for(
auto const& item : primary) {
130 if(item.second.present()) {
131 idsToReplace[item.second.branchType()].erase(item.second.branchID());
132 associationsFromSecondary.erase(item.second.branchID());
140 for(
auto const&
id : idsToReplace[
i]) {
158 std::unique_ptr<FileBlock>
171 std::shared_ptr<RunAuxiliary>
176 std::shared_ptr<LuminosityBlockAuxiliary>
188 checkConsistency(runPrincipal.
aux(), *secondaryAuxiliary);
193 runPrincipal.
index());
195 checkHistoryConsistency(runPrincipal, *secondaryRunPrincipal_);
199 <<
" Run " << runPrincipal.
run()
200 <<
" is not found in the secondary input files\n";
211 std::shared_ptr<LuminosityBlockAuxiliary> secondaryAuxiliary =
secondaryFileSequence_->readLuminosityBlockAuxiliary_();
212 checkConsistency(lumiPrincipal.
aux(), *secondaryAuxiliary);
217 lumiPrincipal.
index());
218 secondaryLumiPrincipal_->setAux(*secondaryAuxiliary);
220 checkHistoryConsistency(lumiPrincipal, *secondaryLumiPrincipal_);
224 <<
" Run " << lumiPrincipal.
run()
226 <<
" is not found in the secondary input files\n";
241 checkConsistency(eventPrincipal, secondaryEventPrincipal);
242 checkHistoryConsistency(eventPrincipal, secondaryEventPrincipal);
248 eventPrincipal.
id() <<
" is not found in the secondary input files\n";
259 if(!found)
return false;
281 std::pair<SharedResourcesAcquirer*,std::recursive_mutex*>
308 std::vector<std::string> defaultStrings;
310 desc.
addUntracked<std::vector<std::string> >(
"fileNames")
311 ->setComment(
"Names of files to be processed.");
312 desc.
addUntracked<std::vector<std::string> >(
"secondaryFileNames", defaultStrings)
313 ->setComment(
"Names of secondary files to be processed.");
314 desc.
addUntracked<
bool>(
"needSecondaryFileNames",
false)
315 ->setComment(
"If True, 'secondaryFileNames' must be specified and be non-empty.");
318 ->setComment(
"True: Ignore any missing or unopenable input file.\n" 319 "False: Throw exception if missing or unopenable input file.");
321 ->setComment(
"True: Bypass release version check.\n" 322 "False: Throw exception if reading file in a release prior to the release in which the file was written.");
324 ->setComment(
"Size of ROOT TTree TBasket cache. Affects performance.");
325 desc.
addUntracked<
bool>(
"dropDescendantsOfDroppedBranches",
true)
326 ->setComment(
"If True, also drop on input any descendent of any branch dropped on input.");
328 ->setComment(
"If True: replace module label for raw data to match MC. Also use 'LHC' as process.");
329 desc.
addUntracked<
bool>(
"delayReadingEventProducts",
true)->setComment(
"If True: do not read a data product from the file until it is requested. If False: all event data products are read upfront.");
335 descriptions.
add(
"source", desc);
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)
edm::propagate_const< std::unique_ptr< RunHelperBase > > runHelper_
ProcessingController::ReverseState reverseState_() const override
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
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
void readAllFromSourceAndMergeImmediately()
void mergeProvenanceRetrievers(EventPrincipal &other)
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
bool randomAccess_() const override
RunAuxiliary const & aux() const
ItemType getNextItemType() override
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::unique_ptr< RunHelperBase > makeRunHelper(ParameterSet const &pset)
InputFileCatalog secondaryCatalog_
static void fillDescriptions(ConfigurationDescriptions &descriptions)
unsigned int value() const
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
std::unique_ptr< FileBlock > readFile_() override
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)
edm::propagate_const< std::unique_ptr< RootPrimaryFileSequence > > primaryFileSequence_
void closeFile_() override
ProcessingController::ForwardState forwardState_() const override