 |
ATLAS Offline Software
|
|
| def | __init__ (self) |
| |
| def | content (self, **args) |
| |
| def | configure (self) |
| |
| def | pageName (self) |
| |
| def | addPage (self, name, page, **attrs) |
| |
| def | addLink (self, name, alias, **attrs) |
| |
| def | addToPageHeader (self, snippet) |
| |
| def | index (self, **args) |
| |
| def | configureLinks (self) |
| |
| def | override (self) |
| |
| def | header (self, **args) |
| |
| def | navigation (self, **args) |
| |
| def | footer (self, **args) |
| |
Definition at line 54 of file MyPlots.py.
◆ __init__()
| def MyPlots.MyPlots.__init__ |
( |
|
self | ) |
|
Definition at line 56 of file MyPlots.py.
57 BeamSpotWebPage.__init__(self)
58 self.pageConfig[
'pageTitle'] =
'ATLAS Beam Spot Plots'
◆ addLink()
| def WebPage.WebPage.addLink |
( |
|
self, |
|
|
|
name, |
|
|
|
alias, |
|
|
** |
attrs |
|
) |
| |
|
inherited |
Add a new link to the page tree. Links share page objects with
other pages through aliasing. This allows using different links
with different queries to the same page as if they were separate
pages. For links, highlighting of the current page is disabled
(if enabled, all links leading to the same page would be
highlighted).
Definition at line 309 of file WebPage.py.
309 def addLink(self, name, alias, **attrs):
310 """Add a new link to the page tree. Links share page objects with
311 other pages through aliasing. This allows using different links
312 with different queries to the same page as if they were separate
313 pages. For links, highlighting of the current page is disabled
314 (if enabled, all links leading to the same page would be
316 self.globalConfig.pageList.append(name)
317 self.globalConfig.pageAttributes[name] = dict(attrs)
318 self.globalConfig.pageAttributes[name][
'alias'] = alias
◆ addPage()
| def WebPage.WebPage.addPage |
( |
|
self, |
|
|
|
name, |
|
|
|
page, |
|
|
** |
attrs |
|
) |
| |
|
inherited |
Add a new web page to the page tree. All pages added via addPage
share the same GlobalConfiguration object.
Definition at line 300 of file WebPage.py.
300 def addPage(self, name, page, **attrs):
301 """Add a new web page to the page tree. All pages added via addPage
302 share the same GlobalConfiguration object."""
303 page.globalConfig = self.globalConfig
304 page.pageConfig[
'pageName'] = name
305 self.globalConfig.pageList.append(name)
306 self.globalConfig.pageAttributes[name] = dict(attrs)
307 setattr(self,name,page)
◆ addToPageHeader()
| def WebPage.WebPage.addToPageHeader |
( |
|
self, |
|
|
|
snippet |
|
) |
| |
|
inherited |
Add a snippet of code to the page header. Use this e.g. to include JavaScript libraries.
Definition at line 320 of file WebPage.py.
320 def addToPageHeader(self, snippet):
321 """Add a snippet of code to the page header. Use this e.g. to include JavaScript libraries."""
322 self.pageConfig[
'pageHeaderSnippets'] += snippet
◆ configure()
| def BeamSpotWebPage.BeamSpotWebPage.configure |
( |
|
self | ) |
|
|
inherited |
Final configuration of web application after all data is initialized.
Reimplemented from WebPage.WebPage.
Definition at line 49 of file BeamSpotWebPage.py.
50 self.pageConfig[
'cssName'] = self.globalConfig.baseUrl+
'/css/beamspot.css'
51 if not self.pageConfig.
get(
'pageTitle',
''):
52 self.pageConfig[
'pageTitle'] =
'ATLAS Beam Spot Web Page'
53 self.pageConfig[
'header'] = header
54 self.pageConfig[
'footer'] = footer
55 WebPage.configure(self)
◆ configureLinks()
| def WebPage.WebPage.configureLinks |
( |
|
self | ) |
|
|
inherited |
Based on configuration data, for each web page create two link entries in pageConfig:
The first entry has the form url_PAGENAME and contains the complete URL to link to
a page. The second entry is named href_PAGENAME and contains style information and a
href= prefix with proper quotation marks in addition to the URL. These link entries
should be used to generate links in HTML pages with snippets like <a %(href_PAGENAME)s>
or <a href="%(url_PAGENAME)>. The link entries can only be generated once all
configuration data is available, ie configureLinks must be called from configure
and not from __init__.
Definition at line 353 of file WebPage.py.
353 def configureLinks(self):
354 """Based on configuration data, for each web page create two link entries in pageConfig:
355 The first entry has the form url_PAGENAME and contains the complete URL to link to
356 a page. The second entry is named href_PAGENAME and contains style information and a
357 href= prefix with proper quotation marks in addition to the URL. These link entries
358 should be used to generate links in HTML pages with snippets like <a %(href_PAGENAME)s>
359 or <a href="%(url_PAGENAME)>. The link entries can only be generated once all
360 configuration data is available, ie configureLinks must be called from configure
361 and not from __init__."""
362 for p
in self.globalConfig.pageList:
363 page = self.globalConfig.pageAttributes[p].
get(
'alias',p)
364 query = self.globalConfig.pageAttributes[p].
get(
'query',
'')
365 style = self.globalConfig.pageAttributes[p].
get(
'style',
None)
366 self.pageConfig[
'url_'+p] =
'%s/%s/%s' % (self.globalConfig.baseUrl,page,query)
367 if p==self.pageName():
368 self.pageConfig[
'href_'+p] =
'href="%s/%s/%s" class="%s"' % (self.globalConfig.baseUrl,page,query,self.pageConfig[
'css_currentLink'])
371 self.pageConfig[
'href_'+p] =
'href="%s/%s/%s" class="%s"' % (self.globalConfig.baseUrl,page,query,style)
373 self.pageConfig[
'href_'+p] =
'href="%s/%s/%s"' % (self.globalConfig.baseUrl,page,query)
◆ content()
| def MyPlots.MyPlots.content |
( |
|
self, |
|
|
** |
args |
|
) |
| |
Generate the page content. Default value comes from self.pageConfig['content'].
Reimplemented from WebPage.WebPage.
Definition at line 60 of file MyPlots.py.
63 ntDir = self.globalConfig[
'ntDir']
64 periodDir = ntDir+
'/DataPeriods'
65 cmd = self.globalConfig[
'wwwDir']+
'/run-beamspotnt.sh'
66 if not os.path.exists(cmd):
67 return error(
'Configuration error: %s does not exist or unreadable' % cmd)
68 if not 'plotType' in args:
69 args[
'plotType'] =
'plot'
72 form =
htmlPara(
'Select data and what to plot:', attr =
'class ="example"')
75 projectList =
sorted([ os.path.basename(p)
for p
in glob.glob(periodDir+
'/data*')])
76 form +=
htmlSelect(
'Project tag',
'project', args, projectList,
'all data',
77 attr =
'onchange = "this.form.submit()"')
80 if 'project' in args
and args[
'project']:
81 periodList = glob.glob(periodDir+
'/'+args[
'project']+
'/*')
82 periodList =
sorted([ os.path.basename(p)[:-10]
for p
in periodList ])
83 if 'AllYear' in periodList:
84 periodList.remove(
'AllYear')
85 periodList.insert(0,
'AllYear')
86 if not 'period' in args
and periodList:
87 args[
'period'] = periodList[0]
88 form +=
htmlSelect(
'Period',
'period', args, periodList, attr=
'multiple size=5')
91 if not args.get(
'project'):
98 [
'initial T0 processing::t0/beamspotnt-IndetBeampos-ES1-UPD2.root',
99 'latest data from COOL::cool/beamspotnt-COOL-Current.root'])
103 form +=
htmlSelect(
'Type of plot',
'plotType', args,
104 [
'time evolution::plot',
'summary (slow)::summary',
'histogram::hist'],
105 attr =
'onchange = "this.form.submit()"')
108 if args[
'plotType']!=
'summary':
110 [
'posX',
'posY',
'posZ',
'sigmaX',
'sigmaY',
'sigmaZ',
'tiltX',
'tiltY',
'rhoXY',
'k'])
113 form +=
htmlPara(
'Options:', attr=
'class ="example"')
114 if args[
'plotType']!=
'hist':
115 form +=
htmlCheckbox(
'Use LB instead of time on x axis',
'lbaxis',args)
116 form +=
htmlCheckbox(
'Predefined axis range',
'ydef', args)
118 form +=
htmlTextInput(
'y axis scale expansion factor',
'yscale',args,6,6)
119 if args[
'plotType']==
'plot':
130 form +=
htmlPara(
'Generate plot (depending on what parameters you choose, this may take a while.. please be patient):', attr=
'class ="example"')
131 form +=
htmlCheckbox(
'Show command line output',
'verbose',args)
132 form +=
htmlSubmit(
'Plot',
'doplot', attr =
'class="submit"')
135 page =
htmlForm(form, attr=
'class="params"')
139 page += escape(
str(args))
146 ms = 1000.*(t-floor(t))
147 varName = args.get(
'varName',
'all')
148 baseName =
'beamspot-%s-%s' % (args[
'plotType'], varName)
149 baseName = time.strftime(baseName+
'-%Y%m%d-%H%M%S',time.localtime())
150 baseName +=
'%03i' % ms
154 cmd +=
' -f %s/%s' % (ntDir,args[
'nt'])
155 cmd +=
' -o %s/tmp/%s.gif,%s/tmp/%s.eps,%s/tmp/%s.pdf' % (self.globalConfig[
'wwwDir'],baseName,
156 self.globalConfig[
'wwwDir'],baseName,
157 self.globalConfig[
'wwwDir'],baseName)
158 if args.get(
'project'):
160 selPeriodList = args[
'period']
if isinstance(args[
'period'],list)
else [args[
'period']]
161 selPeriodString =
','.
join([args[
'project']+
'.'+p
for p
in selPeriodList])
162 cmd +=
' --perioddef %s --period %s' % (periodDir,selPeriodString)
163 if args.get(
'fillnr'):
165 cmd +=
' --fill %i' %
int(args[
'fillnr'])
167 return page+
error(
'Fill number must be an integer')
168 if args.get(
'runnr'):
170 cmd +=
' --run %i' %
int(args[
'runnr'])
172 return page+
error(
'Run number must be an integer')
173 if not 'lbaxis' in args:
179 if args.get(
'yscale',
'')!=
'':
181 dummy =
float(args[
'yscale'])
182 cmd +=
' --yscale %s' % args[
'yscale']
184 return page+
error(
'y axis scale expansion factor must be a number')
185 if args.get(
'ymin',
'')!=
'':
187 dummy =
float(args[
'ymin'])
188 cmd +=
' --ymin %s' % args[
'ymin']
190 return page+
error(
'y axis minimum must be a number')
191 if args.get(
'ymax',
'')!=
'':
193 dummy =
float(args[
'ymax'])
194 cmd +=
' --ymax %s' % args[
'ymax']
196 return page+
error(
'y axis maximum must be a number')
197 if args.get(
'xmin',
'')!=
'':
199 dummy =
float(args[
'xmin'])
200 cmd +=
' --xmin %s' % args[
'xmin']
202 return page+
error(
'x axis minimum must be a number')
203 if args.get(
'xmax',
'')!=
'':
205 dummy =
float(args[
'xmax'])
206 cmd +=
' --xmax %s' % args[
'xmax']
208 return page+
error(
'x axis maximum must be a number')
209 if args[
'plotType']==
'summary':
212 cmd +=
' %s %s' % (args[
'plotType'], args[
'varName'])
213 (status,output) = subprocess.getstatusoutput(cmd)
217 imageUrl =
'%s/tmp/%s.gif' % (self.globalConfig.baseUrl,baseName)
218 epsUrl =
'%s/tmp/%s.eps' % (self.globalConfig.baseUrl,baseName)
219 pdfUrl =
'%s/tmp/%s.pdf' % (self.globalConfig.baseUrl,baseName)
220 page += image % (imageUrl,epsUrl,pdfUrl,imageUrl)
223 if status
or (
'verbose' in args):
224 page += cmdoutput % (escape(cmd),status,escape(output))
◆ footer()
| def WebPage.WebPage.footer |
( |
|
self, |
|
|
** |
args |
|
) |
| |
|
inherited |
Generate the footer. Default value comes from self.pageConfig['footer'].
Definition at line 395 of file WebPage.py.
396 """Generate the footer. Default value comes from self.pageConfig['footer']."""
397 return self.pageConfig[
'footer'] % self.pageConfig
◆ header()
| def WebPage.WebPage.header |
( |
|
self, |
|
|
** |
args |
|
) |
| |
|
inherited |
Generate the page header. Default value comes from self.pageConfig['header'].
Definition at line 383 of file WebPage.py.
384 """Generate the page header. Default value comes from self.pageConfig['header']."""
385 return self.pageConfig[
'header'] % self.pageConfig
◆ index()
| def WebPage.WebPage.index |
( |
|
self, |
|
|
** |
args |
|
) |
| |
|
inherited |
Return the complete page.
Definition at line 324 of file WebPage.py.
324 def index(self, **args):
325 """Return the complete page."""
326 if not self.isConfigured:
330 self.pageConfig[
'timeStamp'] = time.strftime(
'%a %b %d %X %Z %Y')
331 contents = self.content(**args)
333 s = startPage % self.pageConfig
334 s = s +
htmlDiv(
'header', self.header(**args),
335 keepEmptyDiv=self.pageConfig[
'keepEmptyHeader'])
336 s = s +
htmlDiv(
'navigation', self.navigation(**args),
337 keepEmptyDiv=self.pageConfig[
'keepEmptyNavigation'])
338 s = s +
htmlDiv(
'content', contents,
339 keepEmptyDiv=self.pageConfig[
'keepEmptyContent'])
340 s = s +
htmlDiv(
'footer', self.footer(**args),
341 keepEmptyDiv=self.pageConfig[
'keepEmptyFooter'])
◆ navigation()
| def WebPage.WebPage.navigation |
( |
|
self, |
|
|
** |
args |
|
) |
| |
|
inherited |
Generate the navigation bar. Default value comes from self.pageConfig['navigation'].
Definition at line 387 of file WebPage.py.
387 def navigation(self, **args):
388 """Generate the navigation bar. Default value comes from self.pageConfig['navigation']."""
389 return self.pageConfig[
'navigation'] % self.pageConfig
◆ override()
| def WebPage.WebPage.override |
( |
|
self | ) |
|
|
inherited |
Override provides a hook where code to generate or redirect to an alternative
page can be placed by derived classes. If not override of the normal page is
desired, override should return None. Otherwise it should either raise an
appropriate exception or return a string containing the complete alternate page
to display.
Definition at line 375 of file WebPage.py.
376 """Override provides a hook where code to generate or redirect to an alternative
377 page can be placed by derived classes. If not override of the normal page is
378 desired, override should return None. Otherwise it should either raise an
379 appropriate exception or return a string containing the complete alternate page
◆ pageName()
| def WebPage.WebPage.pageName |
( |
|
self | ) |
|
|
inherited |
Short cut to retrieve the name (the last element in the URL)
of the current page. This works only if the page has been
added into the page tree using addPage.
Definition at line 294 of file WebPage.py.
295 """Short cut to retrieve the name (the last element in the URL)
296 of the current page. This works only if the page has been
297 added into the page tree using addPage."""
298 return self.pageConfig[
'pageName']
◆ exposed
◆ globalConfig
| WebPage.WebPage.globalConfig |
|
inherited |
◆ isConfigured
| WebPage.WebPage.isConfigured |
|
inherited |
◆ pageConfig
| WebPage.WebPage.pageConfig |
|
inherited |
The documentation for this class was generated from the following file:
std::vector< typename R::value_type > sorted(const R &r, PROJ proj={})
Helper function to create a sorted vector from an unsorted range.
def htmlForm(contents, action='', method='post', attr='')
bool configure(asg::AnaToolHandle< ITrigGlobalEfficiencyCorrectionTool > &tool, ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > &electronEffToolsHandles, ToolHandleArray< IAsgElectronEfficiencyCorrectionTool > &electronSFToolsHandles, ToolHandleArray< CP::IMuonTriggerScaleFactors > &muonToolsHandles, ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > &photonEffToolsHandles, ToolHandleArray< IAsgPhotonEfficiencyCorrectionTool > &photonSFToolsHandles, const std::string &triggers, const std::map< std::string, std::string > &legsPerTool, unsigned long nToys, bool debug)
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
def htmlPara(text='', attr='', escapeText=False)
def addLink(l)
When https is found in a character line, add a link in html If none, simply return the line unchanged...
def htmlTextInput(labelText, parName, args, size=None, maxLength=None, labelAttr='', attr='')
def htmlCheckbox(labelText, parName, args, labelAttr='', attr='')
def htmlDiv(id, contents='', attr='', keepEmptyDiv=True)
std::string join(const std::vector< std::string > &v, const char c=',')
def htmlSelect(labelText, parName, args, choiceList, hint=None, descriptionSeparator='::', labelAttr='', attr='')
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
def htmlSubmit(text, parName, attr='', onlyOnce=False)