CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/DQM/SiStripCommon/src/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.32 2013/01/03 18:59:35 wmtan Exp $
00013 //
00014 
00015 #include <iostream>
00016 #include <sstream>
00017 
00018 #include "FWCore/ServiceRegistry/interface/Service.h"
00019 
00020 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
00021 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
00022 #include "Geometry/Records/interface/IdealGeometryRecord.h"
00023 
00024 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00025 
00026 #include "DQMServices/Core/interface/DQMStore.h"
00027 
00028 #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h"
00029 #define CONTROL_FOLDER_NAME "ControlView"
00030 #define MECHANICAL_FOLDER_NAME "MechanicalView"
00031 #define SEP "/"
00032 
00033 SiStripFolderOrganizer::SiStripFolderOrganizer()
00034 {
00035   TopFolderName="SiStrip";
00036   // get a pointer to DQMStore
00037   dbe_  = edm::Service<DQMStore>().operator->();
00038 }
00039 
00040 
00041 SiStripFolderOrganizer::~SiStripFolderOrganizer()
00042 {
00043 }
00044 
00045 void SiStripFolderOrganizer::setSiStripFolderName(std::string name){
00046   TopFolderName = name;
00047 }
00048 
00049 std::string SiStripFolderOrganizer::getSiStripFolder(){
00050    return TopFolderName;
00051 }
00052 
00053 
00054 void SiStripFolderOrganizer::setSiStripFolder(){
00055    dbe_->setCurrentFolder(TopFolderName);
00056    return;
00057 }
00058 
00059 
00060 std::string SiStripFolderOrganizer::getSiStripTopControlFolder(){
00061    std::string lokal_folder = TopFolderName + CONTROL_FOLDER_NAME;
00062    return lokal_folder;
00063 }
00064 
00065 
00066 void SiStripFolderOrganizer::setSiStripTopControlFolder(){
00067    std::string lokal_folder = TopFolderName + CONTROL_FOLDER_NAME;
00068    dbe_->setCurrentFolder(lokal_folder);
00069    return;
00070 }
00071 
00072 
00073 std::string SiStripFolderOrganizer::getSiStripControlFolder(
00074                                    // unsigned short crate,
00075                                    unsigned short slot,
00076                                    unsigned short ring,
00077                                    unsigned short addr,
00078                                    unsigned short chan
00079                                    // unsigned short i2c
00080                                    ) {
00081   std::stringstream lokal_folder;
00082   lokal_folder << getSiStripTopControlFolder();
00083   //   if ( crate != all_ ) {// if ==all_ then remain in top control folder
00084   //     lokal_folder << SEP << "FecCrate" << crate;
00085   if ( slot != all_ ) {
00086     lokal_folder << SEP << "FecSlot" << slot;
00087     if ( ring != all_ ) {
00088       lokal_folder << SEP << "FecRing" << ring;
00089       if ( addr != all_ ) {
00090         lokal_folder << SEP << "CcuAddr" << addr;
00091         if ( chan != all_ ) {
00092           lokal_folder << SEP << "CcuChan" << chan;
00093           //        if ( i2c != all_ ) {
00094           //          lokal_folder << SEP << "I2cAddr" << i2c;
00095           //        }
00096         }
00097       }
00098     }
00099   }
00100   //   }
00101   std::string folder_name = lokal_folder.str(); 
00102   return folder_name;
00103 }
00104 
00105 
00106 void SiStripFolderOrganizer::setSiStripControlFolder(
00107                                    // unsigned short crate,
00108                                    unsigned short slot,
00109                                    unsigned short ring,
00110                                    unsigned short addr,
00111                                    unsigned short chan
00112                                    // unsigned short i2c
00113                                    ) {
00114  std::string lokal_folder = getSiStripControlFolder(slot, ring, addr, chan);
00115  dbe_->setCurrentFolder(lokal_folder);
00116  return;
00117 }
00118 
00119 std::pair<std::string,int32_t> SiStripFolderOrganizer::GetSubDetAndLayer(const uint32_t& detid, const TrackerTopology* tTopo, bool ring_flag){
00120   std::string cSubDet;
00121   int32_t layer=0;
00122   switch(StripSubdetector::SubDetector(StripSubdetector(detid).subdetId()))
00123     {
00124     case StripSubdetector::TIB:
00125       cSubDet="TIB";
00126       layer=tTopo->tibLayer(detid);
00127       break;
00128     case StripSubdetector::TOB:
00129       cSubDet="TOB";
00130       layer=tTopo->tobLayer(detid);
00131       break;
00132     case StripSubdetector::TID:
00133       cSubDet="TID";
00134       if(ring_flag)
00135         layer=tTopo->tidRing(detid) * ( tTopo->tidSide(detid)==1 ? -1 : +1);
00136       else
00137         layer=tTopo->tidWheel(detid) * ( tTopo->tidSide(detid)==1 ? -1 : +1);
00138       break;
00139     case StripSubdetector::TEC:
00140       cSubDet="TEC";
00141       if(ring_flag)
00142         layer=tTopo->tecRing(detid) * ( tTopo->tecSide(detid)==1 ? -1 : +1);
00143       else
00144         layer=tTopo->tecWheel(detid) * ( tTopo->tecSide(detid)==1 ? -1 : +1);
00145       break;
00146     default:
00147       edm::LogWarning("SiStripMonitorTrack") << "WARNING!!! this detid does not belong to tracker" << std::endl;
00148     }
00149   return std::make_pair(cSubDet,layer);
00150 }
00151 
00152 
00153 void SiStripFolderOrganizer::setDetectorFolder(uint32_t rawdetid, const TrackerTopology* tTopo){
00154   std::string folder_name;
00155   getFolderName(rawdetid, tTopo, folder_name);
00156   dbe_->setCurrentFolder(folder_name);
00157 }
00158 
00159 void SiStripFolderOrganizer::getSubDetLayerFolderName(std::stringstream& ss, SiStripDetId::SubDetector subDet, uint32_t layer, uint32_t side){
00160   ss << TopFolderName << SEP << MECHANICAL_FOLDER_NAME;
00161 
00162   if(subDet == SiStripDetId::TIB){
00163     ss << SEP << "TIB" << SEP << "layer_" << layer << SEP;
00164   } else if(subDet == SiStripDetId::TID){
00165     ss << SEP << "TID" << SEP << "side_" << side << SEP << "wheel_" << layer << SEP;
00166   } else if( subDet == SiStripDetId::TOB){
00167     ss << SEP << "TOB" << SEP << "layer_" << layer << SEP;
00168   }else if(subDet == SiStripDetId::TEC){
00169     ss << SEP << "TEC" << SEP << "side_" << side << SEP << "wheel_" << layer << SEP;
00170   }else{
00171     // ---------------------------  ???  --------------------------- //
00172     edm::LogWarning("SiStripTkDQM|WrongInput")<<"no such SubDet :"<< subDet <<" no folder set!"<<std::endl;
00173   }
00174 }
00175 
00176 
00177 void SiStripFolderOrganizer::getFolderName(int32_t rawdetid, const TrackerTopology* tTopo, std::string& lokal_folder){
00178   lokal_folder = ""; 
00179   if(rawdetid == 0 ){ // just top MechanicalFolder if rawdetid==0;
00180     return;
00181   }
00182   std::stringstream rest;
00183   SiStripDetId stripdet = SiStripDetId(rawdetid);
00184   
00185   if (stripdet.subDetector() == SiStripDetId::TIB){
00186   // ---------------------------  TIB  --------------------------- //
00187     
00188     getSubDetLayerFolderName(rest,stripdet.subDetector(),tTopo->tibLayer(rawdetid));
00189 
00190     if (tTopo->tibIsZMinusSide(rawdetid))      rest << "backward_strings" << SEP;
00191     else                         rest << "forward_strings"  << SEP;
00192     if (tTopo->tibIsExternalString(rawdetid))  rest << "external_strings" << SEP;
00193     else                         rest << "internal_strings" << SEP;
00194     rest << "string_" << tTopo->tibString(rawdetid) << SEP << "module_" << rawdetid;
00195   } else if(stripdet.subDetector() == SiStripDetId::TID){
00196   // ---------------------------  TID  --------------------------- //
00197     
00198     getSubDetLayerFolderName(rest,stripdet.subDetector(),tTopo->tidWheel(rawdetid),tTopo->tidSide(rawdetid));
00199     rest<< "ring_"  << tTopo->tidRing(rawdetid) << SEP;
00200 
00201     if (tTopo->tidIsStereo(rawdetid)) rest << "stereo_modules" << SEP;
00202     else                rest << "mono_modules" << SEP;
00203     rest  << "module_" << rawdetid;
00204   } else if( stripdet.subDetector() == SiStripDetId::TOB){
00205   // ---------------------------  TOB  --------------------------- //
00206     
00207     getSubDetLayerFolderName(rest,stripdet.subDetector(),tTopo->tobLayer(rawdetid));
00208     if (tTopo->tobIsZMinusSide(rawdetid)) rest << "backward_rods" << SEP;
00209     else                    rest << "forward_rods" << SEP;
00210     rest << "rod_" << tTopo->tobRod(rawdetid) << SEP<< "module_" << rawdetid;
00211   }else if(stripdet.subDetector() == SiStripDetId::TEC){
00212   // ---------------------------  TEC  --------------------------- //
00213     
00214     getSubDetLayerFolderName(rest,stripdet.subDetector(),tTopo->tecWheel(rawdetid),tTopo->tecSide(rawdetid));
00215     if (tTopo->tecIsBackPetal(rawdetid)) rest << "backward_petals" << SEP;
00216     else                   rest << "forward_petals" << SEP;
00217 
00218     rest << "petal_" << tTopo->tecPetalNumber(rawdetid) << SEP
00219          << "ring_"<< tTopo->tecRing(rawdetid) << SEP;
00220 
00221     if (tTopo->tecIsStereo(rawdetid))    rest << "stereo_modules" << SEP;
00222     else                   rest << "mono_modules" << SEP;
00223 
00224     rest << "module_" << rawdetid;
00225   }else{
00226      // ---------------------------  ???  --------------------------- //
00227     edm::LogWarning("SiStripTkDQM|WrongInput")<<"no such subdetector type :"<<stripdet.subDetector() <<" no folder set!"<<std::endl;
00228     return;
00229   }
00230   lokal_folder += rest.str();
00231 
00232 }
00233 
00234 void SiStripFolderOrganizer::setLayerFolder(uint32_t rawdetid, const TrackerTopology* tTopo, int32_t layer, bool ring_flag){
00235   std::string lokal_folder = TopFolderName + SEP + MECHANICAL_FOLDER_NAME;
00236   if(rawdetid == 0 ){ // just top MechanicalFolder if rawdetid==0;
00237     dbe_->setCurrentFolder(lokal_folder);
00238     return;
00239   }
00240 
00241   std::ostringstream rest;
00242   SiStripDetId stripdet = SiStripDetId(rawdetid);
00243   if(stripdet.subDetector() == SiStripDetId::TIB ){
00244   // ---------------------------  TIB  --------------------------- //
00245     
00246     int tib_layer = tTopo->tibLayer(rawdetid);
00247     if (abs(layer)  != tib_layer) {
00248       edm::LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tTopo->tibLayer(rawdetid) <<std::endl;
00249       return;
00250     }
00251     rest<<SEP<<"TIB"<<SEP<<"layer_"<<tTopo->tibLayer(rawdetid);
00252   }else if(stripdet.subDetector() == SiStripDetId::TID){
00253   // ---------------------------  TID  --------------------------- //
00254     
00255     int tid_ring = tTopo->tidRing(rawdetid);
00256     if(ring_flag){
00257       if(abs(layer) != tid_ring) {
00258         edm::LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tTopo->tidRing(rawdetid) <<std::endl;
00259         return;
00260       }
00261       rest<<SEP<<"TID"<<SEP<<"side_"<<tTopo->tidSide(rawdetid)<<SEP<<"ring_"<<tTopo->tidRing(rawdetid);
00262     }else{
00263       int tid_wheel = tTopo->tidWheel(rawdetid);
00264       if (abs(layer)  != tid_wheel) {
00265         edm::LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tTopo->tidWheel(rawdetid) <<std::endl;
00266         return;
00267       }
00268       rest<<SEP<<"TID"<<SEP<<"side_"<<tTopo->tidSide(rawdetid)<<SEP<<"wheel_"<<tTopo->tidWheel(rawdetid);
00269     }
00270   }else if(stripdet.subDetector() == SiStripDetId::TOB){
00271   // ---------------------------  TOB  --------------------------- //
00272     
00273     int tob_layer = tTopo->tobLayer(rawdetid);
00274     if (abs(layer)  != tob_layer) {
00275       edm::LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tTopo->tobLayer(rawdetid) <<std::endl;
00276       return;
00277     }
00278     rest<<SEP<<"TOB"<<SEP<<"layer_"<<tTopo->tobLayer(rawdetid);
00279   }else if( stripdet.subDetector() == SiStripDetId::TEC){
00280   // ---------------------------  TEC  --------------------------- //
00281     
00282     if(ring_flag){
00283       int tec_ring = tTopo->tecRing(rawdetid); 
00284       if (abs(layer)  != tec_ring) {
00285         edm::LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tTopo->tecRing(rawdetid) <<std::endl;
00286         return;
00287       }
00288       rest<<SEP<<"TEC"<<SEP<<"side_"<<tTopo->tecSide(rawdetid)<<SEP<<"ring_"<<tTopo->tecRing(rawdetid);
00289     }else{
00290       int tec_wheel = tTopo->tecWheel(rawdetid);
00291       if (abs(layer)  != tec_wheel) {
00292         edm::LogWarning("SiStripTkDQM|Layer mismatch!!!")<< " expect "<<  abs(layer) << " but getting " << tTopo->tecWheel(rawdetid) <<std::endl;
00293         return;
00294       }
00295       rest<<SEP<<"TEC"<<SEP<<"side_"<<tTopo->tecSide(rawdetid)<<SEP<<"wheel_"<<tTopo->tecWheel(rawdetid);
00296     }
00297   }else{
00298   // ---------------------------  ???  --------------------------- //
00299     edm::LogWarning("SiStripTkDQM|WrongInput")<<"no such subdetector type :"<<stripdet.subDetector()<<" no folder set!"<<std::endl;
00300     return;
00301   }
00302 
00303   lokal_folder += rest.str();
00304   dbe_->setCurrentFolder(lokal_folder);
00305 }
00306 
00307 void SiStripFolderOrganizer::getSubDetFolder(const uint32_t& detid, const TrackerTopology* tTopo, std::string& folder_name){
00308 
00309   std::pair<std::string, std::string> subdet_and_tag = getSubDetFolderAndTag(detid, tTopo); 
00310   folder_name = subdet_and_tag.first;
00311 }
00312 //
00313 // -- Get the name of Subdetector Layer folder
00314 //
00315 void SiStripFolderOrganizer::getLayerFolderName(std::stringstream& ss, uint32_t rawdetid, const TrackerTopology* tTopo, bool ring_flag){
00316   ss << TopFolderName + SEP + MECHANICAL_FOLDER_NAME;
00317   if(rawdetid == 0 ){ // just top MechanicalFolder if rawdetid==0;
00318     return;
00319   }
00320 
00321   SiStripDetId stripdet = SiStripDetId(rawdetid);
00322   if(stripdet.subDetector() == SiStripDetId::TIB ){
00323   // ---------------------------  TIB  --------------------------- //
00324     
00325     ss<<SEP<<"TIB"<<SEP<<"layer_"<<tTopo->tibLayer(rawdetid);
00326   }else if(stripdet.subDetector() == SiStripDetId::TID){
00327   // ---------------------------  TID  --------------------------- //
00328     
00329     if(ring_flag){
00330       ss<<SEP<<"TID"<<SEP<<"side_"<<tTopo->tidSide(rawdetid)<<SEP<<"ring_"<<tTopo->tidRing(rawdetid);
00331     }else{
00332       ss<<SEP<<"TID"<<SEP<<"side_"<<tTopo->tidSide(rawdetid)<<SEP<<"wheel_"<<tTopo->tidWheel(rawdetid);
00333     }
00334   }else if(stripdet.subDetector() == SiStripDetId::TOB){
00335   // ---------------------------  TOB  --------------------------- //
00336     
00337     ss<<SEP<<"TOB"<<SEP<<"layer_"<<tTopo->tobLayer(rawdetid);
00338   }else if( stripdet.subDetector() == SiStripDetId::TEC){
00339   // ---------------------------  TEC  --------------------------- //
00340     
00341     if(ring_flag){
00342       ss<<SEP<<"TEC"<<SEP<<"side_"<<tTopo->tecSide(rawdetid)<<SEP<<"ring_"<<tTopo->tecRing(rawdetid);
00343     }else{
00344       ss<<SEP<<"TEC"<<SEP<<"side_"<<tTopo->tecSide(rawdetid)<<SEP<<"wheel_"<<tTopo->tecWheel(rawdetid);
00345     }
00346   }else{
00347   // ---------------------------  ???  --------------------------- //
00348     edm::LogWarning("SiStripTkDQM|WrongInput")<<"no such subdetector type :"<<stripdet.subDetector()<<" no folder set!"<<std::endl;
00349     return;
00350   }
00351 }
00352 //
00353 // -- Get Subdetector Folder name and the Tag
00354 //
00355 std::pair<std::string, std::string> SiStripFolderOrganizer::getSubDetFolderAndTag(const uint32_t& detid, const TrackerTopology* tTopo) {
00356   std::pair<std::string, std::string> result;
00357   result.first = TopFolderName + SEP MECHANICAL_FOLDER_NAME SEP;
00358   std::string subdet_folder;
00359   switch(StripSubdetector::SubDetector(StripSubdetector(detid).subdetId()))
00360     {
00361     case StripSubdetector::TIB:
00362       subdet_folder = "TIB";
00363       result.second = subdet_folder;
00364       break;
00365     case StripSubdetector::TOB:
00366       subdet_folder = "TOB";
00367       result.second = subdet_folder;
00368       break;
00369     case StripSubdetector::TID:
00370       if (tTopo->tidSide(detid) == 2) {
00371         subdet_folder = "TID/side_2";
00372         result.second = "TID__side__2";
00373       } else if (tTopo->tidSide(detid) == 1) {
00374         subdet_folder = "TID/side_1";
00375         result.second = "TID__side__1";
00376       }
00377       break;
00378     case StripSubdetector::TEC:
00379       if (tTopo->tecSide(detid) == 2) {
00380         subdet_folder = "TEC/side_2";
00381         result.second = "TEC__side__2";
00382       } else if (tTopo->tecSide(detid) == 1) {
00383         subdet_folder = "TEC/side_1";
00384         result.second = "TEC__side__1";
00385       }
00386       break;
00387     default:
00388       {
00389         edm::LogWarning("SiStripCommon") << "WARNING!!! this detid does not belong to tracker" << std::endl;
00390         subdet_folder = "";
00391       }
00392     }
00393   result.first += subdet_folder;
00394   return result; 
00395 }
00396 
00397 
00398 // This is the deprecated version, still needed for now.
00399 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
00400 #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
00401 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
00402 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
00403 
00404 void SiStripFolderOrganizer::getFolderName(int32_t rawdetid, std::string& lokal_folder){
00405   lokal_folder = ""; 
00406   if(rawdetid == 0 ){ // just top MechanicalFolder if rawdetid==0;
00407     return;
00408   }
00409   std::stringstream rest;
00410   SiStripDetId stripdet = SiStripDetId(rawdetid);
00411   
00412   if (stripdet.subDetector() == SiStripDetId::TIB){
00413   // ---------------------------  TIB  --------------------------- //
00414     TIBDetId tib = TIBDetId(rawdetid);
00415     getSubDetLayerFolderName(rest,stripdet.subDetector(),tib.layerNumber());
00416     if (tib.isZMinusSide())      rest << "backward_strings" << SEP;
00417     else                         rest << "forward_strings"  << SEP;
00418     if (tib.isExternalString())  rest << "external_strings" << SEP;
00419     else                         rest << "internal_strings" << SEP;
00420     rest << "string_" << tib.stringNumber() << SEP << "module_" << rawdetid;
00421   } else if(stripdet.subDetector() == SiStripDetId::TID){
00422   // ---------------------------  TID  --------------------------- //
00423     TIDDetId tid = TIDDetId(rawdetid);
00424     getSubDetLayerFolderName(rest,stripdet.subDetector(),tid.wheel(),tid.side());
00425     rest<< "ring_"  << tid.ring() << SEP;
00426 
00427     if (tid.isStereo()) rest << "stereo_modules" << SEP;
00428     else                rest << "mono_modules" << SEP;
00429     rest  << "module_" << rawdetid;
00430   } else if( stripdet.subDetector() == SiStripDetId::TOB){
00431   // ---------------------------  TOB  --------------------------- //
00432     TOBDetId tob = TOBDetId(rawdetid);
00433     getSubDetLayerFolderName(rest,stripdet.subDetector(),tob.layerNumber());
00434     if (tob.isZMinusSide()) rest << "backward_rods" << SEP;
00435     else                    rest << "forward_rods" << SEP;
00436     rest << "rod_" << tob.rodNumber() << SEP<< "module_" << rawdetid;
00437   }else if(stripdet.subDetector() == SiStripDetId::TEC){
00438   // ---------------------------  TEC  --------------------------- //
00439     TECDetId tec = TECDetId(rawdetid);
00440     getSubDetLayerFolderName(rest,stripdet.subDetector(),tec.wheel(),tec.side());
00441     if (tec.isBackPetal()) rest << "backward_petals" << SEP;
00442     else                   rest << "forward_petals" << SEP;
00443 
00444     rest << "petal_" << tec.petalNumber() << SEP
00445          << "ring_"<< tec.ringNumber() << SEP;
00446 
00447     if (tec.isStereo())    rest << "stereo_modules" << SEP;
00448     else                   rest << "mono_modules" << SEP;
00449 
00450     rest << "module_" << rawdetid;
00451   }else{
00452      // ---------------------------  ???  --------------------------- //
00453     edm::LogWarning("SiStripTkDQM|WrongInput")<<"no such subdetector type :"<<stripdet.subDetector() <<" no folder set!"<<std::endl;
00454     return;
00455   }
00456   lokal_folder += rest.str();
00457 }