15 #include <boost/bind.hpp> 16 #include <boost/program_options.hpp> 20 #include "TGLWidget.h" 23 #include "TGFileDialog.h" 26 #include "TServerSocket.h" 28 #include "TEveManager.h" 31 #include <KeySymbols.h> 133 m_metadataManager.
get())),
134 m_loadedAnyInputFile(
false),
137 m_liveTimer(new SignalTimer()),
138 m_liveTimeout(600000),
139 m_lastXEventSerial(0),
140 m_noVersionCheck(
false)
143 TGLWidget*
w = TGLWidget::Create(gClient->GetDefaultRoot(), kTRUE, kTRUE,
nullptr, 10, 10);
147 fwLog(
fwlog::kError) <<
"Failed creating an OpenGL window: " << iException.what() <<
"\n" 149 "- Is DISPLAY environment variable set?\n" 150 "- Are OpenGL libraries installed?\n" 151 "- If running remotely, make sure you use 'ssh -X' or 'ssh -Y'.\n" 152 "See also: https://twiki.cern.ch/twiki/bin/viewauth/CMS/WorkBookFireworks\n";
160 descString +=
" [options] <data file>\nGeneral";
162 namespace po = boost::program_options;
163 po::options_description desc(descString);
169 (
kGeomFileCommandOpt, po::value<std::string>(),
"Reco geometry file. Default is cmsGeom10.root")
170 (
kSimGeomFileCommandOpt, po::value<std::string>(),
"Geometry file for browsing in table view. Default is CmsSimGeom-14.root. Can be simulation or reco geometry in TGeo format")
171 (
kTGeoNameCommandOpt, po::value<std::string>(),
"TGeoManager name. The default is \"cmsGeo;1\"")
172 (
kFieldCommandOpt, po::value<double>(),
"Set magnetic field value explicitly. Default is auto-field estimation")
174 (
kSoftCommandOpt,
"Try to force software rendering to avoid problems with bad hardware drivers")
178 po::options_description livedesc(
"Live Event Display");
179 livedesc.add_options()
180 (
kPlayCommandOpt, po::value<float>(),
"Start in play mode with given interval between events in seconds")
181 (
kPortCommandOpt, po::value<unsigned int>(),
"Listen to port for new data files to open")
183 (
kChainCommandOpt, po::value<unsigned int>(),
"Chain up to a given number of recently open files. Default is 1 - no chain")
184 (
kLiveCommandOpt,
"Enforce playback mode if a user is not using display")
185 (
kAutoSaveAllViews, po::value<std::string>(),
"Auto-save all views with given prefix (run_event_lumi_view.<auto-save-type> is appended)")
186 (
kAutoSaveType, po::value<std::string>(),
"Image type of auto-saved views, png or jpg (png is default)")
187 (
kAutoSaveHeight, po::value<int>(),
"Screenshots height when auto-save-all-views is enabled")
190 po::options_description debugdesc(
"Debug");
191 debugdesc.add_options()
192 (
kLogLevelCommandOpt, po::value<unsigned int>(),
"Set log level starting from 0 to 4 : kDebug, kInfo, kWarning, kError")
194 (
kEnableFPE,
"Enable detection of floating-point exceptions");
196 po::options_description tcachedesc(
"TreeCache");
197 tcachedesc.add_options()
199 (
kSizeTreeCacheOpt, po::value<int>(),
"Set size of TTreeCache for data access in MB (default is 50)")
202 po::options_description rnrdesc(
"Appearance");
203 rnrdesc.add_options()
207 po::positional_options_description
p;
211 po::options_description hiddendesc(
"hidden");
212 hiddendesc.add_options();
214 po::options_description
all(
"");
215 all.add(desc).add(rnrdesc).add(livedesc).add(debugdesc).add(tcachedesc);
219 char **newArgv =
argv;
220 po::variables_map vm;
222 po::store(po::command_line_parser(newArgc, newArgv).
258 if (ds < 0)
throw std::runtime_error(
"tree-cache-size should be non negative");
259 if (ds > 8192)
throw std::runtime_error(
"tree-cache-size should be smaller than 8 GB");
260 fwLog(
fwlog::kInfo) <<
"Setting default TTreeCache size to " << ds <<
" MB." << std::endl;
269 const char* cmspath = gSystem->Getenv(
"CMSSW_BASE");
270 if(
nullptr == cmspath) {
271 throw std::runtime_error(
"CMSSW_BASE environment variable not set");
326 bool eveMode = vm.count(
kEveOpt);
332 TEveManager::Create(kFALSE, eveMode ?
"FIV" :
"FI");
360 TEveLine::SetDefaultSmooth(kTRUE);
413 if (type !=
"png" && type !=
"jpg")
420 fmt +=
"%u_%u_%llu_%s.";
434 gSystem->SetFPEMask();
488 gSystem->ProcessEvents();
512 return static_cast<const fwlite::Event*>(
m_navigator->getCurrentEvent());
544 const char* kRootType[] = {
"ROOT files",
"*.root",
nullptr,
nullptr};
546 fi.fFileTypes = kRootType;
551 fi.fIniDir =
new char[128];
552 strncpy(fi.fIniDir,
".", 127);
569 const char* kRootType[] = {
"ROOT files",
"*.root",
nullptr,
nullptr};
571 fi.fFileTypes = kRootType;
576 fi.fIniDir =
new char[128];
577 strncpy(fi.fIniDir,
".", 127);
582 m_navigator->appendFile(fi.fFilename,
false,
false);
596 "Open Remote Data Files",
599 m_searchFiles->CenterOnParent(kTRUE,TGTransientFrame::kBottomRight);
602 if(!chosenFile.empty()) {
641 else if (!reachedEnd)
774 m_monitor = std::auto_ptr<TMonitor>(
new TMonitor);
775 TServerSocket*
server =
new TServerSocket(iSocket,kTRUE);
776 if (server->GetErrorCode())
778 fwLog(
fwlog::kError) <<
"CmsShowMain::setupSocket, can't create socket on port "<< iSocket <<
"." << std::endl;
787 m_monitor->Connect(
"Ready(TSocket*)",
"CmsShowMain",
this,
"notified(TSocket*)");
794 TServerSocket*
server =
dynamic_cast<TServerSocket*
> (iSocket);
797 TSocket* connection = server->Accept();
802 s <<
"received connection from "<<iSocket->GetInetAddress().GetHostName();
809 memset(buffer,0,
sizeof(buffer));
810 if (iSocket->RecvRaw(buffer,
sizeof(buffer)) <= 0)
821 if (lastNonSpace != std::string::npos)
823 fileName.erase(lastNonSpace+1);
827 s <<
"New file notified '"<<fileName<<
"'";
848 std::stringstream sr;
849 sr <<
"New file registered '"<<fileName<<
"'";
854 std::stringstream sr;
855 sr <<
"New file NOT registered '"<<fileName<<
"'";
865 Int_t keycode = gVirtualX->KeysymToKeycode((
int)kKey_Space);
867 gVirtualX->GrabKey(
id, keycode, 0,
isPlaying());
928 Window_t rootw, childw;
929 Int_t root_x, root_y, win_x, win_y;
931 gVirtualX->QueryPointer(gClient->GetDefaultRoot()->GetId(),
948 #if defined(R__LINUX) 949 TGX11 *x11 =
dynamic_cast<TGX11*
>(gVirtualX);
951 XAnyEvent *
ev = (XAnyEvent*) x11->GetNativeEvent();
DieTimer(CmsShowMain *app)
void fileChangedSlot(const TFile *file)
static const char *const kPlayCommandOpt
static const char *const kNoVersionCheck
void navigatorChangedFilterState(int)
void startAutoLoadTimer()
static void PrefetchingOn()
const fwlite::Event * getCurrentEvent() const
static const char *const kGeomFileCommandOpt
void setLoadedAnyInputFileAfterStartup()
void showEventFilterGUI(const TGWindow *p)
FWSelectionManager * selectionManager()
sigc::signal< void > filterButtonClicked_
static const char *const kChainCommandOpt
static const char *const kAutoSaveAllViews
void checkPosition() override
bool m_loadedAnyInputFile
void eventChangedImp() override
void resetInitialization()
FWGUIManager * guiManager()
static const char *const kZeroWinOffsets
void setupSocket(unsigned int)
void setFilterButtonIcon(int)
static const char *const kSyncAllViews
static const char *const kFieldCommandOpt
void setAutoSaveAllViewsHeight(int x)
static const char *const kLogTreeCacheOpt
void startDoingTasks() override
FWEventItemsManager * eiManager()
sigc::signal< void > activated
void checkKeyBindingsOnPLayEventsStateChanged() override
static const char *const kSimGeomFileOpt
static const char *const kTGeoNameCommandOpt
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 *)
static const char *const kTGeoNameOpt
void enableNavigatorControls()
static const char *const kConfigFileCommandOpt
void stopPlaying() override
void enableActions(bool enable=true)
std::auto_ptr< SignalTimer > m_liveTimer
static const char *const kExpertCommandOpt
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
virtual void stopPlaying()
void filterButtonClicked()
const std::string sAppendData
FWMagField * getField() const
CmsShowTaskExecutor * startupTasks()
virtual Bool_t isEnabled() const
std::auto_ptr< TMonitor > m_monitor
UInt_t m_lastXEventSerial
sigc::signal< void, const TGWindow * > showEventFilterGUI_
static const char *const kEveOpt
virtual void eventChangedImp()
static void enable()
enable automatic library loading
static const char *const kConfigFileOpt
static const char *const kFreePaletteCommandOpt
static const char *const kLoopOpt
void setupConfiguration()
static const char *const kEveCommandOpt
void setSimGeometryFilename(const std::string &filename, const std::string &geoname)
static const char *const kSoftCommandOpt
static const char *const kLogLevelCommandOpt
CmsShowMainFrame * getMainFrame() const
ESource getSource() const
static const char *const kNoConfigFileCommandOpt
static const char *const kEnableFPE
std::vector< std::string > m_inputFiles
static const char *const kPrefetchTreeCacheOpt
void autoLoadNewEvent() override
const_iterator begin() const
NOTE: iterator is allowed to return a null object for items that have been removed.
CSGAction * getAction(const std::string name)
static const char *const kLiveCommandOpt
void updateEventFilterEnable(bool)
static const char *const kHelpCommandOpt
static FWGUIManager * getGUIManager()
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 kAutoSaveType
static const char *const kRootInteractiveCommandOpt
CSGContinuousAction * playEventsAction()
static const char *const kAdvancedRenderCommandOpt
boost::function0< void > TaskFunctor
FWConfigurationManager * configurationManager()
void showEventFilterGUI()
void addTask(const TaskFunctor &iTask)
void setMaxNumberOfFilesToChain(unsigned int i)
const std::string & geometryFilename(void)
void setPresentLogLevel(LogLevel)
static const char *const kSizeTreeCacheOpt
const fireworks::Context * context() const
static const char *const kSimGeomFileCommandOpt
static void syncAllViews()
void titleChanged(const char *title)
void resetFieldEstimate() const
static const char *const kHelpOpt
static void SetDefaultCacheSize(int def_size)
static const char *const kLoopCommandOpt
static const char *const kAutoSaveHeight
void setConfigFilename(const std::string &f)
T get(const Candidate &c)
const_iterator end() const
const std::string sSearchFiles