00001 #ifndef Fireworks_Core_FWFFLooper_h 00002 #define Fireworks_Core_FWFFLooper_h 00003 00004 #include "Fireworks/Core/interface/CmsShowMainBase.h" 00005 #include "Fireworks/FWInterface/interface/FWFFHelper.h" 00006 #include "FWCore/Framework/interface/EDLooperBase.h" 00007 #include "DataFormats/Provenance/interface/EventID.h" 00008 #include "FWCore/ServiceRegistry/interface/Service.h" 00009 #include "FWCore/Framework/interface/ESWatcher.h" 00010 #include "Fireworks/Geometry/interface/DisplayGeomRecord.h" 00011 #include <string> 00012 #include <Rtypes.h> 00013 #include <memory> 00014 00015 namespace edm 00016 { 00017 class ParameterSet; 00018 class ActivityRegistry; 00019 class Run; 00020 class Event; 00021 class EventSetup; 00022 class ProcessingController; 00023 class ModuleChanger; 00024 class ParameterSet; 00025 class LuminosityBlockPrincipal; 00026 } 00027 00028 class FWFFNavigator; 00029 class FWFFMetadataManager; 00030 class FWPathsPopup; 00031 00032 namespace fireworks 00033 { 00034 class Context; 00035 } 00036 00037 class TEveManager; 00038 class TEveElement; 00039 class TEveMagField; 00040 class TEveTrackPropagator; 00041 class TRint; 00042 class TGWindow; 00043 00044 class FWFFLooper : public CmsShowMainBase, public edm::EDLooperBase 00045 { 00046 public: 00047 FWFFLooper(const edm::ParameterSet&); 00048 virtual ~FWFFLooper(); 00049 00050 // ---------- const member functions --------------------- 00051 00052 // ---------- static member functions -------------------- 00053 00054 // ---------- member functions --------------------------- 00055 00056 virtual void attachTo(edm::ActivityRegistry &); 00057 void postBeginJob(); 00058 void postEndJob(); 00059 00060 virtual void beginRun(const edm::Run&, const edm::EventSetup&); 00061 virtual void doBeginLuminosityBlock(edm::LuminosityBlockPrincipal&,edm::EventSetup const&); 00062 virtual void doEndLuminosityBlock(edm::LuminosityBlockPrincipal&, edm::EventSetup const&); 00063 00064 void display(const std::string& info=""); 00065 00066 TEveMagField* getMagField(); 00067 void setupFieldForPropagator(TEveTrackPropagator* prop); 00068 00069 virtual void checkPosition(); 00070 virtual void stopPlaying(); 00071 virtual void autoLoadNewEvent(); 00072 00073 void showPathsGUI(const TGWindow *p); 00074 00075 void quit(); 00076 00077 virtual void startingNewLoop(unsigned int); 00078 virtual edm::EDLooperBase::Status endOfLoop(const edm::EventSetup&, unsigned int); 00079 virtual edm::EDLooperBase::Status duringLoop(const edm::Event&, const edm::EventSetup&, edm::ProcessingController&); 00080 void requestChanges(const std::string &, const edm::ParameterSet &); 00081 00082 void remakeGeometry(const DisplayGeomRecord& dgRec); 00083 00084 private: 00085 FWFFLooper(const FWFFLooper&); // stop default 00086 const FWFFLooper& operator=(const FWFFLooper&); // stop default 00087 00088 void loadDefaultGeometryFile( void ); 00089 00090 edm::Service<FWFFHelper> m_appHelper; 00091 std::auto_ptr<FWFFNavigator> m_navigator; 00092 std::auto_ptr<FWFFMetadataManager> m_metadataManager; 00093 std::auto_ptr<fireworks::Context> m_context; 00094 00095 TEveManager *m_EveManager; 00096 TRint *m_Rint; 00097 00098 TEveMagField *m_MagField; 00099 00100 bool m_AllowStep; 00101 bool m_ShowEvent; 00102 bool m_firstTime; 00103 FWPathsPopup *m_pathsGUI; 00104 00105 typedef std::map<std::string, edm::ParameterSet> ModuleChanges; 00106 ModuleChanges m_scheduledChanges; 00107 edm::EventID m_nextEventId; 00108 bool m_autoReload; 00109 bool m_isFirstEvent; 00110 bool m_isLastEvent; 00111 00112 edm::ESWatcher<DisplayGeomRecord> m_geomWatcher; 00113 }; 00114 00115 #endif