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
19 Class responsible for browsing the content of a DQM file produced
20 with the DQMIO I/O framework of CMSSW
22 types=[
"Ints",
"Floats",
"Strings",
23 "TH1Fs",
"TH1Ss",
"TH1Ds",
24 "TH2Fs",
"TH2Ss",
"TH2Ds",
25 "TH3Fs",
"TProfiles",
"TProfile2Ds",
"kNIndicies"]
27 def __init__(self, input_filename, output_filename):
30 self.
f = R.TFile(output_filename,
"RECREATE")
35 print " Input: %s\n Output: %s" % (input_filename,
39 print "File %s does not exists" % self.
_filename
44 Loop over the complete index and dump it on the screen.
46 indices = self._root_file.Get(
"Indices")
49 print "Run,\tLumi,\tType,\t\tFirstIndex,\tLastIndex"
50 for i
in xrange(indices.GetEntries()):
52 print '{0:4d}\t{1:4d}\t{2:4d}({3:s})\t\t{4:4d}\t{5:4d}'.
format(
53 indices.Run, indices.Lumi, indices.Type,
54 DQMIO.types[indices.Type], indices.FirstIndex, indices.LastIndex)
56 for i
in xrange(indices.GetEntries()):
58 if indices.Type < len(DQMIO.types):
60 [indices.FirstIndex,indices.LastIndex], str(indices.Run))
63 print "Unknown histogram type. Type numer: %s" % (indices.Type)
68 Method looping over entries for specified histogram type and
69 writing to FullName path to output ROOT File
71 print "Working on: %s indexes: %s..%s" % (hist_type ,index_range[0],
73 t_tree = self._root_file.Get(hist_type)
74 __run_dir =
"Run %s" % (run)
76 if hist_type ==
"TProfiles":
77 R.gROOT.ProcessLine(
"TProfile* _tprof;")
78 t_tree.SetBranchAddress(
"Value", R._tprof)
80 elif hist_type ==
"TProfile2Ds":
81 R.gROOT.ProcessLine(
"TProfile2D* _tprof2d;")
82 t_tree.SetBranchAddress(
"Value", R._tprof2d)
84 elif hist_type ==
"TH2Fs":
85 R.gROOT.ProcessLine(
"TH2F* _th2f;")
86 t_tree.SetBranchAddress(
"Value", R._th2f)
88 elif hist_type ==
"TH2Ds":
89 R.gROOT.ProcessLine(
"TH2D* _th2d;")
90 t_tree.SetBranchAddress(
"Value", R._th2d)
93 for i
in range(0,t_tree.GetEntries()+1):
95 name = str(t_tree.FullName)
98 if i >= index_range[0]
and i <= index_range[1]:
99 file_path = name.split(
"/")[:-1]
100 __directory =
"%s/%s" % (os.path.join(
"DQMData", __run_dir),
102 directory_ret = self.f.GetDirectory(__directory)
103 if not directory_ret:
104 self.f.mkdir(os.path.join(__directory))
105 self.f.cd(os.path.join(__directory))
106 if hist_type ==
"Strings":
107 construct_str =
'<%s>s=%s</%s>' % (name.split(
"/")[-1:][0],
108 t_tree.Value, name.split(
"/")[-1:][0])
109 tmp_str = R.TObjString(construct_str)
111 elif hist_type ==
"Ints":
112 construct_str =
'<%s>i=%s</%s>' % (name.split(
"/")[-1:][0],
113 t_tree.Value, name.split(
"/")[-1:][0])
114 tmp_str = R.TObjString(construct_str)
116 elif hist_type ==
"Floats":
117 construct_str =
'<%s>f=%s</%s>' % (name.split(
"/")[-1:][0],
118 t_tree.Value, name.split(
"/")[-1:][0])
119 tmp_str = R.TObjString(construct_str)
122 if hist_type
in [
"TProfiles",
"TProfile2Ds",
"TH2Fs",
"TH2Ds"]:
123 if hist_type ==
"TProfiles":
125 elif hist_type ==
"TProfile2Ds":
127 elif hist_type ==
"TH2Fs":
129 elif hist_type ==
"TH2Ds":
134 if __name__ ==
'__main__':
136 parser.add_argument(
"-in",
"--input", help =
"Input DQMIO ROOT file")
137 parser.add_argument(
"-o",
"--output", help =
"Output filename",
138 default =
"DQMIO_converter_output.root")
139 parser.add_argument(
"--debug", help =
"Debug mode to spam you console",
140 action =
"store_true")
142 args = parser.parse_args()
143 __in_file = args.input
144 __out_file = args.output
145 dqmio =
DQMIO(__in_file, __out_file)
static std::string join(char **cmd)