124 m_pSelector(pSelector), m_firstEvent(
true), m_lumiBlockNo(0), m_initEventNo(0) {
127 SmartIF<IProperty> prpMgr(Gaudi::svcLocator());
128 if ( ! prpMgr.isValid() ) {
129 std::cout <<
"IProperty interface not found in ApplicationMgr." << std::endl;
132 m_appMgrProperty = prpMgr;
135 ISvcLocator* svcLocator = Gaudi::svcLocator();
137 StatusCode status = svcLocator->service(
"RealizationSvc", tmpReal);
138 if (!status.isSuccess())
140 std::cout <<
" Could not initialize Realization Service" << std::endl;
147 status = svcLocator->service(
"DataInfoSvc",tmpInfoSvc);
148 if (status.isSuccess()) {
149 std::cout <<
"get the DataInfoSvc" << std::endl;
150 jobInfoSvc=
dynamic_cast<DataInfoSvc *
>(tmpInfoSvc);
152 std::cout <<
"could not get the DataInfoSvc." << std::endl;
159 status = m_appMgrProperty->getProperty(
"EvtMax", sMax);
160 int EvtMax = std::atoi(sMax.c_str());
162 if(m_RealizationSvc->
UseDBFlag() ==
true) {
163 std::vector<int> totEvtNo;
165 std::vector<float> lumi;
166 std::vector<int> tmp_runList = m_RealizationSvc->
getRunList();
168 for(
unsigned int i = 0; i < tmp_runList.size(); i++)
170 float lumi_value = m_RealizationSvc->
getLuminosity(tmp_runList[i]);
171 lumi.push_back(lumi_value);
172 totLumi += lumi_value;
180 for(
unsigned int i = 0; i < lumi.size(); i++) {
182 double ratio = lumi[i]/totLumi*EvtMax;
183 evtSubNo = int (ratio);
184 if((ratio-evtSubNo) >= 0.5) evtSubNo = evtSubNo + 1;
185 totSimEvt += evtSubNo;
187 std::cout <<
"The run " <<tmp_runList[i]<<
" is not simulated, due to the luminosity is too small!" << std::endl;
191 m_evtNoList.push_back(evtSubNo);
192 m_runList.push_back(tmp_runList[i]);
193 totEvtNo.push_back(tmp_runList[i]);
194 totEvtNo.push_back(evtSubNo);
196 std::cout <<
"Total "<< evtSubNo <<
" events need to be simulated in run " <<tmp_runList[i]<< std::endl;
199 if((EvtMax - totSimEvt) != 0) {
200 unsigned int effRunSize = m_evtNoList.size();
202 m_evtNoList[effRunSize - 1] = m_evtNoList[effRunSize - 1] + (EvtMax - totSimEvt);
203 effRunSize = totEvtNo.size();
204 totEvtNo[effRunSize - 1] = totEvtNo[effRunSize - 1] + (EvtMax - totSimEvt);
205 std::cout <<
"Additional "<< EvtMax - totSimEvt <<
" events need to be simulated in run " << m_runList[m_runList.size() - 1]<< std::endl;
209 for(
unsigned int i = 0; i < lumi.size(); i++) {
211 m_evtNoList.push_back(EvtMax - totSimEvt);
212 m_runList.push_back(tmp_runList[i]);
213 totEvtNo.push_back(tmp_runList[i]);
214 totEvtNo.push_back(EvtMax - totSimEvt);
216 std::cout <<
"The max event number maybe too small, all "<< evtSubNo <<
" events need to be simulated in run " <<tmp_runList[i]<< std::endl;
221 std::cerr <<
"ERORR: " <<
"Total luminosity is ZERO, please check your run list. " << std::endl;
228 std::cerr <<
"ERORR: " <<
"Total luminosity is ZERO!!! Please check your run list. " << std::endl;
231 m_RealizationSvc->
setRunId(-std::abs(m_runList[0]));
233 m_initRunNo = -std::abs(m_runList[0]);
237 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.