@@ -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,10 +301,15 @@ struct HGCalMixRotatedFineCassette {
301301#endif
302302 cassette_.setParameter (cassettes_, cassetteShift_, false );
303303 cassette_.setParameterScint (cassetteShiftScnt_);
304+ cassette_.setParameterRetract (retract_);
304305
305- // //////////////////////////////////////////////////////////////////
306- // DDHGCalMixRotatedFineCassette methods...
307- // //////////////////////////////////////////////////////////////////
306+ int testCassette = args.value <int >(" TestCassetteShift" );
307+ if (testCassette != 0 )
308+ testCassetteShift ();
309+
310+ // //////////////////////////////////////////////////////////////////
311+ // DDHGCalMixRotatedFineCassette methods...
312+ // //////////////////////////////////////////////////////////////////
308313
309314#ifdef EDM_ML_DEBUG
310315 edm::LogVerbatim (" HGCalGeom" ) << " ==>> Constructing DDHGCalMixRotatedFineCassette..." ;
@@ -465,6 +470,7 @@ struct HGCalMixRotatedFineCassette {
465470 int ii = layerTypeTop_[ly];
466471 int copy = copyNumberTop_[ii];
467472 int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
473+ int layer0 = (copy - std::min (firstFineLayer_, firstCoarseLayer_) + 1 );
468474 double hthickl = 0.5 * layerThickTop_[ii];
469475 thickTot += layerThickTop_[ii];
470476 zpos += hthickl;
@@ -479,13 +485,14 @@ struct HGCalMixRotatedFineCassette {
479485 : static_cast <int >(tileCoarseIndex_.size ()));
480486#ifdef EDM_ML_DEBUG
481487 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << ly << " :" << ii << " :" << layer
482- << " Copy " << copy << " Tiles " << firstTile << " :" << lastTile << " Size "
483- << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine " << fine
484- << " absType " << absType;
488+ << " :" << layer0 << " Copy " << copy << " Tiles " << firstTile << " :" << lastTile
489+ << " Size " << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine "
490+ << fine << " absType " << absType;
491+ int cassette;
485492#endif
486493 for (int ti = firstTile; ti < lastTile; ++ti) {
487494 double r1, r2;
488- int cassette, fimin, fimax;
495+ int fimin, fimax;
489496#ifdef EDM_ML_DEBUG
490497 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: ti " << ti << " :" << fine << " index "
491498 << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Phis "
@@ -494,13 +501,17 @@ struct HGCalMixRotatedFineCassette {
494501 if (fine) {
495502 r1 = tileFineRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
496503 r2 = tileFineRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
504+ #ifdef EDM_ML_DEBUG
497505 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
506+ #endif
498507 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
499508 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
500509 } else {
501510 r1 = tileCoarseRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
502511 r2 = tileCoarseRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
512+ #ifdef EDM_ML_DEBUG
503513 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
514+ #endif
504515 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
505516 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
506517 }
@@ -510,20 +521,23 @@ struct HGCalMixRotatedFineCassette {
510521#endif
511522 double phi1 = dphi * (fimin - 1 );
512523 double phi2 = dphi * (fimax - fimin + 1 );
513- auto cshift = cassette_.getShift (layer + 1 , 1 , cassette, true );
524+ r1 += retract_[layer0 - 1 ];
525+ r2 += retract_[layer0 - 1 ];
514526#ifdef EDM_ML_DEBUG
527+ double phi = phi1 + 0.5 * phi2;
528+ edm::LogVerbatim (" HGCalGeom" ) << " 1Layer " << ly << " :" << ii << " :" << copy << " :" << layer0 << " phi "
529+ << phi << " shift " << retract_[layer0 - 1 ];
515530 int cassette0 = HGCalCassette::cassetteType (2 , 1 , cassette); //
516531 int ir1 = (fine) ? std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
517532 : std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
518533 int ir2 = (fine) ? std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
519534 : std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
520- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 )
521- << " iR " << ir1 << " :" << ir2 << " R " << cms::convert2mm (r1) << " :"
535+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << layer0 << " iR "
536+ << ir1 << " :" << ir2 << " R " << cms::convert2mm (r1) << " :"
522537 << cms::convert2mm (r2) << " Thick " << cms::convert2mm (2.0 * hthickl) << " phi "
523538 << fimin << " :" << fimax << " :" << convertRadToDeg (phi1) << " :"
524539 << convertRadToDeg (phi2) << " cassette " << cassette << " :" << cassette0
525- << " Shift " << cms::convert2mm (cshift.first ) << " :"
526- << cms::convert2mm (cshift.second );
540+ << " Shift " << cms::convert2mm (retract_[layer0 - 1 ]);
527541#endif
528542 std::string name = namesTop_[ii] + " L" + std::to_string (copy) + " F" + std::to_string (k);
529543 ++k;
@@ -537,12 +551,11 @@ struct HGCalMixRotatedFineCassette {
537551 << cms::convert2mm (r2) << " , " << cms::convert2mm (hthickl) << " , "
538552 << convertRadToDeg (phi1) << " , " << convertRadToDeg (phi2);
539553#endif
540- dd4hep::Position tran (-cshift. first , cshift. second , zpos);
554+ dd4hep::Position tran (0 , 0 , zpos);
541555 glog.placeVolume (glog1, copy, tran);
542556#ifdef EDM_ML_DEBUG
543557 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)
558+ << copy << " in " << glog.name () << " at (0,0," << cms::convert2mm (zpos)
546559 << " ) with no rotation" ;
547560#endif
548561 }
@@ -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,15 @@ 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 << " :"
594+ << layer0 << " Copy " << copy << " Tiles " << firstTile << " :" << lastTile
595+ << " Size " << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine "
596+ << fine << " absType " << absType;
597+ int cassette;
583598#endif
584599 for (int ti = firstTile; ti < lastTile; ++ti) {
585600 double r1, r2;
586- int cassette, fimin, fimax;
601+ int fimin, fimax;
587602#ifdef EDM_ML_DEBUG
588603 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: ti " << ti << " :" << fine << " index "
589604 << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Phis "
@@ -592,13 +607,17 @@ struct HGCalMixRotatedFineCassette {
592607 if (fine) {
593608 r1 = tileFineRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
594609 r2 = tileFineRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
610+ #ifdef EDM_ML_DEBUG
595611 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
612+ #endif
596613 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
597614 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
598615 } else {
599616 r1 = tileCoarseRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
600617 r2 = tileCoarseRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
618+ #ifdef EDM_ML_DEBUG
601619 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
620+ #endif
602621 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
603622 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
604623 }
@@ -608,19 +627,23 @@ struct HGCalMixRotatedFineCassette {
608627#endif
609628 double phi1 = dphi * (fimin - 1 );
610629 double phi2 = dphi * (fimax - fimin + 1 );
611- auto cshift = cassette_.getShift (layer + 1 , 1 , cassette, true );
630+ r1 += retract_[layer0 - 1 ];
631+ r2 += retract_[layer0 - 1 ];
612632#ifdef EDM_ML_DEBUG
633+ double phi = phi1 + 0.5 * phi2;
634+ edm::LogVerbatim (" HGCalGeom" ) << " 2Layer " << ii << " :" << copy << " :" << layer << " :" << layer0 << " phi "
635+ << phi << " shift " << retract_[layer0 - 1 ];
613636 int cassette0 = HGCalCassette::cassetteType (2 , 1 , cassette); //
614637 int ir1 = (fine) ? std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
615638 : std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
616639 int ir2 = (fine) ? std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
617640 : std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
618- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 ) << " iR "
619- << ir1 << " :" << ir2 << " R " << cms::convert2mm (r1) << " :" << cms::convert2mm (r2)
620- << " Thick " << cms::convert2mm (2.0 * hthickl) << " phi " << fimin << " : " << fimax
621- << " :" << convertRadToDeg (phi1) << " :" << convertRadToDeg (phi2 ) << " cassette "
622- << cassette << " : " << cassette0 << " Shift " << cms::convert2mm (cshift. first )
623- << " : " << cms::convert2mm (cshift. second );
641+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 ) << " : "
642+ << layer0 << " iR " << ir1 << " :" << ir2 << " R " << cms::convert2mm (r1) << " :"
643+ << cms::convert2mm (r2) << " Thick " << cms::convert2mm (2.0 * hthickl) << " phi "
644+ << fimin << " :" << fimax << " :" << convertRadToDeg (phi1 ) << " : "
645+ << convertRadToDeg (phi2) << " cassette " << cassette << " : " << cassette0
646+ << " Shift " << cms::convert2mm (retract_[layer0 - 1 ] );
624647#endif
625648 std::string name = namesTop_[ii] + " L" + std::to_string (copy) + " F" + std::to_string (k);
626649 ++k;
@@ -634,12 +657,11 @@ struct HGCalMixRotatedFineCassette {
634657 << cms::convert2mm (r2) << " , " << cms::convert2mm (hthickl) << " , "
635658 << convertRadToDeg (phi1) << " , " << convertRadToDeg (phi2);
636659#endif
637- dd4hep::Position tran (-cshift. first , cshift. second , zpos);
660+ dd4hep::Position tran (0 , 0 , zpos);
638661 glog.placeVolume (glog1, copy, tran);
639662#ifdef EDM_ML_DEBUG
640663 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)
664+ << copy << " in " << glog.name () << " at (0,0," << cms::convert2mm (zpos)
643665 << " ) with no rotation" ;
644666#endif
645667 }
@@ -648,17 +670,22 @@ struct HGCalMixRotatedFineCassette {
648670
649671 // Make the bottom part next
650672 int layer = (copyM - firstFineLayer_);
673+ int layer0 = (copyM - std::min (firstFineLayer_, firstCoarseLayer_) + 1 );
651674#ifdef EDM_ML_DEBUG
652- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Start bottom section for layer " << layer
653- << " absType " << absType;
675+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Start bottom section for layer " << ( layer + 1 )
676+ << " : " << layer0 << " absType " << absType;
654677#endif
655678 if (absType > 0 ) {
656679#ifdef EDM_ML_DEBUG
657680 int kount (0 );
658681#endif
659682 for (int k = 0 ; k < cassettes_; ++k) {
660683 int cassette = k + 1 ;
661- auto cshift = cassette_.getShift (layer + 1 , -1 , cassette);
684+ auto cshift = cassette_.getShift (layer0, -1 , cassette);
685+ #ifdef EDM_ML_DEBUG
686+ edm::LogVerbatim (" HGCalGeom" ) << " 3Layer " << layer << " :" << layer0 << " Cassette " << cassette << " shift "
687+ << cms::convert2mm (cshift.first ) << " :" << cms::convert2mm (cshift.second );
688+ #endif
662689 double xpos = -cshift.first ;
663690 double ypos = cshift.second ;
664691 int i = layer * cassettes_ + k;
@@ -728,7 +755,7 @@ struct HGCalMixRotatedFineCassette {
728755 << k << waferProperty_[k] << " :" << layertype << " :" << type << " :" << part << " :" << orien << " :"
729756 << cassette << " :" << place;
730757#endif
731- auto cshift = cassette_.getShift (layer + 1 , -1 , cassette, false );
758+ auto cshift = cassette_.getShift (layer0 , -1 , cassette, false );
732759 double xpos = xyoff.first - cshift.first + nc * delx;
733760 double ypos = xyoff.second + cshift.second + nr * dy;
734761#ifdef EDM_ML_DEBUG
@@ -795,6 +822,23 @@ struct HGCalMixRotatedFineCassette {
795822 }
796823 }
797824
825+ void testCassetteShift () {
826+ for (unsigned int k = 0 ; k < layers_.size (); ++k) {
827+ int layer = k + 1 ;
828+ for (int l = 0 ; l < cassettes_; ++l) {
829+ int cassette = l + 1 ;
830+ auto cf1 = cassette_.getShift (layer, 1 , cassette, false );
831+ auto cf2 = cassette_.getShift (layer, 1 , cassette, true );
832+ auto cf3 = cassette_.getShift (layer, -1 , cassette, false );
833+ auto cf4 = cassette_.getShift (layer, -1 , cassette, true );
834+ edm::LogVerbatim (" HGCalGeom" ) << " Layer " << layer << " Cassette " << cassette << " x for z+ " << cf1.first
835+ << " :" << cf2.first << " y for z+ " << cf1.second << " :" << cf2.second
836+ << " x for z- " << cf3.first << " :" << cf4.first << " y for z- " << cf3.second
837+ << " :" << cf4.second ;
838+ }
839+ }
840+ }
841+
798842 HGCalGeomTools geomTools_;
799843 HGCalCassette cassette_;
800844
@@ -857,6 +901,7 @@ struct HGCalMixRotatedFineCassette {
857901 std::vector<int > tileCoarseIndex_; // Index of tile (layer/start|end coarse ring)
858902 std::vector<int > tileCoarsePhis_; // Tile phi range for each index in coarse ring
859903 std::vector<int > tileCoarseLayerStart_; // Start index of tiles in each coarse layer
904+ std::vector<double > retract_; // Radial retraction of he tiles
860905 std::vector<double > cassetteShiftScnt_; // Shifts of the cassetes for scintillators
861906 std::string nameSpace_; // Namespace of this and ALL sub-parts
862907 std::unordered_set<int > copies_; // List of copy #'s
0 commit comments