| Home | Trees | Indices | Help |
|---|
|
|
1 #!/bin/env python
2 # copyright (c) 2005
3 # the icecube collaboration
4 # $Id: $
5 #
6 # @version $Revision: $
7 # @date $Date: $
8 # @author Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu>
9 # @brief icetray connections frame for GtkIcetraConfig application
10 #########################################################################
11
12 import pygtk
13 import threading
14 pygtk.require('2.0')
15 import gtk
16 import re
17 import time
18 from gtkcal import Cal
19 import iceprod
20 from iceprod.core import dataclasses
21 from iceprod.core.dataclasses import *
22 from iceprod.core import metadata
23 from iceprod.core import lex
24 from GtkAddSimCat import GtkAddSimCat
25 from iceprod.client.soaptrayclient import i3SOAPClient
26
27
29
31
32 self.parent = parent
33 self.ticket = 0
34 self.maxjobs = 0
35 self.descriptionstr = iceprod.client.descriptionstr
36 self.description = ""
37 self.descmap = {}
38 self.difplus = metadata.DIF_Plus()
39 self.dif = self.difplus.GetDIF()
40 self.plus = self.difplus.GetPlus()
41 self.vbox = gtk.VBox(False,0)
42 self.tv = gtk.TextView()
43 self.template = template
44 if test:
45 buff = self.tv.get_buffer()
46 buff.insert(buff.get_end_iter(),'Test...')
47 self.sw = gtk.ScrolledWindow()
48
49 self.frame = gtk.Frame()
50 self.frame.set_border_width(20)
51
52 self.sumframe = gtk.Frame("Summary")
53 self.sumframe.set_border_width(10)
54 self.sumframe.show()
55 self.sumframe.add(self.sw)
56
57 self.b0 = gtk.Button('Submit',stock=gtk.STOCK_EXECUTE)
58 self.b0.connect('clicked', self.submit)
59
60 self.hbbox = gtk.HButtonBox()
61 self.hbbox.pack_start(self.b0, False, False, 1)
62
63 gridbox = gtk.HBox()
64 # Grid(s)
65 self.grid_entry = gtk.Entry()
66 self.grid_entry.set_max_length(300)
67 self.grid_entry.connect("activate", self.submit)
68 self.gridframe = gtk.Frame("Grid(s) to use")
69 if self.template:
70 self.grid_entry.set_text("Hut1")
71 self.gridframe.add(self.grid_entry)
72 gridbox.pack_start(self.gridframe,False,False,1)
73
74 # Maxjobs
75 print self.template
76 if self.template:
77 self.maxjobs = 10
78 self.maxjobs_entry = gtk.Entry()
79 self.maxjobs_entry.set_max_length(10)
80 self.maxjobs_entry.connect("activate", self.submit)
81 self.maxjobs_entry.set_text(str(self.maxjobs))
82 self.maxjobsframe = gtk.Frame("Number of jobs in dataset")
83 self.maxjobsframe.add(self.maxjobs_entry)
84 gridbox.pack_start(self.maxjobsframe,False,False,1)
85
86 self.vbox.pack_start(gridbox,False,False,1)
87
88 # Title Text field
89 #self.title_entry = gtk.Entry()
90 if test:
91 self.dif.SetEntryTitle('test')
92 elif self.template:
93 self.dif.SetEntryTitle('Template')
94
95 #self.title_entry.set_max_length(80)
96 #self.title_entry.connect("activate", self.submit)
97 #self.entryframe = gtk.Frame("DIF Entry Title")
98 #self.entryframe.add(self.title_entry)
99
100 hbox = gtk.HBox()
101 #hbox.pack_start(self.entryframe,False,False,1)
102
103 # DIF Sensor menu
104 hbbox = gtk.HButtonBox()
105 sensor_menu = gtk.combo_box_new_text()
106 sensor_menu.connect('changed', self.set_dif_sensor)
107 self.dif.SetSensorName("ICECUBE")
108 if test or self.template:
109 item = sensor_menu.append_text("ICECUBE")
110 sensor_menu.set_active(0)
111 else:
112 for s in self.dif.GetValidSensorNames():
113 item = sensor_menu.append_text(s)
114 sensorIndex = self.dif.GetValidSensorNames().keys().index('ICECUBE')
115 sensor_menu.set_active(sensorIndex)
116
117 self.sensorframe = gtk.Frame("Sensor")
118 self.sensorframe.add(sensor_menu)
119
120 hbbox.pack_start(self.sensorframe,False,False,1)
121 hbox.pack_start(hbbox,False,False,1)
122
123 #initialize descripton
124 steering = self.parent.GetSteering()
125 what = steering.GetParameter('description')
126 if what:
127 self.descriptionstr = what.GetValue()
128 else:
129 steering.AddParameter("string","description",descriptionstr)
130
131 inputdataset = steering.GetParameter('inputdataset')
132 if inputdataset:
133 self.descriptionstr += "input dataset %s. " % inputdataset.GetValue()
134
135
136
137 # Simprod Ticket No.
138 self.ticket_entry = gtk.Entry()
139
140 self.ticket_entry.set_max_length(6)
141 self.ticket_entry.connect("activate", self.submit)
142 self.ticket_entry.set_text('0')
143 self.ticketframe = gtk.Frame("SimProd Ticket No.")
144 self.ticketframe.add(self.ticket_entry)
145
146 hbox.pack_start(self.ticketframe,False,False,1)
147
148
149 # Parent dataset
150 if self.template:
151 self.parent.GetSteering().SetParentId(0)
152 parentId = self.parent.GetSteering().GetParentId()
153 self.pid_entry = gtk.Label()
154 self.pid_entry.set_markup(
155 "<span foreground='red'><b>%d</b></span>" % parentId)
156 self.pidframe = gtk.Frame("Parent ID")
157 self.pidframe.add(self.pid_entry)
158 hbox.pack_start(self.pidframe,False,False,1)
159 self.vbox.pack_start(hbox,False,False,1)
160
161
162 # Plus Category menu
163 category_menu = gtk.combo_box_new_text()
164 category_menu.connect('changed', self.set_plus_category)
165 if test or self.template:
166 self.plus.SetCategory('unclassified')
167 item = category_menu.append_text(self.plus.GetCategory())
168 for cat in self.plus.GetValidCategories():
169 if cat != 'unclassified':
170 item = category_menu.append_text(cat)
171 else:
172 item = category_menu.append_text("[Select Category]")
173 for cat in self.plus.GetValidCategories():
174 item = category_menu.append_text(cat)
175 category_menu.set_active(0)
176
177 self.catframe = gtk.Frame("Category")
178 self.catframe.add(category_menu)
179 hbox = gtk.HBox()
180
181 hbox.pack_start(self.catframe,False,False,1)
182
183
184 # Plus Subcategory Text entry
185 self.subcat_entry = gtk.Label()
186 subcat_txt="Sub-category will be automatically filled by server"
187 self.subcat_entry.set_markup("<span foreground='red'>%s</span>" % subcat_txt)
188
189 self.subcatframe = gtk.Frame("Subcategory")
190 self.subcatframe.add(self.subcat_entry)
191 hbox.pack_start(self.subcatframe,False,False,1)
192
193
194 # DIF SOURCE menu
195 hbbox = gtk.HButtonBox()
196 source_menu = gtk.combo_box_new_text()
197 source_menu.connect('changed', self.set_dif_source)
198 if test or self.template:
199 item = source_menu.append_text("SIMULATION")
200 self.dif.SetSourceName("SIMULATION")
201 source_menu.set_active(0)
202 else:
203 for s in self.dif.GetValidSourceNames():
204 item = source_menu.append_text(s)
205 source_menu.set_active(1)
206
207 self.sourceframe = gtk.Frame("Source")
208 self.sourceframe.add(source_menu)
209
210 hbbox.pack_start(self.sourceframe,False,False,1)
211 hbox.pack_start(hbbox,False,False,1)
212 self.vbox.pack_start(hbox,False,False,1)
213
214 # Plus Subcategory Text entry
215
216 # DIF Parameters menu
217 #dif_parameters_menu = gtk.combo_box_new_text()
218 #dif_parameters_menu.connect('changed', self.set_dif_param)
219 #if test:
220 # self.dif.SetParameters(self.dif.GetValidParameters()[0])
221 # item = dif_parameters_menu.append_text(self.dif.GetValidParameters()[0])
222 #else:
223 # item = self.make_menu_item ("[Select Parameters]", self.set_dif_param, None)
224 # for param in self.dif.GetValidParameters():
225 # item = self.make_menu_item (param, self.set_dif_param, param)
226 # item = dif_parameters_menu.append_text(param)
227 #dif_parameters_menu.set_active(0)
228
229 #self.difparamframe = gtk.Frame("DIF Parameters")
230 #self.difparamframe.add(dif_parameters_menu)
231
232 #hbox = gtk.HButtonBox()
233 #hbox.pack_start(self.difparamframe,False,False,1)
234 #self.vbox.pack_start(hbox,False,False,1)
235 self.dif.SetParameters(self.dif.GetValidParameters()[0])
236
237
238
239 # Date entries
240 current_year = time.strftime('%Y',time.localtime())
241 self.scalframe = gtk.Frame("Start Date")
242 self.startdate_entry = gtk.Entry()
243 self.startdate_entry.set_text('%s-01-01T00:00:01' % current_year)
244 self.c0 = gtk.Button('#')
245 self.c0.connect('clicked', self.cal,self.startdate_entry)
246 hbox = gtk.HBox()
247 hbox.pack_start(self.startdate_entry,False,False,1)
248 hbox.pack_start(self.c0,False,False,1)
249 self.scalframe.add(hbox)
250
251 self.ecalframe = gtk.Frame("End Date")
252 self.enddate_entry = gtk.Entry()
253 self.enddate_entry.set_text('%s-12-31T00:00:00' % current_year)
254 self.c1 = gtk.Button('#')
255 self.c1.connect('clicked', self.cal,self.enddate_entry)
256 hbox = gtk.HBox()
257 hbox.pack_start(self.enddate_entry,False,False,1)
258 hbox.pack_start(self.c1,False,False,1)
259 self.ecalframe.add(hbox)
260
261 hbox = gtk.HBox()
262 hbox.pack_start(self.scalframe,False,False,1)
263 hbox.add(self.ecalframe)
264 self.vbox.pack_start(hbox,False,False,1)
265
266 # Simulation Category menu
267 self.simulation_category_menu = gtk.combo_box_new_text()
268 self.simulation_category_menu.connect('changed', self.set_simulation_category)
269 if test:
270 item = self.simulation_category_menu.append_text("Test")
271 self.parent.GetSteering().SetCategory("Test")
272 elif self.template:
273 cat = self.parent.GetSteering().GetCategory()
274 item = self.simulation_category_menu.append_text(cat)
275 else:
276 item = self.simulation_category_menu.append_text("[Select Category]")
277
278 #for cat in dataclasses.SimulationCategories:
279 client = i3SOAPClient(geturl=self.parent.geturl)
280 client.SetPrinter(self.parent.PrintText)
281 if not test:
282 for cat in client.GetSimCategories():
283 item = self.simulation_category_menu.append_text(cat)
284 self.simulation_category_menu.set_active(0)
285 self.simulation_category_menu.append_text('Add category...')
286
287 self.simcatframe = gtk.Frame("SimProd Category")
288 self.simcatframe.add(self.simulation_category_menu)
289 self.simcathbox = gtk.HBox()
290 self.simcathbox.pack_start(self.simcatframe,False,False,1)
291
292 # Dataset Type menu
293 self.dataset_type_menu = gtk.combo_box_new_text()
294 self.dataset_type_menu.connect('changed', self.set_dataset_type)
295 if test:
296 item = self.dataset_type_menu.append_text("TEST")
297 self.parent.GetSteering().SetDatasetType("TEST")
298 elif self.template:
299 item = self.dataset_type_menu.append_text("TEMPLATE")
300 self.parent.GetSteering().SetDatasetType("TEMPLATE")
301 else:
302 item = self.dataset_type_menu.append_text("[Select Dataset Type]")
303 for cat in dataclasses.DatasetTypes:
304 item = self.dataset_type_menu.append_text(cat)
305 self.dataset_type_menu.set_active(0)
306
307 self.datasettypeframe = gtk.Frame("Dataset Type")
308 self.datasettypeframe.add(self.dataset_type_menu)
309 self.simcathbox.pack_start(self.datasettypeframe,False,False,1)
310
311 self.vbox.pack_start(self.simcathbox,False,False,1)
312
313
314
315 # Pack Summary TextView
316 self.vbox.pack_start(self.sumframe)
317 self.vbox.pack_start(self.hbbox, False)
318 self.sw.add(self.tv)
319
320 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
321 self.window.set_position(gtk.WIN_POS_MOUSE)
322 self.window.set_border_width(10)
323 self.frame.add(self.vbox)
324 self.window.add(self.frame)
325 self.window.set_resizable(True)
326 self.window.show()
327
328 self.window.set_size_request(700, 500)
329 self.window.set_title("Run Description")
330 self.frame.show_all()
331
332 self.descmap['category'] = '%(category)s'
333 self.descmap['inputdataset'] = '%(inputdataset)s'
334 self.descmap['geometry'] = '%(geometry)s'
335 self.descmap['simcat'] = '%(simcat)s'
336 self.descmap['composition'] = '%(composition)s'
337 self.descmap['weighted'] = '%(weighted)s'
338 self.descmap['spectrum'] = '%(spectrum)s'
339 self.descmap['icemodel'] = '%(icemodel)s'
340 self.descmap['angularrange'] = '%(angularrange)s'
341 self.descmap['energyrange'] = '%(energyrange)s'
342
343 steering = self.parent.GetSteering()
344 expparser = lex.ExpParser( {
345 'extern':0,
346 'procnum':0,
347 'tray':0,
348 'iter':0,
349 'dataset':0,
350 'nproc': 0,
351 },
352 steering)
353 for p in steering.GetParameters():
354 try:
355 self.descmap[p.GetName()] = expparser.parse(p.GetValue())
356 except Exception,e: pass
357
358 self.description = self.descriptionstr % self.descmap
359 buff = self.tv.get_buffer()
360 buff.set_text(self.description)
361 if test:
362 self.descmap['simcat'] = 'Test'
363 self.descmap['category'] = 'unclassified'
364 self.description = self.descriptionstr % self.descmap
365 buff.set_text('Test: '+ self.description )
366 if time.localtime()[1:3] == (4,1):
367 buff.set_text(''.join(map(chr,iceprod.apr1))*4)
368 elif self.template:
369 self.descmap['simcat'] = self.parent.GetSteering().GetCategory()
370 self.descmap['category'] = 'unclassified'
371 self.description = self.descriptionstr % self.descmap
372 buff.set_text('Template: '+ self.description )
373 if time.localtime()[1:3] == (4,1):
374 buff.set_text(''.join(map(chr,iceprod.apr1))*4)
375
378
379
381 buff = self.tv.get_buffer()
382 bounds = buff.get_bounds()
383 dtext = buff.get_text(bounds[0],bounds[1])
384 self.dif.SetSummary(dtext)
385 #self.dif.SetEntryTitle(self.title_entry.get_text())
386 self.dif.SetEntryTitle(dtext[0:min(len(dtext)-1,100)])
387 self.plus.SetStartDatetime(self.startdate_entry.get_text())
388 self.plus.SetEndDatetime(self.enddate_entry.get_text())
389
390 self.grids = self.grid_entry.get_text()
391 if not self.grids:
392 self.fail_submit("You must specify at least one grid!")
393 return
394
395 try:
396 self.maxjobs = int(self.maxjobs_entry.get_text())
397 except:
398 self.fail_submit("No. of jobs must be an integer!")
399 return
400
401 try:
402 self.ticket = int(self.ticket_entry.get_text())
403 except:
404 self.fail_submit("SimProd ticket No. must be an integer!")
405 return
406
407 if not self.dif.GetEntryTitle():
408 self.fail_submit("You must enter a DIF entry title before submitting")
409 return
410
411 if not self.dif.GetParameters():
412 self.fail_submit("You must select DIF Parameters before submitting")
413 return
414
415 if not self.plus.GetCategory():
416 self.fail_submit("You must select a Category before submitting")
417 return
418
419 if not len(dtext):
420 self.fail_submit("You must enter a summary before submitting")
421 return
422
423 date_regex = r'^[0-9]{4,4}(-[0-9]{2,2}){2,2}T([0-9]{2,2}:){2,2}[0-9]{2,2}'
424
425 startdate = self.startdate_entry.get_text()
426 if not startdate:
427 self.fail_submit("You must enter a start date")
428 return
429
430 match = re.match(date_regex, startdate)
431 if not match:
432 self.fail_submit("There is a problem with your start date")
433 return
434
435 enddate = self.enddate_entry.get_text()
436 if not enddate:
437 self.fail_submit("You must enter an end date")
438 return
439
440 match = re.match(date_regex, enddate)
441 if not match:
442 self.fail_submit("There is a problem with your end date")
443 return
444
445 if self.parent.GetSteering().GetCategory() == None:
446 self.fail_submit("You need to select a simulation category")
447 return
448
449 self.parent.GetSteering().SetDescription(dtext)
450 self.window.destroy()
451
452 # Add projects from any included metaprojects to DIFPlus
453 for metaproject in self.parent.GetIceTrayConfig().GetMetaProjectList():
454 for project in metaproject.GetProjectList():
455 self.plus.AddProject(project)
456
457 # Add projects not included in any metaprojects to DIFPlus
458 for project in self.parent.GetIceTrayConfig().GetProjectList():
459 self.plus.AddProject(project)
460
461 self.parent.GetSteering().AddExtra("Grid",self.grids)
462 self.parent.GetSteering().AddExtra("Metadata",self.difplus)
463 self.parent.GetSteering().AddExtra("Ticket",self.ticket)
464 self.parent.GetSteering().AddExtra("Maxjobs",self.maxjobs)
465 self.parent.GetSteering().AddExtra("DatasetParams",self.descmap)
466 self.parent.PrintText("preparing submission...")
467 self.parent.submit_auth(self.parent.submit)
468
470 self.parent.PrintText(msg)
471
477
479 model = combobox.get_model()
480 index = combobox.get_active()
481 if index:
482 cat = model[index][0]
483 if not cat == "[Select Category]" :
484 self.plus.SetCategory(cat)
485 self.set_description('category',cat)
486
487
489 model = combobox.get_model()
490 index = combobox.get_active()
491 if index:
492 src = model[index][0]
493 self.dif.SetSourceName(src)
494
496 buff = self.tv.get_buffer()
497 bounds = buff.get_bounds()
498 txt = buff.get_text(bounds[0],bounds[1])
499 for k,v in self.descmap.items():
500 txt = txt.replace(v,'%('+k+')s')
501 if key:
502 self.descmap[key] = value
503 self.description = txt % self.descmap
504 buff.set_text(self.description)
505
507 model = combobox.get_model()
508 index = combobox.get_active()
509 if index:
510 src = model[index][0]
511 self.dif.SetSensorName(src)
512 self.set_description('sensor',src.strip())
513
515 model = combobox.get_model()
516 index = combobox.get_active()
517 if index:
518 cat = model[index][0]
519 if cat.startswith('Add category'):
520 self.make_simulation_category(cat)
521 elif not cat == "[Select Category]":
522 self.parent.GetSteering().SetCategory(cat)
523 self.set_description('simcat',cat)
524
526 model = combobox.get_model()
527 index = combobox.get_active()
528 if index:
529 dtype = model[index][0]
530 if not dtype == "[Select Dataset Type]":
531 self.parent.GetSteering().SetDatasetType(dtype)
532 self.set_description('datasetType',dtype)
533
535 self.simulation_category_menu.insert_text(1,cat)
536 self.simulation_category_menu.set_active(1)
537
539 addsimcatwindow = GtkAddSimCat(self)
540
541
543 model = combobox.get_model()
544 index = combobox.get_active()
545 if index:
546 self.dif.SetParameters(model[index][0])
547
| Home | Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Fri Jan 4 16:45:28 2013 | http://epydoc.sourceforge.net |