Package iceprod :: Package client :: Package gtk :: Module GtkSimInput
[hide private]
[frames] | no frames]

Source Code for Module iceprod.client.gtk.GtkSimInput

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