File indexing completed on 2024-04-06 12:03:06
0001 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0002 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0003
0004 #include "FWCore/ServiceRegistry/interface/Service.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006 #include "FWCore/Framework/interface/Event.h"
0007
0008 #include "FWCore/Framework/interface/EventSetup.h"
0009
0010 #include "FWCore/Framework/interface/MakerMacros.h"
0011 #include "FWCore/PluginManager/interface/ModuleDef.h"
0012
0013 #include "CondFormats/Common/interface/FileBlob.h"
0014 #include "CondFormats/GeometryObjects/interface/PGeometricDet.h"
0015 #include "CondFormats/GeometryObjects/interface/PCaloGeometry.h"
0016 #include "CondFormats/GeometryObjects/interface/RecoIdealGeometry.h"
0017 #include "CondFormats/GeometryObjects/interface/CSCRecoDigiParameters.h"
0018 #include "DataFormats/Math/interface/Rounding.h"
0019
0020 #include "Geometry/Records/interface/GeometryFileRcd.h"
0021 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0022 #include "Geometry/Records/interface/DTRecoGeometryRcd.h"
0023 #include "Geometry/Records/interface/RPCRecoGeometryRcd.h"
0024 #include "Geometry/Records/interface/CSCRecoGeometryRcd.h"
0025 #include "Geometry/Records/interface/CSCRecoDigiParametersRcd.h"
0026 #include "Geometry/Records/interface/PEcalBarrelRcd.h"
0027 #include "Geometry/Records/interface/PEcalEndcapRcd.h"
0028 #include "Geometry/Records/interface/PEcalPreshowerRcd.h"
0029 #include "Geometry/Records/interface/PHcalRcd.h"
0030 #include "Geometry/Records/interface/PHGCalRcd.h"
0031 #include "Geometry/Records/interface/PCaloTowerRcd.h"
0032 #include "Geometry/Records/interface/PCastorRcd.h"
0033 #include "Geometry/Records/interface/PZdcRcd.h"
0034
0035 #include <iostream>
0036 #include <string>
0037 #include <vector>
0038
0039 namespace {
0040
0041 class FmtOstream {
0042 public:
0043 FmtOstream() = default;
0044
0045 friend FmtOstream &operator<<(FmtOstream &output, const double val) {
0046 std::cout << " " << cms_rounding::roundIfNear0(val);
0047 return (output);
0048 }
0049
0050 friend FmtOstream &operator<<(FmtOstream &output, const int val) {
0051 std::cout << " " << val;
0052 return (output);
0053 }
0054
0055 friend FmtOstream &operator<<(FmtOstream &output, const unsigned int val) {
0056 std::cout << " " << val;
0057 return (output);
0058 }
0059
0060 friend FmtOstream &operator<<(FmtOstream &output, const bool val) {
0061 std::cout << " " << (val ? "true" : "false");
0062 return (output);
0063 }
0064
0065 friend FmtOstream &operator<<(FmtOstream &output, const std::string &strVal) {
0066 std::cout << " " << strVal;
0067 return (output);
0068 }
0069
0070 friend FmtOstream &operator<<(FmtOstream &output, const char *cstr) {
0071 std::cout << " " << cstr;
0072 return (output);
0073 }
0074 };
0075
0076 class GeometryTester : public edm::one::EDAnalyzer<> {
0077 public:
0078 GeometryTester(edm::ParameterSet const &);
0079 void beginJob() override {}
0080 void analyze(edm::Event const &, edm::EventSetup const &) override;
0081 void endJob() override {}
0082
0083 private:
0084 bool m_xmltest, m_tktest, m_ecaltest;
0085 bool m_hcaltest, m_hgcaltest, m_calotowertest;
0086 bool m_castortest, m_zdctest, m_csctest;
0087 bool m_dttest, m_rpctest, m_round;
0088 std::string m_geomLabel;
0089 edm::ESGetToken<FileBlob, GeometryFileRcd> m_xmlGeoToken;
0090 edm::ESGetToken<PGeometricDet, IdealGeometryRecord> m_tkGeoToken;
0091 edm::ESGetToken<PCaloGeometry, PEcalBarrelRcd> m_ebGeoToken;
0092 edm::ESGetToken<PCaloGeometry, PEcalEndcapRcd> m_eeGeoToken;
0093 edm::ESGetToken<PCaloGeometry, PEcalPreshowerRcd> m_epGeoToken;
0094 edm::ESGetToken<PCaloGeometry, PHcalRcd> m_hGeoToken;
0095 edm::ESGetToken<PCaloGeometry, PHGCalRcd> m_hgcGeoToken;
0096 edm::ESGetToken<PCaloGeometry, PCaloTowerRcd> m_ctGeoToken;
0097 edm::ESGetToken<PCaloGeometry, PCastorRcd> m_castGeoToken;
0098 edm::ESGetToken<PCaloGeometry, PZdcRcd> m_zdcGeoToken;
0099 edm::ESGetToken<CSCRecoDigiParameters, CSCRecoDigiParametersRcd> m_cscDigiGeoToken;
0100 edm::ESGetToken<RecoIdealGeometry, CSCRecoGeometryRcd> m_cscGeoToken;
0101 edm::ESGetToken<RecoIdealGeometry, DTRecoGeometryRcd> m_dtGeoToken;
0102 edm::ESGetToken<RecoIdealGeometry, RPCRecoGeometryRcd> m_rpcGeoToken;
0103 };
0104 }
0105
0106 GeometryTester::GeometryTester(const edm::ParameterSet &iConfig)
0107 : m_xmltest(iConfig.getUntrackedParameter<bool>("XMLTest", true)),
0108 m_tktest(iConfig.getUntrackedParameter<bool>("TrackerTest", true)),
0109 m_ecaltest(iConfig.getUntrackedParameter<bool>("EcalTest", true)),
0110 m_hcaltest(iConfig.getUntrackedParameter<bool>("HcalTest", true)),
0111 m_hgcaltest(iConfig.getUntrackedParameter<bool>("HGCalTest", true)),
0112 m_calotowertest(iConfig.getUntrackedParameter<bool>("CaloTowerTest", true)),
0113 m_castortest(iConfig.getUntrackedParameter<bool>("CastorTest", true)),
0114 m_zdctest(iConfig.getUntrackedParameter<bool>("ZDCTest", true)),
0115 m_csctest(iConfig.getUntrackedParameter<bool>("CSCTest", true)),
0116 m_dttest(iConfig.getUntrackedParameter<bool>("DTTest", true)),
0117 m_rpctest(iConfig.getUntrackedParameter<bool>("RPCTest", true)),
0118 m_round(iConfig.getUntrackedParameter<bool>("roundValues", false)),
0119 m_geomLabel(iConfig.getUntrackedParameter<std::string>("geomLabel", "Extended")),
0120 m_xmlGeoToken(esConsumes(edm::ESInputTag("", m_geomLabel))),
0121 m_tkGeoToken(esConsumes()),
0122 m_ebGeoToken(esConsumes()),
0123 m_eeGeoToken(esConsumes()),
0124 m_epGeoToken(esConsumes()),
0125 m_hGeoToken(esConsumes()),
0126 m_hgcGeoToken(esConsumes()),
0127 m_ctGeoToken(esConsumes()),
0128 m_castGeoToken(esConsumes()),
0129 m_zdcGeoToken(esConsumes()),
0130 m_cscDigiGeoToken(esConsumes()),
0131 m_cscGeoToken(esConsumes()),
0132 m_dtGeoToken(esConsumes()),
0133 m_rpcGeoToken(esConsumes()) {}
0134
0135 void GeometryTester::analyze(const edm::Event &, const edm::EventSetup &iSetup) {
0136 if (m_xmltest) {
0137 auto const &xmlGeo = iSetup.getData(m_xmlGeoToken);
0138
0139 std::cout << "XML FILE\n";
0140 std::unique_ptr<std::vector<unsigned char> > tb = xmlGeo.getUncompressedBlob();
0141 std::cout << "SIZE FILE = " << tb->size() << "\n";
0142 for (auto it : *tb) {
0143 std::cout << it;
0144 }
0145 std::cout << "\n";
0146 }
0147
0148 FmtOstream outStream;
0149 if (m_tktest) {
0150 auto const &tkGeo = iSetup.getData(m_tkGeoToken);
0151 std::cout << "TRACKER\n";
0152
0153 for (auto it : tkGeo.pgeomdets_) {
0154 std::cout << "trk ";
0155 outStream << it._params0 << it._params1 << it._params2 << it._params3 << it._params4 << it._params5 << it._params6
0156 << it._params7 << it._params8 << it._params9 << it._params10 << it._x << it._y << it._z << it._phi
0157 << it._rho << it._a11 << it._a12 << it._a13 << it._a21 << it._a22 << it._a23 << it._a31 << it._a32
0158 << it._a33 << it._shape << it._name << it._ns;
0159 outStream << it._radLength << it._xi << it._pixROCRows << it._pixROCCols << it._pixROCx << it._pixROCy
0160 << it._stereo << it._siliconAPVNum << it._geographicalID << it._nt0 << it._nt1 << it._nt2 << it._nt3
0161 << it._nt4 << it._nt5 << it._nt6 << it._nt7 << it._nt8 << it._nt9 << it._nt10 << "\n";
0162 }
0163 }
0164
0165 if (m_ecaltest) {
0166 auto const &ebGeo = iSetup.getData(m_ebGeoToken);
0167 std::cout << "ECAL BARREL\n";
0168 auto tseb = ebGeo.getTranslation();
0169 auto dimeb = ebGeo.getDimension();
0170 auto indeb = ebGeo.getIndexes();
0171 std::cout << "Translations " << tseb.size() << "\n";
0172 std::cout << "Dimensions " << dimeb.size() << "\n";
0173 std::cout << "Indices " << indeb.size() << "\n";
0174 std::cout << "ecalb ";
0175 for (auto it : tseb)
0176 outStream << it;
0177 std::cout << "\n";
0178 std::cout << "ecalb ";
0179 for (auto it : dimeb)
0180 outStream << it;
0181 std::cout << "\n";
0182 std::cout << "ecalb ";
0183 for (auto it : indeb)
0184 outStream << it;
0185 std::cout << "\n";
0186
0187 auto const &eeGeo = iSetup.getData(m_eeGeoToken);
0188 std::cout << "ECAL ENDCAP\n";
0189 auto tsee = eeGeo.getTranslation();
0190 auto dimee = eeGeo.getDimension();
0191 auto indee = eeGeo.getIndexes();
0192 std::cout << "Translations " << tsee.size() << "\n";
0193 std::cout << "Dimensions " << dimee.size() << "\n";
0194 std::cout << "Indices " << indee.size() << "\n";
0195 std::cout << "ecale " << std::endl;
0196 int cnt = 1;
0197 for (auto it : tsee) {
0198 if (cnt % 6 == 1) {
0199 outStream << "ecale xyz ";
0200 if (m_round)
0201 std::cout << std::defaultfloat << std::setprecision(6);
0202 } else if (cnt % 3 == 1) {
0203 outStream << "ecale phi/theta/psi ";
0204 if (m_round) {
0205 std::cout << std::setprecision(4);
0206
0207 if (std::abs(it) < 1.e-4) {
0208 it = 0.0;
0209
0210 }
0211 }
0212 }
0213 outStream << it;
0214 if ((cnt++) % 3 == 0)
0215 std::cout << "\n";
0216 }
0217 std::cout << "\n";
0218 if (m_round)
0219 std::cout << std::setprecision(6);
0220 std::cout << "ecale ";
0221 for (auto it : dimee)
0222 outStream << it;
0223 std::cout << "\n";
0224 std::cout << "ecale ";
0225 for (auto it : indee)
0226 outStream << it;
0227 std::cout << "\n";
0228
0229 auto const &epGeo = iSetup.getData(m_epGeoToken);
0230 std::cout << "ECAL PRESHOWER\n";
0231 auto tsep = epGeo.getTranslation();
0232 auto dimep = epGeo.getDimension();
0233 auto indep = epGeo.getIndexes();
0234 std::cout << "Translations " << tsep.size() << "\n";
0235 std::cout << "Dimensions " << dimep.size() << "\n";
0236 std::cout << "Indices " << indep.size() << "\n";
0237 std::cout << "ecalpre ";
0238 for (auto it : tsep)
0239 outStream << it;
0240 std::cout << "\n";
0241 std::cout << "ecalpre ";
0242 for (auto it : dimep)
0243 outStream << it;
0244 std::cout << "\n";
0245 std::cout << "ecalpre ";
0246 for (auto it : indep)
0247 outStream << it;
0248 std::cout << "\n";
0249 }
0250
0251 if (m_hcaltest) {
0252 auto const &hGeo = iSetup.getData(m_hGeoToken);
0253 std::cout << "HCAL\n";
0254 auto tsh = hGeo.getTranslation();
0255 auto dimh = hGeo.getDimension();
0256 auto indh = hGeo.getIndexes();
0257 auto dindh = hGeo.getDenseIndices();
0258 std::cout << "Translations " << tsh.size() << "\n";
0259 std::cout << "Dimensions " << dimh.size() << "\n";
0260 std::cout << "Indices " << indh.size() << "\n";
0261 std::cout << "Dense Indices " << dindh.size() << "\n";
0262 std::cout << "hcal";
0263 for (auto it : tsh)
0264 outStream << it;
0265 std::cout << "\n";
0266 std::cout << "hcal";
0267 for (auto it : dimh)
0268 outStream << it;
0269 std::cout << "\n";
0270 std::cout << "hcal";
0271 for (auto it : indh)
0272 outStream << it;
0273 std::cout << "hcal";
0274 for (auto it : dindh)
0275 outStream << it;
0276 std::cout << "\n";
0277 }
0278
0279 if (m_hgcaltest) {
0280 auto const &hgcGeo = iSetup.getData(m_hgcGeoToken);
0281 std::cout << "HGCAL\n";
0282 auto tsh = hgcGeo.getTranslation();
0283 auto dimh = hgcGeo.getDimension();
0284 auto indh = hgcGeo.getIndexes();
0285 auto dindh = hgcGeo.getDenseIndices();
0286 std::cout << "Translations " << tsh.size() << "\n";
0287 std::cout << "Dimensions " << dimh.size() << "\n";
0288 std::cout << "Indices " << indh.size() << "\n";
0289 std::cout << "Dense Indices " << dindh.size() << "\n";
0290 std::cout << "hgcal ";
0291 for (auto it : tsh)
0292 outStream << it;
0293 std::cout << "\n";
0294 std::cout << "hgcal ";
0295 for (auto it : dimh)
0296 outStream << it;
0297 std::cout << "\n";
0298 std::cout << "hgcal ";
0299 for (auto it : indh)
0300 outStream << it;
0301 std::cout << "\n";
0302 std::cout << "hgcal ";
0303 for (auto it : dindh)
0304 outStream << it;
0305 std::cout << "\n";
0306 }
0307
0308 if (m_calotowertest) {
0309 auto const &ctGeo = iSetup.getData(m_ctGeoToken);
0310 std::cout << "CALO TOWER:\n";
0311 auto tsct = ctGeo.getTranslation();
0312 auto dimct = ctGeo.getDimension();
0313 auto indct = ctGeo.getIndexes();
0314 std::cout << "Translations " << tsct.size() << "\n";
0315 std::cout << "Dimensions " << dimct.size() << "\n";
0316 std::cout << "Indices " << indct.size() << "\n";
0317 std::cout << "calotow ";
0318 for (auto it : tsct)
0319 outStream << it;
0320 std::cout << "\n";
0321 std::cout << "calotow ";
0322 for (auto it : dimct)
0323 outStream << it;
0324 std::cout << "\n";
0325 std::cout << "calotow ";
0326 for (auto it : indct)
0327 outStream << it;
0328 std::cout << "\n";
0329 }
0330
0331 if (m_castortest) {
0332 auto const &castGeo = iSetup.getData(m_castGeoToken);
0333 std::cout << "CASTOR\n";
0334 std::cout << "castor ";
0335 for (auto it : castGeo.getTranslation())
0336 outStream << it;
0337 std::cout << "\n";
0338 std::cout << "castor ";
0339 for (auto it : castGeo.getDimension())
0340 outStream << it;
0341 std::cout << "\n";
0342 std::cout << "castor ";
0343 for (auto it : castGeo.getIndexes())
0344 outStream << it;
0345 std::cout << "\n";
0346 }
0347
0348 if (m_zdctest) {
0349 auto const &zdcGeo = iSetup.getData(m_zdcGeoToken);
0350 std::cout << "ZDC\n";
0351 std::cout << "zdc ";
0352 for (auto it : zdcGeo.getTranslation())
0353 outStream << it;
0354 std::cout << "\n";
0355 std::cout << "zdc ";
0356 for (auto it : zdcGeo.getDimension())
0357 outStream << it;
0358 std::cout << "\n";
0359 std::cout << "zdc ";
0360 for (auto it : zdcGeo.getIndexes())
0361 outStream << it;
0362 std::cout << "\n";
0363 }
0364
0365 if (m_csctest) {
0366 auto const &cscGeo = iSetup.getData(m_cscGeoToken);
0367
0368 auto const &cscDigiGeo = iSetup.getData(m_cscDigiGeoToken);
0369 std::cout << "CSC\n";
0370
0371 std::vector<int> obj1(cscDigiGeo.pUserParOffset);
0372 std::cout << "csc ";
0373 for (auto it : obj1)
0374 outStream << it;
0375 std::cout << "\n";
0376
0377 std::vector<int> obj2(cscDigiGeo.pUserParSize);
0378 std::cout << "csc ";
0379 for (auto it : obj2)
0380 outStream << it;
0381 std::cout << "\n";
0382
0383 std::vector<int> obj3(cscDigiGeo.pChamberType);
0384 std::cout << "csc ";
0385 for (auto it : obj3)
0386 outStream << it;
0387 std::cout << "\n";
0388
0389 std::vector<float> obj4(cscDigiGeo.pfupars);
0390 std::cout << "csc ";
0391 for (auto it : obj4)
0392 outStream << it;
0393 std::cout << "\n";
0394
0395 std::vector<DetId> myIdcsc(cscGeo.detIds());
0396 std::cout << "csc ";
0397 for (auto it : myIdcsc)
0398 outStream << it;
0399 std::cout << "\n";
0400
0401 uint32_t cscsize = myIdcsc.size();
0402 for (uint32_t i = 0; i < cscsize; i++) {
0403 std::vector<double> trcsc(cscGeo.tranStart(i), cscGeo.tranEnd(i));
0404 std::cout << "csc ";
0405 for (auto it : trcsc)
0406 outStream << it;
0407 std::cout << "\n";
0408
0409 std::vector<double> rotcsc(cscGeo.rotStart(i), cscGeo.rotEnd(i));
0410 std::cout << "csc ";
0411 for (auto it : rotcsc)
0412 outStream << it;
0413 std::cout << "\n";
0414
0415 std::vector<double> shapecsc(cscGeo.shapeStart(i), cscGeo.shapeEnd(i));
0416 std::cout << "csc ";
0417 for (auto it : shapecsc)
0418 outStream << it;
0419 std::cout << "\n";
0420 }
0421 }
0422
0423 if (m_dttest) {
0424 auto const &dtGeo = iSetup.getData(m_dtGeoToken);
0425 std::cout << "DT\n";
0426 std::vector<DetId> myIddt(dtGeo.detIds());
0427 std::cout << "dt ";
0428 for (auto it : myIddt)
0429 std::cout << " " << it;
0430 std::cout << "\n";
0431
0432 uint32_t dtsize = myIddt.size();
0433 std::cout << "dt ";
0434 for (uint32_t i = 0; i < dtsize; i++) {
0435 std::vector<double> trdt(dtGeo.tranStart(i), dtGeo.tranEnd(i));
0436 for (auto it : trdt)
0437 outStream << it;
0438 std::cout << "\n";
0439
0440 std::vector<double> rotdt(dtGeo.rotStart(i), dtGeo.rotEnd(i));
0441 std::cout << "dt ";
0442 for (auto it : rotdt)
0443 outStream << it;
0444 std::cout << "\n";
0445
0446 std::vector<double> shapedt(dtGeo.shapeStart(i), dtGeo.shapeEnd(i));
0447 std::cout << "dt ";
0448 for (auto it : shapedt)
0449 outStream << it;
0450 std::cout << "\n";
0451 }
0452 }
0453
0454 if (m_rpctest) {
0455 auto const &rpcGeo = iSetup.getData(m_rpcGeoToken);
0456 std::cout << "RPC\n";
0457
0458 std::vector<DetId> myIdrpc(rpcGeo.detIds());
0459 std::cout << "rpc ";
0460 for (auto it : myIdrpc)
0461 std::cout << " " << it;
0462 std::cout << "\n";
0463 uint32_t rpcsize = myIdrpc.size();
0464 for (uint32_t i = 0; i < rpcsize; i++) {
0465 std::vector<double> trrpc(rpcGeo.tranStart(i), rpcGeo.tranEnd(i));
0466 std::cout << "rpc ";
0467 for (auto it : trrpc)
0468 outStream << it;
0469 std::cout << "\n";
0470
0471 std::vector<double> rotrpc(rpcGeo.rotStart(i), rpcGeo.rotEnd(i));
0472 std::cout << "rpc ";
0473 for (auto it : rotrpc)
0474 outStream << it;
0475 std::cout << "\n";
0476
0477 std::vector<double> shaperpc(rpcGeo.shapeStart(i), rpcGeo.shapeEnd(i));
0478 std::cout << "rpc ";
0479 for (auto it : shaperpc)
0480 outStream << it;
0481 std::cout << "\n";
0482
0483 std::vector<std::string> strrpc(rpcGeo.strStart(i), rpcGeo.strEnd(i));
0484 std::cout << "rpc ";
0485 for (auto it : strrpc)
0486 outStream << it;
0487 std::cout << "\n";
0488 }
0489 }
0490 }
0491
0492 DEFINE_FWK_MODULE(GeometryTester);