33{
37
41
42 try {
43
44 JParser<> zap(
"Auxiliary program to merge time-over-threshold data.");
45
46 zap[
'f'] =
make_field(inputFile,
"input file (output from JCalibrateToT).");
49
50 zap(argc, argv);
51 }
52 catch(const exception &error) {
53 FATAL(error.what() << endl);
54 }
55
56
57 gErrorIgnoreLevel = kError;
58
60
61 map_type zmap;
62
63
64 for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
65
66 DEBUG(
"Processing " << *i << endl) ;
67
68 TFile in(i->c_str(), "read");
69
70 TIter iter(in.GetListOfKeys());
71
72 for (TKey* key; (
key = (TKey*) iter.Next()) != NULL; ) {
73
74 if (TString(
key->GetName()).EndsWith(
_2SToT)) {
75
76 TH2* h2 =
dynamic_cast<TH2*
>(
key->ReadObj());
77
78 map_type::iterator p = zmap.find(h2->GetName());
79
80 if (p == zmap.end()) {
81
82 DEBUG(
"Clone " << h2->GetName() << endl);
83
84 p = zmap.insert(make_pair(h2->GetName(), (TH2*) h2->Clone())).first;
85
86 } else {
87
88 DEBUG(
"Add " << h2->GetName() << endl);
89
90 p->second->Add(h2);
91 }
92 }
93 }
94
95 for (map_type::iterator i = zmap.begin(); i != zmap.end(); ++i) {
96 i->second->SetDirectory(0);
97 }
98
99 in.Close();
100 }
101
102
103
105
106 for (map_type::iterator i = zmap.begin(); i != zmap.end(); ++i) {
107
108 if (i->first.EndsWith(
_2SToT)) {
109
110 TH2D* h2s = (TH2D*) i->second;
111
112 h2s->Write();
113 }
114 }
115
117
118 for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
119
121
124 }
125 }
126
127 out.Write();
128 out.Close();
129}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
static const char *const _2SToT
Histogram naming.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
KM3NeT DAQ data structures and auxiliaries.
std::map< int, range_type > map_type