Go to the documentation of this file.00001
00002
00004
00005 #include "FWCore/Catalog/interface/InputFileCatalog.h"
00006
00007 #include "FWCore/Utilities/interface/Exception.h"
00008 #include "FWCore/Utilities/interface/EDMException.h"
00009
00010 #include <boost/algorithm/string.hpp>
00011
00012 namespace edm {
00013
00014 InputFileCatalog::InputFileCatalog(std::vector<std::string> const& fileNames, std::string const& override, bool useLFNasPFNifLFNnotFound) :
00015 logicalFileNames_(fileNames),
00016 fileNames_(fileNames),
00017 fallbackFileNames_(fileNames.size()),
00018 fileCatalogItems_(),
00019 fileLocator_(),
00020 overrideFileLocator_(),
00021 fallbackFileLocator_(),
00022 overrideFallbackFileLocator_() {
00023
00024 init(override, "", useLFNasPFNifLFNnotFound);
00025 }
00026
00027 InputFileCatalog::InputFileCatalog(std::vector<std::string> const& fileNames, std::string const& override, std::string const& overrideFallback, bool useLFNasPFNifLFNnotFound) :
00028 logicalFileNames_(fileNames),
00029 fileNames_(fileNames),
00030 fallbackFileNames_(fileNames.size()),
00031 fileCatalogItems_(),
00032 fileLocator_(),
00033 overrideFileLocator_(),
00034 fallbackFileLocator_(),
00035 overrideFallbackFileLocator_() {
00036
00037 init(override, overrideFallback, useLFNasPFNifLFNnotFound);
00038 }
00039
00040 InputFileCatalog::~InputFileCatalog() {}
00041
00042 void InputFileCatalog::init(std::string const& inputOverride, std::string const& inputOverrideFallback, bool useLFNasPFNifLFNnotFound) {
00043
00044 fileCatalogItems_.reserve(fileNames_.size());
00045 typedef std::vector<std::string>::iterator iter;
00046 for(iter it = fileNames_.begin(), lt = logicalFileNames_.begin(), itEnd = fileNames_.end(), ft = fallbackFileNames_.begin();
00047 it != itEnd; ++it, ++lt, ++ft) {
00048 boost::trim(*it);
00049 if (it->empty()) {
00050 throw Exception(errors::Configuration, "InputFileCatalog::InputFileCatalog()\n")
00051 << "An empty string specified in the fileNames parameter for input source.\n";
00052 }
00053 if (isPhysical(*it)) {
00054
00055 lt->clear();
00056 } else {
00057 if (!fileLocator_) {
00058 fileLocator_.reset(new FileLocator("", false));
00059 }
00060 if (!overrideFileLocator_ && !inputOverride.empty()) {
00061 overrideFileLocator_.reset(new FileLocator(inputOverride, false));
00062 }
00063 if (!fallbackFileLocator_) {
00064 try {
00065 fallbackFileLocator_.reset(new FileLocator("", true));
00066 } catch (cms::Exception const& e) {
00067
00068 }
00069 }
00070 if (!overrideFallbackFileLocator_ && !inputOverrideFallback.empty()) {
00071 overrideFallbackFileLocator_.reset(new FileLocator(inputOverrideFallback, true));
00072 }
00073 boost::trim(*lt);
00074 findFile(*it, *ft, *lt, useLFNasPFNifLFNnotFound);
00075 }
00076 fileCatalogItems_.push_back(FileCatalogItem(*it, *lt, *ft));
00077 }
00078 }
00079
00080 void InputFileCatalog::findFile(std::string& pfn, std::string& fallbackPfn, std::string const& lfn, bool useLFNasPFNifLFNnotFound) {
00081 if (overrideFileLocator_) {
00082 pfn = overrideFileLocator_->pfn(lfn);
00083 if (pfn.empty()) {
00084 pfn = fileLocator_->pfn(lfn);
00085 }
00086 } else {
00087 pfn = fileLocator_->pfn(lfn);
00088 }
00089 if (pfn.empty() && useLFNasPFNifLFNnotFound) {
00090 pfn = lfn;
00091 }
00092
00093
00094 if (overrideFallbackFileLocator_) {
00095 fallbackPfn = overrideFallbackFileLocator_->pfn(lfn);
00096 if (fallbackFileLocator_ && fallbackPfn.empty()) {
00097 fallbackPfn = fallbackFileLocator_->pfn(lfn);
00098 }
00099 } else if (fallbackFileLocator_) {
00100 fallbackPfn = fallbackFileLocator_->pfn(lfn);
00101
00102 }
00103 }
00104 }