CMS 3D CMS Logo

SiStripFolderOrganizer.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:     SiStripCommon
00004 // Class  :     SiStripFolderOrganizer
00005 // 
00006 // Implementation:
00007 //     <Notes on implementation>
00008 //
00009 // Original Author:  dkcira
00010 //         Created:  Thu Jan 26 23:52:43 CET 2006
00011 
00012 // $Id: SiStripFolderOrganizer.cc,v 1.21 2008/09/19 15:18:28 maborgia Exp $
00013 //
00014 
00015 #include <iostream>
00016 #include <sstream>
00017 
00018 #include "FWCore/ServiceRegistry/interface/Service.h"
00019 
00020 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
00021 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
00022 #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
00023 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
00024 
00025 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00026 
00027 #include "DQMServices/Core/interface/DQMStore.h"
00028 
00029 #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h"
00030 
00031 using namespace std;
00032 using namespace edm;
00033 
00034 SiStripFolderOrganizer::SiStripFolderOrganizer()
00035 {
00036   TopFolderName="SiStrip";
00037   MechanicalFolderName="MechanicalView";
00038   ReadoutFolderName="ReadoutView";
00039   ControlFolderName="ControlView";
00040   sep ="/";
00041   // get a pointer to DQMStore
00042   dbe_  = edm::Service<DQMStore>().operator->();
00043 }
00044 
00045 
00046 SiStripFolderOrganizer::~SiStripFolderOrganizer()
00047 {
00048 }
00049 
00050 
00051 std::string SiStripFolderOrganizer::getSiStripFolder(){
00052    return TopFolderName;
00053 }
00054 
00055 
00056 void SiStripFolderOrganizer::setSiStripFolder(){
00057    dbe_->setCurrentFolder(TopFolderName);
00058    return;
00059 }
00060 
00061 
00062 std::string SiStripFolderOrganizer::getSiStripTopControlFolder(){
00063    std::string lokal_folder = TopFolderName + ControlFolderName;
00064    return lokal_folder;
00065 }
00066 
00067 
00068 void SiStripFolderOrganizer::setSiStripTopControlFolder(){
00069    std::string lokal_folder = TopFolderName + ControlFolderName;
00070    dbe_->setCurrentFolder(lokal_folder);
00071    return;
00072 }
00073 
00074 
00075 std::string SiStripFolderOrganizer::getSiStripControlFolder(
00076                                    // unsigned short crate,
00077                                    unsigned short slot,
00078                                    unsigned short ring,
00079                                    unsigned short addr,
00080                                    unsigned short chan
00081                                    // unsigned short i2c
00082                                    ) {
00083   std::stringstream lokal_folder;
00084   lokal_folder << getSiStripTopControlFolder();
00085   //   if ( crate != all_ ) {// if ==all_ then remain in top control folder
00086   //     lokal_folder << sep << "FecCrate" << crate;
00087   if ( slot != all_ ) {
00088     lokal_folder << sep << "FecSlot" << slot;
00089     if ( ring != all_ ) {
00090       lokal_folder << sep << "FecRing" << ring;
00091       if ( addr != all_ ) {
00092         lokal_folder << sep << "CcuAddr" << addr;
00093         if ( chan != all_ ) {
00094           lokal_folder << sep << "CcuChan" << chan;
00095           //        if ( i2c != all_ ) {
00096           //          lokal_folder << sep << "I2cAddr" << i2c;
00097           //        }
00098         }
00099       }
00100     }
00101   }
00102   //   }
00103   return lokal_folder.str();
00104 }
00105 
00106 
00107 void SiStripFolderOrganizer::setSiStripControlFolder(
00108                                    // unsigned short crate,
00109                                    unsigned short slot,
00110                                    unsigned short ring,
00111                                    unsigned short addr,
00112                                    unsigned short chan
00113                                    // unsigned short i2c
00114                                    ) {
00115  std::string lokal_folder = getSiStripControlFolder(slot, ring, addr, chan);
00116  dbe_->setCurrentFolder(lokal_folder);
00117  return;
00118 }
00119 
00120 std::pair<std::string,int32_t> SiStripFolderOrganizer::GetSubDetAndLayer(const uint32_t& detid, bool ring_flag){
00121   std::string cSubDet;
00122   int32_t layer=0;
00123   switch(StripSubdetector::SubDetector(StripSubdetector(detid).subdetId()))
00124     {
00125     case StripSubdetector::TIB:
00126       cSubDet="TIB";
00127       layer=TIBDetId(detid).layer();
00128       break;
00129     case StripSubdetector::TOB:
00130       cSubDet="TOB";
00131       layer=TOBDetId(detid).layer();
00132       break;
00133     case StripSubdetector::TID:
00134       cSubDet="TID";
00135       if(ring_flag)
00136         layer=TIDDetId(detid).ring() * ( TIDDetId(detid).side()==1 ? -1 : +1);
00137       else
00138         layer=TIDDetId(detid).wheel() * ( TIDDetId(detid).side()==1 ? -1 : +1);
00139       break;
00140     case StripSubdetector::TEC:
00141       cSubDet="TEC";
00142       if(ring_flag)
00143         layer=TECDetId(detid).ring() * ( TECDetId(detid).side()==1 ? -1 : +1);
00144       else
00145         layer=TECDetId(detid).wheel() * ( TECDetId(detid).side()==1 ? -1 : +1);
00146       break;
00147     default:
00148       edm::LogWarning("SiStripMonitorTrack") << "WARNING!!! this detid does not belong to tracker" << std::endl;
00149     }
00150   return std::make_pair(cSubDet,layer);
00151 }
00152 
00153 
00154 void SiStripFolderOrganizer::setDetectorFolder(uint32_t rawdetid){
00155   string folder_name;
00156   getFolderName(rawdetid, folder_name);
00157   dbe_->setCurrentFolder(folder_name);
00158 }
00159 
00160 
00161 void SiStripFolderOrganizer::getFolderName(int32_t rawdetid, string& lokal_folder){
00162 
00163   lokal_folder = TopFolderName + sep + MechanicalFolderName;
00164   if(rawdetid == 0 ){ // just top MechanicalFolder if rawdetid==0;
00165     return;
00166   }
00167   std::ostringstream rest;
00168   SiStripDetId stripdet = SiStripDetId(rawdetid);
00169   
00170   if (stripdet.subDetector() == SiStripDetId::TIB){
00171   // ---------------------------  TIB  --------------------------- //
00172     TIBDetId tib = TIBDetId(rawdetid);
00173     rest<<sep<<"TIB"<<sep<<"layer_"<<tib.layerNumber() << sep;
00174     if (tib.isZMinusSide())      rest << "backward_strings" << sep;
00175     else                         rest << "forward_strings"  << sep;
00176     if (tib.isExternalString())  rest << "external_strings" << sep;
00177     else                         rest << "internal_strings" << sep;
00178     rest << "string_" << tib.stringNumber() << sep << "module_" << rawdetid;
00179   } else if(stripdet.subDetector() == SiStripDetId::TID){
00180   // ---------------------------  TID  --------------------------- //
00181     TIDDetId tid = TIDDetId(rawdetid);
00182     rest<<sep<<"TID"<<sep<<"side_"<<tid.side() << sep
00183                          << "wheel_" << tid.wheel() << sep
00184                          << "ring_"  << tid.ring() << sep;
00185 
00186     if (tid.isStereo()) rest << "stereo_modules" << sep;
00187     else                rest << "mono_modules" << sep;
00188     rest  << "module_" << rawdetid;
00189   } else if( stripdet.subDetector() == SiStripDetId::TOB){
00190   // ---------------------------  TOB  --------------------------- //
00191     TOBDetId tob = TOBDetId(rawdetid);
00192     rest<<sep<<"TOB"<<sep<<"layer_"<<tob.layerNumber()<<sep;
00193     if (tob.isZMinusSide()) rest << "backward_rods" << sep;
00194     else                    rest << "forward_rods" << sep;
00195     rest << "rod_" << tob.rodNumber() << sep<< "module_" << rawdetid;
00196   }else if(stripdet.subDetector() == SiStripDetId::TEC){
00197   // ---------------------------  TEC  --------------------------- //
00198     TECDetId tec = TECDetId(rawdetid);
00199     
00200 rest<<sep<<"TEC"<<sep<<"side_"<<tec.side()<<sep<<"wheel_"<<tec.wheel()<<sep;
00201     if (tec.isBackPetal()) rest << "backward_petals" << sep;
00202     else                   rest << "forward_petals" << sep;
00203 
00204     rest << "petal_" << tec.petalNumber() << sep
00205          << "ring_"<< tec.ringNumber() << sep;
00206 
00207     if (tec.isStereo())    rest << "stereo_modules" << sep;
00208     else                   rest << "mono_modules" << sep;
00209 
00210     rest << "module_" << rawdetid;
00211   }else{
00212      // ---------------------------  ???  --------------------------- //
00213     LogWarning("SiStripTkDQM|WrongInput")<<"no such subdetector type :"<<stripdet.subDetector() <<" no folder set!"<<endl;
00214     return;
00215   }
00216   lokal_folder += rest.str();
00217 
00218 }
00219 
00220 void SiStripFolderOrganizer::setLayerFolder(uint32_t rawdetid, int32_t layer, bool ring_flag){
00221   std::string lokal_folder = TopFolderName + sep + MechanicalFolderName;
00222   if(rawdetid == 0 ){ // just top MechanicalFolder if rawdetid==0;
00223     dbe_->setCurrentFolder(lokal_folder);
00224     return;
00225   }
00226 
00227   std::ostringstream rest;
00228   SiStripDetId stripdet = SiStripDetId(rawdetid);
00229   if(stripdet.subDetector() == SiStripDetId::TIB ){
00230   // ---------------------------  TIB  --------------------------- //
00231     TIBDetId tib1 = TIBDetId(rawdetid);
00232     if (abs(layer)  != tib1.layer()) {
00233       LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tib1.layer() <<endl;
00234       return;
00235     }
00236     rest<<sep<<"TIB"<<sep<<"layer_"<<tib1.layer();
00237   }else if(stripdet.subDetector() == SiStripDetId::TID){
00238   // ---------------------------  TID  --------------------------- //
00239     TIDDetId tid1 = TIDDetId(rawdetid);
00240     if(ring_flag){
00241       if(abs(layer) != tid1.ring()) {
00242         LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tid1.ring() <<endl;
00243         return;
00244       }
00245       rest<<sep<<"TID"<<sep<<"side_"<<tid1.side()<<sep<<"ring_"<<tid1.ring();
00246     }else{
00247       if (abs(layer)  != tid1.wheel()) {
00248         LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tid1.wheel() <<endl;
00249         return;
00250       }
00251       rest<<sep<<"TID"<<sep<<"side_"<<tid1.side()<<sep<<"wheel_"<<tid1.wheel();
00252     }
00253   }else if(stripdet.subDetector() == SiStripDetId::TOB){
00254   // ---------------------------  TOB  --------------------------- //
00255     TOBDetId tob1 = TOBDetId(rawdetid);
00256     if (abs(layer)  != tob1.layer()) {
00257       LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tob1.layer() <<endl;
00258       return;
00259     }
00260     rest<<sep<<"TOB"<<sep<<"layer_"<<tob1.layer();
00261   }else if( stripdet.subDetector() == SiStripDetId::TEC){
00262   // ---------------------------  TEC  --------------------------- //
00263     TECDetId tec1 = TECDetId(rawdetid);
00264     if(ring_flag){
00265       if (abs(layer)  != tec1.ring()) {
00266         LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tec1.ring() <<endl;
00267         return;
00268       }
00269       rest<<sep<<"TEC"<<sep<<"side_"<<tec1.side()<<sep<<"ring_"<<tec1.ring();
00270     }else{
00271       if (abs(layer)  != tec1.wheel()) {
00272         LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tec1.wheel() <<endl;
00273         return;
00274       }
00275       rest<<sep<<"TEC"<<sep<<"side_"<<tec1.side()<<sep<<"wheel_"<<tec1.wheel();
00276     }
00277   }else{
00278   // ---------------------------  ???  --------------------------- //
00279     LogWarning("SiStripTkDQM|WrongInput")<<"no such subdetector type :"<<stripdet.subDetector()<<" no folder set!"<<endl;
00280     return;
00281   }
00282 
00283   lokal_folder += rest.str();
00284   dbe_->setCurrentFolder(lokal_folder);
00285 }
00286 

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