CMS 3D CMS Logo

CaloTowerTopology.cc

Go to the documentation of this file.
00001 #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h"
00002 #include "Geometry/CaloTopology/interface/CaloTowerTopology.h"
00003 
00004 static const int DoubleHE = 21;
00005 static const int QuadHF = 40;
00006 
00007 bool CaloTowerTopology::valid(const DetId& id) const {
00008   CaloTowerDetId tid(id);
00009   bool bad=(tid.ieta()==0 || tid.iphi()<=0 || tid.iphi()>72 || tid.ieta()<-41 || tid.ieta()>41);
00010   return !bad;
00011 }
00012 
00013 std::vector<DetId> CaloTowerTopology::east(const DetId& id) const {
00014   std::vector<DetId> dd;
00015   CaloTowerDetId tid(id);
00016   int ieta=tid.ieta();
00017   int iphi=tid.iphi();
00018 
00019   if (ieta==1) ieta=-1;
00020   else if (ieta==DoubleHE) {
00021     ieta--;
00022     dd.push_back(CaloTowerDetId(ieta,iphi+1));    
00023   } else if (ieta-1==-DoubleHE) {
00024     if ((iphi%2)==0) iphi--;
00025     ieta--;
00026   } else if (ieta==QuadHF) {
00027     ieta--;
00028     dd.push_back(CaloTowerDetId(ieta,((iphi+1)%72)+1));    
00029   } else if (ieta-1==-QuadHF) {
00030     if (((iphi-1)%4)==0) 
00031       if (iphi==1) iphi=71;
00032       else iphi-=2;
00033     ieta--;
00034   } else ieta--;
00035 
00036   if (ieta>=-41) 
00037     dd.push_back(CaloTowerDetId(ieta,iphi));
00038   return dd;
00039 }
00040 
00041 std::vector<DetId> CaloTowerTopology::west(const DetId& id) const {
00042   std::vector<DetId> dd;
00043   CaloTowerDetId tid(id);
00044 
00045   int ieta=tid.ieta();
00046   int iphi=tid.iphi();
00047 
00048   if (ieta==-1) ieta=1;
00049   else if (ieta==-DoubleHE) {
00050     ieta++;
00051     dd.push_back(CaloTowerDetId(ieta,iphi+1));    
00052   } else if (ieta+1==DoubleHE) {
00053     if ((iphi%2)==0) iphi--;
00054     ieta++;
00055   } else if (ieta==-QuadHF) {
00056     ieta++;
00057     dd.push_back(CaloTowerDetId(ieta,((iphi+1)%72)+1));    
00058   } else if (ieta+1==QuadHF) {
00059     if (((iphi-1)%4)==0) 
00060       if (iphi==1) iphi=71;
00061       else iphi-=2;
00062     ieta++;
00063   } else ieta++;
00064 
00065   if (ieta<=41) 
00066     dd.push_back(CaloTowerDetId(ieta,iphi));
00067 
00068   return dd;
00069 }
00070 
00071 std::vector<DetId> CaloTowerTopology::north(const DetId& id) const {
00072   CaloTowerDetId tid(id);
00073   int iphi_n=tid.iphi()+1;
00074   if (iphi_n>72) iphi_n=1;
00075   if (tid.ietaAbs()>=DoubleHE && (iphi_n%2)==0) {
00076     iphi_n++;
00077     if (iphi_n>72) iphi_n-=72;
00078   }
00079   if (tid.ietaAbs()>=QuadHF) {
00080     iphi_n+=3;
00081     if (iphi_n>72) iphi_n-=72;
00082   }
00083 
00084   std::vector<DetId> dd;
00085   dd.push_back(CaloTowerDetId(tid.ieta(),iphi_n));
00086   return dd;
00087 }
00088 
00089 std::vector<DetId> CaloTowerTopology::south(const DetId& id) const {
00090   CaloTowerDetId tid(id);
00091   int iphi_s=tid.iphi()-1;
00092   if (iphi_s==0) iphi_s=72;
00093   if (tid.ietaAbs()>=DoubleHE && (iphi_s%2)==0) iphi_s--;
00094   if (tid.ietaAbs()>=QuadHF) {
00095     iphi_s-=3;
00096     if (iphi_s<=0) iphi_s+=72;
00097   }
00098 
00099   std::vector<DetId> dd;
00100   dd.push_back(CaloTowerDetId(tid.ieta(),iphi_s));
00101   return dd;
00102 }
00103 
00104 std::vector<DetId> CaloTowerTopology::up(const DetId& id) const {
00105   return std::vector<DetId>();
00106 }
00107 
00108 std::vector<DetId> CaloTowerTopology::down(const DetId& id) const {
00109   return std::vector<DetId>();
00110 }
00111 

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