Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Phase2-hgx246 Read in flat file data using xml files for HGCal #30274

Merged
merged 5 commits into from Jun 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions Geometry/HGCalCommonData/data/hgcalCons/v13/hgcalCons.xml
Expand Up @@ -86,7 +86,7 @@
<Parameter name="FirstMixedLayer" value="[hgcal:FirstMixedLayer]"/>
<Parameter name="LayerOffset" value="28"/>
<Parameter name="DetectorType" value="2"/>
<Parameter name="WaferMaskMode" value="2"/>
<Parameter name="WaferMaskMode" value="3"/>
<Parameter name="Radius100to200" value="[hgcal:rad100200P0]"/>
<Parameter name="Radius100to200" value="[hgcal:rad100200P1]"/>
<Parameter name="Radius100to200" value="[hgcal:rad100200P2]"/>
Expand Down Expand Up @@ -137,7 +137,7 @@
<Parameter name="FirstMixedLayer" value="[hgcal:FirstMixedLayer]"/>
<Parameter name="LayerOffset" value="28"/>
<Parameter name="DetectorType" value="3"/>
<Parameter name="WaferMaskMode" value="2"/>
<Parameter name="WaferMaskMode" value="4"/>
<Parameter name="WaferThickness" value="[hgcal:ScintillatorThickness]"/>
<Parameter name="MinimumTileSize" value="[MinimumTileSize]"/>
<Parameter name="NPhiBinBH" value="360"/>
Expand Down
30 changes: 15 additions & 15 deletions Geometry/HGCalCommonData/data/hgcalConsData/v13/hgcalConsData.xml
@@ -1,7 +1,5 @@
<?xml version="1.0"?>
<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2\
001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../..\
/../../DetectorDescription/Schema/DDLSchema.xsd">
<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../../../DetectorDescription/Schema/DDLSchema.xsd">

<ConstantsSection label="hgcalConsData.xml" eval="true">
<Vector name="WaferIndexEE" type="numeric" nEntries="8736">
Expand Down Expand Up @@ -4329,20 +4327,22 @@
4,
</Vector>
<Vector name="TileRMin" type="numeric" nEntries="42">
1037.83, 1060.98, 1084.12, 1108.3, 1132.48, 1157.73, 1182.99,
1209.37, 1235.75, 1263.31, 1290.87, 1319.66, 1348.45, 1378.52,
1408.59, 1440, 1471.42, 1504.23, 1537.05, 1571.33, 1605.6,
1641.41, 1677.22, 1714.62, 1752.03, 1791.1, 1830.17, 1870.99,
1911.8, 1954.44, 1997.08, 2041.61, 2086.15, 2132.67, 2179.2,
2227.8, 2276.4, 2327.16, 2377.93, 2430.96, 2483.99, 2539.39,
1037.83*mm, 1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm,
1182.99*mm, 1209.37*mm, 1235.75*mm, 1263.31*mm, 1290.87*mm, 1319.66*mm,
1348.45*mm, 1378.52*mm, 1408.59*mm, 1440*mm, 1471.42*mm, 1504.23*mm,
1537.05*mm, 1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm,
1752.03*mm, 1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm,
1997.08*mm, 2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm,
2276.4*mm, 2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm
</Vector>
<Vector name="TileRMax" type="numeric" nEntries="42">
1060.98, 1084.12, 1108.3, 1132.48, 1157.73, 1182.99, 1209.37,
1235.75, 1263.31, 1290.87, 1319.66, 1348.45, 1378.52, 1408.59,
1440, 1471.42, 1504.23, 1537.05, 1571.33, 1605.6, 1641.41,
1677.22, 1714.62, 1752.03, 1791.1, 1830.17, 1870.99, 1911.8,
1954.44, 1997.08, 2041.61, 2086.15, 2132.67, 2179.2, 2227.8,
2276.4, 2327.16, 2377.93, 2430.96, 2483.99, 2539.39, 2594.79,
1060.98*mm, 1084.12*mm, 1108.3*mm, 1132.48*mm, 1157.73*mm, 1182.99*mm,
1209.37*mm, 1235.75*mm, 1263.31*mm, 1290.87*mm, 1319.66*mm, 1348.45*mm,
1378.52*mm, 1408.59*mm, 1440*mm, 1471.42*mm, 1504.23*mm, 1537.05*mm,
1571.33*mm, 1605.6*mm, 1641.41*mm, 1677.22*mm, 1714.62*mm, 1752.03*mm,
1791.1*mm, 1830.17*mm, 1870.99*mm, 1911.8*mm, 1954.44*mm, 1997.08*mm,
2041.61*mm, 2086.15*mm, 2132.67*mm, 2179.2*mm, 2227.8*mm, 2276.4*mm,
2327.16*mm, 2377.93*mm, 2430.96*mm, 2483.99*mm, 2539.39*mm, 2594.79*mm
</Vector>
<Vector name="TileRingMin" type="numeric" nEntries="14">
18, 18, 18, 18, 13, 13, 6, 6, 6, 6, 0, 0, 0, 0,
Expand Down
12 changes: 10 additions & 2 deletions Geometry/HGCalCommonData/interface/HGCalGeomParameters.h
Expand Up @@ -106,8 +106,8 @@ class HGCalGeomParameters {
const int& firstLayer,
HGCalParameters& php);
void loadSpecParsHexagon(const HGCalParameters& php);
void loadSpecParsHexagon8(const HGCalParameters& php);
void loadSpecParsTrapezoid(const HGCalParameters& php);
void loadSpecParsHexagon8(HGCalParameters& php);
void loadSpecParsTrapezoid(HGCalParameters& php);
std::vector<double> getDDDArray(const std::string& str, const DDsvalues_type& sv, const int nmin);
std::pair<double, double> cellPosition(const std::vector<cellParameters>& wafers,
std::vector<cellParameters>::const_iterator& itrf,
Expand All @@ -118,9 +118,17 @@ class HGCalGeomParameters {
void resetZero(std::vector<double>&);

constexpr static double tan30deg_ = 0.5773502693;
constexpr static int siliconFileEE = 2;
constexpr static int siliconFileHE = 3;
constexpr static int scintillatorFile = 4;
HGCalGeomTools geomTools_;
const double sqrt3_;
double waferSize_;
std::vector<int> waferIndex_, waferTypes_, waferParts_, waferOrien_;
std::vector<int> tileIndx_, tileType_, tileSiPM_;
std::vector<int> tileHEX1_, tileHEX2_, tileHEX3_, tileHEX4_;
std::vector<double> tileRMin_, tileRMax_;
std::vector<int> tileRingMin_, tileRingMax_;
};

#endif
15 changes: 15 additions & 0 deletions Geometry/HGCalCommonData/interface/HGCalParameters.h
Expand Up @@ -12,9 +12,20 @@

class HGCalParameters {
public:
struct waferInfo {
int32_t type, part, orient;
waferInfo(int32_t t = 0, int32_t p = 0, int32_t o = 0) : type(t), part(p), orient(o){};
};
struct tileInfo {
int32_t type, sipm, hex1, hex2, hex3, hex4;
tileInfo(int32_t t = 0, int32_t s = 0, int32_t h1 = 0, int32_t h2 = 0, int32_t h3 = 0, int32_t h4 = 0)
: type(t), sipm(s), hex1(h1), hex2(h2), hex3(h3), hex4(h4){};
};
typedef std::vector<std::unordered_map<int32_t, int32_t> > layer_map;
typedef std::unordered_map<int32_t, int32_t> wafer_map;
typedef std::unordered_map<int32_t, std::pair<int32_t, int32_t> > waferT_map;
typedef std::unordered_map<int32_t, waferInfo> waferInfo_map;
typedef std::unordered_map<int32_t, tileInfo> tileInfo_map;

static constexpr double k_ScaleFromDDD = 0.1;
static constexpr double k_ScaleToDDD = 10.0;
Expand Down Expand Up @@ -160,6 +171,10 @@ class HGCalParameters {
wafer_map typesInLayers_;
waferT_map waferTypes_;
int waferMaskMode_;
waferInfo_map waferInfoMap_;
tileInfo_map tileInfoMap_;
std::vector<std::pair<double, double> > tileRingR_;
std::vector<std::pair<int, int> > tileRingRange_;

COND_SERIALIZABLE;

Expand Down
1 change: 1 addition & 0 deletions Geometry/HGCalCommonData/interface/HGCalParametersFromDD.h
Expand Up @@ -32,6 +32,7 @@ class HGCalParametersFromDD {
void getCellPosition(HGCalParameters& php, int type);
double getDDDValue(const char* s, const DDsvalues_type& sv);
std::vector<double> getDDDArray(const char* s, const DDsvalues_type& sv);
constexpr static double tan30deg_ = 0.5773502693;
};

#endif
1 change: 0 additions & 1 deletion Geometry/HGCalCommonData/python/testHGCalV11XML_cfi.py
Expand Up @@ -31,7 +31,6 @@
'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml',
'Geometry/HcalCommonData/data/hcalbarrelalgo.xml',
'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml',
'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml',
'Geometry/HcalCommonData/data/hcalouteralgo.xml',
'Geometry/HcalCommonData/data/hcalforwardalgo.xml',
'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml',
Expand Down
1 change: 0 additions & 1 deletion Geometry/HGCalCommonData/python/testHGCalV12XML_cfi.py
Expand Up @@ -31,7 +31,6 @@
'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml',
'Geometry/HcalCommonData/data/hcalbarrelalgo.xml',
'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml',
'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml',
'Geometry/HcalCommonData/data/hcalouteralgo.xml',
'Geometry/HcalCommonData/data/hcalforwardalgo.xml',
'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml',
Expand Down
164 changes: 161 additions & 3 deletions Geometry/HGCalCommonData/src/HGCalGeomParameters.cc
Expand Up @@ -1007,6 +1007,19 @@ void HGCalGeomParameters::loadSpecParsHexagon8(const DDFilteredView& fv, HGCalPa
php.layerOffset_ = dummy2[0];
php.layerCenter_ = dbl_to_int(fv.vector("LayerCenter"));

// Read in parameters from Philip's file
if (php.waferMaskMode_ == siliconFileEE) {
waferIndex_ = dbl_to_int(fv.vector("WaferIndexEE"));
waferTypes_ = dbl_to_int(fv.vector("WaferTypesEE"));
waferParts_ = dbl_to_int(fv.vector("WaferPartialEE"));
waferOrien_ = dbl_to_int(fv.vector("WaferOrientEE"));
} else if (php.waferMaskMode_ == siliconFileHE) {
waferIndex_ = dbl_to_int(fv.vector("WaferIndexHE"));
waferTypes_ = dbl_to_int(fv.vector("WaferTypesHE"));
waferParts_ = dbl_to_int(fv.vector("WaferPartialHE"));
waferOrien_ = dbl_to_int(fv.vector("WaferOrientHE"));
}

loadSpecParsHexagon8(php);
}

Expand Down Expand Up @@ -1065,10 +1078,45 @@ void HGCalGeomParameters::loadSpecParsHexagon8(const cms::DDFilteredView& fv,
}
}

// Read in parameters from Philip's file
if (php.waferMaskMode_ == siliconFileEE) {
for (auto const& it : vmap) {
if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "WaferIndexEE")) {
for (const auto& i : it.second)
waferIndex_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "WaferTypesEE")) {
for (const auto& i : it.second)
waferTypes_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "WaferPartialEE")) {
for (const auto& i : it.second)
waferParts_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "WaferOrientEE")) {
for (const auto& i : it.second)
waferOrien_.emplace_back(std::round(i));
}
}
} else if (php.waferMaskMode_ == siliconFileHE) {
for (auto const& it : vmap) {
if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "WaferIndexHE")) {
for (const auto& i : it.second)
waferIndex_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "WaferTypesHE")) {
for (const auto& i : it.second)
waferTypes_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "WaferPartialHE")) {
for (const auto& i : it.second)
waferParts_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "WaferOrientHE")) {
for (const auto& i : it.second)
waferOrien_.emplace_back(std::round(i));
}
}
}

loadSpecParsHexagon8(php);
}

void HGCalGeomParameters::loadSpecParsHexagon8(const HGCalParameters& php) {
void HGCalGeomParameters::loadSpecParsHexagon8(HGCalParameters& php) {
#ifdef EDM_ML_DEBUG
for (unsigned int k = 0; k < php.cellThickness_.size(); ++k)
edm::LogVerbatim("HGCalGeom") << "HGCalGeomParameters: cell[" << k << "] Thickness " << php.cellThickness_[k];
Expand Down Expand Up @@ -1100,6 +1148,22 @@ void HGCalGeomParameters::loadSpecParsHexagon8(const HGCalParameters& php) {
for (unsigned int k = 0; k < php.layerCenter_.size(); ++k)
edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << php.layerCenter_[k];
#endif

// Store parameters from Philip's file
if (php.waferMaskMode_ > 1) {
for (unsigned int k = 0; k < waferIndex_.size(); ++k) {
php.waferInfoMap_[waferIndex_[k]] = HGCalParameters::waferInfo(waferTypes_[k], waferParts_[k], waferOrien_[k]);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "[" << k << ":" << waferIndex_[k] << "] "
<< " Type " << waferTypes_[k] << " Partial type " << waferParts_[k]
<< " Orientation " << waferOrien_[k];
#endif
}
waferIndex_.clear();
waferTypes_.clear();
waferParts_.clear();
waferOrien_.clear();
}
}

void HGCalGeomParameters::loadSpecParsTrapezoid(const DDFilteredView& fv, HGCalParameters& php) {
Expand Down Expand Up @@ -1136,6 +1200,23 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(const DDFilteredView& fv, HGCalP
php.layerOffset_ = dummy2[0];
php.layerCenter_ = dbl_to_int(fv.vector("LayerCenter"));

// tile parameters from Katja's file
if (php.waferMaskMode_ == scintillatorFile) {
tileIndx_ = dbl_to_int(fv.vector("TileIndex"));
tileType_ = dbl_to_int(fv.vector("TileType"));
tileSiPM_ = dbl_to_int(fv.vector("TileSiPM"));
tileHEX1_ = dbl_to_int(fv.vector("TileHEX1"));
tileHEX2_ = dbl_to_int(fv.vector("TileHEX2"));
tileHEX3_ = dbl_to_int(fv.vector("TileHEX3"));
tileHEX4_ = dbl_to_int(fv.vector("TileHEX4"));
tileRMin_ = fv.vector("TileRMin");
tileRMax_ = fv.vector("TileRMax");
rescale(tileRMin_, HGCalParameters::k_ScaleFromDDD);
rescale(tileRMax_, HGCalParameters::k_ScaleFromDDD);
tileRingMin_ = dbl_to_int(fv.vector("TileRingMin"));
tileRingMax_ = dbl_to_int(fv.vector("TileRingMax"));
}

loadSpecParsTrapezoid(php);
}

Expand Down Expand Up @@ -1183,10 +1264,50 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(const cms::DDFilteredView& fv,
const auto& dummy2 = fv.get<std::vector<double> >(sdTag1, "LayerOffset");
php.layerOffset_ = dummy2[0];

// tile parameters from Katja's file
if (php.waferMaskMode_ == scintillatorFile) {
for (auto const& it : vmap) {
if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileIndex")) {
for (const auto& i : it.second)
tileIndx_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileType")) {
for (const auto& i : it.second)
tileType_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileSiPM")) {
for (const auto& i : it.second)
tileSiPM_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileHEX1")) {
for (const auto& i : it.second)
tileHEX1_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileHEX2")) {
for (const auto& i : it.second)
tileHEX2_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileHEX3")) {
for (const auto& i : it.second)
tileHEX3_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileHEX4")) {
for (const auto& i : it.second)
tileHEX4_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileRMin")) {
for (const auto& i : it.second)
tileRMin_.emplace_back(HGCalParameters::k_ScaleFromDD4Hep * i);
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileRMax")) {
for (const auto& i : it.second)
tileRMax_.emplace_back(HGCalParameters::k_ScaleFromDD4Hep * i);
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileRingMin")) {
for (const auto& i : it.second)
tileRingMin_.emplace_back(std::round(i));
} else if (cms::dd::compareEqual(cms::dd::noNamespace(it.first), "TileRingMax")) {
for (const auto& i : it.second)
tileRingMax_.emplace_back(std::round(i));
}
}
}

loadSpecParsTrapezoid(php);
}

void HGCalGeomParameters::loadSpecParsTrapezoid(const HGCalParameters& php) {
void HGCalGeomParameters::loadSpecParsTrapezoid(HGCalParameters& php) {
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "HGCalGeomParameters:nCells " << php.nCellsFine_ << ":" << php.nCellsCoarse_
<< " cellSize: " << php.cellSize_[0] << ":" << php.cellSize_[1];
Expand Down Expand Up @@ -1215,6 +1336,42 @@ void HGCalGeomParameters::loadSpecParsTrapezoid(const HGCalParameters& php) {
for (unsigned int k = 0; k < php.layerCenter_.size(); ++k)
edm::LogVerbatim("HGCalGeom") << "[" << k << "] " << php.layerCenter_[k];
#endif

// tile parameters from Katja's file
if (php.waferMaskMode_ == scintillatorFile) {
for (unsigned int k = 0; k < tileIndx_.size(); ++k) {
php.tileInfoMap_[tileIndx_[k]] =
HGCalParameters::tileInfo(tileType_[k], tileSiPM_[k], tileHEX1_[k], tileHEX2_[k], tileHEX3_[k], tileHEX4_[k]);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "Tile[" << k << ":" << tileIndx_[k] << "] "
<< " Type " << tileType_[k] << " SiPM " << tileSiPM_[k] << " HEX " << tileHEX1_[k]
<< ":" << tileHEX2_[k] << ":" << tileHEX3_[k] << ":" << tileHEX4_[k];
#endif
}
tileIndx_.clear();
tileType_.clear();
tileSiPM_.clear();
tileHEX1_.clear();
tileHEX2_.clear();
tileHEX3_.clear();
tileHEX4_.clear();
for (unsigned int k = 0; k < tileRMin_.size(); ++k) {
php.tileRingR_.emplace_back(tileRMin_[k], tileRMax_[k]);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "TileRingR[" << k << "] " << tileRMin_[k] << ":" << tileRMax_[k];
#endif
}
tileRMin_.clear();
tileRMax_.clear();
for (unsigned k = 0; k < tileRingMin_.size(); ++k) {
php.tileRingRange_.emplace_back(tileRingMin_[k], tileRingMax_[k]);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "TileRingRange[" << k << "] " << tileRingMin_[k] << ":" << tileRingMax_[k];
#endif
}
tileRingMin_.clear();
tileRingMax_.clear();
}
}

void HGCalGeomParameters::loadWaferHexagon(HGCalParameters& php) {
Expand Down Expand Up @@ -1348,7 +1505,8 @@ void HGCalGeomParameters::loadWaferHexagon8(HGCalParameters& php) {
int ns1 = (2 * N + 1) * (2 * N + 1);
int ns2 = ns1 * php.zLayerHex_.size();
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HGCalGeom") << "r " << r << " dy " << dy << " N " << N << " sizes " << ns1 << ":" << ns2;
edm::LogVerbatim("HGCalGeom") << "wafer " << waferW << ":" << waferS << " r " << r << " dy " << dy << " N " << N
<< " sizes " << ns1 << ":" << ns2;
std::vector<int> indtypes(ns1 + 1);
indtypes.clear();
#endif
Expand Down