CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/Geometry/MuonNumbering/src/MuonBaseNumber.cc

Go to the documentation of this file.
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