40 number_of_bytes_zipped(0),
41 compression_factor(0.)
50 tree_info(TTree* tree) :
55 name = tree->GetName();
56 number_of_entries = tree->GetEntries();
57 number_of_bytes = tree->GetTotBytes();
58 number_of_bytes_zipped = tree->GetZipBytes();
60 if (number_of_bytes != 0){
61 compression_factor = double(number_of_bytes) / number_of_bytes_zipped;
64 TObjArray* ts = tree->GetListOfBranches();
68 if (ts->GetEntries() == 1) {
70 TBranch* branch =
dynamic_cast<TBranch*
>(tree->GetListOfBranches()->At(0));
73 type = branch->GetClassName();
78 for (TIter next(ts);
TObject* ps = next(); ) {
79 type += (type ==
"" ?
"" :
",") + std::string(ps->GetName());
82 type =
"{" + type +
"}";
95 bool equals(
const tree_info&
object)
const
97 return ((this->name ==
"" ||
object.name ==
"" || this->name ==
object.name) &&
98 (this->type ==
"" ||
object.type ==
"" ||
equals(this->type,
object.type)));
109 return (name !=
"" && type !=
"");
120 friend inline std::ostream&
operator<<(std::ostream& out,
const tree_info&
object)
124 return out << setw(24) << left <<
object.name <<
' '
125 << setw(32) << left <<
object.type <<
' '
126 << setw(10) << right <<
object.number_of_entries <<
' '
127 << setw( 6) << right << (
object.number_of_bytes >> 20) <<
" [MB] "
128 << setw( 6) << right << (
object.number_of_bytes_zipped >> 20) <<
" [MB] "
129 <<
FIXED(5,2) << (
object.compression_factor) <<
' ';
134 Long64_t number_of_entries;
135 Long64_t number_of_bytes;
136 Long64_t number_of_bytes_zipped;
137 double compression_factor;
147 static bool equals(
const std::string& first,
const std::string& second)
152 if (first ==
"") {
return true; }
153 if (second ==
"") {
return true; }
159 return first == second;
199 JParser<> zap(
"Auxiliary program to print ROOT TTree information.");
208 catch(
const exception &error) {
209 FATAL(error.what() << endl);
212 gErrorIgnoreLevel = kFatal;
214 int number_of_errors = 0;
216 for (vector<string>::const_iterator file_name = inputFile.begin(); file_name != inputFile.end(); ++file_name) {
218 TFile* file = TFile::Open(file_name->c_str());
224 cerr << *file_name <<
" not opened." << endl;
230 cout << *file_name << endl;
233 TIter iter(file->GetListOfKeys(), kIterBackward);
235 for (TKey* _key; (_key = (TKey*) iter.Next()) != NULL; ) {
237 TKey* p =
dynamic_cast<TKey*
>(file->GetListOfKeys()->Before(_key));
239 DEBUG(
"Key: " << _key->GetName() <<
' ' << (p == NULL || strcmp(_key->GetName(), p->GetName()) != 0) << endl);
241 if (p == NULL || strcmp(_key->GetName(), p->GetName()) != 0) {
243 tb = tree_info(
dynamic_cast<TTree*
>(_key->ReadObj()));
247 if (tb.is_valid() && ta == tb) {
252 format.
write(cout, key) <<
' ';
262 return (number_of_errors == 0 ? 0 : 1);
General purpose messaging.
#define DEBUG(A)
Message macros.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int main(int argc, char **argv)
Utility class to parse parameter values.
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
Auxiliary methods to convert data members or return values of member methods of a set of objects to a...
Utility class to parse parameter values.
std::ostream & write(std::ostream &out) const
Write the current parameter values.
Utility class to parse command line options.
std::string getClassname(const std::string &type_name)
Get type name, i.e. part after JEEP::TYPENAME_SEPARATOR.
const char * getNamespace()
Get namespace.
const array_type< JKey_t > & get_keys(const std::map< JKey_t, JValue_t, JComparator_t, JAllocator_t > &data)
Method to create array of keys of map.
bool equals(const JFirst_t &first, const JSecond_t &second, const double precision=std::numeric_limits< double >::min())
Check equality.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool is_valid(const json &js)
Check validity of JSon data.
JWriter & operator<<(JWriter &out, const JDAQChronometer &chronometer)
Write DAQ chronometer to output.
Auxiliary data structure for floating point format specification.
Template definition of auxiliary base class for comparison of data structures.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary base class for list of file names.