CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
electronCompare.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 #========================================================================
4 #
5 # This script is used to generate a web page which superpose two
6 # sets of similar histograms.
7 #
8 # Command-line options :
9 #
10 # -c <configuration> : description of the histograms to be displayed and how.
11 # -t <title> : general title of the page.
12 # -r <name> : short name of the red histograms.
13 # -b <name> : short name of the blue histograms.
14 #
15 # Command-line arguments :
16 #
17 # $1 : path of the ROOT file containing the red histograms.
18 # $2 : path of the ROOT file containing the blue histograms.
19 # $3 : destination directory.
20 #
21 #=========================================================================
22 
23 
24 import os, sys, datetime, shutil, optparse
25 
26 
27 #============================================
28 # display a command and eventually executes
29 #============================================
30 
31 def mysystem(command,apply=1):
32  print command
33  if apply==1: return os.system(command)
34  elif apply==0: return 0
35  else:
36  print '[electronStore.py] UNSUPPORTED ARGUMENT VALUE FOR mysystem(,apply):',apply
37  exit(1)
38 
39 
40 #============================================
41 # force immediate flushing of stdout
42 #============================================
43 
45  def __init__(self,f):
46  self.f = f
47  def write(self,x):
48  self.f.write(x)
49  self.f.flush()
50 
51 sys.stdout = flushfile(sys.stdout)
52 
53 
54 #===================================================================
55 # when called as an independant executable
56 #===================================================================
57 
58 if __name__ == "__main__":
59 
60 
61  #============================================
62  # command-line arguments
63  #============================================
64 
65  parser = optparse.OptionParser()
66  parser.add_option("-c", "--cfg", dest="config", action="store", default="electronCompare.txt",
67  help="the configuration file describe which histogram must be displayed and how")
68  parser.add_option("-t", "--title", dest="title", action="store", default="",
69  help="the title of the page")
70  parser.add_option("-r", "--red-name", dest="red", action="store", default="",
71  help="short name of the red histograms")
72  parser.add_option("-b", "--blue-name", dest="blue", action="store", default="",
73  help="short name of the blue histograms")
74  (options, args) = parser.parse_args()
75 # print "options : ",options
76 
77  if len(args)<2:
78  print "[electronStore.py] I NEED AT LEAST TWO ARGUMENTS."
79  exit(2)
80 
81  red_file = args.pop(0)
82  web_dir = args.pop()
83  web_url = web_dir.replace('/afs/cern.ch/cms/','http://cmsdoc.cern.ch/',1)
84  if len(args)>0 :
85  blue_file = args.pop(0)
86  else :
87  blue_file = ''
88 
89 
90  #===================================================
91  # prepare output directories and check input files
92  #===================================================
93 
94  # destination dir
95  print 'WEB DIR =',web_dir
96  if os.path.exists(web_dir+'/gifs')==False:
97  os.makedirs(web_dir+'/gifs')
98 
99  # red file
100  red_base = os.path.basename(red_file)
101  if os.path.isfile(red_file)==True :
102  print 'RED FILE =',red_file
103  if os.path.isfile(red_base)==True and os.path.getmtime(red_base)>os.path.getmtime(red_file) :
104  print '[electronCompare.py] did you forget to store '+red_base+' ?'
105  else :
106  print "[electronCompare.py] FILE NOT FOUND :",red_file
107  if os.path.isfile(red_base)==True :
108  print '[electronCompare.py] did you forget to store '+red_base+' ?'
109  exit(3)
110 
111  # blue file
112  if blue_file!='' :
113  if os.path.isfile(blue_file)==True :
114  print 'BLUE FILE =',blue_file
115  else :
116  print '[electronCompare.py] file not found :',blue_file
117  blue_file = ''
118  else :
119  print "[electronCompare.py] no blue histograms to compare with."
120 
121 
122  #===================================================
123  # improved default options
124  #===================================================
125 
126  (red_head,red_tail) = os.path.split(red_file)
127  red_long_name = os.path.basename(red_head)+'/'+red_tail
128  (blue_head,blue_tail) = os.path.split(blue_file)
129  blue_long_name = os.path.basename(blue_head)+'/'+blue_tail
130  if options.red=='' :
131  options.red = red_long_name
132  if options.blue=='' :
133  options.blue = blue_long_name
134  if options.title=='' :
135  options.title = red_long_name+' vs '+blue_long_name
136 
137  (red_hd, red_release) = os.path.split(red_head)
138  (blue_hd, blue_release) = os.path.split(blue_head)
139 
140  #============================================
141  # final commands
142  #============================================
143 
144  mysystem('cp -f electronCompare.C '+options.config+' '+web_dir)
145 
146  os.environ['CMP_DIR'] = web_dir
147  os.environ['CMP_URL'] = web_url
148  os.environ['CMP_TITLE'] = options.title
149  os.environ['CMP_RED_FILE'] = red_file
150  os.environ['CMP_BLUE_FILE'] = blue_file
151  os.environ['CMP_RED_NAME'] = options.red
152  os.environ['CMP_BLUE_NAME'] = options.blue
153  os.environ['CMP_RED_COMMENT'] = red_file+'.comment'
154  os.environ['CMP_BLUE_COMMENT'] = blue_file+'.comment'
155  os.environ['CMP_CONFIG'] = options.config
156  os.environ['CMP_RED_RELEASE'] = red_release
157  os.environ['CMP_BLUE_RELEASE'] = blue_release
158 
159  mysystem('root -b -l -q electronCompare.C')
160 
161  print "You can access the files here:",web_dir
162  print "You can browse your validation plots here:",web_url+'/'
list object
Definition: dbtoconf.py:77