207 HepMC::GenEvent::particle_const_iterator pit = truthEvent->
at(0)->particles_begin();
208 const HepMC::GenParticle * gen = *pit;
211 double mc_eta = gen->momentum().pseudoRapidity();
212 double mc_phi = gen->momentum().phi();
216 m_data->m_mc_pdg = gen->pdg_id();
217 m_data->m_mc_ener = gen->momentum().e();
218 m_data->m_mc_eta = mc_eta;
219 m_data->m_mc_phi = mc_phi;
221 int nClus = pClusColl->size();
223 m_data->m_cls_ener->resize(nClus, 0.0);
224 m_data->m_cls_ener_unw->resize(nClus, 0.0);
225 m_data->m_cls_lambda->resize(nClus, 0.0);
226 m_data->m_cls_eta->resize(nClus, 0.0);
227 m_data->m_cls_phi->resize(nClus, 0.0);
229 m_data->m_cls_smpener->resize(nClus);
230 m_data->m_cls_smpener_unw->resize(nClus);
232 m_data->m_cls_eprep->resize(nClus);
233 m_data->m_cls_dmener->resize(nClus);
235 for(
int i_cls=0; i_cls<nClus; i_cls++){
237 (*
m_data->m_cls_smpener)[i_cls].resize(CaloSampling::Unknown, 0.0);
238 (*
m_data->m_cls_smpener_unw)[i_cls].resize(CaloSampling::Unknown, 0.0);
239 (*
m_data->m_cls_eprep)[i_cls].resize(
m_data->m_narea, 0.0);
240 (*
m_data->m_cls_dmener)[i_cls].resize(
m_data->m_narea, 0.0);
242 m_data->m_cls_engcalib->resize(nClus, 0.0);
243 m_data->m_cls_recostat->resize(nClus, 0);
244 m_data->m_cls_pi0prob->resize(nClus, 0.0);
245 m_data->m_cls_isol->resize(nClus, 0.0);
246 m_data->m_cls_oocener->resize(nClus, 0.0);
247 m_data->m_cls_calib_emfrac->resize(nClus, 0.0);
248 m_data->m_cls_engcalibpres->resize(nClus, 0.0);
252 unsigned int iClus = 0;
253 for( ;clusIter!=clusIterEnd;++clusIter,++iClus) {
256 (*
m_data->m_cls_ener)[iClus] = theCluster->
e();
258 for(
int i_smp=0; i_smp<(int)CaloSampling::Unknown; i_smp++){
263 double mx_calib_tot=0;
266 return StatusCode::FAILURE;
268 m_data->m_engClusSumCalib += mx_calib_tot;
269 (*
m_data->m_cls_engcalib)[iClus] = mx_calib_tot;
271 double mx_calib_emb0=0, mx_calib_eme0=0, mx_calib_tileg3=0;
275 ATH_MSG_ERROR(
"One of the moment ENG_CALIB_EMB0, ENG_CALIB_EME0, ENG_CALIB_TILEG3 is absent" );
276 return StatusCode::FAILURE;
278 (*
m_data->m_cls_engcalibpres)[iClus] = (mx_calib_emb0+mx_calib_eme0+mx_calib_tileg3);
283 if(pClusColl->size() != pClusCollCalib->size()) {
284 ATH_MSG_WARNING(
"Different size of calibrated and uncalibrated cluster collection "
285 << pClusColl->size() <<
" " << pClusCollCalib->size() );
286 return StatusCode::SUCCESS;
302 if ( pi0Prob < 0 ) pi0Prob = 0;
303 if ( pi0Prob > 1 ) pi0Prob = 1;
305 (*
m_data->m_cls_pi0prob)[iClus] = pi0Prob;
312 return StatusCode::FAILURE;
314 (*
m_data->m_cls_isol)[iClus] = mx_isol;
317 double mx_calib_oocL;
320 return StatusCode::FAILURE;
322 (*
m_data->m_cls_oocener)[iClus] = mx_calib_oocL;
325 double mx_calib_emfrac;
328 return StatusCode::FAILURE;
330 (*
m_data->m_cls_calib_emfrac)[iClus] = mx_calib_emfrac;
338 for(; cellIter != cellIterEnd; cellIter++ ){
339 const CaloCell* pCell = (*cellIter);
342 (*
m_data->m_cls_ener_unw)[iClus] += pCell->
e();
343 (*
m_data->m_cls_smpener_unw)[iClus][(
int)nsmp] += pCell->
e();
346 double clusEner = (*
m_data->m_cls_ener_unw)[iClus];
350 return StatusCode::FAILURE;
352 (*
m_data->m_cls_lambda)[iClus] = clusLambda;
353 (*
m_data->m_cls_eta)[iClus] = theCluster->
eta();
354 (*
m_data->m_cls_phi)[iClus] = theCluster->
phi();
362 for(
int i_dma=0; i_dma<
m_data->m_narea; i_dma++){
367 return StatusCode::FAILURE;
369 (*
m_data->m_cls_dmener)[iClus][i_dma] = dmVal;
377 x = (*
m_data->m_cls_smpener_unw)[iClus][CaloSampling::PreSamplerB];
383 x = (*
m_data->m_cls_smpener_unw)[iClus][CaloSampling::EMB3];
384 y = (*
m_data->m_cls_smpener_unw)[iClus][CaloSampling::TileBar0];
390 x = (*
m_data->m_cls_smpener_unw)[iClus][CaloSampling::TileGap3];
396 x = (*
m_data->m_cls_smpener_unw)[iClus][CaloSampling::PreSamplerE];
402 x = (*
m_data->m_cls_smpener_unw)[iClus][CaloSampling::EME3];
403 y = (*
m_data->m_cls_smpener_unw)[iClus][CaloSampling::HEC0];
409 eprep = (*
m_data->m_cls_ener_unw)[iClus];
412 eprep = (*
m_data->m_cls_ener_unw)[iClus];
415 eprep = (*
m_data->m_cls_ener_unw)[iClus];
419 return StatusCode::FAILURE;
422 (*
m_data->m_cls_eprep)[iClus][i_dma] = eprep;
432 for(
int i_cls=0; i_cls<
m_data->m_ncls; i_cls++){
433 double edm_uncorrected = 0.0;
434 for(
int i_dma=0; i_dma<
m_data->m_narea; i_dma++){
436 if( (*
m_data->m_cls_eprep)[i_cls][i_dma] <= 0.0 &&
443 edm_uncorrected += (*
m_data->m_cls_dmener)[i_cls][i_dma];
444 (*
m_data->m_cls_dmener)[i_cls][i_dma] = 0.0;
448 for(
int i_dma=0; i_dma<
m_data->m_narea; i_dma++){
450 (*
m_data->m_cls_dmener)[i_cls][i_dma] += edm_uncorrected;
457 return StatusCode::SUCCESS;