@@ -282,12 +282,12 @@ struct HGCalMixRotatedFineCassette {
282282 << std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[k])) << " :"
283283 << std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[k]));
284284#endif
285- std::vector< double > retract = args.value <std::vector<double >>(" ScintRetract" );
285+ retract_ = args.value <std::vector<double >>(" ScintRetract" );
286286 double dphi = M_PI / cassettes_;
287287 for (int k = 0 ; k < cassettes_; ++k) {
288288 double phi = (2 * k + 1 ) * dphi;
289- cassetteShiftScnt_.emplace_back (retract [k] * cos (phi));
290- cassetteShiftScnt_.emplace_back (retract [k] * sin (phi));
289+ cassetteShiftScnt_.emplace_back (retract_ [k] * cos (phi));
290+ cassetteShiftScnt_.emplace_back (retract_ [k] * sin (phi));
291291 }
292292#ifdef EDM_ML_DEBUG
293293 unsigned int j2max = cassetteShiftScnt_.size ();
@@ -301,6 +301,12 @@ struct HGCalMixRotatedFineCassette {
301301#endif
302302 cassette_.setParameter (cassettes_, cassetteShift_, false );
303303 cassette_.setParameterScint (cassetteShiftScnt_);
304+ cassette_.setParameterRetract (retract_);
305+
306+ int testCassette = args.value <int >(" TestCassetteShift" );
307+ if (testCassette != 0 )
308+ testCassetteShift ();
309+
304310
305311 // //////////////////////////////////////////////////////////////////
306312 // DDHGCalMixRotatedFineCassette methods...
@@ -465,6 +471,7 @@ struct HGCalMixRotatedFineCassette {
465471 int ii = layerTypeTop_[ly];
466472 int copy = copyNumberTop_[ii];
467473 int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
474+ int layer0 = (copy - std::min (firstFineLayer_, firstCoarseLayer_) + 1 );
468475 double hthickl = 0.5 * layerThickTop_[ii];
469476 thickTot += layerThickTop_[ii];
470477 zpos += hthickl;
@@ -478,14 +485,15 @@ struct HGCalMixRotatedFineCassette {
478485 ? tileCoarseLayerStart_[layer + 1 ]
479486 : static_cast <int >(tileCoarseIndex_.size ()));
480487#ifdef EDM_ML_DEBUG
481- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << ly << " :" << ii << " :" << layer
488+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << ly << " :" << ii << " :" << layer << " : " << layer0
482489 << " Copy " << copy << " Tiles " << firstTile << " :" << lastTile << " Size "
483490 << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine " << fine
484491 << " absType " << absType;
492+ int cassette;
485493#endif
486494 for (int ti = firstTile; ti < lastTile; ++ti) {
487495 double r1, r2;
488- int cassette, fimin, fimax;
496+ int fimin, fimax;
489497#ifdef EDM_ML_DEBUG
490498 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: ti " << ti << " :" << fine << " index "
491499 << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Phis "
@@ -494,13 +502,17 @@ struct HGCalMixRotatedFineCassette {
494502 if (fine) {
495503 r1 = tileFineRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
496504 r2 = tileFineRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
505+ #ifdef EDM_ML_DEBUG
497506 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
507+ #endif
498508 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
499509 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
500510 } else {
501511 r1 = tileCoarseRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
502512 r2 = tileCoarseRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
513+ #ifdef EDM_ML_DEBUG
503514 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
515+ #endif
504516 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
505517 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
506518 }
@@ -510,20 +522,23 @@ struct HGCalMixRotatedFineCassette {
510522#endif
511523 double phi1 = dphi * (fimin - 1 );
512524 double phi2 = dphi * (fimax - fimin + 1 );
513- auto cshift = cassette_.getShift (layer + 1 , 1 , cassette, true );
525+ r1 += retract_[layer0 - 1 ];
526+ r2 += retract_[layer0 - 1 ];
514527#ifdef EDM_ML_DEBUG
528+ double phi = phi1 + 0.5 * phi2;
529+ edm::LogVerbatim (" HGCalGeom" ) << " 1Layer " << ly << " :" << ii << " :" << copy << " :" << layer0 << " phi " << phi
530+ << " shift " << retract_[layer0 - 1 ];
515531 int cassette0 = HGCalCassette::cassetteType (2 , 1 , cassette); //
516532 int ir1 = (fine) ? std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
517533 : std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
518534 int ir2 = (fine) ? std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
519535 : std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
520- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 )
536+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << layer0
521537 << " iR " << ir1 << " :" << ir2 << " R " << cms::convert2mm (r1) << " :"
522538 << cms::convert2mm (r2) << " Thick " << cms::convert2mm (2.0 * hthickl) << " phi "
523539 << fimin << " :" << fimax << " :" << convertRadToDeg (phi1) << " :"
524540 << convertRadToDeg (phi2) << " cassette " << cassette << " :" << cassette0
525- << " Shift " << cms::convert2mm (cshift.first ) << " :"
526- << cms::convert2mm (cshift.second );
541+ << " Shift " << cms::convert2mm (retract_[layer0 - 1 ]);
527542#endif
528543 std::string name = namesTop_[ii] + " L" + std::to_string (copy) + " F" + std::to_string (k);
529544 ++k;
@@ -537,13 +552,11 @@ struct HGCalMixRotatedFineCassette {
537552 << cms::convert2mm (r2) << " , " << cms::convert2mm (hthickl) << " , "
538553 << convertRadToDeg (phi1) << " , " << convertRadToDeg (phi2);
539554#endif
540- dd4hep::Position tran (-cshift. first , cshift. second , zpos);
555+ dd4hep::Position tran (0 , 0 , zpos);
541556 glog.placeVolume (glog1, copy, tran);
542557#ifdef EDM_ML_DEBUG
543558 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Position " << glog1.name () << " number "
544- << copy << " in " << glog.name () << " at (" << cms::convert2mm (cshift.first )
545- << " , " << cms::convert2mm (cshift.second ) << " , " << cms::convert2mm (zpos)
546- << " ) with no rotation" ;
559+ << copy << " in " << glog.name () << " at (0,0," << cms::convert2mm (zpos) << " ) with no rotation" ;
547560#endif
548561 }
549562 ++copyNumberTop_[ii];
@@ -564,6 +577,7 @@ struct HGCalMixRotatedFineCassette {
564577 int ii = coverTypeTop_;
565578 int copy = copyNumberCoverTop_[absType - 1 ];
566579 int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
580+ int layer0 = (copy - std::min (firstFineLayer_, firstCoarseLayer_) + 1 );
567581 double hthickl = 0.5 * layerThickTop_[ii];
568582 zpos += hthickl;
569583 dd4hep::Material matter1 = ns.material (materialTop_[ii]);
@@ -576,14 +590,12 @@ struct HGCalMixRotatedFineCassette {
576590 ? tileCoarseLayerStart_[layer + 1 ]
577591 : static_cast <int >(tileCoarseIndex_.size ()));
578592#ifdef EDM_ML_DEBUG
579- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: TOP Layer " << ii << " :" << layer << " Copy "
580- << copy << " Tiles " << firstTile << " :" << lastTile << " Size "
581- << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine " << fine
582- << " absType " << absType;
593+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: TOP Layer " << ii << " :" << layer << " :" << layer0 << " Copy " << copy << " Tiles " << firstTile << " :" << lastTile << " Size " << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine " << fine << " absType " << absType;
594+ int cassette;
583595#endif
584596 for (int ti = firstTile; ti < lastTile; ++ti) {
585597 double r1, r2;
586- int cassette, fimin, fimax;
598+ int fimin, fimax;
587599#ifdef EDM_ML_DEBUG
588600 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: ti " << ti << " :" << fine << " index "
589601 << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Phis "
@@ -592,13 +604,17 @@ struct HGCalMixRotatedFineCassette {
592604 if (fine) {
593605 r1 = tileFineRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
594606 r2 = tileFineRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
607+ #ifdef EDM_ML_DEBUG
595608 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
609+ #endif
596610 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
597611 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
598612 } else {
599613 r1 = tileCoarseRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
600614 r2 = tileCoarseRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
615+ #ifdef EDM_ML_DEBUG
601616 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
617+ #endif
602618 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
603619 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
604620 }
@@ -608,19 +624,22 @@ struct HGCalMixRotatedFineCassette {
608624#endif
609625 double phi1 = dphi * (fimin - 1 );
610626 double phi2 = dphi * (fimax - fimin + 1 );
611- auto cshift = cassette_.getShift (layer + 1 , 1 , cassette, true );
627+ r1 += retract_[layer0 - 1 ];
628+ r2 += retract_[layer0 - 1 ];
612629#ifdef EDM_ML_DEBUG
630+ double phi = phi1 + 0.5 * phi2;
631+ edm::LogVerbatim (" HGCalGeom" ) << " 2Layer " << ii << " :" << copy << " :" << layer << " :" << layer0 << " phi " << phi
632+ << " shift " << retract_[layer0 - 1 ];
613633 int cassette0 = HGCalCassette::cassetteType (2 , 1 , cassette); //
614634 int ir1 = (fine) ? std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
615635 : std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
616636 int ir2 = (fine) ? std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
617637 : std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
618- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 ) << " iR "
638+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 ) << " : " << layer0 << " iR "
619639 << ir1 << " :" << ir2 << " R " << cms::convert2mm (r1) << " :" << cms::convert2mm (r2)
620640 << " Thick " << cms::convert2mm (2.0 * hthickl) << " phi " << fimin << " :" << fimax
621641 << " :" << convertRadToDeg (phi1) << " :" << convertRadToDeg (phi2) << " cassette "
622- << cassette << " :" << cassette0 << " Shift " << cms::convert2mm (cshift.first )
623- << " :" << cms::convert2mm (cshift.second );
642+ << cassette << " :" << cassette0 << " Shift " << cms::convert2mm (retract_[layer0 - 1 ]);
624643#endif
625644 std::string name = namesTop_[ii] + " L" + std::to_string (copy) + " F" + std::to_string (k);
626645 ++k;
@@ -634,12 +653,11 @@ struct HGCalMixRotatedFineCassette {
634653 << cms::convert2mm (r2) << " , " << cms::convert2mm (hthickl) << " , "
635654 << convertRadToDeg (phi1) << " , " << convertRadToDeg (phi2);
636655#endif
637- dd4hep::Position tran (-cshift. first , cshift. second , zpos);
656+ dd4hep::Position tran (0 , 0 , zpos);
638657 glog.placeVolume (glog1, copy, tran);
639658#ifdef EDM_ML_DEBUG
640659 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Position " << glog1.name () << " number "
641- << copy << " in " << glog.name () << " at (" << cms::convert2mm (-cshift.first )
642- << " , " << cms::convert2mm (cshift.second ) << " , " << cms::convert2mm (zpos)
660+ << copy << " in " << glog.name () << " at (0,0," << cms::convert2mm (zpos)
643661 << " ) with no rotation" ;
644662#endif
645663 }
@@ -648,17 +666,21 @@ struct HGCalMixRotatedFineCassette {
648666
649667 // Make the bottom part next
650668 int layer = (copyM - firstFineLayer_);
669+ int layer0 = (copyM - std::min (firstFineLayer_, firstCoarseLayer_) + 1 );
651670#ifdef EDM_ML_DEBUG
652- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Start bottom section for layer " << layer
653- << " absType " << absType;
671+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Start bottom section for layer " << (layer + 1 ) << " :" << layer0 << " absType " << absType;
654672#endif
655673 if (absType > 0 ) {
656674#ifdef EDM_ML_DEBUG
657675 int kount (0 );
658676#endif
659677 for (int k = 0 ; k < cassettes_; ++k) {
660678 int cassette = k + 1 ;
661- auto cshift = cassette_.getShift (layer + 1 , -1 , cassette);
679+ auto cshift = cassette_.getShift (layer0, -1 , cassette);
680+ #ifdef EDM_ML_DEBUG
681+ edm::LogVerbatim (" HGCalGeom" ) << " 3Layer " << layer << " :" << layer0 << " Cassette " << cassette << " shift "
682+ << cms::convert2mm (cshift.first ) << " :" << cms::convert2mm (cshift.second );
683+ #endif
662684 double xpos = -cshift.first ;
663685 double ypos = cshift.second ;
664686 int i = layer * cassettes_ + k;
@@ -728,7 +750,7 @@ struct HGCalMixRotatedFineCassette {
728750 << k << waferProperty_[k] << " :" << layertype << " :" << type << " :" << part << " :" << orien << " :"
729751 << cassette << " :" << place;
730752#endif
731- auto cshift = cassette_.getShift (layer + 1 , -1 , cassette, false );
753+ auto cshift = cassette_.getShift (layer0 , -1 , cassette, false );
732754 double xpos = xyoff.first - cshift.first + nc * delx;
733755 double ypos = xyoff.second + cshift.second + nr * dy;
734756#ifdef EDM_ML_DEBUG
@@ -795,6 +817,23 @@ struct HGCalMixRotatedFineCassette {
795817 }
796818 }
797819
820+ void testCassetteShift () {
821+ for (unsigned int k = 0 ; k < layers_.size (); ++k) {
822+ int layer = k + 1 ;
823+ for (int l = 0 ; l < cassettes_; ++l) {
824+ int cassette = l + 1 ;
825+ auto cf1 = cassette_.getShift (layer, 1 , cassette, false );
826+ auto cf2 = cassette_.getShift (layer, 1 , cassette, true );
827+ auto cf3 = cassette_.getShift (layer, -1 , cassette, false );
828+ auto cf4 = cassette_.getShift (layer, -1 , cassette, true );
829+ edm::LogVerbatim (" HGCalGeom" ) << " Layer " << layer << " Cassette " << cassette << " x for z+ " << cf1.first << " :"
830+ << cf2.first << " y for z+ " << cf1.second << " :" << cf2.second << " x for z- "
831+ << cf3.first << " :" << cf4.first << " y for z- " << cf3.second << " :" << cf4.second ;
832+ }
833+ }
834+ }
835+
836+
798837 HGCalGeomTools geomTools_;
799838 HGCalCassette cassette_;
800839
@@ -857,6 +896,7 @@ struct HGCalMixRotatedFineCassette {
857896 std::vector<int > tileCoarseIndex_; // Index of tile (layer/start|end coarse ring)
858897 std::vector<int > tileCoarsePhis_; // Tile phi range for each index in coarse ring
859898 std::vector<int > tileCoarseLayerStart_; // Start index of tiles in each coarse layer
899+ std::vector<double > retract_; // Radial retraction of he tiles
860900 std::vector<double > cassetteShiftScnt_; // Shifts of the cassetes for scintillators
861901 std::string nameSpace_; // Namespace of this and ALL sub-parts
862902 std::unordered_set<int > copies_; // List of copy #'s
0 commit comments