00001 #include "Geometry/MuonNumbering/interface/MuonBaseNumber.h" 00002 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00003 #include <iostream> 00004 00005 //#define LOCAL_DEBUG 00006 00007 void MuonBaseNumber::addBase(LevelBaseNumber num){ 00008 basenumber_type::iterator cur=sortedBaseNumber.begin(); 00009 basenumber_type::iterator end=sortedBaseNumber.end(); 00010 00011 // do a small check if level is already occupied 00012 00013 while (cur!=end) { 00014 if (num.level()==(*cur).level()) { 00015 #ifdef LOCAL_DEBUG 00016 std::cout << "MuonBaseNumber::addBase was asked to add " 00017 <<num.level()<<" " 00018 <<num.super()<<" " 00019 <<num.base() 00020 <<" to existing level " 00021 <<(*cur).level()<<" " 00022 <<(*cur).super()<<" " 00023 <<(*cur).base() << " but refused."; 00024 #endif 00025 return; // don't overwrite current volume stored 00026 } 00027 cur++; 00028 } 00029 00030 cur=sortedBaseNumber.begin(); 00031 while (cur!=end) { 00032 if (num.level()<(*cur).level()) break; 00033 cur++; 00034 } 00035 sortedBaseNumber.insert(cur,num); 00036 00037 #ifdef LOCAL_DEBUG 00038 cur=sortedBaseNumber.begin(); 00039 end=sortedBaseNumber.end(); 00040 std::cout << "MuonBaseNumber::AddBase "; 00041 while (cur!=end) { 00042 std::cout<<(*cur).level()<<" "; 00043 std::cout<<(*cur).super()<<" "; 00044 std::cout<<(*cur).base(); 00045 std::cout<<","; 00046 cur++; 00047 } 00048 std::cout <<std::endl; 00049 #endif 00050 00051 } 00052 00053 void MuonBaseNumber::addBase(const int level,const int super,const int base){ 00054 LevelBaseNumber num(level,super,base); 00055 addBase(num); 00056 } 00057 00058 int MuonBaseNumber::getLevels() const { 00059 return sortedBaseNumber.size(); 00060 } 00061 00062 int MuonBaseNumber::getSuperNo(int level) const { 00063 basenumber_type::const_iterator cur=sortedBaseNumber.begin(); 00064 basenumber_type::const_iterator end=sortedBaseNumber.end(); 00065 while (cur!=end) { 00066 if ((*cur).level()==level) { 00067 return (*cur).super(); 00068 } 00069 cur++; 00070 } 00071 return 0; 00072 } 00073 00074 int MuonBaseNumber::getBaseNo(int level) const { 00075 basenumber_type::const_iterator cur=sortedBaseNumber.begin(); 00076 basenumber_type::const_iterator end=sortedBaseNumber.end(); 00077 while (cur!=end) { 00078 if ((*cur).level()==level) { 00079 return (*cur).base(); 00080 } 00081 cur++; 00082 } 00083 return 0; 00084 } 00085 00086 00087 00088 00089