CMS 3D CMS Logo

EEDetId.h

Go to the documentation of this file.
00001 #ifndef ECALDETID_EEDETID_H
00002 #define ECALDETID_EEDETID_H
00003 
00004 #include <ostream>
00005 #include "DataFormats/DetId/interface/DetId.h"
00006 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
00007 
00008 
00017 class EEDetId : public DetId {
00018    public:
00019       enum { Subdet=EcalEndcap};
00021       EEDetId() {}
00023       EEDetId(uint32_t rawid) : DetId(rawid) {}
00026       EEDetId(int i, int j, int iz, int mode = XYMODE);  
00028       EEDetId(const DetId& id);
00030       EEDetId& operator=(const DetId& id);
00031 
00033       //  EcalSubdetector subdet() const { return EcalSubdetector(subdetId()); }
00034       static EcalSubdetector subdet() { return EcalEndcap;}
00035 
00037       int zside() const { return (id_&0x4000)?(1):(-1); }
00039       int ix() const { return (id_>>7)&0x7F; }
00041       int iy() const { return id_&0x7F; }  
00043       int isc() const;
00045       int ic() const;
00047       int iquadrant() const ;
00048       // is z positive?
00049       bool positiveZ() const { return id_&0x4000;}
00050 
00051       int iPhiOuterRing() const ; // 1-360 else==0 if not on outer ring!
00052 
00053       static EEDetId idOuterRing( int iPhi , int zEnd ) ;
00054 
00056       int hashedIndex() const 
00057       {
00058          return ( iy() - nBegin[ ix() - 1 ] + 
00059                   nIntegral[ ix() - 1 ]  + 
00060                   ( positiveZ() ? ICR_FEE : 0 ) ) ;
00061       }
00062 
00063       static bool isNextToBoundary(     EEDetId id ) ;
00064 
00065       static bool isNextToDBoundary(    EEDetId id ) ;
00066 
00067       static bool isNextToRingBoundary( EEDetId id ) ;
00068 
00070       static EEDetId unhashIndex( int hi ) ;
00071 
00073       static bool validHashIndex( int i ) ;
00074 
00076       static bool validDetId( int i, int j, int iz ) ;
00077 
00078       static const int IX_MIN =1;
00079       static const int IY_MIN =1;
00080       static const int IX_MAX =100;
00081       static const int IY_MAX =100;
00082       static const int ISC_MIN=1;
00083       static const int ICR_MIN=1;
00084       static const int ISC_MAX=316;
00085       static const int ICR_MAX=25;
00086 
00087       // to speed up hashedIndex()
00088       static const int ICR_FD   =3870;
00089       static const int ICR_FEE  =7740;
00090       static const int SIZE_HASH=2*ICR_FEE;
00091       static const int MIN_HASH =  0; // always 0 ...
00092       static const int MAX_HASH =  2*ICR_FEE-1;
00093  
00094 
00095       // function modes for (int, int) constructor
00096       static const int XYMODE        = 0;
00097       static const int SCCRYSTALMODE = 1;
00098 
00099    private:
00100 
00101       bool        isOuterRing() const ;
00102 
00103       static bool isOuterRingXY( int ax, int ay ) ;
00104 
00105       //Functions from B. Kennedy to retrieve ix and iy from SC and Crystal number
00106 
00107       static const int nCols = 10;
00108       static const int nCrys = 5; /* Number of crystals per row in SC */
00109       static const int QuadColLimits[nCols+1];
00110       static const int iYoffset[nCols+1];
00111 
00112       static const int nBegin[IX_MAX];
00113       static const int nIntegral[IX_MAX];
00114   
00115       int ix( int iSC, int iCrys ) const;
00116       int iy( int iSC, int iCrys ) const;
00117       int ixQuadrantOne() const;
00118       int iyQuadrantOne() const;
00119 };
00120 
00121 std::ostream& operator<<(std::ostream& s,const EEDetId& id);
00122 
00123 #endif

Generated on Tue Jun 9 17:30:41 2009 for CMSSW by  doxygen 1.5.4