ATLAS Offline Software
dataset.h
Go to the documentation of this file.
1 /* emacs: this is -*- c++ -*- */
12 #ifndef ANALYSIS_DATASET_H
13 #define ANALYSIS_DATASET_H
14 
15 #include <cstdio>
16 #include <cstdlib>
17 
18 #include <dirent.h>
19 
20 #include <string>
21 #include <iostream>
22 #include <fstream>
23 #include <vector>
24 
25 // #include <XrdPosix/XrdPosixXrootd.hh>
26 
27 class dataset : public std::vector<std::string> {
28 
29 public:
30 
31  dataset(const std::string& st) : m_directory(st) {
32  std::cout << "dataset::dataset() reading files from " << st << std::endl;
33 
34  std::string s = st;
35 
36  if ( s.find("root://eos")!=std::string::npos ) {
38 
40  // std::string xcmd = "/afs/cern.ch/project/eos/installation/0.3.84-aquamarine/bin/eos.select ls "+s+"/";
41  size_t pos=s.find("//");
42  while( pos!=std::string::npos ) {
43  s = s.substr(pos+1,s.length());
44  pos=s.find("//");
45  }
46  // std::string xcmd = "eos ls "+bases+"/";
47  std::string xcmd = "eos ls "+s+"/";
48  std::system( (xcmd+" > .eosfiles-$$.log").c_str() );
49 
50  std::string cmd = "export EOSFILES=$("+xcmd+")";
51  std::system( cmd.c_str() );
52 
53  std::ifstream infile(".eosfiles-$$.log");
54 
55  while( !infile.fail() ) {
56  std::string file;
57  infile >> file;
58  if ( !infile.fail() &&
59  file.find(".root")!=std::string::npos &&
60  file.find(".part")==std::string::npos &&
61  file.find(".bak")==std::string::npos &&
62  file.find(".skimmed")==std::string::npos ) push_back( s+"/"+file );
63  }
64 
65  // for ( unsigned i=size() ; i-- ; ) std::cout << at(i) << std::endl;
66 
68  // std::string files = std::getenv("EOSFILES");
69  // std::cout << "files " << files << std::endl;
70 
71  }
72  else {
73  DIR *dirp;
74  struct dirent *entry;
75 
76  if( ( dirp = opendir(s.c_str()) ) ) {
77  while( ( entry = readdir(dirp) ) ) {
78  std::string file = entry->d_name;
79  if ( file.find(".root")!=std::string::npos ) {
80  push_back( s+"/"+file );
81  // std::cout << " read file: " << entry->d_name << std::endl;
82  }
83  }
84  closedir(dirp);
85  }
86  std::cout << "dataset::dataset() " << size() << " files in dataset" << std::endl;
87  }
88  }
89 
90  ~dataset() { }
91 
92  const std::string& directory() const { return m_directory; }
93 
94  const std::vector<std::string>& datafiles() { return *this; }
95 
96 private:
97 
98  std::string m_directory;
99 
100 };
101 
102 inline std::ostream& operator<<( std::ostream& s, const dataset& ds ) {
103  return s << ds.directory() << " " << ds.size();
104 }
105 
106 
107 #endif // ANALYSIS_DATASET_H
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
checkxAOD.ds
ds
Definition: Tools/PyUtils/bin/checkxAOD.py:260
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
operator<<
std::ostream & operator<<(std::ostream &s, const dataset &ds)
Definition: dataset.h:102
dataset::directory
const std::string & directory() const
Definition: dataset.h:92
run.infile
string infile
Definition: run.py:13
rerun_display.cmd
string cmd
Definition: rerun_display.py:67
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
file
TFile * file
Definition: tile_monitor.h:29
dataset
Definition: dataset.h:27
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
dataset::dataset
dataset(const std::string &st)
Definition: dataset.h:31
dataset::datafiles
const std::vector< std::string > & datafiles()
Definition: dataset.h:94
dataset::~dataset
~dataset()
Definition: dataset.h:90
dataset::m_directory
std::string m_directory
Definition: dataset.h:98