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")
32 "TH2Fs" :
False,
"TH2Ds" :
False}
38 print " Input: %s\n Output: %s" % (input_filename,
42 print "File %s does not exists" % self.
_filename
47 Loop over the complete index and dump it on the screen.
49 indices = self._root_file.Get(
"Indices")
52 print "Run,\tLumi,\tType,\t\tFirstIndex,\tLastIndex"
53 for i
in xrange(indices.GetEntries()):
55 print '{0:4d}\t{1:4d}\t{2:4d}({3:s})\t\t{4:4d}\t{5:4d}'.
format(
56 indices.Run, indices.Lumi, indices.Type,
57 DQMIO.types[indices.Type], indices.FirstIndex, indices.LastIndex)
59 for i
in xrange(indices.GetEntries()):
61 if indices.Type < len(DQMIO.types):
63 [indices.FirstIndex,indices.LastIndex], str(indices.Run))
66 print "Unknown histogram type. Type numer: %s" % (indices.Type)
71 Method looping over entries for specified histogram type and
72 writing to FullName path to output ROOT File
74 print "Working on: %s indexes: %s..%s" % (hist_type ,index_range[0],
76 t_tree = self._root_file.Get(hist_type)
77 __run_dir =
"Run %s" % (run)
79 if hist_type ==
"TProfiles":
81 R.gROOT.ProcessLine(
"TProfile* _tprof;")
83 t_tree.SetBranchAddress(
"Value", R._tprof)
84 t_tree.GetEntry(index_range[0])
85 elif hist_type ==
"TProfile2Ds":
87 R.gROOT.ProcessLine(
"TProfile2D* _tprof2d;")
89 t_tree.SetBranchAddress(
"Value", R._tprof2d)
90 t_tree.GetEntry(index_range[0])
91 elif hist_type ==
"TH2Fs":
93 R.gROOT.ProcessLine(
"TH2F* _th2f;")
95 t_tree.SetBranchAddress(
"Value", R._th2f)
96 t_tree.GetEntry(index_range[0])
97 elif hist_type ==
"TH2Ds":
99 R.gROOT.ProcessLine(
"TH2D* _th2d;")
101 t_tree.SetBranchAddress(
"Value", R._th2d)
102 t_tree.GetEntry(index_range[0])
104 for i
in range(0,t_tree.GetEntries()+1):
105 if i >= index_range[0]
and i <= index_range[1]:
107 name = str(t_tree.FullName)
109 file_path = name.split(
"/")[:-1]
110 __directory =
"%s/%s" % (os.path.join(
"DQMData", __run_dir),
112 directory_ret = self.f.GetDirectory(__directory)
113 if not directory_ret:
114 self.f.mkdir(os.path.join(__directory))
115 self.f.cd(os.path.join(__directory))
116 if hist_type ==
"Strings":
117 construct_str =
'<%s>s=%s</%s>' % (name.split(
"/")[-1:][0],
118 t_tree.Value, name.split(
"/")[-1:][0])
119 tmp_str = R.TObjString(construct_str)
121 elif hist_type ==
"Ints":
122 construct_str =
'<%s>i=%s</%s>' % (name.split(
"/")[-1:][0],
123 t_tree.Value, name.split(
"/")[-1:][0])
124 tmp_str = R.TObjString(construct_str)
126 elif hist_type ==
"Floats":
127 construct_str =
'<%s>f=%s</%s>' % (name.split(
"/")[-1:][0],
128 t_tree.Value, name.split(
"/")[-1:][0])
129 tmp_str = R.TObjString(construct_str)
132 if hist_type
in [
"TProfiles",
"TProfile2Ds",
"TH2Fs",
"TH2Ds"]:
133 if hist_type ==
"TProfiles":
135 elif hist_type ==
"TProfile2Ds":
137 elif hist_type ==
"TH2Fs":
139 elif hist_type ==
"TH2Ds":
144 if __name__ ==
'__main__':
146 parser.add_argument(
"-in",
"--input", help =
"Input DQMIO ROOT file")
147 parser.add_argument(
"-o",
"--output", help =
"Output filename",
148 default =
"DQMIO_converter_output.root")
149 parser.add_argument(
"--debug", help =
"Debug mode to spam you console",
150 action =
"store_true")
152 args = parser.parse_args()
153 __in_file = args.input
154 __out_file = args.output
155 dqmio =
DQMIO(__in_file, __out_file)
static std::string join(char **cmd)