4 Script converting DQM I/O format input file into folder structured ROOT file.
5 Ouput files historgrams are easy browseable by ROOT. When there are more than 1 run
6 in input file it creates a Run X named folder for each run.
7 Thanks for Marco Rovere for giving example script/class needed to browse DQM I/O
10 from __future__
import print_function
12 from builtins
import range
21 Class responsible for browsing the content of a DQM file produced
22 with the DQMIO I/O framework of CMSSW
24 types=[
"Ints",
"Floats",
"Strings",
25 "TH1Fs",
"TH1Ss",
"TH1Ds",
26 "TH2Fs",
"TH2Ss",
"TH2Ds",
27 "TH3Fs",
"TProfiles",
"TProfile2Ds",
"kNIndicies"]
29 def __init__(self, input_filename, output_filename):
32 self.
f = R.TFile(output_filename,
"RECREATE")
34 "TH2Fs" :
False,
"TH2Ds" :
False}
40 print(
" Input: %s\n Output: %s" % (input_filename,
49 Loop over the complete index and dump it on the screen.
51 indices = self._root_file.Get(
"Indices")
54 print(
"Run,\tLumi,\tType,\t\tFirstIndex,\tLastIndex")
55 for i
in range(indices.GetEntries()):
57 print(
'{0:4d}\t{1:4d}\t{2:4d}({3:s})\t\t{4:4d}\t{5:4d}'.
format(
58 indices.Run, indices.Lumi, indices.Type,
59 DQMIO.types[indices.Type], indices.FirstIndex, indices.LastIndex))
61 for i
in range(indices.GetEntries()):
63 if indices.Type < len(DQMIO.types):
65 [indices.FirstIndex,indices.LastIndex],
str(indices.Run))
68 print(
"Unknown histogram type. Type numer: %s" % (indices.Type))
73 Method looping over entries for specified histogram type and
74 writing to FullName path to output ROOT File
76 print(
"Working on: %s indexes: %s..%s" % (hist_type ,index_range[0],
78 t_tree = self._root_file.Get(hist_type)
79 __run_dir =
"Run %s" % (run)
81 if hist_type ==
"TProfiles":
83 R.gROOT.ProcessLine(
"TProfile* _tprof;")
85 t_tree.SetBranchAddress(
"Value", R._tprof)
86 t_tree.GetEntry(index_range[0])
87 elif hist_type ==
"TProfile2Ds":
89 R.gROOT.ProcessLine(
"TProfile2D* _tprof2d;")
91 t_tree.SetBranchAddress(
"Value", R._tprof2d)
92 t_tree.GetEntry(index_range[0])
93 elif hist_type ==
"TH2Fs":
95 R.gROOT.ProcessLine(
"TH2F* _th2f;")
97 t_tree.SetBranchAddress(
"Value", R._th2f)
98 t_tree.GetEntry(index_range[0])
99 elif hist_type ==
"TH2Ds":
101 R.gROOT.ProcessLine(
"TH2D* _th2d;")
103 t_tree.SetBranchAddress(
"Value", R._th2d)
104 t_tree.GetEntry(index_range[0])
106 for i
in range(0,t_tree.GetEntries()+1):
107 if i >= index_range[0]
and i <= index_range[1]:
109 name =
str(t_tree.FullName)
111 file_path = name.split(
"/")[:-1]
112 __directory =
"%s/%s" % (os.path.join(
"DQMData", __run_dir),
114 directory_ret = self.f.GetDirectory(__directory)
115 if not directory_ret:
116 self.f.mkdir(os.path.join(__directory))
117 self.f.cd(os.path.join(__directory))
118 if hist_type ==
"Strings":
119 construct_str =
'<%s>s=%s</%s>' % (name.split(
"/")[-1:][0],
120 t_tree.Value, name.split(
"/")[-1:][0])
121 tmp_str = R.TObjString(construct_str)
123 elif hist_type ==
"Ints":
124 construct_str =
'<%s>i=%s</%s>' % (name.split(
"/")[-1:][0],
125 t_tree.Value, name.split(
"/")[-1:][0])
126 tmp_str = R.TObjString(construct_str)
128 elif hist_type ==
"Floats":
129 construct_str =
'<%s>f=%s</%s>' % (name.split(
"/")[-1:][0],
130 t_tree.Value, name.split(
"/")[-1:][0])
131 tmp_str = R.TObjString(construct_str)
134 if hist_type
in [
"TProfiles",
"TProfile2Ds",
"TH2Fs",
"TH2Ds"]:
135 if hist_type ==
"TProfiles":
137 elif hist_type ==
"TProfile2Ds":
139 elif hist_type ==
"TH2Fs":
141 elif hist_type ==
"TH2Ds":
146 if __name__ ==
'__main__':
147 parser = argparse.ArgumentParser()
148 parser.add_argument(
"-in",
"--input", help =
"Input DQMIO ROOT file")
149 parser.add_argument(
"-o",
"--output", help =
"Output filename",
150 default =
"DQMIO_converter_output.root")
151 parser.add_argument(
"--debug", help =
"Debug mode to spam you console",
152 action =
"store_true")
154 args = parser.parse_args()
155 __in_file = args.input
156 __out_file = args.output
157 dqmio =
DQMIO(__in_file, __out_file)
const uint16_t range(const Frame &aFrame)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
static std::string join(char **cmd)