29 if argv is None:
30 argv = sys.argv
31 try:
32 try:
33 opts, args = getopt.getopt(argv[1:], "ho:v", ["help", "output="])
34 except getopt.error as msg:
36
37
38 for option, value in opts:
39 if option == "-v":
40 verbose = True
41 if option in ("-h", "--help"):
42 raise Usage(help_message)
43 if option in ("-o", "--output"):
44 output = value
45
46 except Usage as err:
47 print (sys.argv[0].
split(
"/")[-1] +
": " + str(err.msg),file=sys.stderr)
48 print ("\t for help use --help", file=sys.stderr)
49 return 2
50
51 inputfiles =''
52 inputtrees =''
53 inputparams =''
54 saveasfiles =''
55
56 for iarg in range(len(argv)) :
57 if argv[iarg].
find(
'files') >= 0:
58 inputfiles = argv[iarg]
59 elif argv[iarg].
find(
'trees') >= 0:
60 inputtrees = argv[iarg]
61 elif argv[iarg].
find(
'params') >= 0:
62 inputparams = argv[iarg]
63 elif argv[iarg].
find(
'saveas') >= 0:
64 saveasfiles = argv[iarg]
65
66 filelist = splitInputArgs(inputfiles)
67 treelist = splitInputArgs(inputtrees)
68 parslist = splitInputArgs(inputparams)
69 saveaslist = splitInputArgs(saveasfiles)
70
71
72 if len(saveaslist) > 0:
73 if not os.path.isdir('./output/'):
74 os.mkdir('./output/')
75
76 outputdir = './output/mval_'+str(time.time())+'/'
77 if not os.path.isdir(outputdir):
78 os.mkdir(outputdir)
79
80 for saveas in saveaslist :
81
82 if not os.path.isdir(outputdir+saveas+'/'):
83 os.mkdir(outputdir+saveas+'/')
84
85
86 numPlots = len(parslist)
87 numRows = 1
88 numCols = numPlots
89 if numPlots > 2 :
90 numRows = 2
91 numCols = numPlots//2 + numPlots%2
92
93 print ('[>] Files to be processed :', filelist)
94 print ('[>] Trees to be drawn :', len(treelist))
95 print ('[>] Profiles to be made :', parslist)
96 print ('[>] Going to be saved as :', saveaslist )
97 print ('[>] Number of cols/rows :',numCols,', ',numRows)
98
99
100 canvasDict = {}
101 canvasTotalDict = {}
102
103 fileNum = 0
104
105 for filename in filelist :
106
107 singleSelector = TTreeSelector(filename)
108 singleDict = singleSelector.loadTrees(treelist[0])
109
110
111 for entry in singleDict :
112 iden = entry.lstrip(
'TVolume_').
replace(
'::',
'_')
113
114 if iden not in canvasDict :
115 canvas = TCanvas(iden,'TrackingVolume:'+iden,100,100,numCols*300,numRows*300)
116 if numCols > 1 :
117 canvas.Divide(numCols,numRows)
118
119 canvasDict[iden] = canvas
120 else :
121 canvas = canvasDict[iden]
122
123
124 pad = 0
125 if len(parslist) > 1 : pad = 1
126
127 for par in parslist :
128 tree = singleDict[entry]
129 plotProfile(canvas,pad,tree,par,fileNum)
130 pad += 1
131
132
133 for saveas in saveaslist :
134 canvas.SaveAs(outputdir+saveas+'/'+iden+'.'+saveas)
135
136
137 for entry in singleDict :
138 iden = entry.lstrip(
'TVolume_').
replace(
'::',
'_') +
'_TOTAL'
139
140 if '_UNMAPPED' in entry : continue
141
142 if (entry+'_UNMAPPED') not in singleDict : continue
143
144 if iden not in canvasTotalDict :
145 canvas = TCanvas(iden,'TrackingVolume:'+iden,100,100,numCols*300,numRows*300)
146 if numCols > 1 :
147 canvas.Divide(numCols,numRows)
148
149 canvasTotalDict[iden] = canvas
150 else :
151 canvas = canvasTotalDict[iden]
152
153
154 pad = 0
155 if len(parslist) > 1 : pad = 1
156
157 for par in parslist :
158 tree1 = singleDict[entry]
159 tree2 = singleDict[entry+'_UNMAPPED']
160
161 outpath = outputdir+saveas+'/'+iden+'.'+saveas
162 plotStack(canvas,pad,tree1,tree2,par,fileNum,outpath)
163 pad += 1
164
165
166
167 fileNum += 1
168 print ('[>] Next file, switching to same option (',fileNum,')')
169
170
int Usage(const char *prog)
std::string replace(std::string s, const std::string &s2, const std::string &s3)
std::string find(const std::string &s)
return a remapped string
std::vector< std::string > split(const std::string &s, const std::string &t=":")