125 m_pSelector(pSelector), m_firstEvent(
true), m_lumiBlockNo(0), m_initEventNo(0) {
128 SmartIF<IProperty> prpMgr(Gaudi::svcLocator());
129 if ( ! prpMgr.isValid() ) {
130 std::cout <<
"IProperty interface not found in ApplicationMgr." << std::endl;
133 m_appMgrProperty = prpMgr;
136 ISvcLocator* svcLocator = Gaudi::svcLocator();
138 StatusCode status = svcLocator->service(
"RealizationSvc", tmpReal);
139 if (!status.isSuccess())
141 std::cout <<
" Could not initialize Realization Service" << std::endl;
148 status = svcLocator->service(
"DataInfoSvc",tmpInfoSvc);
149 if (status.isSuccess()) {
150 std::cout <<
"get the DataInfoSvc" << std::endl;
151 jobInfoSvc=
dynamic_cast<DataInfoSvc *
>(tmpInfoSvc);
153 std::cout <<
"could not get the DataInfoSvc." << std::endl;
160 status = m_appMgrProperty->getProperty(
"EvtMax", sMax);
161 int EvtMax = std::atoi(sMax.c_str());
163 if(m_RealizationSvc->
UseDBFlag() ==
true) {
164 std::vector<int> totEvtNo;
166 std::vector<float> lumi;
167 std::vector<int> tmp_runList = m_RealizationSvc->
getRunList();
169 for(
unsigned int i = 0; i < tmp_runList.size(); i++)
171 float lumi_value = m_RealizationSvc->
getLuminosity(tmp_runList[i]);
172 lumi.push_back(lumi_value);
173 totLumi += lumi_value;
181 for(
unsigned int i = 0; i < lumi.size(); i++) {
183 double ratio = lumi[i]/totLumi*EvtMax;
184 evtSubNo = int (ratio);
185 if((ratio-evtSubNo) >= 0.5) evtSubNo = evtSubNo + 1;
186 totSimEvt += evtSubNo;
188 std::cout <<
"The run " <<tmp_runList[i]<<
" is not simulated, due to the luminosity is too small!" << std::endl;
192 m_evtNoList.push_back(evtSubNo);
193 m_runList.push_back(tmp_runList[i]);
194 totEvtNo.push_back(tmp_runList[i]);
195 totEvtNo.push_back(evtSubNo);
197 std::cout <<
"Total "<< evtSubNo <<
" events need to be simulated in run " <<tmp_runList[i]<< std::endl;
200 if((EvtMax - totSimEvt) != 0) {
201 unsigned int effRunSize = m_evtNoList.size();
203 m_evtNoList[effRunSize - 1] = m_evtNoList[effRunSize - 1] + (EvtMax - totSimEvt);
204 effRunSize = totEvtNo.size();
205 totEvtNo[effRunSize - 1] = totEvtNo[effRunSize - 1] + (EvtMax - totSimEvt);
206 std::cout <<
"Additional "<< EvtMax - totSimEvt <<
" events need to be simulated in run " << m_runList[m_runList.size() - 1]<< std::endl;
210 for(
unsigned int i = 0; i < lumi.size(); i++) {
212 m_evtNoList.push_back(EvtMax - totSimEvt);
213 m_runList.push_back(tmp_runList[i]);
214 totEvtNo.push_back(tmp_runList[i]);
215 totEvtNo.push_back(EvtMax - totSimEvt);
217 std::cout <<
"The max event number maybe too small, all "<< evtSubNo <<
" events need to be simulated in run " <<tmp_runList[i]<< std::endl;
222 std::cerr <<
"ERORR: " <<
"Total luminosity is ZERO, please check your run list. " << std::endl;
229 std::cerr <<
"ERORR: " <<
"Total luminosity is ZERO!!! Please check your run list. " << std::endl;
232 m_RealizationSvc->
setRunId(-std::abs(m_runList[0]));
234 m_initRunNo = -std::abs(m_runList[0]);
238 m_initRunNo = -std::abs((m_RealizationSvc->
getRunList())[0]);
void setCriteria(const std::string &crit)
virtual void * identifier() const
unsigned int eventNumber() const
void setRunNumber(int runNo)
void setEventNumber(unsigned int eventNo)
McContext(const McEventSelector *pSelector)
Standard constructor.