File indexing completed on 2024-05-10 02:20:49
0001 #include <cmath>
0002 #include <algorithm>
0003
0004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0005 #include "DetectorDescription/Core/interface/DDTypes.h"
0006 #include "DetectorDescription/Core/interface/DDLogicalPart.h"
0007 #include "DetectorDescription/Core/interface/DDSolid.h"
0008 #include <CLHEP/Units/SystemOfUnits.h>
0009 #include <vector>
0010 #include <string>
0011
0012 #include "DetectorDescription/Core/interface/DDAlgorithm.h"
0013 #include "DetectorDescription/Core/interface/DDMaterial.h"
0014
0015 using CLHEP::cm;
0016 using CLHEP::deg;
0017 using CLHEP::mm;
0018
0019
0020 class DDEcalPreshowerAlgo : public DDAlgorithm {
0021 public:
0022 DDMaterial getMaterial(unsigned int i) const { return DDMaterial(materials_[i]); }
0023 DDMaterial getLaddMaterial() const { return DDMaterial(LaddMaterial_); }
0024 std::string getLayName(unsigned int i) const { return layName_[i]; }
0025 std::string getLadPrefix(unsigned int i) const { return ladPfx_[i]; }
0026
0027 DDEcalPreshowerAlgo();
0028 void initialize(const DDNumericArguments& nArgs,
0029 const DDVectorArguments& vArgs,
0030 const DDMapArguments& mArgs,
0031 const DDStringArguments& sArgs,
0032 const DDStringVectorArguments& vsArgs) override;
0033 void execute(DDCompactView& pos) override;
0034
0035 private:
0036 void doLayers(DDCompactView& pos);
0037 void doLadders(DDCompactView& pos);
0038 void doSens(DDCompactView& pos);
0039
0040 int nmat_;
0041 double thickness_;
0042 std::vector<std::string> materials_;
0043 std::vector<std::string> layName_;
0044 std::vector<std::string> ladPfx_;
0045 std::string LaddMaterial_;
0046 std::vector<double> thickLayers_;
0047 std::vector<double> abs1stx;
0048 std::vector<double> abs1sty;
0049 std::vector<double> abs2ndx;
0050 std::vector<double> abs2ndy;
0051 std::vector<double> asym_ladd_;
0052 std::vector<double> rminVec;
0053 std::vector<double> rmaxVec;
0054 std::vector<double> noLaddInCol_;
0055 std::vector<double> startOfFirstLadd_;
0056 std::vector<std::string> types_l5_;
0057 std::vector<std::string> types_l4_;
0058 std::vector<double> ladd_l5_map_;
0059 std::vector<double> ladd_l4_map_;
0060 std::vector<std::string> typeOfLaddRow0;
0061 std::vector<std::string> typeOfLaddRow1;
0062 std::vector<std::string> typeOfLaddRow2;
0063 std::vector<std::string> typeOfLaddRow3;
0064
0065 double zlead1_, zlead2_, zfoam1_, zfoam2_;
0066 double waf_intra_col_sep, waf_inter_col_sep, waf_active, wedge_length, wedge_offset, zwedge_ceramic_diff,
0067 ywedge_ceramic_diff, wedge_angle, box_thick, dee_separation, In_rad_Abs_Al, In_rad_Abs_Pb;
0068 double ladder_thick, yladder_1stwedge_diff, ladder_width, ladder_length, micromodule_length;
0069 double absAlX_X_, absAlX_Y_, absAlX_subtr1_Xshift_, absAlX_subtr1_Yshift_, rMax_Abs_Al_;
0070 double absAlY_X_, absAlY_Y_, absAlY_subtr1_Xshift_, absAlY_subtr1_Yshift_;
0071 double LdrBck_Length, LdrFrnt_Length, LdrFrnt_Offset, LdrBck_Offset, ceramic_length, wedge_back_thick;
0072 };
0073
0074 DDEcalPreshowerAlgo::DDEcalPreshowerAlgo() : DDAlgorithm() {
0075 #ifdef EDM_ML_DEBUG
0076 edm::LogVerbatim("EcalGeom") << "DDEcalPreshowerAlgo info: Creating an instance";
0077 #endif
0078 }
0079
0080 void DDEcalPreshowerAlgo::initialize(const DDNumericArguments& nArgs,
0081 const DDVectorArguments& vArgs,
0082 const DDMapArguments& mArgs,
0083 const DDStringArguments& sArgs,
0084 const DDStringVectorArguments& vsArgs) {
0085 edm::LogVerbatim("EcalGeom") << "DDEcalPreshowerAlgo info: Initialize";
0086
0087 asym_ladd_ = vArgs["ASYMETRIC_LADDER"];
0088 types_l5_ = vsArgs["TYPES_OF_LADD_L5"];
0089 types_l4_ = vsArgs["TYPES_OF_LADD_L4"];
0090 ladd_l5_map_ = vArgs["LADD_L5_MAP"];
0091 ladd_l4_map_ = vArgs["LADD_L4_MAP"];
0092 noLaddInCol_ = vArgs["NUMB_OF_LADD_IN_COL"];
0093 startOfFirstLadd_ = vArgs["START_OF_1ST_LADD"];
0094 typeOfLaddRow0 = vsArgs["TYPE_OF_LADD_1"];
0095 typeOfLaddRow1 = vsArgs["TYPE_OF_LADD_2"];
0096 typeOfLaddRow2 = vsArgs["TYPE_OF_LADD_3"];
0097 typeOfLaddRow3 = vsArgs["TYPE_OF_LADD_4"];
0098 thickLayers_ = vArgs["Layers"];
0099 thickness_ = double(nArgs["PRESH_Z_TOTAL"]);
0100 materials_ = vsArgs["LayMat"];
0101 layName_ = vsArgs["LayName"];
0102 rmaxVec = vArgs["R_MAX"];
0103 rminVec = vArgs["R_MIN"];
0104 waf_intra_col_sep = double(nArgs["waf_intra_col_sep"]);
0105 waf_inter_col_sep = double(nArgs["waf_inter_col_sep"]);
0106 waf_active = double(nArgs["waf_active"]);
0107 wedge_length = double(nArgs["wedge_length"]);
0108 wedge_offset = double(nArgs["wedge_offset"]);
0109 zwedge_ceramic_diff = double(nArgs["zwedge_ceramic_diff"]);
0110 ywedge_ceramic_diff = double(nArgs["ywedge_ceramic_diff"]);
0111 ceramic_length = double(nArgs["ceramic_length"]);
0112 wedge_angle = double(nArgs["wedge_angle"]);
0113 wedge_back_thick = double(nArgs["wedge_back_thick"]);
0114 ladder_thick = double(nArgs["ladder_thick"]);
0115 ladder_width = double(nArgs["ladder_width"]);
0116 micromodule_length = double(nArgs["micromodule_length"]);
0117 box_thick = double(nArgs["box_thick"]);
0118 abs1stx = vArgs["1ST_ABSX"];
0119 abs1sty = vArgs["1ST_ABSY"];
0120 abs2ndx = vArgs["2ND_ABSX"];
0121 abs2ndy = vArgs["2ND_ABSY"];
0122 ladPfx_ = vsArgs["LadPrefix"];
0123 LaddMaterial_ = sArgs["LadderMaterial"];
0124 LdrFrnt_Length = double(nArgs["LdrFrnt_Length"]);
0125 LdrFrnt_Offset = double(nArgs["LdrFrnt_Offset"]);
0126 LdrBck_Length = double(nArgs["LdrBck_Length"]);
0127 LdrBck_Offset = double(nArgs["LdrBck_Offset"]);
0128 dee_separation = double(nArgs["dee_sep"]);
0129 In_rad_Abs_Al = double(nArgs["R_MIN_Abs_Al"]);
0130 In_rad_Abs_Pb = double(nArgs["R_MIN_Abs_Pb"]);
0131 rMax_Abs_Al_ = double(nArgs["R_MAX_Abs_Al"]);
0132 absAlX_X_ = double(nArgs["AbsAlX_X"]);
0133 absAlX_Y_ = double(nArgs["AbsAlX_Y"]);
0134 absAlX_subtr1_Xshift_ = double(nArgs["AbsAlX_subtr1_Xshift"]);
0135 absAlX_subtr1_Yshift_ = double(nArgs["AbsAlX_subtr1_Yshift"]);
0136 absAlY_X_ = double(nArgs["AbsAlY_X"]);
0137 absAlY_Y_ = double(nArgs["AbsAlY_Y"]);
0138 absAlY_subtr1_Xshift_ = double(nArgs["AbsAlY_subtr1_Xshift"]);
0139 absAlY_subtr1_Yshift_ = double(nArgs["AbsAlY_subtr1_Yshift"]);
0140 }
0141
0142 void DDEcalPreshowerAlgo::execute(DDCompactView& cpv) {
0143 #ifdef EDM_ML_DEBUG
0144 edm::LogVerbatim("EcalGeom") << "******** DDEcalPreshowerAlgo execute!";
0145 #endif
0146
0147 doLayers(cpv);
0148
0149 doLadders(cpv);
0150
0151 doSens(cpv);
0152 }
0153
0154 void DDEcalPreshowerAlgo::doLayers(DDCompactView& cpv) {
0155 double zpos = -thickness_ / 2., sdx(0), sdy(0), bdx(0), bdy(0);
0156
0157 for (size_t i = 0; i < thickLayers_.size(); ++i) {
0158 int I = int(i) + 1;
0159
0160 double rIn(0), rOut(0), zHalf(0);
0161
0162
0163 DDName ddname(getLayName(i), "esalgo");
0164
0165
0166 rIn = rminVec[i];
0167 rOut = rmaxVec[i];
0168 zHalf = thickLayers_[i] / 2.;
0169
0170
0171 DDSolid solid = DDSolidFactory::tubs(ddname, zHalf, rIn, rOut, 0., 360. * CLHEP::deg);
0172 #ifdef EDM_ML_DEBUG
0173 edm::LogVerbatim("SFGeomX") << ddname << " Tubs " << zHalf << ":" << rIn << ":" << rOut << ":0:360";
0174 #endif
0175 DDLogicalPart layer = DDLogicalPart(ddname, getMaterial(i), solid);
0176
0177
0178 zpos += zHalf;
0179
0180
0181
0182 if (I == 2 || I == 28 || I == 13 || I == 23) {
0183 zpos += zHalf;
0184 continue;
0185 }
0186
0187 if (I == 12) {
0188 zlead1_ = zpos + zHalf;
0189 }
0190 if (I == 22) {
0191 zlead2_ = zpos + zHalf;
0192 }
0193
0194 if (I == 10 || I == 20) {
0195
0196 int absz = 0;
0197 double outalbx, outalby, shiftR, outalbx2, outalby2, shiftR2;
0198
0199 absz = int(abs1stx.size());
0200 if (I == 20)
0201 absz = int(abs2ndx.size());
0202 int cutabsx = -1, cutabsy = -1;
0203
0204 DDName dd_tmp_name_b(getLayName(i) + "Lcut", "esalgo");
0205 DDName dd_tmp_name_c(getLayName(i) + "tmpb", "esalgo");
0206 DDName dd_tmp_name_d(getLayName(i) + "LinPb", "esalgo");
0207 DDName dd_tmp_name_e(getLayName(i) + "LinAl", "esalgo");
0208 DDName dd_tmp_name_f(getLayName(i) + "LOutAl", "esalgo");
0209
0210 std::ostringstream tmp_Alname_fin;
0211 tmp_Alname_fin << getLayName(i) << "LtmpAl" << absz - 1;
0212 DDName dd_Alname_fin(tmp_Alname_fin.str(), "esalgo");
0213
0214 DDSolid Outer_Al = DDSolid(dd_Alname_fin);
0215
0216 DDLogicalPart layerFinOutAl = DDLogicalPart(dd_tmp_name_f, getMaterial(i - 1), Outer_Al);
0217
0218 DDName dd_Alname_f(getLayName(i) + "LOutAl", "esalgo");
0219 DDName dd_Alname_g(getLayName(i) + "LOutAl2", "esalgo");
0220 DDName dd_Alname_h(getLayName(i) + "LOutAltmp", "esalgo");
0221 DDName dd_Alname_i(getLayName(i) + "LOutAltmp2", "esalgo");
0222 DDName dd_Alname_j(getLayName(i) + "LOutAltmp3", "esalgo");
0223 DDName dd_Alname_k(getLayName(i) + "LOutAltmp4", "esalgo");
0224 DDName dd_Alname_l(getLayName(i) + "LOutAltmp5", "esalgo");
0225 DDName dd_Alname_m(getLayName(i) + "LOutAltmp6", "esalgo");
0226
0227 DDSolid Out_Al =
0228 DDSolidFactory::tubs(dd_Alname_f, zHalf - 0.1 * mm, rMax_Abs_Al_ - 20 * cm, rMax_Abs_Al_, 0., 90. * deg);
0229 #ifdef EDM_ML_DEBUG
0230 edm::LogVerbatim("SFGeomX") << dd_Alname_f << " Tubs " << (zHalf - 0.1 * mm) << ":" << (rMax_Abs_Al_ - 20 * cm)
0231 << ":" << rMax_Abs_Al_ << ":0:90";
0232 #endif
0233
0234 outalbx = absAlX_X_ * 0.1;
0235 outalby = rMax_Abs_Al_ + 0.1 * mm - absAlX_subtr1_Yshift_;
0236 shiftR = absAlX_subtr1_Yshift_;
0237 if (I == 20) {
0238 outalbx = absAlY_X_ * 0.1;
0239 outalby = rMax_Abs_Al_ + 0.1 * mm - absAlY_subtr1_Yshift_;
0240 shiftR = absAlY_subtr1_Xshift_;
0241 }
0242 DDSolid OutAltmp = DDSolidFactory::box(dd_Alname_h, outalbx / 2 + 0.1 * mm, outalby / 2 + 0.1 * mm, zHalf);
0243 DDSolid Out_Altmp3 = DDSolidFactory::subtraction(
0244 dd_Alname_j, Out_Al, OutAltmp, DDTranslation(outalbx / 2, outalby / 2 + shiftR, 0), DDRotation());
0245 #ifdef EDM_ML_DEBUG
0246 edm::LogVerbatim("SFGeomX") << dd_Alname_h << " Box " << (outalbx / 2 + 0.1 * mm) << ":"
0247 << (outalby / 2 + 0.1 * mm) << ":" << zHalf;
0248 edm::LogVerbatim("SFGeomX") << dd_Alname_j << " Subtraction " << Out_Al.name() << ":" << OutAltmp.name() << " at "
0249 << DDTranslation(outalbx / 2, outalby / 2 + shiftR, 0) << " no rotation";
0250 #endif
0251 outalby2 = absAlX_Y_ * 0.1;
0252 outalbx2 = rMax_Abs_Al_ + 0.1 * mm - absAlX_subtr1_Xshift_;
0253 shiftR2 = absAlX_subtr1_Xshift_;
0254 if (I == 20) {
0255 outalby2 = absAlY_Y_ * 0.1;
0256 outalbx2 = rMax_Abs_Al_ + 0.1 * mm - absAlY_subtr1_Xshift_;
0257 shiftR2 = absAlY_subtr1_Xshift_;
0258 }
0259 DDSolid OutAltmp2 = DDSolidFactory::box(dd_Alname_i, outalbx2 / 2 + 0.1 * mm, outalby2 / 2 + 0.1 * mm, zHalf);
0260 DDSolid Out_Altmp4 = DDSolidFactory::subtraction(
0261 dd_Alname_k, Out_Altmp3, OutAltmp2, DDTranslation(outalbx2 / 2 + shiftR2, outalby2 / 2, 0), DDRotation());
0262 DDSolid Out_Altmp5 = DDSolidFactory::unionSolid(
0263 dd_Alname_l, Out_Altmp4, Out_Altmp4, DDTranslation(0, 0, 0), DDRotation("esalgo:RABS90"));
0264 DDSolid Out_Altmp6 = DDSolidFactory::unionSolid(
0265 dd_Alname_m, Out_Altmp5, Out_Altmp4, DDTranslation(0, 0, 0), DDRotation("esalgo:RABS180B"));
0266 DDSolid Out_Al2 = DDSolidFactory::unionSolid(
0267 dd_Alname_g, Out_Altmp6, Out_Altmp4, DDTranslation(0, 0, 0), DDRotation("esalgo:R180"));
0268 #ifdef EDM_ML_DEBUG
0269 edm::LogVerbatim("SFGeomX") << dd_Alname_i << " Box " << (outalbx2 / 2 + 0.1 * mm) << ":"
0270 << (outalby2 / 2 + 0.1 * mm) << ":" << zHalf;
0271 edm::LogVerbatim("SFGeomX") << dd_Alname_k << " Subtraction " << Out_Altmp3.name() << ":" << OutAltmp2.name()
0272 << " at " << DDTranslation(outalbx2 / 2 + shiftR2, outalby2 / 2, 0) << " no rotation";
0273 edm::LogVerbatim("SFGeomX") << dd_Alname_l << " Union " << Out_Altmp4.name() << ":" << Out_Altmp4.name() << " at "
0274 << DDTranslation(0, 0, 0) << " rotation esalgo:RABS90";
0275 edm::LogVerbatim("SFGeomX") << dd_Alname_m << " Union " << Out_Altmp5.name() << ":" << Out_Altmp4.name() << " at "
0276 << DDTranslation(0, 0, 0) << " rotation esalgo:RABS180B";
0277 edm::LogVerbatim("SFGeomX") << dd_Alname_g << " Union " << Out_Altmp6.name() << ":" << Out_Altmp4.name() << " at "
0278 << DDTranslation(0, 0, 0) << " rotation esalgo:R180";
0279 edm::LogVerbatim("SFGeomX") << Outer_Al;
0280 #endif
0281
0282 for (int L = 0; L < absz; ++L) {
0283 int K = L;
0284 std::ostringstream tmp_name_b, tmp_name_b2, tmp_FAl_name_c, tmp_FAl_name_d1, tmp_FAl_name_d2, tmp_FAl_name_d3,
0285 tmp_FAl_name_d;
0286 tmp_name_b << getLayName(i) << "L" << K;
0287 tmp_name_b2 << getLayName(i) << "Lb2" << K;
0288
0289 if (L == 0)
0290 tmp_FAl_name_c << getLayName(i) << "LOutAl2";
0291 if (L > 0)
0292 tmp_FAl_name_c << getLayName(i) << "LtmpAl" << K - 1;
0293
0294 tmp_FAl_name_d1 << getLayName(i) << "LtmpAl" << K << "_1";
0295 tmp_FAl_name_d2 << getLayName(i) << "LtmpAl" << K << "_2";
0296 tmp_FAl_name_d3 << getLayName(i) << "LtmpAl" << K << "_3";
0297 tmp_FAl_name_d << getLayName(i) << "LtmpAl" << K;
0298
0299 DDName dd_tmp_name_b(tmp_name_b.str(), "esalgo");
0300 DDName dd_tmp_name_b2(tmp_name_b2.str(), "esalgo");
0301 DDName dd_FAl_name_c(tmp_FAl_name_c.str(), "esalgo");
0302 DDName dd_FAl_name_d1(tmp_FAl_name_d1.str(), "esalgo");
0303 DDName dd_FAl_name_d2(tmp_FAl_name_d2.str(), "esalgo");
0304 DDName dd_FAl_name_d3(tmp_FAl_name_d3.str(), "esalgo");
0305 DDName dd_FAl_name_d(tmp_FAl_name_d.str(), "esalgo");
0306
0307 if (L == 0)
0308 bdx = std::abs(abs1stx[K]) / 2;
0309 if (L > 0)
0310 bdx = std::abs(abs1stx[K] - abs1stx[K - 1]) / 2;
0311 bdy = abs1sty[K];
0312 if (abs1stx[K] < rIn + 30 * cm) {
0313 bdy = abs1sty[K] / 2 - 30 * cm;
0314 cutabsx = K;
0315 }
0316
0317 if (I == 20) {
0318 if (L == 0)
0319 bdx = std::abs(abs2ndx[K]) / 2;
0320 if (L > 0)
0321 bdx = std::abs(abs2ndx[K] - abs2ndx[K - 1]) / 2;
0322 bdy = abs2ndy[K];
0323 }
0324
0325 if ((abs2ndx[K] < rIn + 30 * cm) && I == 20) {
0326 bdy = abs2ndy[K] / 2 - 30 * cm;
0327 cutabsy = K;
0328 }
0329
0330 DDSolid solid_b = DDSolidFactory::box(dd_tmp_name_b, bdx, bdy, zHalf);
0331 DDSolid solid_b2 = DDSolidFactory::box(dd_tmp_name_b2, bdx + 0.1 * mm, bdy + 0.1 * mm, zHalf);
0332 #ifdef EDM_ML_DEBUG
0333 edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Box " << bdx << ":" << bdy << ":" << zHalf;
0334 edm::LogVerbatim("SFGeomX") << dd_tmp_name_b2 << " Box " << (bdx + 0.1 * mm) << ":" << (bdy + 0.1 * mm) << ":"
0335 << zHalf;
0336 #endif
0337
0338 sdx = abs1stx[K] - bdx;
0339 sdy = 0;
0340 if (abs1stx[K] < rIn + 30 * cm)
0341 sdy = abs1sty[K] - bdy;
0342
0343 if (I == 20) {
0344 sdx = abs2ndx[K] - bdx;
0345 sdy = 0;
0346 }
0347 if ((abs2ndx[K] < rIn + 30 * cm) && I == 20)
0348 sdy = abs2ndy[K] - bdy;
0349
0350 DDLogicalPart layer = DDLogicalPart(dd_tmp_name_b, getMaterial(i), solid_b);
0351
0352 cpv.position(layer, layerFinOutAl, 1, DDTranslation(sdx, sdy, 0), DDRotation());
0353 cpv.position(layer, layerFinOutAl, 2, DDTranslation(-sdx, sdy, 0), DDRotation());
0354 #ifdef EDM_ML_DEBUG
0355 edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << layerFinOutAl.name() << " at "
0356 << DDTranslation(sdx, sdy, 0) << " no rotation";
0357 edm::LogVerbatim("SFGeom") << layer.name() << " copy 2 in " << layerFinOutAl.name() << " at "
0358 << DDTranslation(-sdx, sdy, 0) << " no rotation";
0359 #endif
0360 DDSolid solid_c = DDSolid(dd_FAl_name_c);
0361 DDSolid solid_d1 =
0362 DDSolidFactory::unionSolid(dd_FAl_name_d1, solid_c, solid_b2, DDTranslation(sdx, sdy, 0), DDRotation());
0363 DDSolid solid_d2 =
0364 DDSolidFactory::unionSolid(dd_FAl_name_d, solid_d1, solid_b2, DDTranslation(-sdx, -sdy, 0), DDRotation());
0365 #ifdef EDM_ML_DEBUG
0366 edm::LogVerbatim("SFGeomX") << dd_FAl_name_d1 << " Union " << solid_c.name() << ":" << solid_b2.name() << " at "
0367 << DDTranslation(sdx, sdy, 0) << " no rotation";
0368 edm::LogVerbatim("SFGeomX") << dd_FAl_name_d << " Union " << solid_d1.name() << ":" << solid_b2.name() << " at "
0369 << DDTranslation(-sdx, -sdy, 0) << " no rotation";
0370 #endif
0371 if (((abs1stx[K] < rIn + 30 * cm) && I == 10) || ((abs2ndx[K] < rIn + 30 * cm) && I == 20)) {
0372 cpv.position(layer, layerFinOutAl, 3, DDTranslation(sdx, -sdy, 0), DDRotation());
0373 cpv.position(layer, layerFinOutAl, 4, DDTranslation(-sdx, -sdy, 0), DDRotation());
0374 #ifdef EDM_ML_DEBUG
0375 edm::LogVerbatim("SFGeom") << layer.name() << " copy 3 in " << layerFinOutAl.name() << " at "
0376 << DDTranslation(sdx, -sdy, 0) << " no rotation";
0377 edm::LogVerbatim("SFGeom") << layer.name() << " copy 4 in " << layerFinOutAl.name() << " at "
0378 << DDTranslation(-sdx, -sdy, 0) << " no rotation";
0379 #endif
0380 DDSolid solid_c = DDSolid(dd_FAl_name_c);
0381 DDSolid solid_d1 =
0382 DDSolidFactory::unionSolid(dd_FAl_name_d1, solid_c, solid_b2, DDTranslation(sdx, sdy, 0), DDRotation());
0383 DDSolid solid_d2 =
0384 DDSolidFactory::unionSolid(dd_FAl_name_d2, solid_d1, solid_b2, DDTranslation(sdx, -sdy, 0), DDRotation());
0385 DDSolid solid_d3 =
0386 DDSolidFactory::unionSolid(dd_FAl_name_d3, solid_d2, solid_b2, DDTranslation(-sdx, sdy, 0), DDRotation());
0387 DDSolid solid_d4 =
0388 DDSolidFactory::unionSolid(dd_FAl_name_d, solid_d3, solid_b2, DDTranslation(-sdx, -sdy, 0), DDRotation());
0389 #ifdef EDM_ML_DEBUG
0390 edm::LogVerbatim("SFGeomX") << dd_FAl_name_d1 << " Union " << solid_c.name() << ":" << solid_b2.name()
0391 << " at " << DDTranslation(sdx, sdy, 0) << " no rotation";
0392 edm::LogVerbatim("SFGeomX") << dd_FAl_name_d2 << " Union " << solid_d1.name() << ":" << solid_b2.name()
0393 << " at " << DDTranslation(sdx, -sdy, 0) << " no rotation";
0394 edm::LogVerbatim("SFGeomX") << dd_FAl_name_d3 << " Union " << solid_d2.name() << ":" << solid_b2.name()
0395 << " at " << DDTranslation(-sdx, sdy, 0) << " no rotation";
0396 edm::LogVerbatim("SFGeomX") << dd_FAl_name_d << " Union " << solid_d3.name() << ":" << solid_b2.name()
0397 << " at " << DDTranslation(-sdx, -sdy, 0) << " no rotation";
0398 #endif
0399 }
0400 }
0401
0402 bdx = abs1stx[cutabsx];
0403 if (I == 20)
0404 bdx = abs2ndx[cutabsy];
0405 bdy = 2 * 30 * cm;
0406
0407 DDSolid solidcut = DDSolidFactory::box(dd_tmp_name_b, bdx, bdy, zHalf);
0408
0409 DDSolid iner = DDSolidFactory::tubs(dd_tmp_name_c, zHalf + 0.1 * mm, 0, In_rad_Abs_Pb, 0., 360. * deg);
0410
0411 DDSolid final = DDSolidFactory::subtraction(dd_tmp_name_d, solidcut, iner, DDTranslation(0, 0, 0), DDRotation());
0412 #ifdef EDM_ML_DEBUG
0413 edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Box " << bdx << ":" << bdy << ":" << zHalf;
0414 edm::LogVerbatim("SFGeomX") << dd_tmp_name_c << " Tubs " << (zHalf + 0.1 * mm) << ":0:" << In_rad_Abs_Pb
0415 << ":0:360";
0416 edm::LogVerbatim("SFGeomX") << dd_tmp_name_d << " Subtraction " << solidcut.name() << ":" << iner.name()
0417 << " at (0,0,0) no rotation";
0418 #endif
0419
0420 DDLogicalPart layer = DDLogicalPart(dd_tmp_name_d, getMaterial(i), final);
0421 cpv.position(layer, parent(), 1, DDTranslation(0, 0, zpos), DDRotation());
0422 #ifdef EDM_ML_DEBUG
0423 edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << parent().name() << " at "
0424 << DDTranslation(0, 0, zpos) << " no rotation";
0425 #endif
0426 DDSolid iner_Al =
0427 DDSolidFactory::tubs(dd_tmp_name_e, zHalf, In_rad_Abs_Al, In_rad_Abs_Pb - 0.01 * mm, 0., 360. * deg);
0428 #ifdef EDM_ML_DEBUG
0429 edm::LogVerbatim("SFGeomX") << dd_tmp_name_e << " Tubs " << zHalf << ":" << In_rad_Abs_Al << ":"
0430 << (In_rad_Abs_Pb - 0.01 * mm) << ":0:360";
0431 #endif
0432
0433 DDLogicalPart layerAl = DDLogicalPart(dd_tmp_name_e, getMaterial(i - 1), iner_Al);
0434 cpv.position(layerAl, parent(), 1, DDTranslation(0, 0, zpos), DDRotation());
0435 cpv.position(layerFinOutAl, parent(), 1, DDTranslation(0, 0, zpos), DDRotation());
0436 #ifdef EDM_ML_DEBUG
0437 edm::LogVerbatim("SFGeom") << layerAl.name() << " copy 1 in " << parent().name() << " at "
0438 << DDTranslation(0, 0, zpos) << " no rotation";
0439 edm::LogVerbatim("SFGeom") << layerFinOutAl.name() << " copy 1 in " << parent().name() << " at "
0440 << DDTranslation(0, 0, zpos) << " no rotation";
0441 #endif
0442 } else {
0443 cpv.position(layer, parent(), 1, DDTranslation(0., 0., zpos), DDRotation());
0444 #ifdef EDM_ML_DEBUG
0445 edm::LogVerbatim("SFGeom") << layer.name() << " copy 1 in " << parent().name() << " at "
0446 << DDTranslation(0, 0, zpos) << " no rotation";
0447 #endif
0448 }
0449 zpos += zHalf;
0450 }
0451 }
0452
0453 void DDEcalPreshowerAlgo::doLadders(DDCompactView& cpv) {
0454 double xpos(0), ypos(0), zpos(0), sdx(0), sdy(0), sdz(0);
0455 double prev_length_(0), ladder_new_length_(0), ladd_shift_(0), ladder_length(0);
0456 int enb(0), swed_scopy_glob(0);
0457 double sdxe[50] = {0}, sdye[50] = {0}, sdze[50] = {0};
0458 double sdxe2[50] = {0}, sdye2[50] = {0}, sdze2[50] = {0}, sdxe3[50] = {0}, sdye3[50] = {0}, sdze3[50] = {0};
0459
0460 for (int M = 0; M < int(types_l5_.size() + types_l4_.size()); M++) {
0461 int scopy(0);
0462 double boxax(0), boxay(0), boxaz(0);
0463 int ladd_not_plain(0), ladd_subtr_no(0), ladd_upper(0), ladd_side(0);
0464
0465 DDSolid solid_lfront = DDSolidFactory::trap(DDName("LDRFRNT", "esalgo"),
0466 LdrFrnt_Length / 2,
0467 -wedge_angle,
0468 0,
0469 ladder_width / 2,
0470 (ladder_thick) / 2,
0471 (ladder_thick) / 2,
0472 0,
0473 ladder_width / 2,
0474 (ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2,
0475 (ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2,
0476 0);
0477
0478 DDSolid solid_lbck = DDSolidFactory::trap(DDName("LDRBCK", "esalgo"),
0479 LdrBck_Length / 2,
0480 -wedge_angle,
0481 0,
0482 ladder_width / 2,
0483 (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2,
0484 (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2,
0485 0,
0486 ladder_width / 2,
0487 (ladder_thick - wedge_back_thick) / 2,
0488 (ladder_thick - wedge_back_thick) / 2,
0489 0);
0490
0491 DDSolid solid_lfhalf = DDSolidFactory::trap(DDName("LDRFHALF", "esalgo"),
0492 LdrFrnt_Length / 2,
0493 -wedge_angle,
0494 0,
0495 (ladder_width / 2) / 2,
0496 (ladder_thick) / 2,
0497 (ladder_thick) / 2,
0498 0,
0499 (ladder_width / 2) / 2,
0500 (ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2,
0501 (ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2,
0502 0);
0503
0504 DDSolid solid_lbhalf = DDSolidFactory::trap(DDName("LDRBHALF", "esalgo"),
0505 LdrBck_Length / 2,
0506 -wedge_angle,
0507 0,
0508 (ladder_width / 2) / 2,
0509 (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2,
0510 (box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2,
0511 0,
0512 (ladder_width / 2) / 2,
0513 (ladder_thick - wedge_back_thick) / 2,
0514 (ladder_thick - wedge_back_thick) / 2,
0515 0);
0516
0517 DDSolid solid_lfhtrunc =
0518 DDSolidFactory::trap(DDName("LDRFHTR", "esalgo"),
0519 (LdrFrnt_Length - waf_active) / 2,
0520 -wedge_angle,
0521 0,
0522 (ladder_width / 2) / 2,
0523 (ladder_thick) / 2,
0524 (ladder_thick) / 2,
0525 0,
0526 (ladder_width / 2) / 2,
0527 (ladder_thick - (ceramic_length - waf_active) * sin(wedge_angle * 2)) / 2,
0528 (ladder_thick - (ceramic_length - waf_active) * sin(wedge_angle * 2)) / 2,
0529 0);
0530 #ifdef EDM_ML_DEBUG
0531 edm::LogVerbatim("SFGeomX") << DDName("LDRFRNT", "esalgo") << " Trap " << (LdrFrnt_Length / 2) << ":"
0532 << -wedge_angle / CLHEP::deg << ":0:" << (ladder_width / 2) << ":" << (ladder_thick / 2)
0533 << ":" << (ladder_thick / 2) << ":0:" << (ladder_width / 2) << ":"
0534 << ((ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2) << ":"
0535 << ((ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2) << ":0";
0536 edm::LogVerbatim("SFGeomX") << DDName("LDRBCK", "esalgo") << " Trap " << (LdrBck_Length / 2) << ":"
0537 << -wedge_angle / CLHEP::deg << ":0:" << (ladder_width / 2) << ":"
0538 << ((box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2) << ":"
0539 << ((box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2) << ":0:" << (ladder_width / 2)
0540 << ":" << ((ladder_thick - wedge_back_thick) / 2) << ":"
0541 << ((ladder_thick - wedge_back_thick) / 2) << ":0";
0542 edm::LogVerbatim("SFGeomX") << DDName("LDRFHALF", "esalgo") << " Trap " << (LdrFrnt_Length / 2) << ":"
0543 << -wedge_angle / CLHEP::deg << ":0:" << ((ladder_width / 2) / 2) << ":"
0544 << (ladder_thick / 2) << ":" << (ladder_thick / 2) << ":0:" << ((ladder_width / 2) / 2)
0545 << ":" << ((ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2) << ":"
0546 << ((ladder_thick - ceramic_length * sin(wedge_angle * 2)) / 2) << ":0";
0547 edm::LogVerbatim("SFGeomX") << DDName("LDRBHALF", "esalgo") << " Trap " << (LdrBck_Length / 2) << ":"
0548 << -wedge_angle / CLHEP::deg << ":0:" << ((ladder_width / 2) / 2) << ":"
0549 << ((box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2) << ":"
0550 << ((box_thick / cos(wedge_angle * 2) + 0.02 * mm) / 2)
0551 << ":0:" << ((ladder_width / 2) / 2) << ":" << ((ladder_thick - wedge_back_thick) / 2)
0552 << ":" << ((ladder_thick - wedge_back_thick) / 2) << ":0";
0553 edm::LogVerbatim("SFGeomX") << DDName("LDRFHTR", "esalgo") << " Trap " << ((LdrFrnt_Length - waf_active) / 2) << ":"
0554 << -wedge_angle / CLHEP::deg << ":0:" << ((ladder_width / 2) / 2) << ":"
0555 << ((ladder_thick) / 2) << ":" << ((ladder_thick) / 2)
0556 << ":0:" << ((ladder_width / 2) / 2) << ":"
0557 << ((ladder_thick - (ceramic_length - waf_active) * sin(wedge_angle * 2)) / 2) << ":"
0558 << ((ladder_thick - (ceramic_length - waf_active) * sin(wedge_angle * 2)) / 2) << ":0";
0559 #endif
0560
0561
0562
0563 if (M < int(types_l5_.size())) {
0564 for (int i = 0; i <= 1; i++) {
0565 for (int j = 0; j <= 3; j++) {
0566 if (ladd_l5_map_[(i + j * 2 + M * 10)] != 1) {
0567 ladd_not_plain = 1;
0568 ladd_subtr_no++;
0569 if (j > 1)
0570 ladd_upper = 1;
0571 ladd_side = i;
0572 }
0573 }
0574 }
0575 #ifdef EDM_ML_DEBUG
0576 edm::LogVerbatim("SFGeomX") << "Side " << ladd_side << ":" << ladd_upper << ":" << ladd_subtr_no << ":"
0577 << ladd_not_plain << " Index " << M << ":" << types_l5_.size();
0578 #endif
0579 DDName ddname(getLadPrefix(0) + types_l5_[M], "esalgo");
0580 ladder_length = micromodule_length + 4 * waf_active + 0.1 * mm;
0581
0582 if (ladd_not_plain) {
0583
0584 std::ostringstream tmp_name_5b, tmp_name_5c, tmp_name_5d;
0585 if (ladd_upper) {
0586 }
0587 else {
0588 enb++;
0589 std::ostringstream tmp_name_5b, tmp_name_5c, tmp_name_5d;
0590 DDName dd_tmp_name_5a(getLadPrefix(2), "esalgo");
0591 tmp_name_5b << getLadPrefix(3) << enb;
0592 DDName dd_tmp_name_5b(tmp_name_5b.str(), "esalgo");
0593 tmp_name_5c << getLadPrefix(4) << enb;
0594 DDName dd_tmp_name_5c(tmp_name_5c.str(), "esalgo");
0595 tmp_name_5d << getLadPrefix(5) << enb;
0596 DDName dd_tmp_name_5d(tmp_name_5d.str(), "esalgo");
0597
0598 DDName dd_tmp_name_5e(getLadPrefix(6), "esalgo");
0599
0600 boxay = ladder_length - LdrFrnt_Length - LdrBck_Length;
0601 boxax = ladder_width;
0602 boxaz = ladder_thick;
0603
0604 DDSolid solid_5a = DDSolidFactory::box(dd_tmp_name_5a, boxax / 2, boxay / 2, boxaz / 2.);
0605 #ifdef EDM_ML_DEBUG
0606 edm::LogVerbatim("SFGeomX") << dd_tmp_name_5a << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":"
0607 << (boxaz / 2);
0608 #endif
0609 if (ladd_side == 0)
0610 sdxe[enb] = ladder_width / 4;
0611 sdye[enb] = -boxay / 2 - LdrFrnt_Length / 2;
0612 sdze[enb] = -ladder_thick / 2. + LdrFrnt_Offset;
0613 if (ladd_side == 1)
0614 sdxe[enb] = -ladder_width / 4;
0615
0616 DDSolid solid_5b = DDSolidFactory::unionSolid(dd_tmp_name_5b,
0617 solid_5a,
0618 solid_lfhalf,
0619 DDTranslation(sdxe[enb], sdye[enb], sdze[enb]),
0620 DDRotation("esalgo:RM1299"));
0621 #ifdef EDM_ML_DEBUG
0622 edm::LogVerbatim("SFGeomX") << dd_tmp_name_5b << " Union " << solid_5a.name() << ":" << solid_lfhalf.name()
0623 << " at " << DDTranslation(sdxe[enb], sdye[enb], sdze[enb])
0624 << " rotation esalgo:RM1299";
0625 #endif
0626
0627 if (ladd_side == 0)
0628 sdxe2[enb] = -ladder_width / 4;
0629 sdye2[enb] = -boxay / 2 - LdrFrnt_Length / 2 + waf_active / 2;
0630 sdze2[enb] = -ladder_thick / 2. + LdrFrnt_Offset + (waf_active * sin(wedge_angle * 2)) / 4;
0631 if (ladd_side == 1)
0632 sdxe2[enb] = ladder_width / 4;
0633
0634 DDSolid solid_5c = DDSolidFactory::unionSolid(dd_tmp_name_5c,
0635 solid_5b,
0636 solid_lfhtrunc,
0637 DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]),
0638 DDRotation("esalgo:RM1299"));
0639 #ifdef EDM_ML_DEBUG
0640 edm::LogVerbatim("SFGeomX") << dd_tmp_name_5c << " Union " << solid_5b.name() << ":" << solid_lfhtrunc.name()
0641 << " at " << DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb])
0642 << " rotation esalgo:RM1299";
0643 #endif
0644
0645 sdxe3[enb] = 0;
0646 sdye3[enb] = boxay / 2 + LdrBck_Length / 2;
0647 sdze3[enb] = -ladder_thick / 2. + LdrBck_Offset;
0648 DDSolid solid = DDSolidFactory::unionSolid(ddname,
0649 solid_5c,
0650 solid_lbck,
0651 DDTranslation(sdxe3[enb], sdye3[enb], sdze3[enb]),
0652 DDRotation("esalgo:RM1299"));
0653 #ifdef EDM_ML_DEBUG
0654 edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_5c.name() << ":" << solid_lbck.name() << " at "
0655 << DDTranslation(sdxe3[enb], sdye3[enb], sdze3[enb]) << " rotation esalgo:RM1299";
0656 #endif
0657
0658 DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid);
0659 DDName ddname2(getLadPrefix(1) + types_l5_[M], "esalgo");
0660 DDLogicalPart ladder2 = DDLogicalPart(ddname2, getLaddMaterial(), solid);
0661 }
0662
0663 }
0664 else {
0665 DDName dd_tmp_name_5pa(getLadPrefix(2) + "5p", "esalgo");
0666 DDName dd_tmp_name_5pb(getLadPrefix(3) + "5p", "esalgo");
0667
0668 boxay = ladder_length - LdrFrnt_Length - LdrBck_Length;
0669 boxax = ladder_width;
0670 boxaz = ladder_thick;
0671
0672 DDSolid solid_5pa = DDSolidFactory::box(dd_tmp_name_5pa, boxax / 2, boxay / 2, boxaz / 2.);
0673 #ifdef EDM_ML_DEBUG
0674 edm::LogVerbatim("SFGeomX") << dd_tmp_name_5pa << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":"
0675 << (boxaz / 2);
0676 #endif
0677 sdx = 0;
0678 sdy = -boxay / 2 - LdrFrnt_Length / 2;
0679 sdz = -ladder_thick / 2. + LdrFrnt_Offset;
0680
0681 DDSolid solid_5pb = DDSolidFactory::unionSolid(
0682 dd_tmp_name_5pb, solid_5pa, solid_lfront, DDTranslation(sdx, sdy, sdz), DDRotation("esalgo:RM1299"));
0683 #ifdef EDM_ML_DEBUG
0684 edm::LogVerbatim("SFGeomX") << dd_tmp_name_5pb << " Union " << solid_5pa.name() << ":" << solid_lfront.name()
0685 << " at " << DDTranslation(sdx, sdy, sdz) << " rotation esalgo:RM1299";
0686 #endif
0687
0688 sdx = 0;
0689 sdy = boxay / 2 + LdrBck_Length / 2;
0690 sdz = -ladder_thick / 2. + LdrBck_Offset;
0691
0692 DDSolid solid = DDSolidFactory::unionSolid(
0693 ddname, solid_5pb, solid_lbck, DDTranslation(sdx, sdy, sdz), DDRotation("esalgo:RM1299"));
0694 #ifdef EDM_ML_DEBUG
0695 edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_5pb.name() << ":" << solid_lbck.name() << " at "
0696 << DDTranslation(sdx, sdy, sdz) << " rotation esalgo:RM1299";
0697 #endif
0698
0699 DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid);
0700 DDName ddname2(getLadPrefix(1) + types_l5_[M], "esalgo");
0701 DDLogicalPart ladder2 = DDLogicalPart(ddname2, getLaddMaterial(), solid);
0702 }
0703 }
0704
0705
0706
0707 if (M >= int(types_l5_.size())) {
0708 int d = M - types_l5_.size();
0709
0710 for (int i = 0; i <= 1; i++) {
0711 for (int j = 0; j <= 3; j++) {
0712 if (ladd_l4_map_[(i + j * 2 + (M - types_l5_.size()) * 8)] != 1) {
0713 ladd_not_plain = 1;
0714 ladd_subtr_no++;
0715 if (j > 1)
0716 ladd_upper = 1;
0717 ladd_side = i;
0718 }
0719 }
0720 }
0721 #ifdef EDM_ML_DEBUG
0722 edm::LogVerbatim("SFGeomX") << "Side " << ladd_side << ":" << ladd_upper << ":" << ladd_subtr_no << ":"
0723 << ladd_not_plain << " Index " << M << ":" << types_l5_.size();
0724 #endif
0725 DDName ddname(getLadPrefix(0) + types_l4_[d], "esalgo");
0726 ladder_length = micromodule_length + 3 * waf_active + 0.1 * mm;
0727
0728 if (ladd_not_plain) {
0729 std::ostringstream tmp_name_b, tmp_name_c, tmp_name_d;
0730 if (ladd_upper) {
0731 enb++;
0732
0733 DDName dd_tmp_name_a(getLadPrefix(7), "esalgo");
0734 tmp_name_b << getLadPrefix(8) << enb;
0735 DDName dd_tmp_name_b(tmp_name_b.str(), "esalgo");
0736 tmp_name_c << getLadPrefix(9) << enb;
0737 DDName dd_tmp_name_c(tmp_name_c.str(), "esalgo");
0738 tmp_name_d << getLadPrefix(10) << enb;
0739 DDName dd_tmp_name_d(tmp_name_d.str(), "esalgo");
0740 DDName dd_tmp_name_e(getLadPrefix(11), "esalgo");
0741
0742 boxay = ladder_length - LdrFrnt_Length - LdrBck_Length;
0743 boxax = ladder_width;
0744 boxaz = ladder_thick;
0745 DDSolid solid_a = DDSolidFactory::box(dd_tmp_name_a, boxax / 2, boxay / 2, boxaz / 2.);
0746 #ifdef EDM_ML_DEBUG
0747 edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":"
0748 << (boxaz / 2);
0749 #endif
0750
0751 sdxe[enb] = 0;
0752 sdye[enb] = -boxay / 2 - LdrFrnt_Length / 2;
0753 sdze[enb] = -ladder_thick / 2. + LdrFrnt_Offset;
0754 DDSolid solid_b = DDSolidFactory::unionSolid(dd_tmp_name_b,
0755 solid_a,
0756 solid_lfront,
0757 DDTranslation(sdxe[enb], sdye[enb], sdze[enb]),
0758 DDRotation("esalgo:RM1299"));
0759 #ifdef EDM_ML_DEBUG
0760 edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfront.name()
0761 << " at " << DDTranslation(sdxe[enb], sdye[enb], sdze[enb])
0762 << " rotation esalgo:RM1299";
0763 #endif
0764
0765 if (ladd_side == 0)
0766 sdxe2[enb] = ladder_width / 4;
0767 sdye2[enb] = boxay / 2 + LdrBck_Length / 2;
0768 sdze2[enb] = -ladder_thick / 2. + LdrBck_Offset;
0769 if (ladd_side == 1)
0770 sdxe2[enb] = -ladder_width / 4;
0771 DDSolid solid = DDSolidFactory::unionSolid(ddname,
0772 solid_b,
0773 solid_lbhalf,
0774 DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]),
0775 DDRotation("esalgo:RM1299"));
0776 #ifdef EDM_ML_DEBUG
0777 edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_b.name() << ":" << solid_lbhalf.name() << " at "
0778 << DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]) << " rotation esalgo:RM1299";
0779 #endif
0780
0781 DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid);
0782 DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo");
0783 DDLogicalPart ladder2 = DDLogicalPart(ddname2, getLaddMaterial(), solid);
0784
0785 }
0786 else {
0787 if (ladd_subtr_no > 1) {
0788 enb++;
0789
0790 DDName dd_tmp_name_a(getLadPrefix(7), "esalgo");
0791 tmp_name_b << getLadPrefix(8) << enb;
0792 DDName dd_tmp_name_b(tmp_name_b.str(), "esalgo");
0793 tmp_name_c << getLadPrefix(9) << enb;
0794 DDName dd_tmp_name_c(tmp_name_c.str(), "esalgo");
0795 tmp_name_d << getLadPrefix(10) << enb;
0796 DDName dd_tmp_name_d(tmp_name_d.str(), "esalgo");
0797 DDName dd_tmp_name_e(getLadPrefix(11), "esalgo");
0798
0799 boxay = ladder_length - LdrFrnt_Length - LdrBck_Length;
0800 boxax = ladder_width;
0801 boxaz = ladder_thick;
0802
0803 DDSolid solid_a = DDSolidFactory::box(dd_tmp_name_a, boxax / 2, boxay / 2, boxaz / 2.);
0804 #ifdef EDM_ML_DEBUG
0805 edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":"
0806 << (boxaz / 2);
0807 #endif
0808 if (ladd_side == 0)
0809 sdxe[enb] = ladder_width / 4;
0810 sdye[enb] = -boxay / 2 - LdrFrnt_Length / 2;
0811 sdze[enb] = -ladder_thick / 2. + LdrFrnt_Offset;
0812 if (ladd_side == 1)
0813 sdxe[enb] = -ladder_width / 4;
0814
0815 DDSolid solid_b = DDSolidFactory::unionSolid(dd_tmp_name_b,
0816 solid_a,
0817 solid_lfhalf,
0818 DDTranslation(sdxe[enb], sdye[enb], sdze[enb]),
0819 DDRotation("esalgo:RM1299"));
0820 #ifdef EDM_ML_DEBUG
0821 edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfhalf.name()
0822 << " at " << DDTranslation(sdxe[enb], sdye[enb], sdze[enb])
0823 << " rotation esalgo:RM1299";
0824 #endif
0825
0826 sdxe2[enb] = 0;
0827 sdye2[enb] = boxay / 2 + LdrBck_Length / 2;
0828 sdze2[enb] = -ladder_thick / 2. + LdrBck_Offset;
0829
0830 DDSolid solid = DDSolidFactory::unionSolid(ddname,
0831 solid_b,
0832 solid_lbck,
0833 DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]),
0834 DDRotation("esalgo:RM1299"));
0835 #ifdef EDM_ML_DEBUG
0836 edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_b.name() << ":" << solid_lbck.name() << " at "
0837 << DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb])
0838 << " rotation esalgo:RM1299";
0839 #endif
0840
0841 DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid);
0842 DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo");
0843 DDLogicalPart ladder2 = DDLogicalPart(ddname2, getLaddMaterial(), solid);
0844 } else {
0845 enb++;
0846 DDName dd_tmp_name_a(getLadPrefix(7), "esalgo");
0847 tmp_name_b << getLadPrefix(8) << enb;
0848 DDName dd_tmp_name_b(tmp_name_b.str(), "esalgo");
0849 tmp_name_c << getLadPrefix(9) << enb;
0850 DDName dd_tmp_name_c(tmp_name_c.str(), "esalgo");
0851 tmp_name_d << getLadPrefix(10) << enb;
0852 DDName dd_tmp_name_d(tmp_name_d.str(), "esalgo");
0853 DDName dd_tmp_name_e(getLadPrefix(11), "esalgo");
0854
0855 boxay = ladder_length - LdrFrnt_Length - LdrBck_Length;
0856 boxax = ladder_width;
0857 boxaz = ladder_thick;
0858 DDSolid solid_a = DDSolidFactory::box(dd_tmp_name_a, boxax / 2, boxay / 2, boxaz / 2.);
0859 #ifdef EDM_ML_DEBUG
0860 edm::LogVerbatim("SFGeomX") << dd_tmp_name_a << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":"
0861 << (boxaz / 2);
0862 #endif
0863 if (ladd_side == 0)
0864 sdxe[enb] = ladder_width / 4;
0865 sdye[enb] = -boxay / 2 - LdrFrnt_Length / 2;
0866 sdze[enb] = -ladder_thick / 2. + LdrFrnt_Offset;
0867 if (ladd_side == 1)
0868 sdxe[enb] = -ladder_width / 4;
0869
0870 DDSolid solid_b = DDSolidFactory::unionSolid(dd_tmp_name_b,
0871 solid_a,
0872 solid_lfhalf,
0873 DDTranslation(sdxe[enb], sdye[enb], sdze[enb]),
0874 DDRotation("esalgo:RM1299"));
0875 #ifdef EDM_ML_DEBUG
0876 edm::LogVerbatim("SFGeomX") << dd_tmp_name_b << " Union " << solid_a.name() << ":" << solid_lfhalf.name()
0877 << " at " << DDTranslation(sdxe[enb], sdye[enb], sdze[enb])
0878 << " rotation esalgo:RM1299";
0879 #endif
0880
0881 if (ladd_side == 0)
0882 sdxe2[enb] = -ladder_width / 4;
0883 sdye2[enb] = -boxay / 2 - LdrFrnt_Length / 2 + waf_active / 2;
0884 sdze2[enb] = -ladder_thick / 2. + LdrFrnt_Offset + (waf_active * sin(wedge_angle * 2)) / 4;
0885 if (ladd_side == 1)
0886 sdxe2[enb] = ladder_width / 4;
0887
0888 DDSolid solid_c = DDSolidFactory::unionSolid(dd_tmp_name_c,
0889 solid_b,
0890 solid_lfhtrunc,
0891 DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb]),
0892 DDRotation("esalgo:RM1299"));
0893 #ifdef EDM_ML_DEBUG
0894 edm::LogVerbatim("SFGeomX") << dd_tmp_name_c << " Union " << solid_b.name() << ":" << solid_lfhtrunc.name()
0895 << " at " << DDTranslation(sdxe2[enb], sdye2[enb], sdze2[enb])
0896 << " rotation esalgo:RM1299";
0897 #endif
0898
0899 sdxe3[enb] = 0;
0900 sdye3[enb] = boxay / 2 + LdrBck_Length / 2;
0901 sdze3[enb] = -ladder_thick / 2. + LdrBck_Offset;
0902 DDSolid solid = DDSolidFactory::unionSolid(ddname,
0903 solid_c,
0904 solid_lbck,
0905 DDTranslation(sdxe3[enb], sdye3[enb], sdze3[enb]),
0906 DDRotation("esalgo:RM1299"));
0907 #ifdef EDM_ML_DEBUG
0908 edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_c.name() << ":" << solid_lbck.name() << " at "
0909 << DDTranslation(sdxe3[enb], sdye3[enb], sdze3[enb])
0910 << " rotation esalgo:RM1299";
0911 #endif
0912
0913 DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid);
0914 DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo");
0915 DDLogicalPart ladder2 = DDLogicalPart(ddname2, getLaddMaterial(), solid);
0916 }
0917 }
0918
0919 }
0920 else {
0921 DDName dd_tmp_name_pa(getLadPrefix(2) + "p", "esalgo");
0922 DDName dd_tmp_name_pb(getLadPrefix(3) + "p", "esalgo");
0923
0924 boxay = ladder_length - LdrFrnt_Length - LdrBck_Length;
0925 boxax = ladder_width;
0926 boxaz = ladder_thick;
0927
0928 DDSolid solid_pa = DDSolidFactory::box(dd_tmp_name_pa, boxax / 2, boxay / 2, boxaz / 2.);
0929 #ifdef EDM_ML_DEBUG
0930 edm::LogVerbatim("SFGeomX") << dd_tmp_name_pa << " Box " << (boxax / 2) << ":" << (boxay / 2) << ":"
0931 << (boxaz / 2);
0932 #endif
0933 sdx = 0;
0934 sdy = -boxay / 2 - LdrFrnt_Length / 2;
0935 sdz = -ladder_thick / 2. + LdrFrnt_Offset;
0936
0937 DDSolid solid_pb = DDSolidFactory::unionSolid(
0938 dd_tmp_name_pb, solid_pa, solid_lfront, DDTranslation(sdx, sdy, sdz), DDRotation("esalgo:RM1299"));
0939 #ifdef EDM_ML_DEBUG
0940 edm::LogVerbatim("SFGeomX") << dd_tmp_name_pb << " Union " << solid_pa.name() << ":" << solid_lfront.name()
0941 << " at " << DDTranslation(sdx, sdy, sdz) << " rotation esalgo:RM1299";
0942 #endif
0943
0944 sdx = 0;
0945 sdy = boxay / 2 + LdrBck_Length / 2;
0946 sdz = -ladder_thick / 2. + LdrBck_Offset;
0947 DDSolid solid = DDSolidFactory::unionSolid(
0948 ddname, solid_pb, solid_lbck, DDTranslation(sdx, sdy, sdz), DDRotation("esalgo:RM1299"));
0949 #ifdef EDM_ML_DEBUG
0950 edm::LogVerbatim("SFGeomX") << ddname << " Union " << solid_pb.name() << ":" << solid_lbck.name() << " at "
0951 << DDTranslation(sdx, sdy, sdz) << " rotation esalgo:RM1299";
0952 #endif
0953 DDLogicalPart ladder = DDLogicalPart(ddname, getLaddMaterial(), solid);
0954 DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo");
0955 DDLogicalPart ladder2 = DDLogicalPart(ddname2, getLaddMaterial(), solid);
0956 }
0957 }
0958
0959
0960 swed_scopy_glob++;
0961 if (M < int(types_l5_.size())) {
0962 DDName ddname(getLadPrefix(0) + types_l5_[M], "esalgo");
0963 DDName ddname2(getLadPrefix(1) + types_l5_[M], "esalgo");
0964 for (int i = 0; i <= 1; i++) {
0965 for (int j = 0; j <= 4; j++) {
0966 xpos = (i * 2 - 1) * waf_intra_col_sep / 2.;
0967 ypos = -ladder_length / 2. + 0.05 * mm - (LdrFrnt_Length - LdrBck_Length) / 2 + wedge_length / 2. +
0968 j * waf_active;
0969 zpos = -ladder_thick / 2. + 0.005 * mm + wedge_offset;
0970 if (ladd_l5_map_[(i + j * 2 + M * 10)] == 1) {
0971 scopy++;
0972 cpv.position(DDLogicalPart("esalgo:SWED"),
0973 ddname,
0974 scopy + 1000 * swed_scopy_glob,
0975 DDTranslation(xpos, ypos, zpos),
0976 DDRotation("esalgo:RM1299"));
0977 cpv.position(DDLogicalPart("esalgo:SWED"),
0978 ddname2,
0979 scopy + 1000 * swed_scopy_glob + 100,
0980 DDTranslation(xpos, ypos, zpos),
0981 DDRotation("esalgo:RM1299"));
0982 #ifdef EDM_ML_DEBUG
0983 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SWED").name() << " copy "
0984 << (scopy + 1000 * swed_scopy_glob) << " in " << ddname << " at "
0985 << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1299";
0986 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SWED").name() << " copy "
0987 << (scopy + 1000 * swed_scopy_glob + 100) << " in " << ddname2 << " at "
0988 << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1299";
0989 #endif
0990 ypos = ypos + ywedge_ceramic_diff;
0991 zpos = -ladder_thick / 2. + 0.005 * mm + zwedge_ceramic_diff;
0992 cpv.position(DDLogicalPart("esalgo:SFBX"),
0993 ddname,
0994 scopy + 1000 * swed_scopy_glob,
0995 DDTranslation(xpos, ypos, zpos),
0996 DDRotation("esalgo:RM1298"));
0997 cpv.position(DDLogicalPart("esalgo:SFBY"),
0998 ddname2,
0999 scopy + 1000 * swed_scopy_glob,
1000 DDTranslation(xpos, ypos, zpos),
1001 DDRotation("esalgo:RM1300A"));
1002 #ifdef EDM_ML_DEBUG
1003 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFBX").name() << " copy "
1004 << (scopy + 1000 * swed_scopy_glob) << " in " << ddname << " at "
1005 << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1298";
1006 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFBY").name() << " copy "
1007 << (scopy + 1000 * swed_scopy_glob) << " in " << ddname2 << " at "
1008 << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1300A";
1009 #endif
1010 }
1011 }
1012 }
1013 } else {
1014 int d = M - types_l5_.size();
1015 DDName ddname(getLadPrefix(0) + types_l4_[d], "esalgo");
1016 DDName ddname2(getLadPrefix(1) + types_l4_[d], "esalgo");
1017 for (int i = 0; i <= 1; i++) {
1018 for (int j = 0; j <= 3; j++) {
1019 xpos = (i * 2 - 1) * waf_intra_col_sep / 2.;
1020 ypos = -ladder_length / 2. + 0.05 * mm - (LdrFrnt_Length - LdrBck_Length) / 2 + wedge_length / 2. +
1021 j * waf_active;
1022 zpos = -ladder_thick / 2. + 0.005 * mm + wedge_offset;
1023 if (ladd_l4_map_[(i + j * 2 + (M - types_l5_.size()) * 8)] == 1) {
1024 scopy++;
1025 cpv.position(DDLogicalPart("esalgo:SWED"),
1026 ddname,
1027 scopy + 1000 * swed_scopy_glob,
1028 DDTranslation(xpos, ypos, zpos),
1029 DDRotation("esalgo:RM1299"));
1030 cpv.position(DDLogicalPart("esalgo:SWED"),
1031 ddname2,
1032 scopy + 1000 * swed_scopy_glob + 100,
1033 DDTranslation(xpos, ypos, zpos),
1034 DDRotation("esalgo:RM1299"));
1035 #ifdef EDM_ML_DEBUG
1036 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SWED").name() << " copy "
1037 << (scopy + 1000 * swed_scopy_glob) << " in " << ddname << " at "
1038 << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1299";
1039 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SWED").name() << " copy "
1040 << (scopy + 1000 * swed_scopy_glob + 100) << " in " << ddname2 << " at "
1041 << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1299";
1042 #endif
1043 ypos = ypos + ywedge_ceramic_diff;
1044 zpos = -ladder_thick / 2. + 0.005 * mm + zwedge_ceramic_diff;
1045 cpv.position(DDLogicalPart("esalgo:SFBX"),
1046 ddname,
1047 scopy + 1000 * swed_scopy_glob,
1048 DDTranslation(xpos, ypos, zpos),
1049 DDRotation("esalgo:RM1298"));
1050 cpv.position(DDLogicalPart("esalgo:SFBY"),
1051 ddname2,
1052 scopy + 1000 * swed_scopy_glob,
1053 DDTranslation(xpos, ypos, zpos),
1054 DDRotation("esalgo:RM1300A"));
1055 #ifdef EDM_ML_DEBUG
1056 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFBX").name() << " copy "
1057 << (scopy + 1000 * swed_scopy_glob) << " in " << ddname << " at "
1058 << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1298";
1059 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFBY").name() << " copy "
1060 << (scopy + 1000 * swed_scopy_glob) << " in " << ddname2 << " at "
1061 << DDTranslation(xpos, ypos, zpos) << " rotation esalgo:RM1300A";
1062 #endif
1063 }
1064 }
1065 }
1066 }
1067 }
1068
1069
1070
1071 std::string type;
1072 int icopy[100] = {0};
1073
1074 for (int I = -9; I <= 9; ++I) {
1075 prev_length_ = 0;
1076 int J = std::abs(I);
1077 for (int K = 0; K < noLaddInCol_[J]; K++) {
1078 std::string type;
1079
1080 ladder_new_length_ = micromodule_length + 3 * waf_active;
1081 ladd_shift_ = 4 * waf_active;
1082
1083 if (K == 0)
1084 type = typeOfLaddRow0[J];
1085 if (K == 1)
1086 type = typeOfLaddRow1[J];
1087 if (K == 2)
1088 type = typeOfLaddRow2[J];
1089 if (K == 3)
1090 type = typeOfLaddRow3[J];
1091
1092 for (const auto& i : types_l5_)
1093 if (type == i) {
1094 ladder_new_length_ = micromodule_length + 4 * waf_active;
1095 ladd_shift_ = 5 * waf_active;
1096 }
1097
1098 int j = 0;
1099
1100 for (int t = 0; t < int(types_l5_.size()); t++)
1101 if (type == types_l5_[t]) {
1102 j = t;
1103 if (I < 0 && asym_ladd_[t] == 1) {
1104 j = j + 1;
1105 type = types_l5_[j];
1106 }
1107 }
1108 for (int t = 0; t < int(types_l4_.size()); t++)
1109 if (type == types_l4_[t]) {
1110 j = t + types_l5_.size();
1111 if (I < 0 && asym_ladd_[(t + types_l5_.size())] == 1) {
1112 j = j + 1;
1113 type = types_l4_[j - types_l5_.size()];
1114 }
1115 }
1116
1117 xpos = I * (2 * waf_intra_col_sep + waf_inter_col_sep);
1118 if (I > 0)
1119 xpos = xpos + dee_separation;
1120 if (I < 0)
1121 xpos = xpos - dee_separation;
1122
1123 int sz = 20;
1124 ypos = (sz - int(startOfFirstLadd_[J])) * waf_active - ladder_new_length_ / 2. +
1125 (LdrFrnt_Length - LdrBck_Length) / 2 + micromodule_length + 0.05 * cm - prev_length_;
1126
1127 prev_length_ += ladd_shift_;
1128
1129 zpos = zlead1_ + ladder_thick / 2. + 0.01 * mm;
1130 icopy[j] += 1;
1131 DDName ddname(getLadPrefix(0) + type, "esalgo");
1132
1133 cpv.position(
1134 DDLogicalPart(ddname), DDName("SF", "esalgo"), icopy[j], DDTranslation(xpos, ypos, zpos), DDRotation());
1135 #ifdef EDM_ML_DEBUG
1136 edm::LogVerbatim("SFGeom") << DDLogicalPart(ddname).name() << " copy " << icopy[j] << " in "
1137 << DDName("SF", "esalgo") << " at " << DDTranslation(xpos, ypos, zpos)
1138 << " no rotation";
1139 #endif
1140 DDName ddname2(getLadPrefix(1) + type, "esalgo");
1141
1142 xpos = I * (2 * waf_intra_col_sep + waf_inter_col_sep);
1143
1144 cpv.position(DDLogicalPart(ddname2),
1145 DDName("SF", "esalgo"),
1146 icopy[j],
1147 DDTranslation(ypos, -xpos, zpos - zlead1_ + zlead2_),
1148 DDRotation("esalgo:R270"));
1149 #ifdef EDM_ML_DEBUG
1150 edm::LogVerbatim("SFGeom") << DDLogicalPart(ddname2).name() << " copy " << icopy[j] << " in "
1151 << DDName("SF", "esalgo") << " at "
1152 << DDTranslation(ypos, -xpos, zpos - zlead1_ + zlead2_) << " rotation esalgo:R270";
1153 #endif
1154 int changed = 0;
1155 for (int t = 0; t < int(types_l5_.size()); t++)
1156 if (type == types_l5_[t]) {
1157 j = t;
1158 if (asym_ladd_[t] == 2 && !changed) {
1159 j = j - 1;
1160 changed = 1;
1161 }
1162 if (asym_ladd_[t] == 1 && !changed) {
1163 j = j + 1;
1164 changed = 1;
1165 }
1166 type = types_l5_[j];
1167 }
1168 for (int t = 0; t < int(types_l4_.size()); t++)
1169 if (type == types_l4_[t]) {
1170 j = t + types_l5_.size();
1171 if (asym_ladd_[(t + types_l5_.size())] == 2 && !changed) {
1172 j = j - 1;
1173 changed = 1;
1174 }
1175 if (asym_ladd_[(t + types_l5_.size())] == 1 && !changed) {
1176 j = j + 1;
1177 changed = 1;
1178 }
1179 type = types_l4_[j - types_l5_.size()];
1180 }
1181
1182 icopy[j] += 1;
1183
1184 if (I > 0)
1185 xpos = xpos + dee_separation;
1186 if (I < 0)
1187 xpos = xpos - dee_separation;
1188
1189 DDName ddname3(getLadPrefix(0) + type, "esalgo");
1190 cpv.position(DDLogicalPart(ddname3),
1191 DDName("SF", "esalgo"),
1192 icopy[j],
1193 DDTranslation(xpos, -ypos, zpos),
1194 DDRotation("esalgo:R180"));
1195 #ifdef EDM_ML_DEBUG
1196 edm::LogVerbatim("SFGeom") << DDLogicalPart(ddname3).name() << " copy " << icopy[j] << " in "
1197 << DDName("SF", "esalgo") << " at " << DDTranslation(xpos, -ypos, zpos)
1198 << " rotation esalgo:R180";
1199 #endif
1200 DDName ddname4(getLadPrefix(1) + type, "esalgo");
1201
1202 xpos = I * (2 * waf_intra_col_sep + waf_inter_col_sep);
1203
1204 cpv.position(DDLogicalPart(ddname4),
1205 DDName("SF", "esalgo"),
1206 icopy[j],
1207 DDTranslation(-ypos, -xpos, zpos - zlead1_ + zlead2_),
1208 DDRotation("esalgo:R090"));
1209 #ifdef EDM_ML_DEBUG
1210 edm::LogVerbatim("SFGeom") << DDLogicalPart(ddname4).name() << " copy " << icopy[j] << " in "
1211 << DDName("SF", "esalgo") << " at "
1212 << DDTranslation(-ypos, -xpos, zpos - zlead1_ + zlead2_) << " rotation esalgo:R090";
1213 #endif
1214 }
1215 }
1216 }
1217
1218 void DDEcalPreshowerAlgo::doSens(DDCompactView& cpv) {
1219 double xpos(0), ypos(0);
1220 for (size_t i = 0; i < 32; ++i) {
1221 xpos = -waf_active / 2. + i * waf_active / 32. + waf_active / 64.;
1222 cpv.position(
1223 DDLogicalPart("esalgo:SFSX"), DDName("SFWX", "esalgo"), i + 1, DDTranslation(xpos, 0., 0.), DDRotation());
1224 #ifdef EDM_ML_DEBUG
1225 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFSX").name() << " copy " << (i + 1) << " in "
1226 << DDName("SFWX", "esalgo") << " at " << DDTranslation(xpos, 0., 0.) << " no rotation";
1227 #endif
1228
1229 ypos = -waf_active / 2. + i * waf_active / 32. + waf_active / 64.;
1230 cpv.position(
1231 DDLogicalPart("esalgo:SFSY"), DDName("SFWY", "esalgo"), i + 1, DDTranslation(0., ypos, 0.), DDRotation());
1232 #ifdef EDM_ML_DEBUG
1233 edm::LogVerbatim("SFGeom") << DDLogicalPart("esalgo:SFSY").name() << " copy " << (i + 1) << " in "
1234 << DDName("SFWY", "esalgo") << " at " << DDTranslation(0., ypos, 0.) << " no rotation";
1235 #endif
1236 }
1237 }
1238
1239 #include "DetectorDescription/Core/interface/DDAlgorithmFactory.h"
1240
1241 DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDEcalPreshowerAlgo, "ecal:DDEcalPreshowerAlgo");