// class CBNTAA_CaloCluster // make Athena-Awarentuple for CaloCluster // // author: S. Laplace // date: 06/06/2006 // comments: just a copy of CBNT_CaloCluster with needed modifications to make AAN #include "CaloRec/CBNTAA_CaloCluster.h" #include "CaloDetDescr/CaloDetDescrManager.h" #include "CaloEvent/CaloCell.h" #include "CaloEvent/CaloCluster.h" #include "CaloEvent/CaloClusterContainer.h" #include "CaloIdentifier/CaloCell_ID.h" #include "CaloUtils/ICalorimeterNoiseTool.h" #include "GaudiKernel/ISvcLocator.h" #include "GaudiKernel/IToolSvc.h" #include "GaudiKernel/ListItem.h" #include "GaudiKernel/StatusCode.h" #include "GaudiKernel/SmartDataPtr.h" #include "StoreGate/StoreGate.h" #include "StoreGate/DataHandle.h" #include "GaudiKernel/MsgStream.h" #include CBNTAA_CaloCluster::CBNTAA_CaloCluster(const std::string& name, ISvcLocator* pSvcLocator) : CBNT_AthenaAwareBase(name, pSvcLocator), m_maxCluster(30), m_suffix(""), m_emOnly(false),m_CaloNoiseToolName("CaloNoiseTool/calonoisetool"),m_maxCell(9000),m_useLink(false) { // string property for Cluster container declareProperty("ClusterColl",m_ClusterCollName); // int property for ntuple id declareProperty("NtupleLocID",m_NtupleLocID); declareProperty("MaxCaloCluster", m_maxCluster); declareProperty("Suffix", m_suffix); declareProperty("EMOnly", m_emOnly); declareProperty("Central", m_central=true); declareProperty("EndCap", m_endcap=true); declareProperty("AddCells", m_addcells=false); declareProperty("AddCellDetails", m_addcelldetails=false); declareProperty("AddCellDetailsNoise", m_addcelldetailsnoise=true); declareProperty("CellDetailsNoiseTool", m_CaloNoiseToolName); declareProperty("MaxCell", m_maxCell); declareProperty("UseLink", m_useLink); } CBNTAA_CaloCluster::~CBNTAA_CaloCluster() { } StatusCode CBNTAA_CaloCluster::CBNT_initialize() { MsgStream log(messageService(), name()); addBranch("cl_ecluster"+m_suffix,m_eCluster,"cl_ecluster"+m_suffix+"/F"); addBranch("cl_nctotal"+m_suffix,m_nctotal,"cl_nctotal"+m_suffix+"/I"); addBranch("cl_nc"+m_suffix,m_nc,"cl_nc"+m_suffix+"/I"); addBranch("cl_et"+m_suffix,m_et); addBranch("cl_e"+m_suffix,m_e); if ( m_central ){ addBranch("cl_eemb0"+m_suffix,m_e_emb0); addBranch("cl_eemb1"+m_suffix,m_e_emb1); addBranch("cl_eemb2"+m_suffix,m_e_emb2); addBranch("cl_eemb3"+m_suffix,m_e_emb3); if ( m_useLink) { addBranch("cl_nemb0"+m_suffix,m_n_emb0); addBranch("cl_nemb1"+m_suffix,m_n_emb1); addBranch("cl_nemb2"+m_suffix,m_n_emb2); addBranch("cl_nemb3"+m_suffix,m_n_emb3); } addBranch("cl_phi2"+m_suffix,m_phi2); } addBranch("cl_eta0"+m_suffix,m_eta0); addBranch("cl_eta1"+m_suffix,m_eta1); addBranch("cl_eta2"+m_suffix,m_eta2); addBranch("cl_eta3"+m_suffix,m_eta3); if ( m_endcap ){ addBranch("cl_eeme0"+m_suffix,m_e_eme0); addBranch("cl_eeme1"+m_suffix,m_e_eme1); addBranch("cl_eeme2"+m_suffix,m_e_eme2); addBranch("cl_eeme3"+m_suffix,m_e_eme3); if ( m_useLink) { addBranch("cl_neme0"+m_suffix,m_n_eme0); addBranch("cl_neme1"+m_suffix,m_n_eme1); addBranch("cl_neme2"+m_suffix,m_n_eme2); addBranch("cl_neme3"+m_suffix,m_n_eme3); } } addBranch("cl_etileg1"+m_suffix,m_e_tileg1); addBranch("cl_etileg2"+m_suffix,m_e_tileg2); addBranch("cl_etileg3"+m_suffix,m_e_tileg3); if ( m_useLink) { addBranch("cl_ntileg1"+m_suffix,m_n_tileg1); addBranch("cl_ntileg2"+m_suffix,m_n_tileg2); addBranch("cl_ntileg3"+m_suffix,m_n_tileg3); } addBranch("cl_eta"+m_suffix,m_eta); addBranch("cl_phi"+m_suffix,m_phi); addBranch("cl_reco_stat"+m_suffix,m_reco_stat); addBranch("cl_m1_eta"+m_suffix,m_m1_eta); addBranch("cl_m1_phi"+m_suffix,m_m1_phi); addBranch("cl_m2_r"+m_suffix,m_m2_r); addBranch("cl_m2_lambda"+m_suffix,m_m2_lambda); addBranch("cl_delta_phi"+m_suffix,m_delta_phi); addBranch("cl_delta_theta"+m_suffix,m_delta_theta); addBranch("cl_delta_alpha"+m_suffix,m_delta_alpha); addBranch("cl_center_x"+m_suffix,m_center_x); addBranch("cl_center_y"+m_suffix,m_center_y); addBranch("cl_center_z"+m_suffix,m_center_z); addBranch("cl_center_lambda"+m_suffix,m_center_lambda); addBranch("cl_lateral"+m_suffix,m_lateral); addBranch("cl_longitudinal"+m_suffix,m_longitudinal); addBranch("cl_eng_frac_em"+m_suffix,m_eng_frac_em); addBranch("cl_eng_frac_max"+m_suffix,m_eng_frac_max); addBranch("cl_eng_frac_core"+m_suffix,m_eng_frac_core); addBranch("cl_m1_dens"+m_suffix,m_m1_dens); addBranch("cl_m2_dens"+m_suffix,m_m2_dens); addBranch("cl_isol"+m_suffix,m_isol); if(!m_emOnly) { if ( m_endcap ){ addBranch("cl_ehec0"+m_suffix,m_e_hec0); addBranch("cl_ehec1"+m_suffix,m_e_hec1); addBranch("cl_ehec2"+m_suffix,m_e_hec2); addBranch("cl_ehec3"+m_suffix,m_e_hec3); if ( m_useLink) { addBranch("cl_nhec0"+m_suffix,m_n_hec0); addBranch("cl_nhec1"+m_suffix,m_n_hec1); addBranch("cl_nhec2"+m_suffix,m_n_hec2); addBranch("cl_nhec3"+m_suffix,m_n_hec3); } } if ( m_central ){ addBranch("cl_etileb0"+m_suffix,m_e_tileb0); addBranch("cl_etileb1"+m_suffix,m_e_tileb1); addBranch("cl_etileb2"+m_suffix,m_e_tileb2); if ( m_useLink) { addBranch("cl_ntileb0"+m_suffix,m_n_tileb0); addBranch("cl_ntileb1"+m_suffix,m_n_tileb1); addBranch("cl_ntileb2"+m_suffix,m_n_tileb2); } } if ( m_endcap ){ addBranch("cl_etilee0"+m_suffix,m_e_tilee0); addBranch("cl_etilee1"+m_suffix,m_e_tilee1); addBranch("cl_etilee2"+m_suffix,m_e_tilee2); addBranch("cl_efcal0"+m_suffix,m_e_fcal0); addBranch("cl_efcal1"+m_suffix,m_e_fcal1); addBranch("cl_efcal2"+m_suffix,m_e_fcal2); if ( m_useLink) { addBranch("cl_ntilee0"+m_suffix,m_n_tilee0); addBranch("cl_ntilee1"+m_suffix,m_n_tilee1); addBranch("cl_ntilee2"+m_suffix,m_n_tilee2); addBranch("cl_nfcal0"+m_suffix,m_n_fcal0); addBranch("cl_nfcal1"+m_suffix,m_n_fcal1); addBranch("cl_nfcal2"+m_suffix,m_n_fcal2); } } } addBranch("cl_ntotcells"+m_suffix,m_ntotcells); if (m_addcells) { addBranch("cl_cells"+m_suffix,m_clu_cells); } if (m_addcelldetails) { addBranch("ncellstotal"+m_suffix,m_ncellstotal,"ncellstotal"+m_suffix+"/I"); addBranch("ncells"+m_suffix,m_ncells,"ncells"+m_suffix+"/I"); addBranch("celleng"+m_suffix,m_cell_eng); addBranch("cellet"+m_suffix,m_cell_et); addBranch("celleta"+m_suffix,m_cell_eta); addBranch("cellphi"+m_suffix,m_cell_phi); //LH Added x & y information addBranch("cellx"+m_suffix,m_cell_x); addBranch("celly"+m_suffix,m_cell_y); addBranch("cellId"+m_suffix,m_cell_id); addBranch("cellr"+m_suffix,m_cell_r); addBranch("cellz"+m_suffix,m_cell_z); addBranch("celldeta"+m_suffix,m_cell_deta); addBranch("celldphi"+m_suffix,m_cell_dphi); addBranch("celldr"+m_suffix,m_cell_dr); addBranch("celldz"+m_suffix,m_cell_dz); addBranch("cellvol"+m_suffix,m_cell_vol); addBranch("celltime"+m_suffix,m_cell_time); addBranch("cellquality"+m_suffix,m_cell_quality); addBranch("cellweight"+m_suffix,m_cell_weight); addBranch("cellgain"+m_suffix,m_cell_gain); if (m_addcelldetailsnoise) { addBranch("cellnoise"+m_suffix,m_cell_noise); addBranch("celltotnoise"+m_suffix,m_cell_totnoise); } addBranch("cellcluster"+m_suffix,m_cell_cluster); addBranch("cell_calo"+m_suffix,m_cell_calo); addBranch("cell_side"+m_suffix,m_cell_side); addBranch("cell_samp"+m_suffix,m_cell_samp); addBranch("cell_ireg"+m_suffix,m_cell_ireg); addBranch("cell_ieta"+m_suffix,m_cell_ieta); addBranch("cell_iphi"+m_suffix,m_cell_iphi); } // pointer to detector manager: m_calo_dd_man = CaloDetDescrManager::instance(); m_calo_id = m_calo_dd_man->getCaloCell_ID(); //---- retrieve the noisetool ---------------- if (m_addcelldetails && m_addcelldetailsnoise) { IToolSvc* p_toolSvc = 0;// Pointer to Tool Service StatusCode sc = service("ToolSvc", p_toolSvc); if (sc.isFailure()) { log << MSG::FATAL << " Tool Service not found " << endreq; return StatusCode::FAILURE; } IAlgTool* algtool; ListItem corr(m_CaloNoiseToolName); sc = p_toolSvc->retrieveTool(corr.type(), corr.name(), algtool); if (sc.isFailure()) { log << MSG::INFO << "Unable to find tool for " << m_CaloNoiseToolName << endreq; } m_noiseTool=dynamic_cast(algtool); } return StatusCode::SUCCESS; } StatusCode CBNTAA_CaloCluster::CBNT_finalize() { return StatusCode::SUCCESS; } StatusCode CBNTAA_CaloCluster::CBNT_clear() { m_nc=0 ; m_nctotal=0 ; m_eCluster=0.; m_e->clear(); m_et->clear(); if ( m_central ){ m_e_emb0->clear(); m_e_emb1->clear(); m_e_emb2->clear(); m_e_emb3->clear(); if ( m_useLink) { m_n_emb0->clear(); m_n_emb1->clear(); m_n_emb2->clear(); m_n_emb3->clear(); } m_phi2->clear(); } m_eta0->clear(); m_eta1->clear(); m_eta2->clear(); m_eta3->clear(); if ( m_endcap ){ m_e_eme0->clear(); m_e_eme1->clear(); m_e_eme2->clear(); m_e_eme3->clear(); if ( m_useLink) { m_n_eme0->clear(); m_n_eme1->clear(); m_n_eme2->clear(); m_n_eme3->clear(); } } m_e_tileg1->clear(); m_e_tileg2->clear(); m_e_tileg3->clear(); if ( m_useLink) { m_n_tileg1->clear(); m_n_tileg2->clear(); m_n_tileg3->clear(); } m_eta->clear(); m_phi->clear(); m_reco_stat->clear(); m_m1_eta->clear(); m_m1_phi->clear(); m_m2_r->clear(); m_m2_lambda->clear(); m_delta_phi->clear(); m_delta_theta->clear(); m_delta_alpha->clear(); m_center_x->clear(); m_center_y->clear(); m_center_z->clear(); m_center_lambda->clear(); m_lateral->clear(); m_longitudinal->clear(); m_eng_frac_em->clear(); m_eng_frac_max->clear(); m_eng_frac_core->clear(); m_m1_dens->clear(); m_m2_dens->clear(); m_isol->clear(); if(!m_emOnly) { if ( m_endcap ){ m_e_hec0->clear(); m_e_hec1->clear(); m_e_hec2->clear(); m_e_hec3->clear(); if ( m_useLink) { m_n_hec0->clear(); m_n_hec1->clear(); m_n_hec2->clear(); m_n_hec3->clear(); } } if ( m_central ){ m_e_tileb0->clear(); m_e_tileb1->clear(); m_e_tileb2->clear(); if ( m_useLink) { m_n_tileb0->clear(); m_n_tileb1->clear(); m_n_tileb2->clear(); } } if ( m_endcap ){ m_e_tilee0->clear(); m_e_tilee1->clear(); m_e_tilee2->clear(); m_e_fcal0->clear(); m_e_fcal1->clear(); m_e_fcal2->clear(); if ( m_useLink) { m_n_tilee0->clear(); m_n_tilee1->clear(); m_n_tilee2->clear(); m_n_fcal0->clear(); m_n_fcal1->clear(); m_n_fcal2->clear(); } } } m_ntotcells->clear(); if (m_addcells) { m_clu_cells->Clear(); } if (m_addcelldetails) { m_ncells = 0; m_ncellstotal = 0; m_cell_eng->clear(); m_cell_et->clear(); m_cell_time->clear(); m_cell_quality->clear(); m_cell_weight->clear(); m_cell_eta->clear(); m_cell_phi->clear(); //LH Added m_cell_x->clear(); m_cell_y->clear(); m_cell_id->clear(); m_cell_r->clear(); m_cell_z->clear(); m_cell_deta->clear(); m_cell_dphi->clear(); m_cell_dr->clear(); m_cell_dz->clear(); m_cell_vol->clear(); if (m_addcelldetailsnoise) { m_cell_noise->clear(); m_cell_totnoise->clear(); } m_cell_gain->clear(); m_cell_cluster->clear(); m_cell_calo->clear(); m_cell_side->clear(); m_cell_ireg->clear(); m_cell_samp->clear(); m_cell_ieta->clear(); m_cell_iphi->clear(); } return StatusCode::SUCCESS; } StatusCode CBNTAA_CaloCluster::CBNT_execute() { MsgStream log( messageService(), name() ); log << MSG::DEBUG << "Executing CBNTAA_CaloCluster for " << m_ClusterCollName << endreq; // Get the ClusterContainer const DataHandle cc ; StatusCode sc = StoreGate::instance().retrieve(cc,m_ClusterCollName); if(sc == StatusCode::SUCCESS) { unsigned int NumberOfClusters = cc->size(); if (m_addcells){ m_clu_cells->ResizeTo(NumberOfClusters,200); } m_m1_eta->resize(NumberOfClusters); m_m1_phi->resize(NumberOfClusters); m_m2_r->resize(NumberOfClusters); m_m2_lambda->resize(NumberOfClusters); m_delta_phi->resize(NumberOfClusters); m_delta_theta->resize(NumberOfClusters); m_delta_alpha->resize(NumberOfClusters); m_center_x->resize(NumberOfClusters); m_center_y->resize(NumberOfClusters); m_center_z->resize(NumberOfClusters); m_center_lambda->resize(NumberOfClusters); m_lateral->resize(NumberOfClusters); m_longitudinal->resize(NumberOfClusters); m_eng_frac_em->resize(NumberOfClusters); m_eng_frac_max->resize(NumberOfClusters); m_eng_frac_core->resize(NumberOfClusters); m_m1_dens->resize(NumberOfClusters); m_m2_dens->resize(NumberOfClusters); m_isol->resize(NumberOfClusters); CaloClusterContainer::const_iterator f_cluster = cc->begin(); CaloClusterContainer::const_iterator l_cluster = cc->end(); // loop over all clusters for ( ; f_cluster!=l_cluster; ++f_cluster) { const CaloCluster* cluster = (*f_cluster) ; float e = cluster->energy(); m_eCluster +=e; // m_nc in ntuple will reflect tru number of clusters, however // only the first m_maxCluster properties will appear in ntuple if (m_nc < m_maxCluster) { m_et->push_back(cluster->et()); m_e->push_back(cluster->energy()); if(m_addcells || m_addcelldetails) m_ntotcells->push_back(cluster->getNumberOfCells()); if (m_addcells){ CaloCluster::cell_iterator cellIter = cluster->cell_begin(); CaloCluster::cell_iterator cellIterEnd = cluster->cell_end(); int cite = 0; for( ;cellIter!=cellIterEnd;cellIter++) { const CaloCell* cell = (*cellIter) ; Identifier id = cell->ID(); float e = cell->energy() ; long newIndex=this->index(cell); log << MSG::DEBUG << "******************" << endreq; log << MSG::DEBUG << "Cell Id " << id << " Cell number " << cite << " Cell E " << e << " Index " << newIndex << endreq; log << MSG::DEBUG << "******************" << endreq; if ( cite < 200 ) (*m_clu_cells)(m_nc,cite)=(float)newIndex; cite++; } } if (m_addcelldetails) { CaloCluster::cell_iterator it_cell = cluster->cell_begin(); CaloCluster::cell_iterator it_cell_end = cluster->cell_end(); while ( it_cell != it_cell_end ) { if ( m_ncells < m_maxCell ) { m_cell_cluster->push_back(m_nc+1); m_cell_eng->push_back((*it_cell)->energy()); m_cell_time->push_back((*it_cell)->time()); m_cell_quality->push_back((*it_cell)->quality()); m_cell_weight->push_back(cluster->getCellWeight(it_cell)); m_cell_gain->push_back((*it_cell)->gain()); m_cell_et->push_back((*it_cell)->et()); m_cell_eta->push_back((*it_cell)->eta()); m_cell_phi->push_back((*it_cell)->phi()); //LH Added m_cell_x->push_back((*it_cell)->x()); m_cell_y->push_back((*it_cell)->y()); if ( m_addcelldetailsnoise ) { float temp = m_noiseTool->getNoise(*it_cell,ICalorimeterNoiseTool::ELECTRONICNOISE); if( !finite(temp)){ m_cell_noise->push_back(-9999.); }else{ m_cell_noise->push_back(temp); } temp = m_noiseTool->getNoise(*it_cell,ICalorimeterNoiseTool::TOTALNOISE); if( !finite(temp)){ m_cell_totnoise->push_back(-9999.); }else{ m_cell_totnoise->push_back(temp); } } Identifier myId = (*it_cell)->ID(); // LH Added m_cell_id->push_back((long) myId); m_cell_calo->push_back(m_calo_id->sub_calo(myId)); if ( (CaloCell_ID::SUBCALO)(*m_cell_calo)[m_ncells] == CaloCell_ID::TILE) { m_cell_side->push_back(m_calo_id->side(myId)); m_cell_ireg->push_back(m_calo_id->section(myId)); m_cell_samp->push_back(m_calo_id->sample(myId)); m_cell_ieta->push_back(m_calo_id->tower(myId)); m_cell_iphi->push_back(m_calo_id->module(myId)); } else { m_cell_side->push_back(m_calo_id->pos_neg(myId)); m_cell_samp->push_back(m_calo_id->sampling(myId)); if ( (CaloCell_ID::SUBCALO)(*m_cell_calo)[m_ncells] == CaloCell_ID::LARFCAL ) { m_cell_ireg->push_back(0); } else { m_cell_ireg->push_back(m_calo_id->region(myId)); } m_cell_ieta->push_back(m_calo_id->eta(myId)); m_cell_iphi->push_back(m_calo_id->phi(myId)); } CaloDetDescrElement* myCDDE(0); myCDDE = m_calo_dd_man->get_element(myId); if ( myCDDE ) { m_cell_r->push_back(myCDDE->r()); m_cell_z->push_back(myCDDE->z()); m_cell_deta->push_back(myCDDE->deta()); m_cell_dphi->push_back(myCDDE->dphi()); m_cell_dr->push_back(myCDDE->dr()); m_cell_dz->push_back(myCDDE->dz()); m_cell_vol->push_back(myCDDE->volume()); } else { m_cell_r->push_back(-9999); m_cell_z->push_back(-9999); m_cell_deta->push_back(-9999); m_cell_dphi->push_back(-9999); m_cell_dr->push_back(-9999); m_cell_dz->push_back(-9999); m_cell_vol->push_back(-9999); } m_ncells++; } it_cell++; m_ncellstotal++; } } if (m_central){ m_e_emb0->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::PreSamplerB,m_useLink)); m_e_emb1->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EMB1,m_useLink)); m_e_emb2->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EMB2,m_useLink)); m_e_emb3->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EMB3,m_useLink)); m_phi2->push_back((float)cluster->getVariable(CaloVariableType::PHI,CaloSampling::EMB2,m_useLink)); if ( m_useLink) { m_n_emb0->push_back(0); m_n_emb1->push_back(0); m_n_emb2->push_back(0); m_n_emb3->push_back(0); } } if (m_endcap){ m_e_eme0->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::PreSamplerE,m_useLink)); m_e_eme1->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EME1,m_useLink)); m_e_eme2->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EME2,m_useLink)); m_e_eme3->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EME3,m_useLink)); if ( m_useLink) { m_n_eme0->push_back(0); m_n_eme1->push_back(0); m_n_eme2->push_back(0); m_n_eme3->push_back(0); } } m_e_tileg1->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileGap1,m_useLink)); m_e_tileg2->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileGap2,m_useLink)); m_e_tileg3->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileGap3,m_useLink)); if ( m_useLink) { m_n_tileg1->push_back(0); m_n_tileg2->push_back(0); m_n_tileg3->push_back(0); } m_e_emb0_temp = (float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::PreSamplerB,m_useLink); m_e_emb1_temp = (float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EMB1,m_useLink); m_e_emb2_temp = (float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EMB2,m_useLink); m_e_emb3_temp = (float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EMB3,m_useLink); m_e_eme0_temp = (float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::PreSamplerE,m_useLink); m_e_eme1_temp = (float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EME1,m_useLink); m_e_eme2_temp = (float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EME2,m_useLink); m_e_eme3_temp = (float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::EME3,m_useLink); float etab0 = (float)cluster->getVariable(CaloVariableType::ETA,CaloSampling::PreSamplerB,m_useLink); float etab1 = (float)cluster->getVariable(CaloVariableType::ETA,CaloSampling::EMB1,m_useLink); float etab2 = (float)cluster->getVariable(CaloVariableType::ETA,CaloSampling::EMB2,m_useLink); float etab3 = (float)cluster->getVariable(CaloVariableType::ETA,CaloSampling::EMB3,m_useLink); float etae0 = (float)cluster->getVariable(CaloVariableType::ETA,CaloSampling::PreSamplerE,m_useLink); float etae1 = (float)cluster->getVariable(CaloVariableType::ETA,CaloSampling::EME1,m_useLink); float etae2 = (float)cluster->getVariable(CaloVariableType::ETA,CaloSampling::EME2,m_useLink); float etae3 = (float)cluster->getVariable(CaloVariableType::ETA,CaloSampling::EME3,m_useLink); float tempeta = cluster->eta(); m_eta->push_back(cluster->eta()); m_phi->push_back(cluster->phi()); m_reco_stat->push_back(cluster->getRecoStatus().getStatusWord()); (*m_m1_eta)[m_nc]=-9999; (*m_m1_phi)[m_nc]=-9999; (*m_m2_r)[m_nc]=-9999; (*m_m2_lambda)[m_nc]=-9999; (*m_delta_phi)[m_nc]=-9999; (*m_delta_theta)[m_nc]=-9999; (*m_delta_alpha)[m_nc]=-9999; (*m_center_x)[m_nc]=-9999; (*m_center_y)[m_nc]=-9999; (*m_center_z)[m_nc]=-9999; (*m_center_lambda)[m_nc]=-9999; (*m_lateral)[m_nc]=-9999; (*m_longitudinal)[m_nc]=-9999; (*m_eng_frac_em)[m_nc]=-9999; (*m_eng_frac_max)[m_nc]=-9999; (*m_eng_frac_core)[m_nc]=-9999; (*m_m1_dens)[m_nc]=-9999; (*m_m2_dens)[m_nc]=-9999; (*m_isol)[m_nc]=-9999; CaloCluster::moment_iterator myMoment=cluster->beginMoment(m_useLink); CaloCluster::moment_iterator myEnd = cluster->endMoment(m_useLink); for (; myMoment != myEnd; myMoment++) { switch ( myMoment.getMomentType() ) { case CaloClusterMoment::FIRST_ETA: (*m_m1_eta)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::FIRST_PHI: (*m_m1_phi)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::SECOND_R: (*m_m2_r)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::SECOND_LAMBDA: (*m_m2_lambda)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::DELTA_PHI: (*m_delta_phi)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::DELTA_THETA: (*m_delta_theta)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::DELTA_ALPHA: (*m_delta_alpha)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::CENTER_X: (*m_center_x)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::CENTER_Y: (*m_center_y)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::CENTER_Z: (*m_center_z)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::CENTER_LAMBDA: (*m_center_lambda)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::LATERAL: (*m_lateral)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::LONGITUDINAL: (*m_longitudinal)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::ENG_FRAC_EM: (*m_eng_frac_em)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::ENG_FRAC_MAX: (*m_eng_frac_max)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::ENG_FRAC_CORE: (*m_eng_frac_core)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::FIRST_ENG_DENS: (*m_m1_dens)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::SECOND_ENG_DENS: (*m_m2_dens)[m_nc] = myMoment.getMoment().getValue(); break; case CaloClusterMoment::ISOLATION: (*m_isol)[m_nc] = myMoment.getMoment().getValue(); break; default: break; } } m_eta0->push_back(GetAveEta(tempeta,etab0,m_e_emb0_temp,etae0,m_e_eme0_temp)); m_eta1->push_back(GetAveEta(tempeta,etab1,m_e_emb1_temp,etae1,m_e_eme1_temp)); m_eta2->push_back(GetAveEta(tempeta,etab2,m_e_emb2_temp,etae2,m_e_eme2_temp)); m_eta3->push_back(GetAveEta(tempeta,etab3,m_e_emb3_temp,etae3,m_e_eme3_temp)); if(!m_emOnly) { if (m_endcap){ m_e_hec0->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::HEC0,m_useLink)); m_e_hec1->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::HEC1,m_useLink)); m_e_hec2->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::HEC2,m_useLink)); m_e_hec3->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::HEC3,m_useLink)); m_e_tilee0->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileExt0,m_useLink)); m_e_tilee1->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileExt1,m_useLink)); m_e_tilee2->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileExt2,m_useLink)); m_e_fcal0->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::FCAL0,m_useLink)); m_e_fcal1->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::FCAL1,m_useLink)); m_e_fcal2->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::FCAL2,m_useLink)); if ( m_useLink) { m_n_hec0->push_back(0); m_n_hec1->push_back(0); m_n_hec2->push_back(0); m_n_hec3->push_back(0); m_n_tilee0->push_back(0); m_n_tilee1->push_back(0); m_n_tilee2->push_back(0); m_n_fcal0->push_back(0); m_n_fcal1->push_back(0); m_n_fcal2->push_back(0); } } if (m_central){ m_e_tileb0->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileBar0,m_useLink)); m_e_tileb1->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileBar1,m_useLink)); m_e_tileb2->push_back((float)cluster->getVariable(CaloVariableType::ENERGY,CaloSampling::TileBar2,m_useLink)); if ( m_useLink) { m_n_tileb0->push_back(0); m_n_tileb1->push_back(0); m_n_tileb2->push_back(0); } } } if ( m_useLink) { CaloCluster::cell_iterator theCellIter = cluster->cell_begin(); CaloCluster::cell_iterator endCellIter = cluster->cell_end(); //DR add n cell per sample for( ;theCellIter!=endCellIter;theCellIter++) { const CaloDetDescrElement* theDDE = (*theCellIter)->caloDDE() ; CaloCell_ID::CaloSample iSamp=theDDE->getSampling(); switch ( iSamp ) { case CaloCell_ID::PreSamplerB: ++ (*m_n_emb0)[m_nc]; break; case CaloCell_ID::EMB1: ++(*m_n_emb1)[m_nc]; break; case CaloCell_ID::EMB2: ++(*m_n_emb2)[m_nc]; break; case CaloCell_ID::EMB3: ++(*m_n_emb3)[m_nc]; break; case CaloCell_ID::PreSamplerE: ++(*m_n_eme0)[m_nc]; break; case CaloCell_ID::EME1: ++(*m_n_eme1)[m_nc]; break; case CaloCell_ID::EME2: ++(*m_n_eme2)[m_nc]; break; case CaloCell_ID::EME3: ++(*m_n_eme3)[m_nc]; break; case CaloCell_ID::HEC0: ++(*m_n_hec0)[m_nc]; break; case CaloCell_ID::HEC1: ++(*m_n_hec1)[m_nc]; break; case CaloCell_ID::HEC2: ++(*m_n_hec2)[m_nc]; break; case CaloCell_ID::HEC3: ++(*m_n_hec3)[m_nc]; break; case CaloCell_ID::FCAL0: ++(*m_n_fcal0)[m_nc]; break; case CaloCell_ID::FCAL1: ++(*m_n_fcal1)[m_nc]; break; case CaloCell_ID::FCAL2: ++(*m_n_fcal2)[m_nc]; break; case CaloCell_ID::TileBar0: ++(*m_n_tileb0)[m_nc]; break; case CaloCell_ID::TileBar1: ++(*m_n_tileb1)[m_nc]; break; case CaloCell_ID::TileBar2: ++(*m_n_tileb2)[m_nc]; break; case CaloCell_ID::TileGap1: ++(*m_n_tileg1)[m_nc]; break; case CaloCell_ID::TileGap2: ++(*m_n_tileg2)[m_nc]; break; case CaloCell_ID::TileGap3: ++(*m_n_tileg3)[m_nc]; break; case CaloCell_ID::TileExt0: ++(*m_n_tilee0)[m_nc]; break; case CaloCell_ID::TileExt1: ++(*m_n_tilee1)[m_nc]; break; case CaloCell_ID::TileExt2: ++(*m_n_tilee2)[m_nc]; break; default: log << MSG::ERROR << "Unknown calo sample met" << iSamp << endreq ; break; } } } // if m_useLink m_nc++; } m_nctotal++; } // end loop over clusters } // end if StatusCode::SUCCESS else { log << MSG::ERROR << " failed to retrieve cluster" << m_ClusterCollName << endreq; } if (m_nc >= m_maxCluster) { log << MSG::WARNING << " Found more than maximum clusters " << m_maxCluster << " Only max clusters saved" << endreq; } return sc; } float CBNTAA_CaloCluster::GetAveEta(float tempeta, float eta1,float ene1,float eta2,float ene2) { float aeta = fabs(tempeta); if (aeta < 1.35){ return eta1; } else if (aeta >= 1.35 && aeta <=1.6) { float neweta = eta1*ene1+eta2*ene2; float esum = ene1+ene2; return esum > 0 ? neweta/esum : -999.; } else { return eta2; } }