00001 #include <list>
00002 #include <string>
00003 #include <csignal>
00004 #include "TROOT.h"
00005 #include "TApplication.h"
00006 #include "TRint.h"
00007 #include "JobControl/CmdLine.h"
00008 #include "JobControl/Stack.h"
00009 #include "JobControl/HistoFile.h"
00010 #include "JobControl/Sequence.h"
00011 #include "XMLInterface/xmli.h"
00012 #include "Config/Table.h"
00013
00014 static TROOT troot("ana","ana");
00015
00016 TFile* gsHistoFile = 0;
00017
00018 static void gsSIGHUPhandler(int s)
00019 {
00020 switch (s) {
00021 case SIGINT: case SIGQUIT: case SIGTERM: case SIGHUP:
00022 jobc::CmdLine::Instance().SetSIGHUP();
00023 break;
00024
00025 case SIGUSR1:
00026 jobc::Sequence::PrintCurrentNode();
00027 break;
00028
00029 default:
00030 break;
00031 }
00032 }
00033
00034
00035
00036 int main(int argc, char** argv)
00037 {
00038 new TRint("ana",0,0);
00039
00040 jobc::CmdLine::Instance().Parse(argc, argv);
00041 jobc::HistoFile::SetFileName(jobc::CmdLine::Instance().HistoFileName());
00042
00043
00044
00045 xmli::Initialize();
00046
00047 std::list<std::string>::const_iterator itr;
00048 std::list<std::string>::const_iterator itrEnd;
00049
00050 itr = jobc::CmdLine::Instance().XMLFileList().begin();
00051 itrEnd = jobc::CmdLine::Instance().XMLFileList().end();
00052 for (; itr!=itrEnd; ++itr) xmli::ReadFile((*itr).c_str());
00053
00054 itr = jobc::CmdLine::Instance().XMLDirList().begin();
00055 itrEnd = jobc::CmdLine::Instance().XMLDirList().end();
00056 for (; itr!=itrEnd; ++itr) xmli::ReadDirectory((*itr).c_str());
00057
00058
00059
00060 signal(SIGINT, gsSIGHUPhandler);
00061 signal(SIGQUIT,gsSIGHUPhandler);
00062 signal(SIGTERM,gsSIGHUPhandler);
00063 signal(SIGHUP, gsSIGHUPhandler);
00064 signal(SIGUSR1,gsSIGHUPhandler);
00065
00066
00067 jobc::Stack::Instance().Run();
00068 jobc::Stack::Instance().CleanUp();
00069
00070
00071 if (jobc::HistoFile::File()) {
00072 jobc::HistoFile::File()->Write();
00073 jobc::HistoFile::File()->Close();
00074 if (! jobc::HistoFile::SaveHistos()) {
00075
00076
00077 std::string cmd("rm -f ");
00078 cmd += std::string(jobc::HistoFile::FileName());
00079 system(cmd.c_str());
00080 }
00081 }
00082
00083 return 0;
00084 }