@@ -39,7 +39,6 @@ struct HGCalMixRotatedFineCassette {
3939#ifdef EDM_ML_DEBUG
4040 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Creating an instance" ;
4141#endif
42- static constexpr double tol1 = 0.01 * dd4hep::mm;
4342
4443 dd4hep::Volume mother = ns.volume (args.parentName ());
4544
@@ -302,10 +301,12 @@ struct HGCalMixRotatedFineCassette {
302301#endif
303302 retract_ = args.value <std::vector<double >>(" ScintRetract" );
304303 double dphi = M_PI / cassettes_;
305- for (int k = 0 ; k < cassettes_; ++k) {
306- double phi = (2 * k + 1 ) * dphi;
307- cassetteShiftScnt_.emplace_back (retract_[k] * cos (phi));
308- cassetteShiftScnt_.emplace_back (retract_[k] * sin (phi));
304+ for (unsigned int k = 0 ; k < layers_.size (); ++k) {
305+ for (int j = 0 ; j < cassettes_; ++j) {
306+ double phi = (2 * j + 1 ) * dphi;
307+ cassetteShiftScnt_.emplace_back (retract_[k] * cos (phi));
308+ cassetteShiftScnt_.emplace_back (retract_[k] * sin (phi));
309+ }
309310 }
310311#ifdef EDM_ML_DEBUG
311312 unsigned int j2max = cassetteShiftScnt_.size ();
@@ -314,13 +315,14 @@ struct HGCalMixRotatedFineCassette {
314315 unsigned int j2 = std::min ((j1 + 6 ), j2max);
315316 for (unsigned int j = j1; j < j2; ++j)
316317 st1 << " [" << j << " ] " << std::setw (9 ) << cassetteShiftScnt_[j];
317- edm::LogVerbatim (" HGCalGeom" ) << st1.str ();
318+ edm::LogVerbatim (" HGCalGeom" ) << " Scintillator Cassette shiftt " << convertRadToDeg (dphi) << " " << st1.str ();
318319 }
319320#endif
320321 cassette_.setParameter (cassettes_, cassetteShift_, false );
321322 cassette_.setParameterScint (cassetteShiftScnt_);
322323 cassette_.setParameterRetract (retract_);
323324
325+ forFireworks_ = args.value <int >(" ForFireWorks" );
324326 int testCassette = args.value <int >(" TestCassetteShift" );
325327 if (testCassette != 0 )
326328 testCassetteShift ();
@@ -364,7 +366,7 @@ struct HGCalMixRotatedFineCassette {
364366 if (layerSense_[ly] <= 0 ) {
365367 std::vector<double > pgonZ, pgonRin, pgonRout;
366368 double rmax =
367- (std::min (routF, HGCalGeomTools::radius (zz + hthick, zFrontT_, rMaxFront_, slopeT_)) * cosAlpha_) - tol1 ;
369+ (std::min (routF, HGCalGeomTools::radius (zz + hthick, zFrontT_, rMaxFront_, slopeT_)) * cosAlpha_) - tol1_ ;
368370 HGCalGeomTools::radius (zz - hthick,
369371 zz + hthick,
370372 zFrontB_,
@@ -382,7 +384,7 @@ struct HGCalMixRotatedFineCassette {
382384 if (layerSense_[ly] == 0 || absorbMode_ == 0 )
383385 pgonRout[isec] = rmax;
384386 else
385- pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1 ;
387+ pgonRout[isec] = pgonRout[isec] * cosAlpha_ - tol1_ ;
386388 }
387389 dd4hep::Solid solid = dd4hep::Polyhedra (sectors_, -alpha_, 2 ._pi , pgonZ, pgonRin, pgonRout);
388390 ns.addSolidNS (ns.prepend (name), solid);
@@ -395,6 +397,7 @@ struct HGCalMixRotatedFineCassette {
395397 for (unsigned int k = 0 ; k < pgonZ.size (); ++k)
396398 edm::LogVerbatim (" HGCalGeom" ) << " [" << k << " ] z " << cms::convert2mm (pgonZ[k]) << " R "
397399 << cms::convert2mm (pgonRin[k]) << " :" << cms::convert2mm (pgonRout[k]);
400+ edm::LogVerbatim (" HGCalGeom" ) << " LayeerSense " << layerSense_[ly];
398401#endif
399402 if (layerSense_[ly] < 0 ) {
400403 int absType = -layerSense_[ly];
@@ -538,7 +541,7 @@ struct HGCalMixRotatedFineCassette {
538541 << fimin << " :" << fimax;
539542#endif
540543 double phi1 = dphi * (fimin - 1 );
541- double phi2 = dphi * (fimax - fimin + 1 );
544+ double phi2 = (forFireworks_ == 1 ) ? ( dphi * (fimax - fimin + 1 )) : (dphi * fimax );
542545 r1 += retract_[layer0 - 1 ];
543546 r2 += retract_[layer0 - 1 ];
544547#ifdef EDM_ML_DEBUG
@@ -551,7 +554,7 @@ struct HGCalMixRotatedFineCassette {
551554 r1 += shiftCassetteIR_;
552555 }
553556#ifdef EDM_ML_DEBUG
554- double phi = phi1 + 0.5 * phi2 ;
557+ double phi = phi1 + 0.5 * dphi ;
555558 edm::LogVerbatim (" HGCalGeom" ) << " 1Layer " << ly << " :" << ii << " :" << copy << " :" << layer0 << " phi "
556559 << phi << " shift " << retract_[layer0 - 1 ];
557560 int cassette0 = HGCalCassette::cassetteType (2 , 1 , cassette); //
@@ -654,7 +657,7 @@ struct HGCalMixRotatedFineCassette {
654657 << fimin << " :" << fimax;
655658#endif
656659 double phi1 = dphi * (fimin - 1 );
657- double phi2 = dphi * (fimax - fimin + 1 );
660+ double phi2 = (forFireworks_ == 1 ) ? ( dphi * (fimax - fimin + 1 )) : (dphi * fimax );
658661 r1 += retract_[layer0 - 1 ];
659662 r2 += retract_[layer0 - 1 ];
660663#ifdef EDM_ML_DEBUG
@@ -667,7 +670,7 @@ struct HGCalMixRotatedFineCassette {
667670 r1 += shiftCassetteIR_;
668671 }
669672#ifdef EDM_ML_DEBUG
670- double phi = phi1 + 0.5 * phi2 ;
673+ double phi = phi1 + 0.5 * dphi ;
671674 edm::LogVerbatim (" HGCalGeom" ) << " 2Layer " << ii << " :" << copy << " :" << layer << " :" << layer0 << " phi "
672675 << phi << " shift " << retract_[layer0 - 1 ];
673676 int cassette0 = HGCalCassette::cassetteType (2 , 1 , cassette); //
@@ -719,7 +722,7 @@ struct HGCalMixRotatedFineCassette {
719722#endif
720723 for (int k = 0 ; k < cassettes_; ++k) {
721724 int cassette = k + 1 ;
722- auto cshift = cassette_.getShift (layer0, -1 , cassette);
725+ auto cshift = cassette_.getShift (layer0, -1 , cassette, false );
723726#ifdef EDM_ML_DEBUG
724727 edm::LogVerbatim (" HGCalGeom" ) << " 3Layer " << layer << " :" << layer0 << " Cassette " << cassette << " shift "
725728 << cms::convert2mm (cshift.first ) << " :" << cms::convert2mm (cshift.second );
@@ -790,18 +793,22 @@ struct HGCalMixRotatedFineCassette {
790793#ifdef EDM_ML_DEBUG
791794 edm::LogVerbatim (" HGCalGeom" )
792795 << " DDHGCalMixRotatedFineCassette::index:Property:layertype:type:part:orien:cassette:place:offsets:ind "
793- << k << waferProperty_[k] << " :" << layertype << " :" << type << " :" << part << " :" << orien << " :"
796+ << k << " : " << waferProperty_[k] << " :" << layertype << " :" << type << " :" << part << " :" << orien << " :"
794797 << cassette << " :" << place;
795798#endif
796799 auto cshift = cassette_.getShift (layer0, -1 , cassette, false );
800+ #ifdef EDM_ML_DEBUG
801+ edm::LogVerbatim (" HGCalGeom" ) << " Layer " << (layer + 1 ) << " :" << layer0 << " Cassette " << cassette
802+ << " shift " << cshift.first << " :" << cshift.second ;
803+ #endif
797804 double xpos = xyoff.first - cshift.first + nc * delx;
798805 double ypos = xyoff.second + cshift.second + nr * dy;
799806#ifdef EDM_ML_DEBUG
800807 double xorig = xyoff.first + nc * delx;
801808 double yorig = xyoff.second + nr * dy;
802809 double angle = std::atan2 (yorig, xorig);
803- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette::Wafer: layer " << layer + 1 << " cassette "
804- << cassette << " Shift " << cms::convert2mm (cshift.first ) << " :"
810+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette::Wafer: layer " << layer + 1 << " : " << layer0
811+ << " cassette " << cassette << " Shift " << cms::convert2mm (cshift.first ) << " :"
805812 << cms::convert2mm (cshift.second ) << " Original " << cms::convert2mm (xorig) << " :"
806813 << cms::convert2mm (yorig) << " :" << convertRadToDeg (angle) << " Final "
807814 << cms::convert2mm (xpos) << " :" << cms::convert2mm (ypos);
@@ -942,11 +949,14 @@ struct HGCalMixRotatedFineCassette {
942949 std::vector<int > tileCoarseIndex_; // Index of tile (layer/start|end coarse ring)
943950 std::vector<int > tileCoarsePhis_; // Tile phi range for each index in coarse ring
944951 std::vector<int > tileCoarseLayerStart_; // Start index of tiles in each coarse layer
945- std::vector<double > retract_; // Radial retraction of he tiles
952+ std::vector<double > retract_; // Radial retraction of the tiles
946953 std::vector<double > cassetteShiftScnt_; // Shifts of the cassetes for scintillators
947954 std::string nameSpace_; // Namespace of this and ALL sub-parts
948955 std::unordered_set<int > copies_; // List of copy #'s
956+ int forFireworks_; // 0 for standard run 1 for fireworks
949957 double alpha_, cosAlpha_;
958+ static constexpr double tol0_ = 0.0001 * dd4hep::mm;
959+ static constexpr double tol1_ = 0.01 * dd4hep::mm;
950960 static constexpr double tol2_ = 0.00001 * dd4hep::mm;
951961};
952962
0 commit comments