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