30{
33
35
38 JRange_t X;
39 double precision;
41
42 try {
43
44 JParser<> zap(
"Auxiliary program to zoom 1D histograms.");
45
46 zap[
'f'] =
make_field(inputFile,
"<input file>:<object name>");
51
52 zap(argc, argv);
53 }
54 catch(const exception &error) {
55 FATAL(error.what() << endl);
56 }
57
59
60 for (vector<JRootObjectID>::const_iterator input = inputFile.begin(); input != inputFile.end(); ++input) {
61
62 DEBUG(
"Input: " << *input << endl);
63
65
66 if (dir == NULL) {
67 ERROR(
"File: " << input->getFullFilename() <<
" not opened." << endl);
68 continue;
69 }
70
71 const TRegexp regexp(input->getObjectName());
72
73 TIter iter(dir->GetListOfKeys());
74
75 for (TKey* key; (
key = (TKey*) iter.Next()) != NULL; ) {
76
77 const TString tag(
key->GetName());
78
79 DEBUG(
"Key: " << tag <<
" match = " << tag.Contains(regexp) << endl);
80
81
82
83 if (tag.Contains(regexp) &&
isTObject(key)) {
84
85 TH1D* ha =
dynamic_cast<TH1D*
>(
key->ReadObj());
86
87 if (ha != NULL) {
88
89 const Int_t ix1 = max(ha->GetXaxis()->FindBin(X.getLowerLimit()), 1);
90 const Int_t ix2 = min(ha->GetXaxis()->FindBin(X.getUpperLimit()), ha->GetXaxis()->GetNbins());
91
93 << "[" << ix1 << "," << ix2 << "]" << endl);
94
95 TH1D* hb =
new TH1D(
MAKE_CSTRING(ha->GetName() <<
".zoom"), NULL,
96 ix2 - ix1 + 1, ha->GetXaxis()->GetBinLowEdge(ix1), ha->GetXaxis()->GetBinUpEdge(ix2));
97
98 if (fabs(ha->GetXaxis()->GetBinWidth(1) - hb->GetXaxis()->GetBinWidth(1)) > precision) {
99 FATAL(
"Binwidth x " <<
FIXED(9,5) << ha->GetXaxis()->GetBinWidth(1) <<
" != " <<
FIXED(9,5) << hb->GetXaxis()->GetBinWidth(1) << endl);
100 }
101
102 for (Int_t ix = ix1; ix <= ix2; ++ix) {
103
104 hb->SetBinContent(ix - ix1 + 1, ha->GetBinContent(ix));
105
106 if (ha->GetSumw2N()) {
107 hb->SetBinError(ix - ix1 + 1, ha->GetBinError(ix));
108 }
109 }
110
111 listOfObjects.push_back(hb);
112 }
113 }
114 }
115 }
116
117 if (!listOfObjects.empty()) {
118
120
121 for (vector<TObject*>::const_iterator i = listOfObjects.begin(); i != listOfObjects.end(); ++i) {
122 (*i)->Write();
123 }
124
125 out.Write();
126 out.Close();
127 }
128}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Utility class to parse command line options.
TDirectory * getDirectory(const JRootObjectID &id)
Get TDirectory pointer.
bool isTObject(const TKey *key)
Check if given key corresponds to a TObject.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...