Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-04 02:16:34

0001 #include <array>
0002 #include <iostream>
0003 #include <sstream>
0004 #include <map>
0005 
0006 #include "FWCore/Framework/interface/Event.h"
0007 #include "FWCore/Framework/interface/EventSetup.h"
0008 #include "FWCore/Framework/interface/MakerMacros.h"
0009 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0012 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0013 
0014 #include "Geometry/HGCalCommonData/interface/HGCalParameters.h"
0015 #include "Geometry/HGCalCommonData/interface/HGCalTileIndex.h"
0016 #include "Geometry/HGCalCommonData/interface/HGCalWaferIndex.h"
0017 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0018 
0019 class HGCalParameterTester : public edm::one::EDAnalyzer<> {
0020 public:
0021   explicit HGCalParameterTester(const edm::ParameterSet&);
0022   ~HGCalParameterTester() override = default;
0023   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0024 
0025   void beginJob() override {}
0026   void analyze(edm::Event const& iEvent, edm::EventSetup const&) override;
0027   void endJob() override {}
0028 
0029 private:
0030   template <typename T>
0031   void myPrint(std::string const& s, std::vector<T> const& obj, int n) const;
0032   template <typename T>
0033   void myPrint(std::string const& s, std::vector<std::pair<T, T> > const& obj, int n) const;
0034   void myPrint(std::string const& s, std::vector<double> const& obj1, std::vector<double> const& obj2, int n) const;
0035   void myPrint(std::string const& s, HGCalParameters::wafer_map const& obj, int n) const;
0036   void printTrform(HGCalParameters const*) const;
0037   void printWaferType(HGCalParameters const* phgp) const;
0038 
0039   const std::string name_;
0040   edm::ESGetToken<HGCalParameters, IdealGeometryRecord> token_;
0041   const int mode_;
0042 };
0043 
0044 HGCalParameterTester::HGCalParameterTester(const edm::ParameterSet& ic)
0045     : name_(ic.getParameter<std::string>("Name")),
0046       token_(esConsumes<HGCalParameters, IdealGeometryRecord>(edm::ESInputTag{"", name_})),
0047       mode_(ic.getParameter<int>("Mode")) {}
0048 
0049 void HGCalParameterTester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0050   edm::ParameterSetDescription desc;
0051   desc.add<std::string>("Name", "HGCalEESensitive");
0052   desc.add<int>("Mode", 1);
0053   descriptions.add("hgcParameterTesterEE", desc);
0054 }
0055 
0056 void HGCalParameterTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0057   edm::LogVerbatim("HGCalGeomr") << "HGCalParameter::Here I am";
0058   auto start = std::chrono::high_resolution_clock::now();
0059 
0060   const auto& hgp = iSetup.getData(token_);
0061   const auto* phgp = &hgp;
0062 
0063   edm::LogVerbatim("HGCalGeom") << phgp->name_;
0064   if (mode_ == 0) {
0065     // Wafers of 6-inch format
0066     edm::LogVerbatim("HGCalGeom") << "DetectorType: " << phgp->detectorType_;
0067     edm::LogVerbatim("HGCalGeom") << "WaferR_: " << phgp->waferR_;
0068     edm::LogVerbatim("HGCalGeom") << "nCells_: " << phgp->nCells_;
0069     edm::LogVerbatim("HGCalGeom") << "nSectors_: " << phgp->nSectors_;
0070     edm::LogVerbatim("HGCalGeom") << "FirstLayer: " << phgp->firstLayer_;
0071     edm::LogVerbatim("HGCalGeom") << "FirstMixedLayer: " << phgp->firstMixedLayer_;
0072     edm::LogVerbatim("HGCalGeom") << "mode_: " << phgp->mode_;
0073 
0074     myPrint("CellSize", phgp->cellSize_, 10);
0075     myPrint("slopeMin", phgp->slopeMin_, 10);
0076     myPrint("slopeTop", phgp->slopeTop_, 10);
0077     myPrint("zFrontTop", phgp->zFrontTop_, 10);
0078     myPrint("rMaxFront", phgp->rMaxFront_, 10);
0079     myPrint("zRanges", phgp->zRanges_, 10);
0080     myPrint("moduleBlS", phgp->moduleBlS_, 10);
0081     myPrint("moduleTlS", phgp->moduleTlS_, 10);
0082     myPrint("moduleHS", phgp->moduleHS_, 10);
0083     myPrint("moduleDzS", phgp->moduleDzS_, 10);
0084     myPrint("moduleAlphaS", phgp->moduleAlphaS_, 10);
0085     myPrint("moduleCellS", phgp->moduleCellS_, 10);
0086     myPrint("moduleBlR", phgp->moduleBlR_, 10);
0087     myPrint("moduleTlR", phgp->moduleTlR_, 10);
0088     myPrint("moduleHR", phgp->moduleHR_, 10);
0089     myPrint("moduleDzR", phgp->moduleDzR_, 10);
0090     myPrint("moduleAlphaR", phgp->moduleAlphaR_, 10);
0091     myPrint("moduleCellR", phgp->moduleCellR_, 10);
0092     myPrint("trformTranX", phgp->trformTranX_, 10);
0093     myPrint("trformTranY", phgp->trformTranY_, 10);
0094     myPrint("trformTranZ", phgp->trformTranZ_, 10);
0095     myPrint("trformRotXX", phgp->trformRotXX_, 10);
0096     myPrint("trformRotYX", phgp->trformRotYX_, 10);
0097     myPrint("trformRotZX", phgp->trformRotZX_, 10);
0098     myPrint("trformRotXY", phgp->trformRotXY_, 10);
0099     myPrint("trformRotYY", phgp->trformRotYY_, 10);
0100     myPrint("trformRotZY", phgp->trformRotZY_, 10);
0101     myPrint("trformRotXZ", phgp->trformRotXZ_, 10);
0102     myPrint("trformRotYZ", phgp->trformRotYZ_, 10);
0103     myPrint("trformRotZZ", phgp->trformRotZZ_, 10);
0104     myPrint("zLayerHex", phgp->zLayerHex_, 10);
0105     myPrint("rMinLayHex", phgp->rMinLayHex_, 10);
0106     myPrint("rMaxLayHex", phgp->rMaxLayHex_, 10);
0107     myPrint("waferPos", phgp->waferPosX_, phgp->waferPosY_, 4);
0108     myPrint("cellFine", phgp->cellFineX_, phgp->cellFineY_, 4);
0109     myPrint("cellFineHalf", phgp->cellFineHalf_, 10);
0110     myPrint("cellCoarse", phgp->cellCoarseX_, phgp->cellCoarseY_, 4);
0111     myPrint("cellCoarseHalf", phgp->cellCoarseHalf_, 10);
0112     myPrint("boundR", phgp->boundR_, 10);
0113     myPrint("moduleLayS", phgp->moduleLayS_, 10);
0114     myPrint("moduleLayR", phgp->moduleLayR_, 10);
0115     myPrint("layer", phgp->layer_, 18);
0116     myPrint("layerIndex", phgp->layerIndex_, 18);
0117     myPrint("layerGroup", phgp->layerGroup_, 18);
0118     myPrint("cellFactor", phgp->cellFactor_, 10);
0119     myPrint("depth", phgp->depth_, 18);
0120     myPrint("depthIndex", phgp->depthIndex_, 18);
0121     myPrint("depthLayerF", phgp->depthLayerF_, 18);
0122     myPrint("waferCopy", phgp->waferCopy_, 10);
0123     myPrint("waferTypeL", phgp->waferTypeL_, 25);
0124     myPrint("waferTypeT", phgp->waferTypeT_, 25);
0125     myPrint("layerGroupM", phgp->layerGroupM_, 18);
0126     myPrint("layerGroupO", phgp->layerGroupO_, 18);
0127     printTrform(phgp);
0128     myPrint("levelTop", phgp->levelT_, 10);
0129     printWaferType(phgp);
0130 
0131   } else if (mode_ == 1) {
0132     // Wafers of 8-inch format
0133     edm::LogVerbatim("HGCalGeom") << "DetectorType: " << phgp->detectorType_;
0134     edm::LogVerbatim("HGCalGeom") << "UseSimWt: " << phgp->useSimWt_;
0135     edm::LogVerbatim("HGCalGeom") << "Wafer Parameters: " << phgp->waferSize_ << ":" << phgp->waferR_ << ":"
0136                                   << phgp->waferThick_ << ":" << phgp->sensorSeparation_ << ":"
0137                                   << phgp->sensorSizeOffset_ << ":" << phgp->guardRingOffset_ << ":" << phgp->mouseBite_
0138                                   << ":" << phgp->useOffset_ << ":" << phgp->waferSizeNominal_ << ":"
0139                                   << phgp->waferNoGap_;
0140     myPrint("waferThickness", phgp->waferThickness_, 10);
0141     edm::LogVerbatim("HGCalGeom") << "nCells_: " << phgp->nCellsFine_ << ":" << phgp->nCellsCoarse_;
0142     edm::LogVerbatim("HGCalGeom") << "nSectors_: " << phgp->nSectors_;
0143     edm::LogVerbatim("HGCalGeom") << "FirstLayer: " << phgp->firstLayer_;
0144     edm::LogVerbatim("HGCalGeom") << "FirstMixedLayer: " << phgp->firstMixedLayer_;
0145     edm::LogVerbatim("HGCalGeom") << "LayerOffset: " << phgp->layerOffset_;
0146     edm::LogVerbatim("HGCalGeom") << "mode_: " << phgp->mode_;
0147     edm::LogVerbatim("HGCalGeom") << "cassettes_: " << phgp->cassettes_;
0148 
0149     edm::LogVerbatim("HGCalGeom") << "waferUVMax: " << phgp->waferUVMax_;
0150     myPrint("waferUVMaxLayer", phgp->waferUVMaxLayer_, 20);
0151     myPrint("CellThickness", phgp->cellThickness_, 10);
0152     myPrint("radius100to200", phgp->radius100to200_, 10);
0153     myPrint("radius200to300", phgp->radius200to300_, 10);
0154     edm::LogVerbatim("HGCalGeom") << "choiceType " << phgp->choiceType_ << "   nCornerCut " << phgp->nCornerCut_
0155                                   << "  fracAreaMin " << phgp->fracAreaMin_ << "  zMinForRad " << phgp->zMinForRad_;
0156 
0157     myPrint("CellSize", phgp->cellSize_, 10);
0158     myPrint("radiusMixBoundary", phgp->radiusMixBoundary_, 10);
0159     myPrint("LayerCenter", phgp->layerCenter_, 20);
0160     myPrint("LayerType", phgp->layerType_, 20);
0161     edm::LogVerbatim("HGCalGeom") << "Layer Rotation " << phgp->layerRotation_ << "   with " << phgp->layerRotV_.size()
0162                                   << "  parameters";
0163     for (unsigned int k = 0; k < phgp->layerRotV_.size(); ++k)
0164       edm::LogVerbatim("HGCalGeom") << "Element[" << k << "] " << phgp->layerRotV_[k].first << ":"
0165                                     << phgp->layerRotV_[k].second;
0166     edm::LogVerbatim("HGCalGeom") << "CalibCellRadiusHD " << phgp->calibCellRHD_;
0167     myPrint("CalibCellFullHD", phgp->calibCellFullHD_, 12);
0168     myPrint("CalibCellPartHD", phgp->calibCellPartHD_, 12);
0169     edm::LogVerbatim("HGCalGeom") << "CalibCellRadiusHD " << phgp->calibCellRLD_;
0170     myPrint("CalibCellFullLD", phgp->calibCellFullLD_, 12);
0171     myPrint("CalibCellPartLD", phgp->calibCellPartLD_, 12);
0172     myPrint("cassetteShift", phgp->cassetteShift_, 8);
0173     myPrint("cassetteShiftTile", phgp->cassetteShiftTile_, 8);
0174     myPrint("cassetteRetractTile", phgp->cassetteRetractTile_, 8);
0175 
0176     edm::LogVerbatim("HGCalGeom") << "MaskMode: " << phgp->waferMaskMode_;
0177     if (phgp->waferMaskMode_ > 1) {
0178       edm::LogVerbatim("HGCalGeom") << "WaferInfo with " << phgp->waferInfoMap_.size() << " elements";
0179       unsigned int kk(0);
0180       std::unordered_map<int32_t, HGCalParameters::waferInfo>::const_iterator itr = phgp->waferInfoMap_.begin();
0181       for (; itr != phgp->waferInfoMap_.end(); ++itr, ++kk)
0182         edm::LogVerbatim("HGCalGeom") << "[" << kk << "] " << itr->first << "["
0183                                       << HGCalWaferIndex::waferLayer(itr->first) << ", "
0184                                       << HGCalWaferIndex::waferU(itr->first) << ", "
0185                                       << HGCalWaferIndex::waferV(itr->first) << "] (" << (itr->second).type << ", "
0186                                       << (itr->second).part << ", " << (itr->second).orient << ")";
0187     }
0188 
0189     myPrint("slopeMin", phgp->slopeMin_, 10);
0190     myPrint("zFrontMin", phgp->zFrontMin_, 10);
0191     myPrint("rMinFront", phgp->rMinFront_, 10);
0192     myPrint("slopeTop", phgp->slopeTop_, 10);
0193     myPrint("zFrontTop", phgp->zFrontTop_, 10);
0194     myPrint("rMaxFront", phgp->rMaxFront_, 10);
0195     myPrint("zRanges", phgp->zRanges_, 10);
0196     myPrint("moduleBlS", phgp->moduleBlS_, 10);
0197     myPrint("moduleTlS", phgp->moduleTlS_, 10);
0198     myPrint("moduleHS", phgp->moduleHS_, 10);
0199     myPrint("moduleDzS", phgp->moduleDzS_, 10);
0200     myPrint("moduleAlphaS", phgp->moduleAlphaS_, 10);
0201     myPrint("moduleCellS", phgp->moduleCellS_, 10);
0202     myPrint("moduleBlR", phgp->moduleBlR_, 10);
0203     myPrint("moduleTlR", phgp->moduleTlR_, 10);
0204     myPrint("moduleHR", phgp->moduleHR_, 10);
0205     myPrint("moduleDzR", phgp->moduleDzR_, 10);
0206     myPrint("moduleAlphaR", phgp->moduleAlphaR_, 10);
0207     myPrint("moduleCellR", phgp->moduleCellR_, 10);
0208     myPrint("trformTranX", phgp->trformTranX_, 8);
0209     myPrint("trformTranY", phgp->trformTranY_, 8);
0210     myPrint("trformTranZ", phgp->trformTranZ_, 8);
0211     myPrint("trformRotXX", phgp->trformRotXX_, 10);
0212     myPrint("trformRotYX", phgp->trformRotYX_, 10);
0213     myPrint("trformRotZX", phgp->trformRotZX_, 10);
0214     myPrint("trformRotXY", phgp->trformRotXY_, 10);
0215     myPrint("trformRotYY", phgp->trformRotYY_, 10);
0216     myPrint("trformRotZY", phgp->trformRotZY_, 10);
0217     myPrint("trformRotXZ", phgp->trformRotXZ_, 10);
0218     myPrint("trformRotYZ", phgp->trformRotYZ_, 10);
0219     myPrint("trformRotZZ", phgp->trformRotZZ_, 10);
0220     myPrint("xLayerHex", phgp->xLayerHex_, 8);
0221     myPrint("yLayerHex", phgp->yLayerHex_, 8);
0222     myPrint("zLayerHex", phgp->zLayerHex_, 8);
0223     myPrint("rMinLayHex", phgp->rMinLayHex_, 8);
0224     myPrint("rMaxLayHex", phgp->rMaxLayHex_, 8);
0225     myPrint("waferPos", phgp->waferPosX_, phgp->waferPosY_, 4);
0226     myPrint("cellFineIndex", phgp->cellFineIndex_, 8);
0227     myPrint("cellFine", phgp->cellFineX_, phgp->cellFineY_, 4);
0228     myPrint("cellCoarseIndex", phgp->cellCoarseIndex_, 8);
0229     myPrint("cellCoarse", phgp->cellCoarseX_, phgp->cellCoarseY_, 4);
0230     myPrint("layer", phgp->layer_, 18);
0231     myPrint("layerIndex", phgp->layerIndex_, 18);
0232     myPrint("depth", phgp->depth_, 18);
0233     myPrint("depthIndex", phgp->depthIndex_, 18);
0234     myPrint("depthLayerF", phgp->depthLayerF_, 18);
0235     myPrint("waferCopy", phgp->waferCopy_, 10);
0236     myPrint("waferTypeL", phgp->waferTypeL_, 25);
0237     printTrform(phgp);
0238     myPrint("levelTop", phgp->levelT_, 10);
0239     printWaferType(phgp);
0240   } else {
0241     // Tpaezoid (scintillator) type
0242     edm::LogVerbatim("HGCalGeom") << "DetectorType: " << phgp->detectorType_;
0243     edm::LogVerbatim("HGCalGeom") << "UseSimWt: " << phgp->useSimWt_;
0244     edm::LogVerbatim("HGCalGeom") << "nCells_: " << phgp->nCellsFine_ << ":" << phgp->nCellsCoarse_;
0245     edm::LogVerbatim("HGCalGeom") << "MinTileZize: " << phgp->minTileSize_;
0246     edm::LogVerbatim("HGCalGeom") << "FirstLayer: " << phgp->firstLayer_;
0247     edm::LogVerbatim("HGCalGeom") << "FirstMixedLayer: " << phgp->firstMixedLayer_;
0248     edm::LogVerbatim("HGCalGeom") << "LayerOffset: " << phgp->layerOffset_;
0249     edm::LogVerbatim("HGCalGeom") << "mode_: " << phgp->mode_;
0250     edm::LogVerbatim("HGCalGeom") << "waferUVMax: " << phgp->waferUVMax_;
0251     edm::LogVerbatim("HGCalGeom") << "nSectors_: " << phgp->nSectors_;
0252     edm::LogVerbatim("HGCalGeom") << "nCells_: " << phgp->nCellsFine_ << ":" << phgp->nCellsCoarse_;
0253 
0254     myPrint("CellSize", phgp->cellSize_, 10);
0255     myPrint("radiusMixBoundary", phgp->radiusMixBoundary_, 10);
0256     myPrint("nPhiBinBH", phgp->nPhiBinBH_, 18);
0257     myPrint("layerFrontBH", phgp->layerFrontBH_, 10);
0258     myPrint("LayerCenter", phgp->layerCenter_, 20);
0259     myPrint("rMinLayerBH", phgp->rMinLayerBH_, 10);
0260     myPrint("slopeMin", phgp->slopeMin_, 10);
0261     myPrint("zFrontMin", phgp->zFrontMin_, 10);
0262     myPrint("rMinFront", phgp->rMinFront_, 10);
0263     myPrint("radiusLayer[0]", phgp->radiusLayer_[0], 10);
0264     myPrint("radiusLayer[1]", phgp->radiusLayer_[1], 10);
0265     myPrint("iradMinBH", phgp->iradMinBH_, 20);
0266     myPrint("iradMaxBH", phgp->iradMaxBH_, 20);
0267     edm::LogVerbatim("HGCalGeom") << "MaskMode: " << phgp->waferMaskMode_;
0268     if (phgp->waferMaskMode_ > 1) {
0269       myPrint("tileRingR", phgp->tileRingR_, 4);
0270       myPrint("tileRingRange", phgp->tileRingRange_, 8);
0271       edm::LogVerbatim("HGCalGeom") << "TileInfo with " << phgp->tileInfoMap_.size() << " elements";
0272       unsigned int kk(0);
0273       std::unordered_map<int32_t, HGCalParameters::tileInfo>::const_iterator itr = phgp->tileInfoMap_.begin();
0274       for (; itr != phgp->tileInfoMap_.end(); ++itr, ++kk)
0275         edm::LogVerbatim("HGCalGeom") << "[" << kk << "] " << itr->first << "[" << HGCalTileIndex::tileLayer(itr->first)
0276                                       << ", " << HGCalTileIndex::tileRing(itr->first) << ", "
0277                                       << HGCalTileIndex::tilePhi(itr->first) << "] (" << (itr->second).type << ", "
0278                                       << (itr->second).sipm << std::hex << ", " << (itr->second).hex[0] << ", "
0279                                       << (itr->second).hex[1] << ", " << (itr->second).hex[2] << ", "
0280                                       << (itr->second).hex[3] << ", " << (itr->second).hex[4] << ", "
0281                                       << (itr->second).hex[5] << ")" << std::dec;
0282     }
0283 
0284     myPrint("slopeTop", phgp->slopeTop_, 10);
0285     myPrint("zFrontTop", phgp->zFrontTop_, 10);
0286     myPrint("rMaxFront", phgp->rMaxFront_, 10);
0287     myPrint("zRanges", phgp->zRanges_, 10);
0288     myPrint("firstModule", phgp->firstModule_, 10);
0289     myPrint("lastModule", phgp->lastModule_, 10);
0290     myPrint("moduleBlS", phgp->moduleBlS_, 10);
0291     myPrint("moduleTlS", phgp->moduleTlS_, 10);
0292     myPrint("moduleHS", phgp->moduleHS_, 10);
0293     myPrint("moduleDzS", phgp->moduleDzS_, 10);
0294     myPrint("moduleAlphaS", phgp->moduleAlphaS_, 10);
0295     myPrint("moduleCellS", phgp->moduleCellS_, 10);
0296     myPrint("moduleBlR", phgp->moduleBlR_, 10);
0297     myPrint("moduleTlR", phgp->moduleTlR_, 10);
0298     myPrint("moduleHR", phgp->moduleHR_, 10);
0299     myPrint("moduleDzR", phgp->moduleDzR_, 10);
0300     myPrint("moduleAlphaR", phgp->moduleAlphaR_, 10);
0301     myPrint("moduleCellR", phgp->moduleCellR_, 9);
0302     myPrint("trformTranX", phgp->trformTranY_, 9);
0303     myPrint("trformTranY", phgp->trformTranY_, 9);
0304     myPrint("trformTranZ", phgp->trformTranZ_, 9);
0305     myPrint("trformRotXX", phgp->trformRotXX_, 10);
0306     myPrint("trformRotYX", phgp->trformRotYX_, 10);
0307     myPrint("trformRotZX", phgp->trformRotZX_, 10);
0308     myPrint("trformRotXY", phgp->trformRotXY_, 10);
0309     myPrint("trformRotYY", phgp->trformRotYY_, 10);
0310     myPrint("trformRotZY", phgp->trformRotZY_, 10);
0311     myPrint("trformRotXZ", phgp->trformRotXZ_, 10);
0312     myPrint("trformRotYZ", phgp->trformRotYZ_, 10);
0313     myPrint("trformRotZZ", phgp->trformRotZZ_, 10);
0314     myPrint("xLayerHex", phgp->xLayerHex_, 10);
0315     myPrint("yLayerHex", phgp->yLayerHex_, 10);
0316     myPrint("zLayerHex", phgp->zLayerHex_, 10);
0317     myPrint("rMinLayHex", phgp->rMinLayHex_, 9);
0318     myPrint("rMaxLayHex", phgp->rMaxLayHex_, 9);
0319     myPrint("layer", phgp->layer_, 18);
0320     myPrint("layerIndex", phgp->layerIndex_, 18);
0321     myPrint("depth", phgp->depth_, 18);
0322     myPrint("depthIndex", phgp->depthIndex_, 18);
0323     myPrint("depthLayerF", phgp->depthLayerF_, 18);
0324     printTrform(phgp);
0325     myPrint("levelTop", phgp->levelT_, 10);
0326     printWaferType(phgp);
0327   }
0328 
0329   auto finish = std::chrono::high_resolution_clock::now();
0330   std::chrono::duration<double> elapsed = finish - start;
0331   edm::LogVerbatim("HGCalGeom") << "Elapsed time: " << elapsed.count() << " s";
0332 }
0333 
0334 template <typename T>
0335 void HGCalParameterTester::myPrint(std::string const& s, std::vector<T> const& obj, int n) const {
0336   int k(0), kk(0);
0337   edm::LogVerbatim("HGCalGeom") << s << " with " << obj.size() << " elements with n " << n << ": 1000";
0338   std::ostringstream st1[1000];
0339   for (auto const& it : obj) {
0340     st1[kk] << it << ", ";
0341     ++k;
0342     if (k == n) {
0343       edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0344       ++kk;
0345       k = 0;
0346     }
0347   }
0348   if (k > 0)
0349     edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0350 }
0351 
0352 template <typename T>
0353 void HGCalParameterTester::myPrint(std::string const& s, std::vector<std::pair<T, T> > const& obj, int n) const {
0354   int k(0), kk(0);
0355   edm::LogVerbatim("HGCalGeom") << s << " with " << obj.size() << " elements with n " << n << ":200";
0356   std::ostringstream st1[200];
0357   for (auto const& it : obj) {
0358     st1[kk] << "(" << it.first << ", " << it.second << ") ";
0359     ++k;
0360     if (k == n) {
0361       edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0362       ++kk;
0363       k = 0;
0364     }
0365   }
0366   if (k > 0)
0367     edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0368 }
0369 
0370 void HGCalParameterTester::myPrint(std::string const& s,
0371                                    std::vector<double> const& obj1,
0372                                    std::vector<double> const& obj2,
0373                                    int n) const {
0374   int k(0), kk(0);
0375   std::ostringstream st1[250];
0376   edm::LogVerbatim("HGCalGeom") << s << " with " << obj1.size() << " elements with n " << n << ": 250";
0377   for (unsigned int k1 = 0; k1 < obj1.size(); ++k1) {
0378     st1[kk] << "(" << obj1[k1] << ", " << obj2[k1] << ") ";
0379     ++k;
0380     if (k == n) {
0381       edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0382       ++kk;
0383       k = 0;
0384     }
0385   }
0386   if (k > 0)
0387     edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0388 }
0389 
0390 void HGCalParameterTester::myPrint(std::string const& s, HGCalParameters::wafer_map const& obj, int n) const {
0391   int k(0), kk(0);
0392   std::ostringstream st1[100];
0393   edm::LogVerbatim("HGCalGeom") << s << " with " << obj.size() << " elements with n " << n << ": 100";
0394   for (auto const& it : obj) {
0395     st1[kk] << it.first << ":" << it.second << ", ";
0396     ++k;
0397     if (k == n) {
0398       edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0399       ++kk;
0400       k = 0;
0401     }
0402   }
0403   if (k > 0)
0404     edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0405 }
0406 
0407 void HGCalParameterTester::printTrform(HGCalParameters const* phgp) const {
0408   int k(0), kk(0);
0409   std::ostringstream st1[20];
0410   edm::LogVerbatim("HGCalGeom") << "TrformIndex with " << phgp->trformIndex_.size() << " elements with n 7:20";
0411   for (unsigned int i = 0; i < phgp->trformIndex_.size(); ++i) {
0412     std::array<int, 4> id = phgp->getID(i);
0413     st1[kk] << id[0] << ":" << id[1] << ":" << id[2] << ":" << id[3] << ", ";
0414     ++k;
0415     if (k == 7) {
0416       edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0417       ++kk;
0418       k = 0;
0419     }
0420   }
0421   if (k > 0)
0422     edm::LogVerbatim("HGCalGeom") << st1[kk].str();
0423 }
0424 
0425 void HGCalParameterTester::printWaferType(HGCalParameters const* phgp) const {
0426   int k(0);
0427   edm::LogVerbatim("HGCalGeom") << "waferTypes with " << phgp->waferTypes_.size() << " elements";
0428   std::map<std::pair<int, int>, int> kounts;
0429   std::map<std::pair<int, int>, int>::iterator itr;
0430   for (auto const& it : phgp->waferTypes_) {
0431     std::ostringstream st1;
0432     st1 << " [" << k << "] " << HGCalWaferIndex::waferLayer(it.first);
0433     if (HGCalWaferIndex::waferFormat(it.first)) {
0434       st1 << ":" << HGCalWaferIndex::waferU(it.first) << ":" << HGCalWaferIndex::waferV(it.first);
0435     } else {
0436       st1 << ":" << HGCalWaferIndex::waferCopy(it.first);
0437     }
0438     edm::LogVerbatim("HGCalGeom") << st1.str() << " ==> (" << (it.second).first << ":" << (it.second).second << ")";
0439     itr = kounts.find(it.second);
0440     if (itr == kounts.end())
0441       kounts[it.second] = 1;
0442     else
0443       ++(itr->second);
0444     ++k;
0445   }
0446   if (!kounts.empty()) {
0447     edm::LogVerbatim("HGCalGeom") << "Summary of waferTypes ==========================";
0448     for (itr = kounts.begin(); itr != kounts.end(); ++itr)
0449       edm::LogVerbatim("HGCalGeom") << "Type (" << (itr->first).first << ":" << (itr->first).second << ") Kount "
0450                                     << itr->second;
0451   }
0452 }
0453 
0454 DEFINE_FWK_MODULE(HGCalParameterTester);