00001
00002 #ifndef XAODCALOEVENT_VERSIONS_CALOTOWERCONTAINER_V1_H
00003 #define XAODCALOEVENT_VERSIONS_CALOTOWERCONTAINER_V1_H
00004
00005 #include "AthContainers/DataVector.h"
00006 #include "xAODBase/IParticleContainer.h"
00007 #include "xAODCaloEvent/versions/CaloTower_v1.h"
00008
00009 DATAVECTOR_BASE( xAOD::CaloTower_v1, xAOD::IParticle );
00010
00011 namespace xAOD {
00012
00013 typedef DataVector<CaloTower_v1> CaloTowerContainerBase_v1;
00014
00015 class CaloTowerContainer_v1 : public CaloTowerContainerBase_v1
00016 {
00017 public:
00018
00028 CaloTowerContainer_v1(SG::OwnershipPolicy ownPolicy = SG::OWN_ELEMENTS,SG::IndexTrackingPolicy trackIndices = SG::DEFAULT_TRACK_INDICES);
00029
00047 CaloTowerContainer_v1(int nEtaBins,double etaMin,double etaMax,int nPhiBins,SG::OwnershipPolicy ownPolicy = SG::OWN_ELEMENTS,SG::IndexTrackingPolicy trackIndices = SG::DEFAULT_TRACK_INDICES);
00048
00049
00052
00053 CaloTowerContainer_v1(CaloTowerContainer_v1& other,SG::OwnershipPolicy ownPolicy = SG::OWN_ELEMENTS);
00054
00056 ~CaloTowerContainer_v1();
00057
00070
00071 bool configureGrid(int nEtaBins,double etaMin,double etaMax,int nPhiBins);
00073
00077 int nEtaBins() const;
00078 double etaMin() const;
00079 double etaMax() const;
00080 double deltaEta() const;
00081 int nPhiBins() const;
00082 double phiMin() const;
00083 double phiMax() const;
00084 double deltaPhi() const;
00085 int nTowers() const;
00086
00087
00088
00091 int index(double eta, double phi) const;
00092 double eta(size_t index) const;
00093 double phi(size_t index) const;
00094
00095 const CaloTower_v1* tower(double eta, double phi) const;
00097
00098 private:
00099
00100 bool configureGrid();
00101
00104 unsigned short m_nEtaBins;
00105 double m_etaMin;
00106 double m_etaMax;
00107 unsigned short m_nPhiBins;
00108 double m_deltaEta;
00109 double m_deltaPhi;
00110 bool m_isConfigured;
00111
00112 };
00113 }
00114
00139
00140
00141 #include "xAODCore/BaseInfo.h"
00142
00143 SG_BASE(xAOD::CaloTowerContainer_v1, xAOD::CaloTowerContainerBase_v1);
00144
00145 inline int xAOD::CaloTowerContainer_v1::nEtaBins() const { return m_nEtaBins; }
00146 inline int xAOD::CaloTowerContainer_v1::nPhiBins() const { return m_nPhiBins; }
00147 inline int xAOD::CaloTowerContainer_v1::nTowers() const { return m_nEtaBins*m_nPhiBins;}
00148
00149 inline double xAOD::CaloTowerContainer_v1::etaMin() const { return m_etaMin; }
00150 inline double xAOD::CaloTowerContainer_v1::etaMax() const { return m_etaMax; }
00151 inline double xAOD::CaloTowerContainer_v1::deltaEta() const { return m_deltaEta; }
00152
00153 inline double xAOD::CaloTowerContainer_v1::phiMin() const { return -M_PI; }
00154 inline double xAOD::CaloTowerContainer_v1::phiMax() const { return M_PI; }
00155 inline double xAOD::CaloTowerContainer_v1::deltaPhi() const { return m_deltaPhi; }
00156
00157 inline const xAOD::CaloTower_v1* xAOD::CaloTowerContainer_v1::tower(double eta, double phi) const {
00158 int idx=index(eta,phi);
00159 if (idx>0 && idx<(int)this->size())
00160 return (*this)[idx];
00161 else
00162 return nullptr;
00163 }
00164
00165 #endif