ATLAS Offline Software
Loading...
Searching...
No Matches
VP1LightRun.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5// Author: Riccardo.Maria.Bianchi@cern.ch, Apr 2017
6// Update: Apr 2019
7
9
10#include "VP1Gui/VP1Gui.h"
12
13// C++ includes
14#include <vector>
15#include <stdexcept>
16#include <iostream>
17#include <iomanip>
18#include <cstdint> // for uint64_t (unsigned long long)
19#include <cstdlib> //For setenv
20#include <chrono>
21// #include <ctime>
22
23using namespace std;
24
25
26class StoreGateSvc;
27class ISvcLocator;
28class IToolSvc;
29
30VP1LightRun::VP1LightRun(const std::string& name) :
31 m_vp1gui(0)
32{
33 std::cout << "VP1LightRun - name: " << name << std::endl;
34 m_noGui=false;
35
36 // Pick up patched Coin
37 ::setenv("LCGPATCH_COINMULTISELECT","1",1);
38}
39
40//____________________________________________________________________
44
45//____________________________________________________________________
47{
48 // msg(MSG::DEBUG) << " in initialize() " << endreq;
49 std::cout << " in initialize() " << std::endl;
50
51
52
53
54 std::vector<std::string>::iterator it, itE = m_initialvp1files.end();
55 for (it = m_initialvp1files.begin();it!=itE;++it) {
56 }
57
58 // dummy objects
59 StoreGateSvc* evtStore = nullptr;
60 StoreGateSvc* detStore = nullptr;
61 ISvcLocator* serviceLocator = nullptr;
62 IToolSvc* toolSvc = nullptr;
63
64 // create VP1 GUI!
65 m_vp1gui = new VP1Gui( evtStore, detStore, serviceLocator, toolSvc,
68 (m_mfOn ? m_mfSourceDir : ""),
69 (m_mfOn ? m_mfLocalCopyDir : ""),
71 ( m_mfOn ? m_mfAvailableLocalInputDirectories : std::vector<std::string>() ) );
72
73#ifdef JFBCOMMENTOUT
74 if (!m_vp1gui->argumentsAreValid()) {
75 std::cout << "arguments not valid..." << std::endl;
76 delete m_vp1gui;
77 m_vp1gui = 0;
78 exit(1);//Should we do this? It is kind of nice to not have to dig through the logfile to find the failure.
79 return false; // StatusCode::FAILURE;
80 }
81 std::cout << "OK! Returning TRUE..." << std::endl;
82#endif
83 return true; //StatusCode::SUCCESS;
84}
85
86//____________________________________________________________________
88{
89 // msg(MSG::DEBUG) <<" in execute() " << endreq;
90 std::cout <<"VP1LightRun:: in execute() " << std::endl;
91
92 // std::cout << "m_vp1gui: " << m_vp1gui << " - m_noGui: " << m_noGui << " - m_vp1gui->hasBeenInitialised(): " << m_vp1gui->hasBeenInitialised() << std::endl;
93 if (!m_vp1gui) {
94 std::cout << "no vp1gui. Returning..." << std::endl;
95 return false; //StatusCode::FAILURE;
96 }
97
98 if ( !m_noGui && !m_vp1gui->hasBeenInitialised() ) {
99 std::cout << "Launching VP1...!!" << std::endl;
100 m_vp1gui->init();//Launch!
101 }
102
103 if(true) {
104 // Get run/event number:
105 const uint64_t eventNumber = 0; //evt->event_ID()->event_number();
106 int runNumber = 0; //evt->event_ID()->run_number();
107 // msg(MSG::DEBUG) << " Got run number = " << runNumber << ", event number = " << eventNumber << endreq;
108 std::cout << " Got run number = " << runNumber << ", event number = " << eventNumber << std::endl;
109
110 // Get time stamp:
111 // unsigned time = evt->event_ID()->time_stamp();//0 means no info.
112 std::chrono::time_point<std::chrono::system_clock> now;
113 now = std::chrono::system_clock::now();
114 unsigned time = std::chrono::duration_cast<std::chrono::seconds>( now.time_since_epoch() ).count();
115 std::cout << " Got timestamp = " << time << std::endl;
116
117 // Get L1 trigger type
118 unsigned int trigType = 0; //_trig ? _trig->level1TriggerType() : 0;
119
120 if (m_noGui||m_vp1gui->executeNewEvent(runNumber,eventNumber,trigType,time)) {
121 return true; //StatusCode::SUCCESS;
122 } else {
123 // msg(MSG::INFO) << " Ending application gracefully." << endreq;
124 std::cout << " Ending application gracefully." << std::endl;
125 return false; //StatusCode::FAILURE;
126 }
127 };
128
129 std::cout << "VP1LightRun::execute() returns TRUE..." << std::endl;
130 return true; //StatusCode::SUCCESS;
131
132}
133
134//____________________________________________________________________
136{
137 // msg(MSG::DEBUG) <<" in finalize() " << endreq;
138 std::cout << " in finalize() " << std::endl;
139
140 if (!m_vp1gui)
141 return false; //StatusCode::FAILURE;
142
143 if (!m_noGui)
144 m_vp1gui->cleanup();
145 delete m_vp1gui;
146
147 return true; // StatusCode::SUCCESS;
148}
149
150//____________________________________________________________________
152{
153 std::cout << " in handle() " << std::endl;
154
155 // msg(MSG::INFO) << "Handling incident '" << inc.type() << "'" << endreq;
156
157 if (!m_vp1gui) {
158 // msg(MSG::INFO) << "Aborting due to null VP1Gui pointer." << endreq;
159 std::cout << "Aborting due to null VP1Gui pointer." << std::endl;
160 return;
161 }
162
163 std::vector<std::string> vect;
164 // StringArrayProperty inputCollections("InputCollections", vect);
165 //
166 // sc = propertyServer->getProperty(&inputCollections);
167 // if(!sc.isSuccess()) {
168 // msg(MSG::INFO) << "Could not get InputCollections property" << endreq;
169 // return;
170 // }
171 // else
172 // msg(MSG::DEBUG) << " Got InputCollections property" << endreq;
173 //
174 // std::vector<std::string>::const_iterator iter = inputCollections.value().begin();
175 // std::vector<std::string>::const_iterator last = inputCollections.value().end();
176 // for(; iter != last; iter++) {
177 // if(*iter != fileInc->fileName())
178 // vect.push_back(*iter);
179 // }
180
181 if(m_mfOn) {
182 std::string strNewFileName = m_vp1gui->nextRequestedEventFile();
183
184 if (strNewFileName.empty())
185 return;
186 if (!VP1FileUtilities::fileExistsAndReadable(strNewFileName)) {
187 // msg(MSG::WARNING) << " File requested by VP1 does not exists or is not readable: "<<strNewFileName<<". Ending." << endreq;
188 cout << " File requested by VP1 does not exists or is not readable: "<<strNewFileName<<". Ending." << endl;
189 return;
190 }
191
192 vect.push_back(strNewFileName);
193 // msg(MSG::INFO) << " Setting next event file: " << strNewFileName<< endreq;
194 cout << " Setting next event file: " << strNewFileName<< endl;
195 }
196 else {
197 std::vector<std::string> strNewFileNames = m_vp1gui->userRequestedFiles();
198 for(unsigned i=0; i<strNewFileNames.size(); ++i) {
199 const std::string& strNewFileName = strNewFileNames[i];
200 if (strNewFileName.empty())
201 continue;
202 if (!VP1FileUtilities::fileExistsAndReadable(strNewFileName)) {
203 // msg(MSG::WARNING) << " File requested by VP1 does not exists or is not readable: " << strNewFileName << endreq;
204 cout << " File requested by VP1 does not exists or is not readable: " << strNewFileName << endl;
205 continue;
206 }
207 vect.push_back(strNewFileName);
208 // msg(MSG::INFO) << " Setting next event file: " << strNewFileName<< endreq;
209 cout << " Setting next event file: " << strNewFileName<< endl;
210 }
211 }
212
213 // StringArrayProperty newInputCollections("InputCollections", vect);
214 //
215 // if(propertyServer->setProperty(newInputCollections)!=StatusCode::SUCCESS)
216 // msg(MSG::WARNING) << "Could not set new InputCollections property" << endreq;
217 // else
218 // msg(MSG::DEBUG) << " InputCollections property set" << endreq;
219}
The Athena Transient Store API.
static bool fileExistsAndReadable(const std::string &)
unsigned m_initialCruiseSeconds
Definition VP1LightRun.h:45
bool initialize()
std::string m_mfLocalCopyDir
Definition VP1LightRun.h:52
std::vector< std::string > m_initialvp1files
Definition VP1LightRun.h:43
VP1LightRun(const std::string &name)
std::string m_mfSourceDir
Definition VP1LightRun.h:51
std::string m_initialCruiseMode
Definition VP1LightRun.h:44
std::vector< std::string > m_mfAvailableLocalInputDirectories
Definition VP1LightRun.h:54
VP1Gui * m_vp1gui
Definition VP1LightRun.h:41
STL namespace.