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