#include <EcalTrigTowerConstituentsMap.h>
Classes | |
struct | MapItem |
Public Member Functions | |
void | assign (const DetId &cell, const EcalTrigTowerDetId &tower) |
set the association between a DetId and a tower | |
std::vector< DetId > | constituentsOf (const EcalTrigTowerDetId &id) const |
Get the constituent detids for this tower id. | |
EcalTrigTowerConstituentsMap () | |
EcalTrigTowerDetId | towerOf (const DetId &id) const |
Get the tower id for this det id (or null if not known) | |
Private Types | |
typedef boost::multi_index_container < MapItem, boost::multi_index::indexed_by < boost::multi_index::ordered_unique < boost::multi_index::member < MapItem, DetId,&MapItem::cell > >, boost::multi_index::ordered_non_unique < boost::multi_index::member < MapItem, EcalTrigTowerDetId,&MapItem::tower > > > > | EcalTowerMap |
typedef EcalTowerMap::nth_index < 0 >::type | EcalTowerMap_by_DetId |
typedef EcalTowerMap::nth_index < 1 >::type | EcalTowerMap_by_towerDetId |
Private Member Functions | |
DetId | changeEEDetIdQuadrantAndZ (const DetId &fromid, const int &toQuadrant, const int &tozside) const |
int | changeTowerQuadrant (int phiTower, int fromQuadrant, int toQuadrant) const |
DetId | wrapEcalTrigTowerDetId (const DetId &id) const |
Wrap a generic EcalTrigTowerDetId to the equivalent one in z+ Quadrant 1 (from 0 < phi < pi/2) | |
DetId | wrapEEDetId (const DetId &id) const |
Wrap a generic EEDetId to the equivalent one in z+ Quadrant 1 (from 0 < phi < pi/2) | |
Private Attributes | |
EcalTowerMap | m_items |
Definition at line 20 of file EcalTrigTowerConstituentsMap.h.
typedef boost::multi_index_container< MapItem, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::member < MapItem,DetId,&MapItem::cell > >, boost::multi_index::ordered_non_unique< boost::multi_index::member < MapItem,EcalTrigTowerDetId,&MapItem::tower> > > > EcalTrigTowerConstituentsMap::EcalTowerMap [private] |
Definition at line 58 of file EcalTrigTowerConstituentsMap.h.
typedef EcalTowerMap::nth_index<0>::type EcalTrigTowerConstituentsMap::EcalTowerMap_by_DetId [private] |
Definition at line 60 of file EcalTrigTowerConstituentsMap.h.
typedef EcalTowerMap::nth_index<1>::type EcalTrigTowerConstituentsMap::EcalTowerMap_by_towerDetId [private] |
Definition at line 61 of file EcalTrigTowerConstituentsMap.h.
EcalTrigTowerConstituentsMap::EcalTrigTowerConstituentsMap | ( | ) |
Definition at line 9 of file EcalTrigTowerConstituentsMap.cc.
{ }
void EcalTrigTowerConstituentsMap::assign | ( | const DetId & | cell, |
const EcalTrigTowerDetId & | tower | ||
) |
set the association between a DetId and a tower
Definition at line 159 of file EcalTrigTowerConstituentsMap.cc.
References Exception, m_items, and DetId::rawId().
Referenced by EcalTrigTowerConstituentsMapBuilder::parseTextMap().
DetId EcalTrigTowerConstituentsMap::changeEEDetIdQuadrantAndZ | ( | const DetId & | fromid, |
const int & | toQuadrant, | ||
const int & | tozside | ||
) | const [private] |
Definition at line 102 of file EcalTrigTowerConstituentsMap.cc.
References DetId::det(), DetId::Ecal, EcalEndcap, EEDetId::iquadrant(), EEDetId::ix(), EEDetId::iy(), DetId::subdetId(), and EEDetId::XYMODE.
{ if (! (fromid.det() == DetId::Ecal && fromid.subdetId() == EcalEndcap) ) return EEDetId(0); EEDetId myId(fromid); int dQuadrant = toQuadrant-myId.iquadrant(); switch(dQuadrant%4){ case 0: return DetId(EEDetId(myId.ix(),myId.iy(),tozside,EEDetId::XYMODE)); break; case 1: /* adjacent tower: they are symetric*/ return DetId(EEDetId(101-myId.ix(),myId.iy(),tozside,EEDetId::XYMODE)); break; case 2: /* opposite quadrant: they are identical*/ return DetId(EEDetId(101-myId.ix(),101-myId.iy(),tozside,EEDetId::XYMODE)); break; case 3: /* adjacent tower: they are symetric*/ return DetId(EEDetId(myId.ix(),101-myId.iy(),tozside,EEDetId::XYMODE)); break; default: /*should never be reached*/ edm::LogError("EcalTrigTowerConstituentsMapError") << "This should never be reached. Profound error!"; } return EEDetId(0); }
int EcalTrigTowerConstituentsMap::changeTowerQuadrant | ( | int | phiTower, |
int | fromQuadrant, | ||
int | toQuadrant | ||
) | const [private] |
Definition at line 132 of file EcalTrigTowerConstituentsMap.cc.
References EcalTrigTowerDetId::kEETowersInPhiPerQuadrant.
{ int newPhiTower = phiTower; int dQuadrant = toQuadrant-fromQuadrant; switch(dQuadrant%4){ case 0: newPhiTower = phiTower; break; case 1: /* adjacent tower: they are symetric*/ newPhiTower = EcalTrigTowerDetId::kEETowersInPhiPerQuadrant * 2 - phiTower + 1; break; case 2: /* opposite quadrant: they are identical*/ newPhiTower = phiTower + EcalTrigTowerDetId::kEETowersInPhiPerQuadrant * 2; break; case 3: /* adjacent tower: they are symetric*/ newPhiTower = EcalTrigTowerDetId::kEETowersInPhiPerQuadrant * 4 - phiTower + 1; break; default: /*should never be reached*/ edm::LogError("EcalTrigTowerConstituentsMapError") << "This should never be reached. Profound error!"; } return newPhiTower; }
std::vector< DetId > EcalTrigTowerConstituentsMap::constituentsOf | ( | const EcalTrigTowerDetId & | id | ) | const |
Get the constituent detids for this tower id.
Definition at line 167 of file EcalTrigTowerConstituentsMap.cc.
References DetId::Ecal, EcalBarrel, EcalEndcap, EcalTriggerTower, EBDetId::ETAPHIMODE, m_items, and L1TEmulatorMonitor_cff::p.
Referenced by EcalRecHitsValidation::analyze().
{ std::vector<DetId> items; if ( id.det() == DetId::Ecal && id.subdetId() == EcalTriggerTower && id.subDet() == EcalBarrel ) { //-------------------- // Ecal Barrel //-------------------- // trigger towers are 5x5 crystals in the barrel int etaxtalMin=(id.ietaAbs()-1)*5+1; int phixtalMin=((id.iphi()-1)*5+11)%360; if(phixtalMin<=0)phixtalMin+=360; int etaxtalMax=id.ietaAbs()*5; int phixtalMax=((id.iphi())*5+10)%360; if(phixtalMax<=0) phixtalMax+=360; for(int e=etaxtalMin;e<=etaxtalMax;e++) for(int p=phixtalMin;p<=phixtalMax;p++) items.push_back(DetId(EBDetId(id.zside()*e,p,EBDetId::ETAPHIMODE))); } else if (id.det() == DetId::Ecal && id.subdetId() == EcalTriggerTower && id.subDet() == EcalEndcap) { //-------------------- // Ecal Endcap //-------------------- //DetId myId=wrapEcalTrigTowerDetId(id); EcalTowerMap_by_towerDetId::const_iterator lb,ub; //boost::tuples::tie(lb,ub)=get<1>(m_items).equal_range(myId); boost::tuples::tie(lb,ub)=boost::get<1>(m_items).equal_range(id); while (lb!=ub) { //EEDetId mappedId((*lb).cell); //items.push_back(changeEEDetIdQuadrantAndZ(mappedId,id.iquadrant(),id.zside())); items.push_back((*lb).cell); ++lb; } } return items; }
EcalTrigTowerDetId EcalTrigTowerConstituentsMap::towerOf | ( | const DetId & | id | ) | const |
Get the tower id for this det id (or null if not known)
Definition at line 13 of file EcalTrigTowerConstituentsMap.cc.
References DetId::Ecal, EcalBarrel, EcalEndcap, i, m_items, EBDetId::tower(), and EEDetId::zside().
Referenced by EcalTBReadout::findTTlist(), EcalSelectiveReadout::getCrystalInterest(), EcalEndcapRecHitsMaker::init(), EcalBarrelRecHitsMaker::init(), Numbers::iTCC(), Numbers::iTT(), EcalBarrelRecHitsMaker::loadEcalBarrelRecHits(), EcalBarrelRecHitsMaker::loadPCaloHits(), EcalBarrelRecHitsMaker::randomNoisifier(), EcalTBReadout::readOut(), EcalSelectiveReadoutValidation::readOutUnitOf(), EcalSelectiveReadout::runSelectiveReadout0(), EcalSelectiveReadoutValidation::setTtEtSums(), and EcalSelectiveReadoutSuppressor::setTtFlags().
{ if (id.det() == DetId::Ecal && id.subdetId() == EcalBarrel) { //-------------------- // Ecal Barrel //-------------------- EBDetId myId(id); return myId.tower(); } else if (id.det() == DetId::Ecal && id.subdetId() == EcalEndcap) { //-------------------- // Ecal Endcap //-------------------- EEDetId originalId(id); // DetId wrappedId=wrapEEDetId(id); DetId wrappedId(originalId); EcalTowerMap::const_iterator i=m_items.find(wrappedId); if (i!=m_items.end()) { int etaTower=i->tower.ietaAbs(); int phiTower=i->tower.iphi(); //trigger tower <-> crystal maping read //..........from file and done only for 1 quadrant //move from quadrant 1 to the actual one: // phiTower = changeTowerQuadrant(phiTower, 1, originalId.iquadrant()); // std::cout << originalId.zside() << " " << etaTower << " " << phiTower << std::endl; return EcalTrigTowerDetId(originalId.zside(),EcalEndcap,etaTower,phiTower); } } return EcalTrigTowerDetId(0); }
Wrap a generic EcalTrigTowerDetId to the equivalent one in z+ Quadrant 1 (from 0 < phi < pi/2)
Definition at line 74 of file EcalTrigTowerConstituentsMap.cc.
References DetId::det(), DetId::Ecal, EcalEndcap, EcalTriggerTower, EcalTrigTowerDetId::ietaAbs(), EcalTrigTowerDetId::iphi(), EcalTrigTowerDetId::iquadrant(), EcalTrigTowerDetId::kEETowersInPhiPerQuadrant, EcalTrigTowerDetId::subDet(), and DetId::subdetId().
{ EcalTrigTowerDetId etid(id); if (! (etid.det() == DetId::Ecal && etid.subdetId() == EcalTriggerTower && etid.subDet() == EcalEndcap) ) return EcalTrigTowerDetId(0); switch((etid.iquadrant()-1)%4) { case 0: return DetId(EcalTrigTowerDetId(1,EcalEndcap,etid.ietaAbs(),etid.iphi())); break; case 1: return DetId(EcalTrigTowerDetId(1,EcalEndcap,etid.ietaAbs(),EcalTrigTowerDetId::kEETowersInPhiPerQuadrant * 2 - etid.iphi() + 1)); break; case 2: return DetId(EcalTrigTowerDetId(1,EcalEndcap,etid.ietaAbs(),etid.iphi() - EcalTrigTowerDetId::kEETowersInPhiPerQuadrant * 2 )); break; case 3: return DetId(EcalTrigTowerDetId(1,EcalEndcap,etid.ietaAbs(),EcalTrigTowerDetId::kEETowersInPhiPerQuadrant * 4 - etid.iphi() + 1)); break; default: /*should never be reached*/ edm::LogError("EcalTrigTowerConstituentsMapError") << "This should never be reached. Profound error!"; } return EcalTrigTowerDetId(0); }
Wrap a generic EEDetId to the equivalent one in z+ Quadrant 1 (from 0 < phi < pi/2)
Definition at line 46 of file EcalTrigTowerConstituentsMap.cc.
References DetId::det(), DetId::Ecal, EcalEndcap, EEDetId::iquadrant(), EEDetId::ix(), EEDetId::iy(), DetId::subdetId(), and EEDetId::XYMODE.
{ if (! (eeid.det() == DetId::Ecal && eeid.subdetId() == EcalEndcap) ) return EEDetId(0); EEDetId myId(eeid); switch((myId.iquadrant()-1)%4) { case 0: return DetId(EEDetId(myId.ix(),myId.iy(),1,EEDetId::XYMODE)); break; case 1: return DetId(EEDetId(101-myId.ix(),myId.iy(),1,EEDetId::XYMODE)); break; case 2: return DetId(EEDetId(101-myId.ix(),101-myId.iy(),1,EEDetId::XYMODE)); break; case 3: return DetId(EEDetId(myId.ix(),101-myId.iy(),1,EEDetId::XYMODE)); break; default: /*should never be reached*/ edm::LogError("EcalTrigTowerConstituentsMapError") << "This should never be reached. Profound error!"; } return EEDetId(0); }
Definition at line 63 of file EcalTrigTowerConstituentsMap.h.
Referenced by assign(), constituentsOf(), and towerOf().