16 #include <boost/bind.hpp>
17 #include <boost/program_options.hpp>
21 #include "TGLWidget.h"
24 #include "TGFileDialog.h"
27 #include "TServerSocket.h"
29 #include "TEveManager.h"
111 m_context(new fireworks::
Context(changeManager(),
115 m_metadataManager.
get())),
116 m_loadedAnyInputFile(
false),
119 m_liveTimer(new SignalTimer()),
120 m_liveTimeout(600000),
121 m_lastPointerPositionX(-999),
122 m_lastPointerPositionY(-999)
125 TGLWidget* w = TGLWidget::Create(gClient->GetDefaultRoot(), kTRUE, kTRUE, 0, 10, 10);
129 std::cerr <<
"Failed creating an OpenGL window: " << iException.what() <<
"\n"
131 "- Is DISPLAY environment variable set?\n"
132 "- Are OpenGL libraries installed?\n"
133 "- If running remotely, make sure you use 'ssh -X' or 'ssh -Y'.\n"
134 "See also: https://twiki.cern.ch/twiki/bin/viewauth/CMS/WorkBookFireworks\n";
141 std::string descString(argv[0]);
142 descString +=
" [options] <data file>\nAllowed options";
144 namespace po = boost::program_options;
145 po::options_description desc(descString);
151 (
kPlayCommandOpt, po::value<float>(),
"Start in play mode with given interval between events in seconds")
152 (
kPortCommandOpt, po::value<unsigned int>(),
"Listen to port for new data files to open")
157 (
kDebugCommandOpt,
"Start the display from a debugger and produce a crash report")
158 (
kEnableFPE,
"Enable detection of floating-point exceptions")
159 (
kLogLevelCommandOpt, po::value<unsigned int>(),
"Set log level starting from 0 to 4 : kDebug, kInfo, kWarning, kError")
161 (
kSoftCommandOpt,
"Try to force software rendering to avoid problems with bad hardware drivers")
162 (
kChainCommandOpt, po::value<unsigned int>(),
"Chain up to a given number of recently open files. Default is 1 - no chain")
163 (
kLiveCommandOpt,
"Enforce playback mode if a user is not using display")
164 (
kFieldCommandOpt, po::value<double>(),
"Set magnetic field value explicitly. Default is auto-field estimation")
166 (
kAutoSaveAllViews, po::value<std::string>(),
"Auto-save all views with given prefix (run_event_lumi_view.png is appended)")
167 (
kZeroWinOffsets,
"Disable auto-detection of window position offsets.")
169 po::positional_options_description
p;
173 char **newArgv = argv;
174 po::variables_map vm;
177 po::store(po::command_line_parser(newArgc, newArgv).
195 const char* cmspath = gSystem->Getenv(
"CMSSW_BASE");
197 throw std::runtime_error(
"CMSSW_BASE environment variable not set");
243 bool eveMode = vm.count(
kEveOpt);
249 TEveManager::Create(kFALSE,
"FIV");
261 TEveLine::SetDefaultSmooth(kTRUE);
311 fmt +=
"%d_%d_%d_%s.png";
315 gSystem->SetFPEMask();
366 gSystem->ProcessEvents();
390 return static_cast<const fwlite::Event*>(
m_navigator->getCurrentEvent());
418 const char* kRootType[] = {
"ROOT files",
"*.root", 0, 0};
420 fi.fFileTypes = kRootType;
425 fi.fIniDir =
new char[128];
426 strncpy(fi.fIniDir,
".", 127);
442 const char* kRootType[] = {
"ROOT files",
"*.root", 0, 0};
444 fi.fFileTypes = kRootType;
449 fi.fIniDir =
new char[128];
450 strncpy(fi.fIniDir,
".", 127);
455 m_navigator->appendFile(fi.fFilename,
false,
false);
469 "Open Remote Data Files",
472 m_searchFiles->CenterOnParent(kTRUE,TGTransientFrame::kBottomRight);
475 if(!chosenFile.empty()) {
513 else if (!reachedEnd)
589 for (
unsigned int ii = 0; ii <
m_inputFiles.size(); ++ii)
620 m_monitor = std::auto_ptr<TMonitor>(
new TMonitor);
621 TServerSocket*
server =
new TServerSocket(iSocket,kTRUE);
622 if (server->GetErrorCode())
624 fwLog(
fwlog::kError) <<
"CmsShowMain::setupSocket, can't create socket on port "<< iSocket <<
"." << std::endl;
633 m_monitor->Connect(
"Ready(TSocket*)",
"CmsShowMain",
this,
"notified(TSocket*)");
640 TServerSocket*
server =
dynamic_cast<TServerSocket*
> (iSocket);
643 TSocket* connection = server->Accept();
648 s <<
"received connection from "<<iSocket->GetInetAddress().GetHostName();
655 memset(buffer,0,
sizeof(buffer));
656 if (iSocket->RecvRaw(buffer,
sizeof(buffer)) <= 0)
667 if (lastNonSpace != std::string::npos)
669 fileName.erase(lastNonSpace+1);
673 s <<
"New file notified '"<<fileName<<
"'";
694 std::stringstream sr;
695 sr <<
"New file registered '"<<fileName<<
"'";
700 std::stringstream sr;
701 sr <<
"New file NOT registered '"<<fileName<<
"'";
764 Window_t rootw, childw;
765 Int_t root_x, root_y, win_x, win_y;
767 gVirtualX->QueryPointer(gClient->GetDefaultRoot()->GetId(),
784 Window_t rootw, childw;
785 Int_t root_x, root_y, win_x, win_y;
787 gVirtualX->QueryPointer(gClient->GetDefaultRoot()->GetId(),
802 m_lastPointerPositionY = root_y;
DieTimer(CmsShowMain *app)
void fileChangedSlot(const TFile *file)
static const char *const kPlayCommandOpt
void navigatorChangedFilterState(int)
void startAutoLoadTimer()
const fwlite::Event * getCurrentEvent() const
static const char *const kGeomFileCommandOpt
void showEventFilterGUI(const TGWindow *p)
sigc::signal< void > filterButtonClicked_
static const char *const kChainCommandOpt
static const char *const kAutoSaveAllViews
bool m_loadedAnyInputFile
void resetInitialization()
virtual void checkPosition()
virtual void eventChangedImp()
FWGUIManager * guiManager()
static const char *const kZeroWinOffsets
void setupSocket(unsigned int)
void setFilterButtonIcon(int)
static const char *const kFieldCommandOpt
Int_t m_lastPointerPositionX
FWEventItemsManager * eiManager()
sigc::signal< void > activated
static const char *const kLogLevelOpt
std::auto_ptr< FWLiteJobMetadataManager > m_metadataManager
static const char *const kNoConfigFileOpt
const char * configFilename() const
const std::string sOpenData
void setup(FWNavigatorBase *navigator, fireworks::Context *context, FWJobMetadataManager *metadataManager)
void updateStatus(const char *status)
void setContext(fireworks::Context *)
void enableNavigatorControls()
static const char *const kConfigFileCommandOpt
void enableActions(bool enable=true)
virtual void autoLoadNewEvent()
std::auto_ptr< SignalTimer > m_liveTimer
static const char *const kAdvancedRenderOpt
CmsShowMain(int argc, char *argv[])
static const char *const kGeomFileOpt
std::auto_ptr< fireworks::Context > m_context
void setupAutoLoad(float x)
static const char *const kPortCommandOpt
void setGeometryFilename(const std::string &filename)
static const char *const kPlayOpt
void filterButtonClicked()
const std::string sAppendData
CmsShowTaskExecutor * startupTasks()
virtual Bool_t isEnabled() const
std::auto_ptr< TMonitor > m_monitor
sigc::signal< void, const TGWindow * > showEventFilterGUI_
static const char *const kEveOpt
virtual void eventChangedImp()
static const char *const kConfigFileOpt
static const char *const kFreePaletteCommandOpt
static const char *const kLoopOpt
static const char *const kDebugCommandOpt
void setupConfiguration()
static const char *const kEveCommandOpt
static const char *const kSoftCommandOpt
static const char *const kLogLevelCommandOpt
CmsShowMainFrame * getMainFrame() const
static const char *const kNoConfigFileCommandOpt
static const char *const kEnableFPE
std::vector< std::string > m_inputFiles
void setIsPlaying(bool value)
static const char *const kDebugOpt
CSGAction * getAction(const std::string name)
static const char *const kLiveCommandOpt
void updateEventFilterEnable(bool)
static const char *const kHelpCommandOpt
static const char *const kInputFilesCommandOpt
static const char *const kInputFilesOpt
static const char *const kPlainRootCommandOpt
void setAutoSaveAllViewsFormat(const std::string &fmt)
std::auto_ptr< CmsShowNavigator > m_navigator
void setFilterButtonText(const char *txt)
std::auto_ptr< CmsShowSearchFiles > m_searchFiles
static const char *const kRootInteractiveCommandOpt
CSGContinuousAction * playEventsAction()
static const char *const kAdvancedRenderCommandOpt
boost::function0< void > TaskFunctor
void showEventFilterGUI()
void addTask(const TaskFunctor &iTask)
void setMaxNumberOfFilesToChain(unsigned int i)
static void enable()
enable automatic library loading
virtual void stopPlaying()
const std::string & geometryFilename(void)
Int_t m_lastPointerPositionY
void setPresentLogLevel(LogLevel)
void titleChanged(const char *title)
static const char *const kHelpOpt
static const char *const kLoopCommandOpt
void setConfigFilename(const std::string &f)
T get(const Candidate &c)
const std::string sSearchFiles