00001
00002
00003
00004
00005
00006
00007
00009
00010 #include "art/Framework/Core/EDAnalyzer.h"
00011 #include "art/Framework/Principal/Handle.h"
00012 #include "art/Framework/Principal/Event.h"
00013 #include "art/Framework/Core/ModuleMacros.h"
00014
00015 #include <iostream>
00016 #include <future>
00017 #include <TApplication.h>
00018 #include <TSystem.h>
00019 #include <unistd.h>
00020
00021 namespace demo
00022 {
00026 class RootApplication : public art::EDAnalyzer
00027 {
00028 public:
00037 explicit RootApplication(fhicl::ParameterSet const& p);
00038
00042 virtual ~RootApplication();
00043
00047 void beginJob() override;
00048
00055 void analyze(art::Event const& e) override;
00056
00060 void endJob() override;
00061
00062 private:
00063 std::unique_ptr<TApplication> app_;
00064 bool force_new_;
00065 bool dont_quit_;
00066 };
00067 }
00068
00069 demo::RootApplication::RootApplication(fhicl::ParameterSet const& ps): art::EDAnalyzer(ps)
00070 , force_new_(ps.get<bool>("force_new", true))
00071 , dont_quit_(ps.get<bool>("dont_quit", false)) {}
00072
00073 demo::RootApplication::~RootApplication() { }
00074
00075 void demo::RootApplication::analyze(art::Event const&)
00076 {
00077 gSystem->ProcessEvents();
00078 }
00079
00080 void demo::RootApplication::beginJob()
00081 {
00082 if (!gApplication || force_new_)
00083 {
00084 int tmp_argc(0);
00085 app_ = std::unique_ptr<TApplication>(new TApplication("noapplication", &tmp_argc, 0));
00086 }
00087 }
00088
00089 void demo::RootApplication::endJob()
00090 {
00091 if (dont_quit_) app_->Run(true);
00092 }
00093
00094 DEFINE_ART_MODULE(demo::RootApplication)