ATLAS Offline Software
Loading...
Searching...
No Matches
dataset.h
Go to the documentation of this file.
1/* emacs: this is -*- c++ -*- */
10
11
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
27class dataset : public std::vector<std::string> {
28
29public:
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
96private:
97
98 std::string m_directory;
99
100};
101
102inline 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
dataset(const std::string &st)
Definition dataset.h:31
~dataset()
Definition dataset.h:90
const std::string & directory() const
Definition dataset.h:92
const std::vector< std::string > & datafiles()
Definition dataset.h:94
std::string m_directory
Definition dataset.h:98
std::ostream & operator<<(std::ostream &s, const dataset &ds)
Definition dataset.h:102
TFile * file