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 2729456 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]) 51731 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 349351 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)438440 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)
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Mon May 3 21:25:54 2010 | http://epydoc.sourceforge.net |