Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-03-23 15:57:50

0001 #ifndef Geometry_MTDCommonData_MTDTopologyMode_H
0002 #define Geometry_MTDCommonData_MTDTopologyMode_H
0003 
0004 #include "FWCore/Utilities/interface/Exception.h"
0005 #include <map>
0006 #include <string>
0007 #include <algorithm>
0008 
0009 #include "DataFormats/ForwardDetId/interface/BTLDetId.h"
0010 
0011 namespace MTDTopologyMode {
0012 
0013   enum class Mode {
0014     undefined = 0,
0015     tile = 1,
0016     bar = 2,
0017     barzflat = 3,
0018     barphiflat = 4,
0019     btlv1etlv4 = 5,
0020     btlv1etlv5 = 6,
0021     btlv2etlv5 = 7,
0022     btlv3etlv8 = 8,
0023     btlv4etlv8 = 9,
0024     btlv4etlv9 = 10,
0025     btlv4etlv10 = 11
0026   };
0027 
0028   enum class EtlLayout { v5 = 3, v8 = 4, v9 = 5, v10 = 6 };
0029 
0030   Mode MTDStringToEnumParser(const std::string&);
0031 
0032   /** Returns BTLDetId::CrysLayout as a function of topology mode (to accomodate TDR/post TDR ETL scenarios). **/
0033 
0034   inline BTLDetId::CrysLayout crysLayoutFromTopoMode(const int& topoMode) {
0035     switch (topoMode) {
0036       case static_cast<int>(Mode::btlv4etlv10):
0037         return BTLDetId::CrysLayout::v4;
0038         break;
0039       case static_cast<int>(Mode::btlv4etlv9):
0040         return BTLDetId::CrysLayout::v4;
0041         break;
0042       case static_cast<int>(Mode::btlv4etlv8):
0043         return BTLDetId::CrysLayout::v4;
0044         break;
0045       case static_cast<int>(Mode::btlv3etlv8):
0046         return BTLDetId::CrysLayout::v3;
0047         break;
0048       case static_cast<int>(Mode::btlv2etlv5):
0049         return BTLDetId::CrysLayout::v2;
0050         break;
0051       default:
0052         throw cms::Exception("UnknownMTDtopoMode") << "Unknown MTD topology mode :( " << topoMode;
0053         break;
0054     }
0055   }
0056 
0057   /** Returns EtlLayout as a function of topology mode **/
0058 
0059   inline EtlLayout etlLayoutFromTopoMode(const int& topoMode) {
0060     switch (topoMode) {
0061       case static_cast<int>(Mode::btlv4etlv10):
0062         return EtlLayout::v10;
0063         break;
0064       case static_cast<int>(Mode::btlv4etlv9):
0065         return EtlLayout::v9;
0066         break;
0067       case static_cast<int>(Mode::btlv4etlv8):
0068         return EtlLayout::v8;
0069         break;
0070       case static_cast<int>(Mode::btlv3etlv8):
0071         return EtlLayout::v8;
0072         break;
0073       case static_cast<int>(Mode::btlv2etlv5):
0074         return EtlLayout::v5;
0075         break;
0076       default:
0077         throw cms::Exception("UnknownMTDtopoMode") << "Unknown MTD topology mode :( " << topoMode;
0078         break;
0079     }
0080   }
0081 
0082 }  // namespace MTDTopologyMode
0083 
0084 #endif  // Geometry_MTDCommonData_MTDTopologyMode_H