PbScIndexer.C

Go to the documentation of this file.
00001 #include <iostream>
00002 #include "PbScIndexer.h"
00003 
00004 PbScIndexer * PbScIndexer::single=0;
00005 int PbScIndexer::access_count    =0;
00006 
00007 PbScIndexer::PbScIndexer()
00008 {
00009 }
00010 
00011 PbScIndexer::~PbScIndexer()
00012 {
00013 }
00014 // ********************************************************************** 
00015 
00016 PbScIndexer * PbScIndexer::buildPbScIndexer()
00017 {
00018   if(!single) single = new PbScIndexer();
00019   access_count++;
00020   return single;
00021 };
00022 // ********************************************************************** 
00023 
00024 int PbScIndexer::deletePbScIndexer()
00025 {
00026  if(single)
00027    {
00028      access_count--;
00029      delete single;
00030                  single =  0;
00031    }
00032  return access_count;
00033 };
00034  
00035      
00036 //_____________________________________________________________________________
00037 int 
00038 PbScIndexer::xySMiSM(int x, int y)
00039 {
00040   int rv = -1;
00041 
00042   if ( x >= 0 && x < 6 && y >= 0 && y < 3 ) 
00043     {
00044       rv = y*6 + x; 
00045     }
00046 
00047   return rv;
00048 }  
00049 
00050 // ********************************************************************** 
00051  
00052 inline void  PbScIndexer::SMxySM(int i, int & x, int & y) 
00053 { 
00054   y = i/6; 
00055   x = i-y*6; 
00056 }; 
00057        
00058 // ********************************************************************** 
00059   
00060   int PbScIndexer::SMxySMTiST(int iSM ,int xSMTower, int ySMTower) 
00061 { 
00062   int x, y;
00063   SMxySM(iSM, x, y);
00064   return (y*12+ySMTower)*72+x*12+xSMTower; 
00065 };    
00066  
00067 // ********************************************************************** 
00068   
00069   int PbScIndexer::SMiSMTiST(int iSM ,int iSMTower)
00070 { 
00071   int x, y, xx, yy;
00072   SMxySM(iSM, x, y);
00073   iSM144TxySM144T(iSMTower, xx, yy);
00074   return (y*12+yy)*72+x*12+xx; 
00075 };    
00076  
00077  
00078 // ********************************************************************** 
00079  
00080    void PbScIndexer::iSTxyST(int const  iTower, int  & xTower, int & yTower) 
00081 { 
00082   yTower = iTower/72; 
00083   xTower = iTower%72; 
00084 };  
00085  
00086 // ********************************************************************** 
00087  
00088   void PbScIndexer::iST_SMInd(int const iTower, int & ism, int & ismt, int & xsmt, int & ysmt) 
00089 { 
00090   int x, y, xsm, ysm;
00091   iSTxyST(iTower, x, y);
00092   xsm  = x/12;
00093   ysm  = y/12;
00094   ism      = ysm*6 + xsm;
00095   xsmt     = x%12;
00096   ysmt     = y%12;
00097   ismt     = ysmt*12+xsmt;
00098 }; 
00099 
00101