CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
edm::FileInPath Class Reference

#include <FileInPath.h>

Public Types

enum  LocationCode { Unknown = 0, Local = 1, Release = 2, Data = 3 }
 

Public Member Functions

 FileInPath ()
 
 FileInPath (const std::string &r)
 We throw an exception is the referenced file is not found. More...
 
 FileInPath (const char *r)
 
const std::string & fullPath () const
 
LocationCode location () const
 Where was the file found? More...
 
void read (std::istream &is)
 
void readFromParameterSetBlob (std::istream &is)
 
const std::string & relativePath () const
 
void swap (FileInPath &other)
 
void write (std::ostream &os) const
 

Static Public Member Functions

static void disableFileLookup ()
 Should only be called while the edmWriteConfigs executable runs. More...
 
static std::string findFile (std::string const &)
 

Private Member Functions

void getEnvironment ()
 
void initialize_ ()
 

Static Private Member Functions

static std::string const & searchPath ()
 

Private Attributes

std::string canonicalFilename_
 
std::string dataTop_
 
std::string localTop_
 
LocationCode location_
 
std::string relativePath_
 
std::string releaseTop_
 
std::string searchPath_
 

Detailed Description

Definition at line 61 of file FileInPath.h.

Member Enumeration Documentation

◆ LocationCode

Enumerator
Unknown 
Local 
Release 
Data 

Definition at line 63 of file FileInPath.h.

Constructor & Destructor Documentation

◆ FileInPath() [1/3]

edm::FileInPath::FileInPath ( )

Default c'tor does no file-existence check; what file would it check for existence?

Definition at line 104 of file FileInPath.cc.

References getEnvironment().

105  if (s_fileLookupDisabled) {
106  return;
107  }
108  getEnvironment();
109  }
std::string canonicalFilename_
Definition: FileInPath.h:113
void getEnvironment()
Definition: FileInPath.cc:329
LocationCode location_
Definition: FileInPath.h:114
std::string relativePath_
Definition: FileInPath.h:112

◆ FileInPath() [2/3]

edm::FileInPath::FileInPath ( const std::string &  r)
explicit

We throw an exception is the referenced file is not found.

Definition at line 111 of file FileInPath.cc.

References getEnvironment(), and initialize_().

112  if (s_fileLookupDisabled) {
113  return;
114  }
115  getEnvironment();
116  initialize_();
117  }
std::string canonicalFilename_
Definition: FileInPath.h:113
void getEnvironment()
Definition: FileInPath.cc:329
LocationCode location_
Definition: FileInPath.h:114
void initialize_()
Definition: FileInPath.cc:359
std::string relativePath_
Definition: FileInPath.h:112

◆ FileInPath() [3/3]

edm::FileInPath::FileInPath ( const char *  r)
explicit

Definition at line 119 of file FileInPath.cc.

References Exception, edm::errors::FileInPathError, getEnvironment(), and initialize_().

120  if (s_fileLookupDisabled) {
121  return;
122  }
123  if (r == nullptr) {
124  throw edm::Exception(edm::errors::FileInPathError) << "Relative path must not be null\n";
125  }
126  getEnvironment();
127  initialize_();
128  }
std::string canonicalFilename_
Definition: FileInPath.h:113
void getEnvironment()
Definition: FileInPath.cc:329
LocationCode location_
Definition: FileInPath.h:114
void initialize_()
Definition: FileInPath.cc:359
std::string relativePath_
Definition: FileInPath.h:112

Member Function Documentation

◆ disableFileLookup()

void edm::FileInPath::disableFileLookup ( )
static

Should only be called while the edmWriteConfigs executable runs.

Definition at line 433 of file FileInPath.cc.

433 { s_fileLookupDisabled = true; }

◆ findFile()

std::string edm::FileInPath::findFile ( std::string const &  iFileName)
static

Uses the same algorithm to find the file but does not determine the location. Returns an empty string if unfound.

Definition at line 435 of file FileInPath.cc.

References EnsembleCalibrationLA_cfg::path, searchPath(), and edm::tokenize().

Referenced by magneticfield::InterpolatorBuilder::build(), and magneticfield::InterpolatorBuilder::InterpolatorBuilder().

435  {
436  // Find the file, based on the value of path variable.
437  auto pathElements = tokenize(searchPath(), ":");
438  for (auto const& element : pathElements) {
439  // Set the boost::fs path to the current element of
440  // CMSSW_SEARCH_PATH:
441  std::filesystem::path pathPrefix(element);
442 
443  // Does the a file exist? locateFile throws is it finds
444  // something goofy.
445  if (locateFile(pathPrefix, iFileName)) {
446  // Convert relative path to canonical form, and save it.
447  return std::filesystem::absolute(pathPrefix / iFileName).string();
448  }
449  }
450  return {};
451  }
static std::string const & searchPath()
Definition: FileInPath.cc:323
std::vector< std::string > tokenize(std::string const &input, std::string const &separator)
breaks the input string into tokens, delimited by the separator
Definition: Parse.cc:52

◆ fullPath()

const std::string & edm::FileInPath::fullPath ( ) const

Return a string that can be used to open the referenced file.

Note that operations on this file may fail, including testing for existence. This is because the state of a filesystem is global; other threads, processes, etc., may have removed the file since we checked on its existence at the time of construction of the FileInPath object.

Definition at line 144 of file FileInPath.cc.

References canonicalFilename_.

Referenced by Phase1PixelSummaryMap::addNamedBins(), MillePedeAlignmentAlgorithm::addPxbSurvey(), SiStripPedestalsBuilder::analyze(), SiStripThresholdBuilder::analyze(), SiStripNoisesBuilder::analyze(), SiStripApvGainBuilder::analyze(), SiStripNoisesAndBadCompsChecker::analyze(), JetCorrectorDemo::analyze(), MuonGeometrySVGTemplate::analyze(), HcalLutAnalyzer::analyze(), HGCalWaferValidation::analyze(), PixelRegions::attachedDets(), BeamSpotFakeConditions::BeamSpotFakeConditions(), JetCorrectorDBWriter::beginJob(), ProtonTaggerFilter::beginJob(), OMTFReconstruction::beginRun(), omtf::OmtfPacker::beginRun(), omtf::OmtfUnpacker::beginRun(), GoodSeedProducer::beginRun(), ExternalLHEProducer::beginRunProduce(), HGCalValidator::bookHistograms(), SiStripQualityHotStripIdentifier::bookHistos(), BTagSFProducer::BTagSFProducer(), HcalTPGCoderULUT::buildCoder(), MagGeoBuilderFromDDD::buildInterpolator(), CTPPSCompositeESSource::buildOptics(), CacheData::CacheData(), CaloMiscalibTools::CaloMiscalibTools(), CaloMiscalibToolsMC::CaloMiscalibToolsMC(), GBRForestWriter::categoryEntryType::categoryEntryType(), CTPPSPixelDAQMappingESSourceXML::CompleteFileName(), TotemDAQMappingESSourceXML::CompleteFileName(), createGBRForest(), CSCTFPtLUT::CSCTFPtLUT(), CTPPSOpticalFunctionsESSource::CTPPSOpticalFunctionsESSource(), SiStripPopConNoisesHandlerFromDQM::dqmEndJob(), SiStripPopConPedestalsHandlerFromDQM::dqmEndJob(), SiStripPopConBadComponentsHandlerFromDQM::dqmEndJob(), DTOccupancyTestML::dqmEndLuminosityBlock(), dtCalibration::DTTTrigResidualCorrection::DTTTrigResidualCorrection(), EcalEBPhase2TPParamProducer::EcalEBPhase2TPParamProducer(), ElectronPATIdMVAProducer::ElectronPATIdMVAProducer(), OccupancyPlots::endRun(), ESDataFormatterV4::ESDataFormatterV4(), ESDigiToRaw::ESDigiToRaw(), ESElectronicsMapper::ESElectronicsMapper(), ESIntegrityClient::ESIntegrityClient(), ESPedestalClient::ESPedestalClient(), ESUnpacker::ESUnpacker(), LateralityCoarsedProvider::fill_lat_combinations(), MuonPathSLFitter::fillLuts(), MuonPathCorFitter::fillLuts(), HGCalTriggerGeometryV9Imp2::fillMaps(), HGCalTriggerGeometryV9Imp3::fillMaps(), edm::service::FixMissingStreamerInfos::FixMissingStreamerInfos(), ESTrivialConditionRetriever::getChannelStatusFromConfiguration(), EcalTrivialConditionRetriever::getChannelStatusFromConfiguration(), EcalTrivialConditionRetriever::getMappingFromConfiguration(), SiStripGainFromAsciiFile::getNewObject(), SiStripBadModuleByHandBuilder::getNewObject(), SiStripBadChannelBuilder::getNewObject(), SiStripBadStripFromASCIIFile::getNewObject(), SiStripNoisesFromDBMiscalibrator::getNewObject_withDefaults(), EcalMappingElectronicsHandler::getNewObjects(), EcalTrivialConditionRetriever::getPFRecHitThresholdsFromConfiguration(), EcalTrivialConditionRetriever::getTrgChannelStatusFromConfiguration(), ESTrivialConditionRetriever::getWeightsFromConfiguration(), EcalTrivialConditionRetriever::getWeightsFromConfiguration(), HcalHardcodeCalibrations::HcalHardcodeCalibrations(), HcalLaserEventFilter2012::HcalLaserEventFilter2012(), l1t::HGC3DClusterTMVASelector::HGC3DClusterTMVASelector(), HGCalMappingESProducer::HGCalMappingESProducer(), HGCalNumberingScheme::HGCalNumberingScheme(), HGCalTriggerTowerGeometryHelper::HGCalTriggerTowerGeometryHelper(), HGCalValidator::HGCalValidator(), HGCScintSD::HGCScintSD(), PDFWeightsHelper::Init(), gen::EvtGenInterface::init(), l1tpf::corrector::init_(), CandidateBoostedDoubleSecondaryVertexComputer::initialize(), MuonTagger::initialize(), CandidateChargeBTagComputer::initialize(), CombinedMVAV2JetTagComputer::initialize(), ElectronTagger::initialize(), CharmTagger::initialize(), HeavyIonCSVTagger::initialize(), ApeSettingAlgorithm::initialize(), TritonEDFilterT< G, Capabilities >::initializeGlobalCache(), TritonEDProducerT< G, Capabilities >::initializeGlobalCache(), DeepMETProducer::initializeGlobalCache(), L1NNTauProducer::initializeGlobalCache(), TracksterLinksProducer::initializeGlobalCache(), L1NNCaloTauProducer::initializeGlobalCache(), L1NNCaloTauEmulator::initializeGlobalCache(), DeepTauId::initializeGlobalCache(), L2TauNNProducerAlpaka::initializeGlobalCache(), L2TauNNProducer::initializeGlobalCache(), metsig::SignAlgoResolutions::initializeJetResolutions(), PileupJetIdProducer::initJetEnergyCorrector(), egammaTools::EgammaDNNHelper::initScalerFiles(), reco::DeepSCGraphEvaluation::initTensorFlowGraphAndSession(), L1FPGATrackProducer::L1FPGATrackProducer(), L1TGlobalPrescalesVetosESProducer::L1TGlobalPrescalesVetosESProducer(), L1TGlobalPrescalesVetosFractESProducer::L1TGlobalPrescalesVetosFractESProducer(), L1TMuonOverlapParamsESProducer::L1TMuonOverlapParamsESProducer(), L1TrackVertexAssociationProducer::L1TrackVertexAssociationProducer(), CovarianceParameterization::load(), L1MuDTPtaLut::load(), L1MuDTPhiLut::load(), L1MuDTEtaPatternLut::load(), L1MuBMTEtaPatternLut::load(), L1MuDTQualPatternLut::load(), L1MuBMTQualPatternLut::load(), L1MuDTExtLut::load(), L1TMuonBarrelParamsHelper::load_ext(), L1TMuonBarrelParamsHelper::load_phi(), L1TMuonBarrelParamsHelper::load_pt(), DTCCablingMapProducer::LoadModulesToDTCCablingMapFromCSV(), ClusterShapeHitFilter::loadStripLimits(), main(), SiStripFedCablingFakeESSource::make(), jpt::Map::Map(), MaterialBudgetCategorizer::MaterialBudgetCategorizer(), MPFilter::MPFilter(), MuonHLTSeedMVAClassifier::MuonHLTSeedMVAClassifier(), pat::MuonMvaIDEstimator::MuonMvaIDEstimator(), MuonPathAnalyticAnalyzer::MuonPathAnalyticAnalyzer(), MuonPathAnalyzerInChamber::MuonPathAnalyzerInChamber(), MuonPathAssociator::MuonPathAssociator(), MuonPathConfirmator::MuonPathConfirmator(), MuonPathFitter::MuonPathFitter(), MuonPathSLFitter::MuonPathSLFitter(), MVAJetPuId::MVAJetPuId(), MVAVariableManager< reco::GsfElectron >::MVAVariableManager(), fastsim::NuclearInteraction::NuclearInteraction(), NuclearInteractionSimulator::NuclearInteractionSimulator(), OnlineDQMDigiAD::OnlineDQMDigiAD(), OverlapValidation::OverlapValidation(), HcalTBObjectUnpacker::parseCalib(), cond::persistency::parseFipConnectionString(), EcalEBTrigPrimPhase2ESProducer::parseTextFile(), EcalTrigPrimESProducer::parseTextFile(), EcalTrigTowerConstituentsMapBuilder::parseTextMap(), CaloTowerConstituentsMapBuilder::parseTextMap(), EcalEBTrigPrimPhase2ESProducer::parseWeightsFile(), cms::PileupJPTJetIdAlgo::PileupJPTJetIdAlgo(), PixelTemplateSmearerBase::PixelTemplateSmearerBase(), l1tpf::HGC3DClusterEgID::prepareTMVA(), LwtnnESProducer::produce(), HepPDTESSource::produce(), ALPAKA_ACCELERATOR_NAMESPACE::hgcal::HGCalMappingModuleESProducer::produce(), HcalTPGCoderULUT::produce(), ALPAKA_ACCELERATOR_NAMESPACE::hgcal::HGCalMappingCellESProducer::produce(), SiPixelFakeGainOfflineESSource::produce(), SiPixelFakeGainESSource::produce(), SiPixelFakeGainForHLTESSource::produce(), SiPixelFakeLorentzAngleESSource::produce(), CaloTPGTranscoderULUTs::produce(), MaskedRctInputDigiProducer::produce(), ecaldqm::MLClient::producePlots(), gen::PtYDistributor::PtYDistributor(), gen::Py8HMC3InterfaceBase::Py8HMC3InterfaceBase(), gen::Py8InterfaceBase::Py8InterfaceBase(), PYBIND11_MODULE(), QualityTester::QualityTester(), SiStripApvGainFromFileBuilder::read_tickmark(), reco::DeepSCGraphEvaluation::readInputFeaturesConfig(), CSCTFPtLUT::readLUT(), CSCSectorReceiverLUT::readLUTsFromFile(), GsfBetheHeitlerUpdator::readParameters(), gen::ReggeGribovPartonMCHadronizer::ReggeGribovPartonMCHadronizer(), RPCCalibSetUp::RPCCalibSetUp(), RPCDBSimSetUp::RPCDBSimSetUp(), L1TrackQuality::runEmulatedTQ(), SelectedElectronFEDListProducer< TEle, TCand >::SelectedElectronFEDListProducer(), L1TrackQuality::setL1TrackQuality(), ecaldqm::LedClient::setParams(), ShiftedJetProducerT< T, Textractor >::ShiftedJetProducerT(), ShiftedPFCandidateProducerForNoPileUpPFMEt::ShiftedPFCandidateProducerForNoPileUpPFMEt(), ShiftedPFCandidateProducerForPFNoPUMEt::ShiftedPFCandidateProducerForPFNoPUMEt(), SiLinearChargeDivider::SiLinearChargeDivider(), SiStripApvGainFakeESSource::SiStripApvGainFakeESSource(), SiStripBadModuleConfigurableFakeESSource::SiStripBadModuleConfigurableFakeESSource(), SiStripBaseDelayFakeESSource::SiStripBaseDelayFakeESSource(), SiStripClusters2ApproxClusters::SiStripClusters2ApproxClusters(), SiStripDigitizerAlgorithm::SiStripDigitizerAlgorithm(), SiStripFedCablingFakeESSource::SiStripFedCablingFakeESSource(), SiStripHitEffFromCalibTree::SiStripHitEffFromCalibTree(), SiStripHitResolFromCalibTree::SiStripHitResolFromCalibTree(), SiStripLatencyFakeESSource::SiStripLatencyFakeESSource(), SiStripNoisesFakeESSource::SiStripNoisesFakeESSource(), SiStripPedestalsFakeESSource::SiStripPedestalsFakeESSource(), SiStripThresholdFakeESSource::SiStripThresholdFakeESSource(), trends(), TritonClient::TritonClient(), TtSemiLepHitFitProducer< LeptonCollection >::TtSemiLepHitFitProducer(), emtf::phase2::EMTFContext::update(), l1tVertexFinder::AlgoSettings::vx_pattrec_graph(), l1tVertexFinder::AlgoSettings::vx_trkw_graph(), and FWRecoGeometryESProducer::writeTrackerParametersXML().

144 { return canonicalFilename_; }
std::string canonicalFilename_
Definition: FileInPath.h:113

◆ getEnvironment()

void edm::FileInPath::getEnvironment ( void  )
private

Definition at line 329 of file FileInPath.cc.

References dataTop_, Exception, edm::errors::FileInPathError, localTop_, releaseTop_, searchPath(), searchPath_, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by FileInPath().

329  {
331  if (searchPath_.empty()) {
332  throw edm::Exception(edm::errors::FileInPathError) << PathVariableName << " must be defined\n";
333  }
334 
335  static std::string const releaseTop = removeSymLinksSrc(RELEASETOP);
336  releaseTop_ = releaseTop;
337 
338  static std::string const localTop = removeSymLinksSrc(LOCALTOP);
339  localTop_ = localTop;
340 
341  static std::string const dataTop = removeSymLinks(DATATOP);
342  dataTop_ = dataTop;
343 
344  if (releaseTop_.empty()) {
345  // RELEASETOP was not set. This means that the environment is set
346  // for the base release itself. So LOCALTOP actually contains the
347  // location of the base release.
349  localTop_.clear();
350  }
351  if (releaseTop_ == localTop_) {
352  // RELEASETOP is the same as LOCALTOP. This means that the environment is set
353  // for the base release itself. So LOCALTOP actually contains the
354  // location of the base release.
355  localTop_.clear();
356  }
357  }
std::string dataTop_
Definition: FileInPath.h:117
std::string searchPath_
Definition: FileInPath.h:118
std::string releaseTop_
Definition: FileInPath.h:116
static std::string const & searchPath()
Definition: FileInPath.cc:323
std::string localTop_
Definition: FileInPath.h:115

◆ initialize_()

void edm::FileInPath::initialize_ ( )
private

Definition at line 359 of file FileInPath.cc.

References beamvalidation::br, canonicalFilename_, Data, dataTop_, Exception, edm::errors::FileInPathError, Local, localTop_, location_, EnsembleCalibrationLA_cfg::path, relativePath_, Release, releaseTop_, searchPath_, and edm::tokenize().

Referenced by FileInPath().

359  {
360  if (relativePath_.empty()) {
361  throw edm::Exception(edm::errors::FileInPathError) << "Relative path must not be empty\n";
362  }
363 
364  // Find the file, based on the value of searchPath.
365  typedef std::vector<std::string> stringvec_t;
366  stringvec_t pathElements = tokenize(searchPath_, ":");
367  for (auto const& element : pathElements) {
368  // Set the path to the current element of CMSSW_SEARCH_PATH:
369  std::filesystem::path pathPrefix(element);
370 
371  // Does the a file exist? locateFile throws is it finds
372  // something goofy.
373  if (locateFile(pathPrefix, relativePath_)) {
374  // Convert relative path to canonical form, and save it.
375  relativePath_ = std::filesystem::path(relativePath_).lexically_normal().string();
376  //std::filesystem::path(relativePath_).normalize().string();
377 
378  // Save the absolute path.
379  canonicalFilename_ = std::filesystem::absolute(pathPrefix / relativePath_).string();
380  if (canonicalFilename_.empty()) {
382  << "fullPath is empty"
383  << "\nrelativePath() is: " << relativePath_ << "\npath prefix is: " << pathPrefix.string() << '\n';
384  }
385 
386  // From the current path element, find the branch path (basically the path minus the
387  // last directory, e.g. /src or /share):
388  for (std::filesystem::path br = pathPrefix.parent_path();
389  !std::filesystem::weakly_canonical(br).string().empty();
390  br = br.parent_path()) {
391  if (!localTop_.empty()) {
392  // Create a path object for our local path LOCALTOP:
394  // If the branch path matches the local path, the file was found locally:
395  if (br == local_) {
396  location_ = Local;
397  return;
398  }
399  }
400 
401  if (!releaseTop_.empty()) {
402  // Create a path object for our release path RELEASETOP:
404  // If the branch path matches the release path, the file was found in the release:
405  if (br == release_) {
406  location_ = Release;
407  return;
408  }
409  }
410 
411  if (!dataTop_.empty()) {
412  // Create a path object for our data path DATATOP:
414  // If the branch path matches the data path, the file was found in the data area:
415  if (br == data_) {
416  location_ = Data;
417  return;
418  }
419  }
420  }
421  }
422  }
423 
424  // If we got here, we ran out of path elements without finding
425  // what we're looking found.
427  << "edm::FileInPath unable to find file " << relativePath_ << " anywhere in the search path."
428  << "\nThe search path is defined by: " << PathVariableName << "\n${" << PathVariableName
429  << "} is: " << std::getenv(PathVariableName.c_str())
430  << "\nCurrent directory is: " << std::filesystem::current_path().string() << "\n";
431  }
std::string canonicalFilename_
Definition: FileInPath.h:113
std::string dataTop_
Definition: FileInPath.h:117
std::string searchPath_
Definition: FileInPath.h:118
std::string releaseTop_
Definition: FileInPath.h:116
LocationCode location_
Definition: FileInPath.h:114
std::vector< std::string > tokenize(std::string const &input, std::string const &separator)
breaks the input string into tokens, delimited by the separator
Definition: Parse.cc:52
std::string relativePath_
Definition: FileInPath.h:112
std::string localTop_
Definition: FileInPath.h:115

◆ location()

FileInPath::LocationCode edm::FileInPath::location ( ) const

◆ read()

void edm::FileInPath::read ( std::istream &  is)

Read from the given istream, and set contents accordingly. Reading errors are reflected in the state of the stream.

Definition at line 189 of file FileInPath.cc.

References canonicalFilename_, Data, dataTop_, Exception, edm::errors::FileInPathError, isotrackTrainRegressor::loc, DTRecHitClients_cfi::local, Local, localTop_, location_, relativePath_, Release, releaseTop_, AlCaHLTBitMon_QueryRunRegistry::string, Unknown, and relval_steps::version.

Referenced by edmIntegrityCheck.PublishToFileSystem::get(), and edm::operator>>().

189  {
190  std::string vsn;
191  std::string relname;
192  std::string canFilename;
193 #if 1
194  // This #if needed for backward compatibility
195  // for files written before CMSSW_1_5_0_pre3.
196  is >> vsn;
197  if (!is)
198  return;
199  bool oldFormat = (version != vsn);
200  if (oldFormat) {
201  relname = vsn;
202  bool local;
203  is >> local;
204  location_ = (local ? Local : Release);
205  is >> canFilename;
206  } else {
207  // Current format
208  int loc;
209  is >> relname >> loc;
210  location_ = static_cast<FileInPath::LocationCode>(loc);
211  if (location_ != Unknown) {
212  is >> canFilename;
213  } else if (relname == "@") {
214  relname = "";
215  }
216  }
217 #else
218  is >> vsn >> relname >> loc >> canFilename;
219 #endif
220  if (!is)
221  return;
222  relativePath_ = relname;
223  if (location_ == Local) {
224  if (localTop_.empty()) {
225  throw edm::Exception(edm::errors::FileInPathError) << "Environment Variable " << LOCALTOP << " is not set.\n"
226  << "Trying to read Local file: " << canFilename << ".\n";
227  }
228 #if 1
229  // This #if needed for backward compatibility
230  // for files written before CMSSW_1_5_0_pre3.
231  if (oldFormat) {
232  canonicalFilename_ = canFilename;
233  } else
234 #endif
235  canonicalFilename_ = localTop_ + canFilename;
236  } else if (location_ == Release) {
237  if (releaseTop_.empty()) {
238  throw edm::Exception(edm::errors::FileInPathError) << "Environment Variable " << RELEASETOP << " is not set.\n";
239  }
240 #if 1
241  // This #if needed for backward compatibility
242  // for files written before CMSSW_1_5_0_pre3.
243  if (oldFormat) {
244  std::string::size_type pos = canFilename.find(BASE);
245  if (pos == 0) {
246  // Replace the placehoder with the path to the base release (site dependent).
247  canonicalFilename_ = releaseTop_ + canFilename.substr(BASE.size());
248  } else {
249  // Needed for files written before CMSSW_1_2_0_pre2.
250  canonicalFilename_ = canFilename;
251  }
252  } else
253 #endif
254  canonicalFilename_ = releaseTop_ + canFilename;
255  } else if (location_ == Data) {
256  if (dataTop_.empty()) {
257  throw edm::Exception(edm::errors::FileInPathError) << "Environment Variable " << DATATOP << " is not set.\n";
258  }
259  canonicalFilename_ = dataTop_ + canFilename;
260  }
261  }
std::string canonicalFilename_
Definition: FileInPath.h:113
std::string dataTop_
Definition: FileInPath.h:117
uint16_t size_type
std::string releaseTop_
Definition: FileInPath.h:116
LocationCode location_
Definition: FileInPath.h:114
std::string relativePath_
Definition: FileInPath.h:112
std::string localTop_
Definition: FileInPath.h:115

◆ readFromParameterSetBlob()

void edm::FileInPath::readFromParameterSetBlob ( std::istream &  is)

Definition at line 263 of file FileInPath.cc.

References canonicalFilename_, Data, dataTop_, Exception, edm::errors::FileInPathError, isotrackTrainRegressor::loc, DTRecHitClients_cfi::local, Local, localTop_, location_, relativePath_, Release, releaseTop_, AlCaHLTBitMon_QueryRunRegistry::string, Unknown, and relval_steps::version.

263  {
264  std::string vsn;
265  std::string relname;
266  std::string canFilename;
267  is >> vsn;
268  if (!is)
269  return;
270  bool oldFormat = (version != vsn);
271  if (oldFormat) {
272  relname = vsn;
273  bool local;
274  is >> local;
275  location_ = (local ? Local : Release);
276  is >> canFilename;
277  } else {
278  // Current format
279  int loc;
280  is >> relname >> loc;
281  location_ = static_cast<FileInPath::LocationCode>(loc);
282  if (location_ != Unknown) {
283  is >> canFilename;
284  } else if (relname == "@") {
285  relname = "";
286  }
287  }
288  if (!is)
289  return;
290  relativePath_ = relname;
291  if (location_ == Local) {
292  if (localTop_.empty()) {
293  localTop_ = "@LOCAL";
294  }
295  if (oldFormat) {
296  canonicalFilename_ = canFilename;
297  } else
298  canonicalFilename_ = localTop_ + canFilename;
299  } else if (location_ == Release) {
300  if (releaseTop_.empty()) {
301  releaseTop_ = "@RELEASE";
302  }
303  if (oldFormat) {
304  std::string::size_type pos = canFilename.find(BASE);
305  if (pos == 0) {
306  // Replace the placehoder with the path to the base release (site dependent).
307  canonicalFilename_ = releaseTop_ + canFilename.substr(BASE.size());
308  } else {
309  // Needed for files written before CMSSW_1_2_0_pre2.
310  canonicalFilename_ = canFilename;
311  }
312  } else
313  canonicalFilename_ = releaseTop_ + canFilename;
314  } else if (location_ == Data) {
315  if (dataTop_.empty()) {
316  throw edm::Exception(edm::errors::FileInPathError) << "Environment Variable " << DATATOP << " is not set.\n";
317  }
318  canonicalFilename_ = dataTop_ + canFilename;
319  }
320  }
std::string canonicalFilename_
Definition: FileInPath.h:113
std::string dataTop_
Definition: FileInPath.h:117
uint16_t size_type
std::string releaseTop_
Definition: FileInPath.h:116
LocationCode location_
Definition: FileInPath.h:114
std::string relativePath_
Definition: FileInPath.h:112
std::string localTop_
Definition: FileInPath.h:115

◆ relativePath()

const std::string & edm::FileInPath::relativePath ( ) const

Return a string containing the canonical form of the relative path. DO NOT USE THIS AS THE FILENAME for any file operations; use fullPath() for that purpose.

Definition at line 140 of file FileInPath.cc.

References relativePath_.

Referenced by PDFWeightsHelper::Init(), and PYBIND11_MODULE().

140 { return relativePath_; }
std::string relativePath_
Definition: FileInPath.h:112

◆ searchPath()

std::string const & edm::FileInPath::searchPath ( )
staticprivate

Definition at line 323 of file FileInPath.cc.

References AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by findFile(), and getEnvironment().

323  {
324  static std::string const s_searchPath = removeSymLinksTokens(PathVariableName);
325  return s_searchPath;
326  }

◆ swap()

void edm::FileInPath::swap ( FileInPath other)

Definition at line 130 of file FileInPath.cc.

References canonicalFilename_, dataTop_, localTop_, location_, trackingPlots::other, relativePath_, releaseTop_, searchPath_, and edm::swap().

130  {
131  relativePath_.swap(other.relativePath_);
132  canonicalFilename_.swap(other.canonicalFilename_);
133  std::swap(location_, other.location_);
134  localTop_.swap(other.localTop_);
135  releaseTop_.swap(other.releaseTop_);
136  dataTop_.swap(other.dataTop_);
137  searchPath_.swap(other.searchPath_);
138  }
std::string canonicalFilename_
Definition: FileInPath.h:113
std::string dataTop_
Definition: FileInPath.h:117
std::string searchPath_
Definition: FileInPath.h:118
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:112
std::string releaseTop_
Definition: FileInPath.h:116
LocationCode location_
Definition: FileInPath.h:114
std::string relativePath_
Definition: FileInPath.h:112
std::string localTop_
Definition: FileInPath.h:115

◆ write()

void edm::FileInPath::write ( std::ostream &  os) const

Write contents to the given ostream. Writing errors are reflected in the state of the stream.

Definition at line 146 of file FileInPath.cc.

References canonicalFilename_, Data, dataTop_, Exception, edm::errors::FileInPathError, Local, localTop_, location_, l1tGTMenu_BTagSeeds_cff::os, relativePath_, Release, releaseTop_, Unknown, and relval_steps::version.

Referenced by edm::operator<<().

146  {
147  if (location_ == Unknown) {
148  if (relativePath_.empty()) {
149  os << version << " @ " << location_;
150  } else {
151  os << version << ' ' << relativePath_ << ' ' << location_;
152  }
153  } else if (location_ == Local) {
154  // Guarantee a site independent value by stripping $LOCALTOP.
155  if (localTop_.empty()) {
156  throw edm::Exception(edm::errors::FileInPathError) << "Environment Variable " << LOCALTOP << " is not set.\n";
157  }
159  if (pos != 0) {
161  << "Path " << canonicalFilename_ << " is not in the local release area " << localTop_ << "\n";
162  }
163  os << version << ' ' << relativePath_ << ' ' << location_ << ' ' << canonicalFilename_.substr(localTop_.size());
164  } else if (location_ == Release) {
165  // Guarantee a site independent value by stripping $RELEASETOP.
166  if (releaseTop_.empty()) {
167  throw edm::Exception(edm::errors::FileInPathError) << "Environment Variable " << RELEASETOP << " is not set.\n";
168  }
170  if (pos != 0) {
172  << "Path " << canonicalFilename_ << " is not in the base release area " << releaseTop_ << "\n";
173  }
174  os << version << ' ' << relativePath_ << ' ' << location_ << ' ' << canonicalFilename_.substr(releaseTop_.size());
175  } else if (location_ == Data) {
176  // Guarantee a site independent value by stripping $DATATOP.
177  if (dataTop_.empty()) {
178  throw edm::Exception(edm::errors::FileInPathError) << "Environment Variable " << DATATOP << " is not set.\n";
179  }
181  if (pos != 0) {
183  << "Path " << canonicalFilename_ << " is not in the data area " << dataTop_ << "\n";
184  }
185  os << version << ' ' << relativePath_ << ' ' << location_ << ' ' << canonicalFilename_.substr(dataTop_.size());
186  }
187  }
std::string canonicalFilename_
Definition: FileInPath.h:113
std::string dataTop_
Definition: FileInPath.h:117
uint16_t size_type
std::string releaseTop_
Definition: FileInPath.h:116
LocationCode location_
Definition: FileInPath.h:114
std::string relativePath_
Definition: FileInPath.h:112
std::string localTop_
Definition: FileInPath.h:115

Member Data Documentation

◆ canonicalFilename_

std::string edm::FileInPath::canonicalFilename_
private

Definition at line 113 of file FileInPath.h.

Referenced by fullPath(), initialize_(), read(), readFromParameterSetBlob(), swap(), and write().

◆ dataTop_

std::string edm::FileInPath::dataTop_
private

Definition at line 117 of file FileInPath.h.

Referenced by getEnvironment(), initialize_(), read(), readFromParameterSetBlob(), swap(), and write().

◆ localTop_

std::string edm::FileInPath::localTop_
private

Definition at line 115 of file FileInPath.h.

Referenced by getEnvironment(), initialize_(), read(), readFromParameterSetBlob(), swap(), and write().

◆ location_

LocationCode edm::FileInPath::location_
private

Definition at line 114 of file FileInPath.h.

Referenced by initialize_(), location(), read(), readFromParameterSetBlob(), swap(), and write().

◆ relativePath_

std::string edm::FileInPath::relativePath_
private

Definition at line 112 of file FileInPath.h.

Referenced by initialize_(), read(), readFromParameterSetBlob(), relativePath(), swap(), and write().

◆ releaseTop_

std::string edm::FileInPath::releaseTop_
private

Definition at line 116 of file FileInPath.h.

Referenced by getEnvironment(), initialize_(), read(), readFromParameterSetBlob(), swap(), and write().

◆ searchPath_

std::string edm::FileInPath::searchPath_
private

Definition at line 118 of file FileInPath.h.

Referenced by getEnvironment(), initialize_(), and swap().