16 #include "CaloDetDescr/CaloDetDescrElement.h"
22 #include "GaudiKernel/Bootstrap.h"
23 #include "GaudiKernel/ISvcLocator.h"
24 #include "GaudiKernel/IMessageSvc.h"
41 if (
i >= tile_min &&
i < tile_max)
continue;
71 for(
int i = 0;
i <
nb;
i++) {
81 std::cout <<
" CaloDetDescrManager_Base: \n";
83 std::cout <<
" Number of Calo descriptors : " <<
m_descr_vec.size() <<
"\n";
86 for(
int i=0 ;
i<ntot;
i++ )
88 std::cout <<
"\n ------ Calo descriptor number " <<
i <<
"\n";
139 int sCal = (
int)subCalo;
146 int sCal = (
int) subCalo;
153 int sCal = (
int) subCalo;
178 int sCal = (
int) subCalo;
181 else return nullptr ;
186 int sampling_or_module,
199 double deltabest=9999.;
203 while (!inCell && niter<3) {
206 if (!
reg)
return nullptr;
210 int ieta =
reg->eta_channel(
eta2);
211 int iphi =
reg->phi_channel(phi2);
214 if(ieta < 0)
return elt;
215 if(iphi < 0)
return elt;
224 double deta=std::fabs(
eta-elt->
eta())-0.5*elt->
deta();
226 if (deta>0. || dphi > 0.) {
230 delta = delta + deta;
234 delta = delta + dphi;
237 if (delta<deltabest) {
276 double deltabest=9999.;
278 while (!inCell && niter<3) {
281 if ( !
reg )
return elt;
285 int ieta =
reg->eta_channel(
eta2);
286 int iphi =
reg->phi_channel(phi2);
288 if(ieta < 0)
return elt;
289 if(iphi < 0)
return elt;
297 double deta=std::fabs(
eta-elt->
eta())-0.5*elt->
deta();
299 if (deta>0. || dphi > 0.) {
303 delta = delta + deta;
307 delta = delta + dphi;
309 if (delta<deltabest) {
334 pt->eta()+
pt->deta()/2 >=
eta &&
335 pt->eta()-
pt->deta()/2 <=
eta &&
336 dphi <= pt->dphi()/2 )
370 double deltabest=9999.;
372 while (!inCell && niter<3) {
375 if ( !
reg )
return elt;
380 int ieta =
reg->eta_channel_raw(
eta2);
381 int iphi =
reg->phi_channel_raw(phi2);
383 if(ieta < 0)
return elt;
384 if(iphi < 0)
return elt;
395 if (deta>0. || dphi > 0.) {
399 delta = delta + deta;
403 delta = delta + dphi;
405 if (delta<deltabest) {
431 pt->eta()+
pt->deta()/2 <=
eta &&
432 pt->eta()-
pt->deta()/2 >=
eta &&
433 pt->phi()+
pt->phi()/2 <=
phi &&
434 pt->phi()-
pt->phi()/2 >=
phi ) elt =
pt ;
450 if (
eta < (
descr->reg_min()-0.01) ||
eta > (
descr->reg_max()+0.01) )
return elt;
457 for (
int ieta=0; ieta<
descr->n_eta(); ieta++) {
458 for (
int iphi=0; iphi<
descr->n_phi(); iphi++) {
462 double deta = (
eta-elt2->
eta());
464 double dr = (deta*deta+dphi*dphi);
486 if (std::fabs(
eta) < (
descr->calo_eta_min()-0.01) || std::fabs(
eta) > (
descr->calo_eta_max()+0.01) )
return elt;
493 for (
int ieta=0; ieta<
descr->n_eta(); ieta++) {
494 for (
int iphi=0; iphi<
descr->n_phi(); iphi++) {
500 double dr = (deta*deta+dphi*dphi);
600 int sampling_or_module,
633 if(
reg->eta_channel(
eta) >=0 &&
reg->phi_channel(
phi) >=0)
637 int reg_sampl =
reg->getSampling(0);
640 if(
reg->is_lar_em_barrel())
647 else if(
reg->is_lar_em_endcap())
654 else if(
reg->is_lar_hec())
661 else if(
reg->is_lar_fcal())
672 if(sampling_or_module == 0)
return desc0;
673 else if(sampling_or_module == 1)
return desc1;
674 else if(sampling_or_module == 2)
return desc2;
675 else if(sampling_or_module == 3)
return desc3;
681 double eta,
double phi)
const
702 if (
reg->eta_channel(
eta) >=0 &&
reg->phi_channel(
phi) >=0) {
705 int reg_sampl =
reg->getSampling(0);
716 double eta,
double phi)
const
739 int reg_sampl =
reg->getSampling(0);
740 if ( reg_sampl ==
sample ) {
741 if (
reg->eta_channel_raw(
eta) >=0 &&
reg->phi_channel_raw(
phi) >=0) {
794 double phi_min,
double phi_max,
795 std::vector<IdentifierHash> & cell_list )
const
798 if ( eta_min >= eta_max )
return;
799 if ( phi_min >= phi_max )
return;
801 std::vector<IdentifierHash> one_list;
808 if (cell_list.empty())
809 cell_list.swap (one_list);
811 cell_list.insert (cell_list.end(), one_list.begin(), one_list.end());
817 cell_list.insert (cell_list.end(), one_list.begin(), one_list.end());
821 double phi_min,
double phi_max,
823 std::vector<IdentifierHash> & cell_list)
const
826 if ( eta_min >= eta_max )
return;
827 if ( phi_min >= phi_max )
return;
829 std::vector<IdentifierHash> one_list;
837 if ( subCalo ==
reg->getSubCalo() ) {
839 if (cell_list.empty())
840 cell_list.swap (one_list);
842 cell_list.insert (cell_list.end(),
843 one_list.begin(), one_list.end());
856 if ( tile_elt->
eta()+tile_elt->
deta()/2. > eta_min &&
857 tile_elt->
eta()-tile_elt->
deta()/2. < eta_max) {
862 if(dphi1 >=0. && dphi2 >= 0.) {
863 if (cell_list.empty()) {
865 cell_list.reserve (
static_cast<int>(
866 ((eta_max-eta_min) / tile_elt->
deta()) *
867 ((phi_max-phi_min) / tile_elt->
dphi()) * 3));
869 cell_list.push_back(tile_elt->
calo_hash());
878 double phi_min,
double phi_max,
880 std::vector<IdentifierHash> & cell_list)
const
883 if ( eta_min >= eta_max )
return;
884 if ( phi_min >= phi_max )
return;
886 std::vector<IdentifierHash> one_list;
905 if (cell_list.empty())
906 cell_list.swap (one_list);
908 cell_list.insert (cell_list.end(),
909 one_list.begin(), one_list.end());
924 if ( tile_elt->
eta()+tile_elt->
deta()/2. > eta_min &&
925 tile_elt->
eta()-tile_elt->
deta()/2. < eta_max) {
930 if(dphi1 >=0. && dphi2 >= 0.) {
931 if (cell_list.empty()) {
933 cell_list.reserve (
static_cast<int>(
934 ((eta_max-eta_min) / tile_elt->
deta()) *
935 ((phi_max-phi_min) / tile_elt->
dphi()) * 3));
937 cell_list.push_back(tile_elt->
calo_hash());
947 double phi_min,
double phi_max,
949 int sampling_or_module,
950 std::vector<IdentifierHash> & cell_list)
const
953 if ( eta_min >= eta_max )
return;
954 if ( phi_min >= phi_max )
return;
959 std::vector<IdentifierHash> one_list;
965 if ( subCalo ==
reg->getSubCalo() &&
968 if (cell_list.empty())
969 cell_list.swap (one_list);
971 cell_list.insert (cell_list.end(),
972 one_list.begin(), one_list.end());
981 int sampling_or_module,
983 std::vector<IdentifierHash> & cell_list)
const
987 double eta_min, eta_max, phi_min, phi_max;
988 double weta = (ncell_eta-1)/2.;
989 double wphi = (ncell_phi-1)/2.;
991 std::vector<IdentifierHash> one_list;
999 if ( subCalo ==
reg->getSubCalo() &&
1005 eta_min =
eta-weta*eta_gran;
1006 eta_max =
eta+weta*eta_gran;
1007 phi_min =
phi-wphi*phi_gran;
1008 phi_max =
phi+wphi*phi_gran;
1010 cell_list.reserve (cell_list.size() + one_list.size());
1011 for (
unsigned int i = 0;
i<one_list.size();
i++ ){
1015 double elt_eta = elt->
eta();
1016 double elt_phi = elt->
phi();
1018 if ( std::abs(
eta - elt_eta) <= weta )
1019 if ( std::abs(
phi - elt_phi) <= wphi )
1020 cell_list.push_back(one_list[
i]);
1036 eta_min =
eta-weta*tile_elt->
deta();
1037 eta_max =
eta+weta*tile_elt->
deta();
1039 if ( tile_elt->
eta()+tile_elt->
deta()/2. > eta_min &&
1040 tile_elt->
eta()-tile_elt->
deta()/2. < eta_max) {
1041 phi_min =
phi-wphi*tile_elt->
dphi();
1042 phi_max =
phi+wphi*tile_elt->
dphi();
1046 if(dphi1 >=0. && dphi2 >= 0. ) {
1047 if (cell_list.empty()) {
1049 cell_list.reserve (
static_cast<int> (
1050 ((eta_max-eta_min) / tile_elt->
deta()) *
1051 ((phi_max-phi_min) / tile_elt->
dphi()) * 3));
1053 cell_list.push_back(tile_elt->
calo_hash());
1063 double phi_min,
double phi_max,
1065 std::vector<IdentifierHash> & cell_list)
const
1070 if ( !
descr )
return;
1071 if ( eta_min >= eta_max )
return;
1075 if (
descr->is_lar_fcal()) {
1078 if (
descr->reg_min() > eta_max ||
descr->reg_max() < eta_min)
return;
1085 for (
int ieta=0; ieta<
descr->n_eta(); ieta++) {
1086 for (
int iphi=0; iphi<
descr->n_phi(); iphi++) {
1090 if (caloCellHash != prevHash) {
1091 prevHash=caloCellHash;
1094 if ( elt->
eta()+elt->
deta()/2. > eta_min &&
1095 elt->
eta()-elt->
deta()/2. < eta_max) {
1100 if(dphi1 >=0. && dphi2 >= 0.) {
1101 cell_list.push_back(caloCellHash);
1116 if ( !
descr->is_in(eta_min,eta_max,phi_min,phi_max))
return;
1118 double zone_min = eta_min;
1119 double zone_max = eta_max;
1126 if (
descr->calo_sign() > 0 ) {
1128 if (
descr->reg_min() >= zone_min ){
1129 zone_min =
descr->reg_min();
1134 ieta_min =
descr->eta_channel(zone_min);
1139 if (
descr->reg_max() <= zone_max ) {
1140 zone_max =
descr->reg_max();
1141 ieta_max =
descr->n_eta() -1;
1145 ieta_max =
descr->eta_channel(zone_max);
1147 ieta_max =
descr->n_eta() - 1;
1153 if (
descr->reg_min() >= zone_min ){
1154 zone_min =
descr->reg_min();
1155 ieta_max =
descr->n_eta() - 1;
1159 ieta_max =
descr->eta_channel(zone_min);
1161 ieta_max =
descr->n_eta() - 1;
1164 if (
descr->reg_max() <= zone_max ) {
1165 zone_max =
descr->reg_max();
1170 ieta_min =
descr->eta_channel(zone_max - 0.0001);
1196 double margin =
descr->dphi()*0.1;
1200 if (
descr->calo_phi_min() > zone_phi_min) zone_phi_min =
descr->calo_phi_min() + margin;
1201 if (
descr->calo_phi_max() < zone_phi_max) zone_phi_max =
descr->calo_phi_max() - margin;
1204 int iphi_min =
descr->phi_channel(zone_phi_min);
1205 int iphi_max =
descr->phi_channel(zone_phi_max);
1208 int reg_sampl=
descr->getSampling(0);
1210 ieta_min = ieta_min -1;
1211 ieta_max = ieta_max +1;
1235 if (reg_PhiMin<0) reg_PhiMin=0;
1239 if ( iphi_min <= iphi_max && zone_phi_min <= zone_phi_max ) {
1243 for (
int ieta = ieta_min-1 ; ieta <= ieta_max+1; ieta++ )
1244 for (
int iphi = iphi_min-1 ; iphi <= iphi_max+1; iphi++ )
1246 if (ieta>=reg_EtaMin && ieta <=reg_EtaMax && iphi>=reg_PhiMin && iphi<=reg_PhiMax) {
1252 && ( (elt->
eta()+elt->
deta()/2.) > zone_min + 0.00001 )
1253 && ( (elt->
eta()-elt->
deta()/2.) + 0.00001 < zone_max )
1254 && ( (elt->
phi()+elt->
dphi()/2.) > zone_phi_min + 0.00001 )
1255 && ( (elt->
phi()-elt->
dphi()/2.) + 0.00001 < zone_phi_max ) )
1257 cell_list.push_back(caloCellHash);
1265 else if ( iphi_min <= iphi_max && zone_phi_min > zone_phi_max ) {
1269 for (
int ieta = ieta_min-1 ; ieta <= ieta_max+1; ieta++ )
1270 for (
int iphi = iphi_min-1 ; iphi <= iphi_max+1; iphi++ )
1272 if (ieta>=reg_EtaMin && ieta <=reg_EtaMax && iphi>=reg_PhiMin && iphi<=reg_PhiMax) {
1278 && ( (elt->
eta()+elt->
deta()/2.) > zone_min + 0.00001 )
1279 && ( (elt->
eta()-elt->
deta()/2.) + 0.00001 < zone_max )
1280 && ( ( (elt->
phi()+elt->
dphi()/2.) > zone_phi_min + 0.00001 )
1281 || ( (elt->
phi()-elt->
dphi()/2.) + 0.00001 < zone_phi_max ) )
1284 cell_list.push_back(caloCellHash);
1299 for (
int ieta = ieta_min-1 ; ieta <= ieta_max+1; ieta++ ) {
1302 for (
int iphi = iphi_min-1 ; iphi <= nchmax; iphi++ )
1304 if (ieta>=reg_EtaMin && ieta <=reg_EtaMax && iphi>=reg_PhiMin && iphi<=reg_PhiMax) {
1310 && ( (elt->
eta()+elt->
deta()/2.) > zone_min + 0.00001 )
1311 && ( (elt->
eta()-elt->
deta()/2.) + 0.00001 < zone_max )
1312 && ( (elt->
phi()+elt->
dphi()/2.) > zone_phi_min + 0.00001 )
1313 && ( (elt->
phi()-elt->
dphi()/2.) + 0.00001 < zone_phi_max ) )
1315 cell_list.push_back(caloCellHash);
1323 for (
int iphi = 0 ; iphi <= iphi_max+1; iphi++ )
1325 if (ieta>=reg_EtaMin && ieta <=reg_EtaMax && iphi>=reg_PhiMin && iphi<=reg_PhiMax) {
1331 && ( (elt->
eta()+elt->
deta()/2.) > zone_min + 0.00001 )
1332 && ( (elt->
eta()-elt->
deta()/2.) + 0.00001 < zone_max )
1333 && ( (elt->
phi()+elt->
dphi()/2.) > zone_phi_min + 0.00001 )
1334 && ( (elt->
phi()-elt->
dphi()/2.) + 0.00001 < zone_phi_max ) )
1336 cell_list.push_back(caloCellHash);
1359 double aeta = std::abs(
eta);
1374 etadist = std::abs(aeta -
reg->calo_eta_max());
1375 if(aeta <= reg->calo_eta_max())
result =
true;
1394 double edgemin = std::abs(aeta -
reg->calo_eta_min());
1395 double edgemax = std::abs(aeta -
reg->calo_eta_max());
1396 if(edgemin < etadist) etadist = edgemin;
1397 if(edgemax < etadist) etadist = edgemax;
1399 if(aeta >=
reg->calo_eta_min() &&
1400 aeta <= reg->calo_eta_max())
result =
true;
1411 double edgemin = std::abs( aeta -
reg->reg_min() );
1412 double edgemax = std::abs( aeta -
reg->reg_max() );
1413 if ( edgemin < etadist ) etadist = edgemin;
1414 if ( edgemax < etadist ) etadist = edgemax;
1420 if (
result) etadist = etadist*(-1.);
1427 const int sampling_or_module,
1470 int& sampling_or_module,
1476 sampling_or_module = 0;
1482 sampling_or_module = 1;
1488 sampling_or_module = 2;
1494 sampling_or_module = 3;
1500 sampling_or_module = 0;
1506 sampling_or_module = 1;
1512 sampling_or_module = 2;
1518 sampling_or_module = 3;
1524 sampling_or_module = 0;
1530 sampling_or_module = 1;
1536 sampling_or_module = 2;
1542 sampling_or_module = 3;
1548 sampling_or_module = 0;
1554 sampling_or_module = 1;
1560 sampling_or_module = 2;
1571 sampling_or_module = 0;
1579 sampling_or_module = 0;
1585 sampling_or_module = 0;