CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CmsShowMainBase.cc
Go to the documentation of this file.
1 #include <fstream>
2 #include <sys/types.h>
3 #include <sys/socket.h>
4 #include <netinet/in.h>
5 #include <arpa/inet.h>
6 #include <netdb.h>
7 
8 #include <boost/bind.hpp>
9 
10 #include "TGLWidget.h"
11 #include "TGMsgBox.h"
12 #include "TROOT.h"
13 #include "TSystem.h"
14 #include "TStopwatch.h"
15 #include "TTimer.h"
16 #include "TEveManager.h"
17 #include "TPRegexp.h"
18 
47 
48 
50  :
51  m_changeManager(new FWModelChangeManager),
52  m_colorManager( new FWColorManager(m_changeManager.get())),
53  m_configurationManager(new FWConfigurationManager),
54  m_eiManager(new FWEventItemsManager(m_changeManager.get())),
55  m_guiManager(0),
56  m_selectionManager(new FWSelectionManager(m_changeManager.get())),
57  m_startupTasks(new CmsShowTaskExecutor),
58  m_viewManager(new FWViewManagerManager(m_changeManager.get(), m_colorManager.get())),
59  m_autoLoadTimer(new SignalTimer()),
60  m_navigatorPtr(0),
61  m_metadataManagerPtr(0),
62  m_contextPtr(0),
63  m_autoLoadTimerRunning(kFALSE),
64  m_forward(true),
65  m_isPlaying(false),
66  m_loop(false),
67  m_playDelay(3.f)
68 {
70 }
71 
73 {
74 }
75 
76 void
78 {
79  m_guiManager->writeToPresentConfigurationFile_.connect(sigc::mem_fun(*this, &CmsShowMainBase::writeToCurrentConfigFile));
80 
81  // init TGSlider state before signals are connected
82  m_guiManager->setDelayBetweenEvents(m_playDelay);
83 
84  m_navigatorPtr->newEvent_.connect(boost::bind(&CmsShowMainBase::eventChangedSlot, this));
85  if (m_guiManager->getAction(cmsshow::sNextEvent) != 0)
86  m_guiManager->getAction(cmsshow::sNextEvent)->activated.connect(sigc::mem_fun(*this, &CmsShowMainBase::doNextEvent));
87  if (m_guiManager->getAction(cmsshow::sPreviousEvent) != 0)
88  m_guiManager->getAction(cmsshow::sPreviousEvent)->activated.connect(sigc::mem_fun(*this, &CmsShowMainBase::doPreviousEvent));
89  if (m_guiManager->getAction(cmsshow::sGotoFirstEvent) != 0)
90  m_guiManager->getAction(cmsshow::sGotoFirstEvent)->activated.connect(sigc::mem_fun(*this, &CmsShowMainBase::doFirstEvent));
91  if (m_guiManager->getAction(cmsshow::sGotoLastEvent) != 0)
92  m_guiManager->getAction(cmsshow::sGotoLastEvent)->activated.connect(sigc::mem_fun(*this, &CmsShowMainBase::doLastEvent));
93  if (m_guiManager->getAction(cmsshow::sQuit) != 0)
94  m_guiManager->getAction(cmsshow::sQuit)->activated.connect(sigc::mem_fun(*this, &CmsShowMainBase::quit));
95 
96  m_guiManager->changedEventId_.connect(boost::bind(&CmsShowMainBase::goToRunEvent,this,_1,_2,_3));
97  m_guiManager->playEventsAction()->started_.connect(sigc::mem_fun(*this, &CmsShowMainBase::playForward));
98  m_guiManager->playEventsBackwardsAction()->started_.connect(sigc::mem_fun(*this,&CmsShowMainBase::playBackward));
99  m_guiManager->loopAction()->started_.connect(sigc::mem_fun(*this,&CmsShowMainBase::setPlayLoopImp));
100  m_guiManager->loopAction()->stopped_.connect(sigc::mem_fun(*this,&CmsShowMainBase::unsetPlayLoopImp));
101  m_guiManager->changedDelayBetweenEvents_.connect(boost::bind(&CmsShowMainBase::setPlayDelay,this,_1));
102  m_guiManager->playEventsAction()->stopped_.connect(sigc::mem_fun(*this,&CmsShowMainBase::stopPlaying));
103  m_guiManager->playEventsBackwardsAction()->stopped_.connect(sigc::mem_fun(*this,&CmsShowMainBase::stopPlaying));
104 
105  m_autoLoadTimer->timeout_.connect(boost::bind(&CmsShowMainBase::autoLoadNewEvent, this));
106 }
107 
108 void
110 {
111  guiManager()->updateStatus("Setting up view manager...");
112 
113  boost::shared_ptr<FWViewManagerBase> eveViewManager(new FWEveViewManager(guiManager()));
114  eveViewManager->setContext(m_contextPtr);
115  viewManager()->add(eveViewManager);
116 
117  boost::shared_ptr<FWTableViewManager> tableViewManager(new FWTableViewManager(guiManager()));
118  configurationManager()->add(std::string("Tables"), tableViewManager.get());
119  viewManager()->add(tableViewManager);
120  eiManager()->goingToClearItems_.connect(boost::bind(&FWTableViewManager::removeAllItems, tableViewManager.get()));
121 
122  boost::shared_ptr<FWTriggerTableViewManager> triggerTableViewManager(new FWTriggerTableViewManager(guiManager()));
123  configurationManager()->add(std::string("TriggerTables"), triggerTableViewManager.get());
124  configurationManager()->add(std::string("L1TriggerTables"), triggerTableViewManager.get()); // AMT: added for backward compatibilty
125  triggerTableViewManager->setContext(m_contextPtr);
126  viewManager()->add(triggerTableViewManager);
127 
128  boost::shared_ptr<FWGeometryTableViewManager> geoTableViewManager(new FWGeometryTableViewManager(guiManager(), m_simGeometryFilename));
129  geoTableViewManager->setContext(m_contextPtr);
130  viewManager()->add(geoTableViewManager);
131 
132 
133  // Unfortunately, due to the plugin mechanism, we need to delay
134  // until here the creation of the FWJobMetadataManager, because
135  // otherwise the supportedTypesAndRepresentations map is empty.
136  // FIXME: should we have a signal for whenever the above mentioned map
137  // changes? Can that actually happer (maybe if we add support
138  // for loading plugins on the fly??).
139  m_metadataManagerPtr->initReps(viewManager()->supportedTypesAndRepresentations());
140 }
141 
142 void
144 {
145  eventChangedImp();
146 }
147 
148 void
150 {
152 }
153 
154 void
156 {
158  checkPosition();
159  draw();
160 }
161 
162 void
164 {
166  checkPosition();
167  draw();
168 }
169 
170 void
172 {
174  checkPosition();
175  draw();
176 }
177 void
179 {
181  checkPosition();
182  draw();
183 }
184 
185 void
187 {
188  m_navigatorPtr->goToRunEvent(run, lumi, event);
189  checkPosition();
190  draw();
191 }
192 
193 
194 void
196 {
197  m_guiManager->updateStatus("loading event ...");
198 
200  {
202  }
204 
205  TStopwatch sw;
206  m_viewManager->eventBegin();
208  m_viewManager->eventEnd();
209  sw.Stop();
210  fwLog(fwlog::kDebug) << "CmsShowMainBase::draw CpuTime " << sw.CpuTime()
211  <<" RealTime " << sw.RealTime() << std::endl;
212 
213  if (!m_autoSaveAllViewsFormat.empty())
214  {
215  m_guiManager->updateStatus("auto saving images ...");
216  m_guiManager->exportAllViews(m_autoSaveAllViewsFormat);
217  }
218 
219  m_guiManager->clearStatus();
220 }
221 
222 void
224  fireworks::Context *context,
225  FWJobMetadataManager *metadataManager)
226 {
227  m_navigatorPtr = navigator;
228  m_contextPtr = context;
229  m_metadataManagerPtr = metadataManager;
230 
231  m_colorManager->initialize();
234 
235  m_eiManager->newItem_.connect(boost::bind(&FWModelChangeManager::newItemSlot,
236  m_changeManager.get(), _1) );
237 
238  m_eiManager->newItem_.connect(boost::bind(&FWViewManagerManager::registerEventItem,
239  m_viewManager.get(), _1));
240  m_configurationManager->add("EventItems",m_eiManager.get());
241  m_configurationManager->add("GUI",m_guiManager.get());
242  m_configurationManager->add("EventNavigator", m_navigatorPtr);
243  m_configurationManager->add("CommonPreferences", m_contextPtr->commonPrefs()); // must be after GUIManager in alphabetical order
244 
245  m_guiManager->writeToConfigurationFile_.connect(boost::bind(&CmsShowMainBase::writeToConfigFile,
246  this,_1));
247 
248  m_guiManager->loadFromConfigurationFile_.connect(boost::bind(&CmsShowMainBase::reloadConfiguration,
249  this, _1));
250  std::string macPath(gSystem->Getenv("CMSSW_BASE"));
251  macPath += "/src/Fireworks/Core/macros";
252  const char* base = gSystem->Getenv("CMSSW_RELEASE_BASE");
253  if(0!=base) {
254  macPath+=":";
255  macPath +=base;
256  macPath +="/src/Fireworks/Core/macros";
257  }
258  gROOT->SetMacroPath((std::string("./:")+macPath).c_str());
259 
260  m_startupTasks->tasksCompleted_.connect(boost::bind(&FWGUIManager::clearStatus,
261  m_guiManager.get()) );
262 }
263 
264 void
266 {
269 }
270 
271 void
273 {
275 }
276 
277 void
279 {
280  if (config.empty())
281  return;
282 
284 
285  std::string msg = "Reloading configuration "
286  + config + "...";
287  fwLog(fwlog::kDebug) << msg << std::endl;
288  m_guiManager->updateStatus(msg.c_str());
289  m_guiManager->subviewDestroyAll();
290  m_eiManager->clearItems();
292  try
293  {
294  gEve->DisableRedraw();
295  m_configurationManager->readFromFile(config);
296  gEve->EnableRedraw();
297  }
299  {
300  Int_t chosen;
301  new TGMsgBox(gClient->GetDefaultRoot(),
302  gClient->GetDefaultRoot(),
303  "Bad configuration",
304  ("Configuration " + config + " cannot be parsed: " + e.error()).c_str(),
305  kMBIconExclamation,
306  kMBCancel,
307  &chosen);
308  }
309  catch (...)
310  {
311  Int_t chosen;
312  new TGMsgBox(gClient->GetDefaultRoot(),
313  gClient->GetDefaultRoot(),
314  "Bad configuration",
315  ("Configuration " + config + " cannot be parsed.").c_str(),
316  kMBIconExclamation,
317  kMBCancel,
318  &chosen);
319  }
320 
321  m_guiManager->updateStatus("");
322 }
323 
324 void
326 {
327  m_playDelay = x;
328  m_guiManager->setDelayBetweenEvents(m_playDelay);
329  if (!m_guiManager->playEventsAction()->isEnabled())
330  m_guiManager->playEventsAction()->enable();
331 
332  m_guiManager->playEventsAction()->switchMode();
333 }
334 
335 void
337 {
338  m_autoLoadTimer->SetTime((Long_t)(m_playDelay*1000));
339  m_autoLoadTimer->Reset();
340  m_autoLoadTimer->TurnOn();
341  m_autoLoadTimerRunning = kTRUE;
342 }
343 
344 void
346 {
347  m_autoLoadTimer->TurnOff();
348  m_autoLoadTimerRunning = kFALSE;
349 }
350 
351 void
353 {
354  m_guiManager->updateStatus("Setting up configuration...");
355  if(m_configFileName.empty() ) {
356  fwLog(fwlog::kInfo) << "no configuration is loaded." << std::endl;
357  m_guiManager->getMainFrame()->MapSubwindows();
358  m_guiManager->getMainFrame()->Layout();
359  m_guiManager->getMainFrame()->MapRaised();
360  m_configFileName = "newconfig.fwc";
361  m_guiManager->createView("Rho Phi");
362  m_guiManager->createView("Rho Z");
363  }
364  else {
365  char* whereConfig = gSystem->Which(TROOT::GetMacroPath(), m_configFileName.c_str(), kReadPermission);
366  if(0==whereConfig) {
367  fwLog(fwlog::kInfo) <<"unable to load configuration file '"<<m_configFileName<<"' will load default instead."<<std::endl;
368  whereConfig = gSystem->Which(TROOT::GetMacroPath(), "default.fwc", kReadPermission);
369  assert(whereConfig && "Default configuration cannot be found. Malformed Fireworks installation?");
370  }
371  m_configFileName = whereConfig;
372 
373  delete [] whereConfig;
374  try
375  {
376  gEve->DisableRedraw();
378  gEve->EnableRedraw();
379  }
381  {
382  fwLog(fwlog::kError) <<"Unable to load configuration file '"
383  << m_configFileName
384  << "': "
385  << e.error()
386  << std::endl;
387  exit(1);
388  }
389  catch (std::runtime_error &e)
390  {
391  fwLog(fwlog::kError) <<"Unable to load configuration file '"
392  << m_configFileName
393  << "' which was specified on command line. Quitting."
394  << std::endl;
395  exit(1);
396  }
397  }
398  /*
399  if(not m_configFileName.empty() ) {
400  //when the program quits we will want to save the configuration automatically
401  m_guiManager->goingToQuit_.connect(
402  boost::bind(&FWConfigurationManager::writeToFile,
403  m_configurationManager.get(),
404  m_configFileName));
405  }
406  */
407 }
408 
409 
410 void
412 {
413  m_playDelay = val;
414 }
415 
416 void
418 {
419  m_guiManager->updateStatus("Setting up Eve debug window...");
420  m_guiManager->openEveBrowserForDebugging();
421 }
422 
423 void
425 {
426  if(!m_loop) {
427  setPlayLoopImp();
428  m_guiManager->loopAction()->activated();
429  }
430 }
431 
432 void
434 {
435  if(m_loop) {
437  m_guiManager->loopAction()->stop();
438  }
439 }
440 
441 void
443 {
444  m_loop = true;
445 }
446 
447 void
449 {
450  m_loop = false;
451 }
452 
453 void
455 {
456  m_eiManager->add(iItem);
457 }
458 
459 void
461 {
462  m_forward = true;
463  m_isPlaying = true;
464  guiManager()->enableActions(kFALSE);
466 }
467 
468 void
470 {
471  m_forward = false;
472  m_isPlaying = true;
473  guiManager()->enableActions(kFALSE);
475 }
476 
477 void
479 { // prepare geometry service
480  // ATTN: this should be made configurable
481  try
482  {
483  guiManager()->updateStatus("Loading geometry...");
486  }
487  catch (const std::runtime_error& iException)
488  {
489  fwLog(fwlog::kError) << "CmsShowMain::loadGeometry() caught exception: \n"
490  << m_geometryFilename << " "
491  << iException.what() << std::endl;
492  exit(0);
493  }
494 }
495 
496 void
498 {
499  // Send version info to xrootd.t2.ucsd.edu receiver on port 9698.
500 
501  // receiver
502  struct hostent* h = gethostbyname("xrootd.t2.ucsd.edu");
503  if (!h) return;
504 
505 
506  struct sockaddr_in remoteServAddr;
507  remoteServAddr.sin_family = h->h_addrtype;
508  memcpy((char *) &remoteServAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
509  remoteServAddr.sin_port = htons(9698);
510 
511  // socket creation
512  int sd = socket(AF_INET,SOCK_DGRAM, 0);
513  if (sd < 0)
514  {
515  // std::cout << "can't create socket \n";
516  return;
517  }
518  // bind any port
519  // printf("bind port\n");
520  struct sockaddr_in cliAddr;
521  cliAddr.sin_family = AF_INET;
522  cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);
523  cliAddr.sin_port = htons(0);
524 
525  int rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));
526  if (rc < 0) {
527  // std::cout << "can't bind port %d " << rc << std::endl;
528  return;
529  }
530 
531  // get OSX version
532  TString osx_version;
533  try {
534  std::ifstream infoFile("/System/Library/CoreServices/SystemVersion.plist");
535  osx_version.ReadFile(infoFile);
536  TPMERegexp re("ProductVersion\\</key\\>\\n\\t\\<string\\>(10.*)\\</string\\>");
537  re.Match(osx_version);
538  osx_version = re[1];
539  }
540  catch (...) {}
541 
542  // send data
543  SysInfo_t sInfo;
544  gSystem->GetSysInfo(&sInfo);
545  char msg[128];
546 
547  if (gSystem->Getenv("CMSSW_VERSION"))
548  {
549  snprintf(msg, 64,"%s %s %s", gSystem->Getenv("CMSSW_VERSION"), sInfo.fOS.Data(), osx_version.Data());
550  }
551  else
552  {
553  TString versionFileName("data/version.txt");
554  fireworks::setPath(versionFileName);
555  std::ifstream fs(versionFileName);
556  TString infoText;
557  infoText.ReadLine(fs);
558  fs.close();
559  snprintf(msg, 64,"Standalone %s %s %s", infoText.Data(), sInfo.fOS.Data(), osx_version.Data() );
560  }
561 
562 
563  int flags = 0;
564  sendto(sd, msg, strlen(msg), flags,
565  (struct sockaddr *) &remoteServAddr,
566  sizeof(remoteServAddr));
567 }
tuple base
Main Program
Definition: newFWLiteAna.py:92
void registerEventItem(const FWEventItem *iItem)
virtual void goToRunEvent(edm::RunNumber_t, edm::LuminosityBlockNumber_t, edm::EventNumber_t)=0
std::auto_ptr< FWConfigurationManager > m_configurationManager
std::string m_geometryFilename
FWGUIManager * guiManager()
void setGeom(const FWGeometry *x)
Definition: Context.h:51
void writeToConfigFile(const std::string &config)
unsigned int EventNumber_t
Definition: EventID.h:30
virtual void nextEvent()=0
tuple lumi
Definition: fjr2json.py:35
FWEventItemsManager * eiManager()
std::vector< Variable::Flags > flags
Definition: MVATrainer.cc:135
void initReps(const FWTypeToRepresentations &iTypeAndReps)
void initEveElements()
Definition: Context.cc:95
std::auto_ptr< FWEventItemsManager > m_eiManager
void setup(FWNavigatorBase *navigator, fireworks::Context *context, FWJobMetadataManager *metadataManager)
void updateStatus(const char *status)
unsigned int LuminosityBlockNumber_t
Definition: EventID.h:31
void enableActions(bool enable=true)
virtual void checkPosition()=0
void checkBeamSpot(const edm::EventBase *event)
Definition: FWBeamSpot.cc:6
const std::string sNextEvent
Definition: ActionsList.cc:5
virtual ~CmsShowMainBase()
void setupAutoLoad(float x)
FWNavigatorBase * m_navigatorPtr
void newItemSlot(FWEventItem *)
FWBeamSpot * getBeamSpot() const
Definition: Context.h:78
void reloadConfiguration(const std::string &config)
FWMagField * getField() const
Definition: Context.h:77
virtual void firstEvent()=0
std::auto_ptr< SignalTimer > m_autoLoadTimer
void loadMap(const char *fileName)
Definition: FWGeometry.cc:48
void setPlayDelay(Float_t val)
virtual void eventChangedImp()
virtual void quit()=0
FWJobMetadataManager * m_metadataManagerPtr
double f[11][100]
const std::string sGotoLastEvent
Definition: ActionsList.cc:4
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
ESource getSource() const
Definition: FWMagField.h:33
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
virtual void previousEvent()=0
virtual const edm::EventBase * getCurrentEvent() const =0
std::auto_ptr< CmsShowTaskExecutor > m_startupTasks
void eventChangedCallback()
void clearStatus()
void checkFieldInfo(const edm::EventBase *)
Definition: FWMagField.cc:172
FWViewManagerManager * viewManager()
virtual void autoLoadNewEvent()=0
std::string m_simGeometryFilename
void add(boost::shared_ptr< FWViewManagerBase >)
#define fwLog(_level_)
Definition: fwLog.h:50
double sd
const std::string sGotoFirstEvent
Definition: ActionsList.cc:3
fireworks::Context * m_contextPtr
CmsShowCommon * commonPrefs() const
Definition: Context.cc:178
void add(const std::string &iName, FWConfigurable *)
does not take ownership
virtual void stopPlaying()=0
const std::string sPreviousEvent
Definition: ActionsList.cc:6
FWConfigurationManager * configurationManager()
void writeToCurrentConfigFile()
std::string m_autoSaveAllViewsFormat
std::auto_ptr< FWModelChangeManager > m_changeManager
void registerPhysicsObject(const FWPhysicsObjectDesc &iItem)
unsigned int RunNumber_t
Definition: EventRange.h:32
volatile std::atomic< bool > shutdown_flag false
Definition: DDAxes.h:10
const std::string sQuit
Definition: ActionsList.cc:22
void goToRunEvent(edm::RunNumber_t, edm::LuminosityBlockNumber_t, edm::EventNumber_t)
std::auto_ptr< FWViewManagerManager > m_viewManager
std::auto_ptr< FWColorManager > m_colorManager
sigc::signal< void > goingToClearItems_
std::auto_ptr< FWGUIManager > m_guiManager
T get(const Candidate &c)
Definition: component.h:55
virtual void lastEvent()=0
void setPath(TString &v)
Definition: fwPaths.cc:15
sigc::signal< void > newEvent_
std::string m_configFileName