00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
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
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
00077 unsigned short slot,
00078 unsigned short ring,
00079 unsigned short addr,
00080 unsigned short chan
00081
00082 ) {
00083 std::stringstream lokal_folder;
00084 lokal_folder << getSiStripTopControlFolder();
00085
00086
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
00096
00097
00098 }
00099 }
00100 }
00101 }
00102
00103 return lokal_folder.str();
00104 }
00105
00106
00107 void SiStripFolderOrganizer::setSiStripControlFolder(
00108
00109 unsigned short slot,
00110 unsigned short ring,
00111 unsigned short addr,
00112 unsigned short chan
00113
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 ){
00165 return;
00166 }
00167 std::ostringstream rest;
00168 SiStripDetId stripdet = SiStripDetId(rawdetid);
00169
00170 if (stripdet.subDetector() == SiStripDetId::TIB){
00171
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
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
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
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 ){
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
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
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
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
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