Standard constructor.
112 : m_pSelector( pSelector ), m_firstEvent( true ), m_lumiBlockNo( 0 ), m_initEventNo( 0 ) {
113
114
115 SmartIF<IProperty> prpMgr( Gaudi::svcLocator() );
116 if ( !prpMgr.isValid() )
117 { std::cout << "IProperty interface not found in ApplicationMgr." << std::endl; }
118 else { m_appMgrProperty = prpMgr; }
119
120 ISvcLocator* svcLocator = Gaudi::svcLocator();
121 StatusCode status = svcLocator->service( "RealizationSvc", m_RealizationSvc );
122 if ( !status.isSuccess() )
123 { std::cout << " Could not initialize Realization Service" << std::endl; }
124
125
126 IDataInfoSvc* jobInfoSvc;
127 status = svcLocator->service( "DataInfoSvc", jobInfoSvc );
128 if ( status.isSuccess() ) { std::cout << "get the DataInfoSvc" << std::endl; }
129 else { std::cout << "could not get the DataInfoSvc." << std::endl; }
130
131
132 m_initEventNo = m_RealizationSvc->getInitEvtID();
133
134 std::string sMax;
135 status = m_appMgrProperty->getProperty( "EvtMax", sMax );
136 int EvtMax = std::atoi( sMax.c_str() );
137
138 if ( m_RealizationSvc->UseDBFlag() == true )
139 {
140 std::vector<int> totEvtNo;
141 totEvtNo.clear();
142 std::vector<float> lumi;
143 std::vector<int> tmp_runList = m_RealizationSvc->getRunList();
144 float totLumi = 0;
145 for ( unsigned int i = 0; i < tmp_runList.size(); i++ )
146 {
147 float lumi_value = m_RealizationSvc->getLuminosity( tmp_runList[i] );
148 lumi.push_back( lumi_value );
149 totLumi += lumi_value;
150 }
151
152 m_runList.clear();
153
154 int totSimEvt = 0;
155 int evtSubNo = 0;
156 if ( totLumi != 0 )
157 {
158 for ( unsigned int i = 0; i < lumi.size(); i++ )
159 {
160
161 double ratio = lumi[i] / totLumi * EvtMax;
162 evtSubNo = int( ratio );
163 if ( ( ratio - evtSubNo ) >= 0.5 ) evtSubNo = evtSubNo + 1;
164 totSimEvt += evtSubNo;
165 if ( evtSubNo == 0 )
166 {
167 std::cout << "The run " << tmp_runList[i]
168 << " is not simulated, due to the luminosity is too small!" << std::endl;
169 }
170 else
171 {
172
173 m_evtNoList.push_back( evtSubNo );
174 m_runList.push_back( tmp_runList[i] );
175 totEvtNo.push_back( tmp_runList[i] );
176 totEvtNo.push_back( evtSubNo );
177 }
178 std::cout << "Total " << evtSubNo << " events need to be simulated in run "
179 << tmp_runList[i] << std::endl;
180 }
181
182 if ( ( EvtMax - totSimEvt ) != 0 )
183 {
184 unsigned int effRunSize = m_evtNoList.size();
185 if ( effRunSize > 0 )
186 {
187 m_evtNoList[effRunSize - 1] = m_evtNoList[effRunSize - 1] + ( EvtMax - totSimEvt );
188 effRunSize = totEvtNo.size();
189 totEvtNo[effRunSize - 1] = totEvtNo[effRunSize - 1] + ( EvtMax - totSimEvt );
190 std::cout << "Additional " << EvtMax - totSimEvt
191 << " events need to be simulated in run "
192 << m_runList[m_runList.size() - 1] << std::endl;
193 }
194 else
195 {
196 bool found = false;
197 for ( unsigned int i = 0; i < lumi.size(); i++ )
198 {
199 if ( lumi[i] > 0 )
200 {
201 m_evtNoList.push_back( EvtMax - totSimEvt );
202 m_runList.push_back( tmp_runList[i] );
203 totEvtNo.push_back( tmp_runList[i] );
204 totEvtNo.push_back( EvtMax - totSimEvt );
205 found = true;
206 std::cout << "The max event number maybe too small, all " << evtSubNo
207 << " events need to be simulated in run " << tmp_runList[i]
208 << std::endl;
209 break;
210 }
211 }
212 if ( !found )
213 {
214 std::cerr << "ERORR: "
215 << "Total luminosity is ZERO, please check your run list. " << std::endl;
216 std::exit( 0 );
217 }
218 }
219 }
220 }
221 else
222 {
223 std::cerr << "ERORR: "
224 << "Total luminosity is ZERO!!! Please check your run list. " << std::endl;
225 std::exit( 0 );
226 }
227 m_RealizationSvc->setRunId( -std::abs( m_runList[0] ) );
228 m_RealizationSvc->setRunEvtNum( m_evtNoList[0] );
229 m_initRunNo = -std::abs( m_runList[0] );
231 }
232 else { m_initRunNo = -std::abs( ( m_RealizationSvc->getRunList() )[0] ); }
233}
virtual void setTotEvtNo(std::vector< int > i)=0