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/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
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
00075 unsigned short slot,
00076 unsigned short ring,
00077 unsigned short addr,
00078 unsigned short chan
00079
00080 ) {
00081 std::stringstream lokal_folder;
00082 lokal_folder << getSiStripTopControlFolder();
00083
00084
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
00094
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
00108 unsigned short slot,
00109 unsigned short ring,
00110 unsigned short addr,
00111 unsigned short chan
00112
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 ){
00180 return;
00181 }
00182 std::stringstream rest;
00183 SiStripDetId stripdet = SiStripDetId(rawdetid);
00184
00185 if (stripdet.subDetector() == SiStripDetId::TIB){
00186
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
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
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
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 ){
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
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
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
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
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
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 ){
00318 return;
00319 }
00320
00321 SiStripDetId stripdet = SiStripDetId(rawdetid);
00322 if(stripdet.subDetector() == SiStripDetId::TIB ){
00323
00324
00325 ss<<SEP<<"TIB"<<SEP<<"layer_"<<tTopo->tibLayer(rawdetid);
00326 }else if(stripdet.subDetector() == SiStripDetId::TID){
00327
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
00336
00337 ss<<SEP<<"TOB"<<SEP<<"layer_"<<tTopo->tobLayer(rawdetid);
00338 }else if( stripdet.subDetector() == SiStripDetId::TEC){
00339
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
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
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 ){
00407 return;
00408 }
00409 std::stringstream rest;
00410 SiStripDetId stripdet = SiStripDetId(rawdetid);
00411
00412 if (stripdet.subDetector() == SiStripDetId::TIB){
00413
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
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
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
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 }