@@ -55,6 +55,7 @@ class DDHGCalMixRotatedFineCassette : public DDAlgorithm {
5555 int absType,
5656 bool fine,
5757 DDCompactView& cpv);
58+ void testCassetteShift ();
5859
5960private:
6061 HGCalGeomTools geomTools_;
@@ -123,6 +124,7 @@ class DDHGCalMixRotatedFineCassette : public DDAlgorithm {
123124 std::vector<int > tileCoarseIndex_; // Index of tile (layer/start|end coarse ring)
124125 std::vector<int > tileCoarsePhis_; // Tile phi range for each index in coarse ring
125126 std::vector<int > tileCoarseLayerStart_; // Start index of tiles in each coarse layer
127+ std::vector<double > retract_; // Radial retraction of he tiles
126128 std::vector<double > cassetteShiftScnt_; // Shifts of the cassetes for scintillators
127129 std::string nameSpace_; // Namespace of this and ALL sub-parts
128130 std::unordered_set<int > copies_; // List of copy #'s
@@ -378,12 +380,14 @@ void DDHGCalMixRotatedFineCassette::initialize(const DDNumericArguments& nArgs,
378380 << std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[k])) << " :"
379381 << std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[k]));
380382#endif
381- std::vector< double > retract = vArgs[" ScintRetract" ];
383+ retract_ = vArgs[" ScintRetract" ];
382384 double dphi = M_PI / cassettes_;
383- for (int k = 0 ; k < cassettes_; ++k) {
384- double phi = (2 * k + 1 ) * dphi;
385- cassetteShiftScnt_.emplace_back (retract[k] * cos (phi));
386- cassetteShiftScnt_.emplace_back (retract[k] * sin (phi));
385+ for (unsigned int k = 0 ; k < layers_.size (); ++k) {
386+ for (int j = 0 ; j < cassettes_; ++j) {
387+ double phi = (2 * j + 1 ) * dphi;
388+ cassetteShiftScnt_.emplace_back (retract_[k] * cos (phi));
389+ cassetteShiftScnt_.emplace_back (retract_[k] * sin (phi));
390+ }
387391 }
388392#ifdef EDM_ML_DEBUG
389393 unsigned int j2max = cassetteShiftScnt_.size ();
@@ -401,6 +405,11 @@ void DDHGCalMixRotatedFineCassette::initialize(const DDNumericArguments& nArgs,
401405#endif
402406 cassette_.setParameter (cassettes_, cassetteShift_, false );
403407 cassette_.setParameterScint (cassetteShiftScnt_);
408+ cassette_.setParameterRetract (retract_);
409+
410+ int testCassette = static_cast <int >(nArgs[" TestCassetteShift" ]);
411+ if (testCassette != 0 )
412+ testCassetteShift ();
404413}
405414
406415// //////////////////////////////////////////////////////////////////
@@ -563,6 +572,7 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
563572 int ii = layerTypeTop_[ly];
564573 int copy = copyNumberTop_[ii];
565574 int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
575+ int layer0 = (copy - std::min (firstFineLayer_, firstCoarseLayer_) + 1 );
566576 double hthickl = 0.5 * layerThickTop_[ii];
567577 thickTot += layerThickTop_[ii];
568578 zpos += hthickl;
@@ -577,14 +587,15 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
577587 ? tileCoarseLayerStart_[layer + 1 ]
578588 : static_cast <int >(tileCoarseIndex_.size ()));
579589#ifdef EDM_ML_DEBUG
580- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << ly << " :" << ii << " :" << layer
581- << " Copy " << copy << " Tiles " << firstTile << " :" << lastTile << " Size "
582- << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine " << fine
583- << " absType " << absType;
590+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << ly << " :" << ii << " :" << layer << " :"
591+ << layer0 << " Copy " << copy << " Tiles " << firstTile << " :" << lastTile
592+ << " Size " << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine "
593+ << fine << " absType " << absType;
594+ int cassette;
584595#endif
585596 for (int ti = firstTile; ti < lastTile; ++ti) {
586597 double r1, r2;
587- int cassette, fimin, fimax;
598+ int fimin, fimax;
588599#ifdef EDM_ML_DEBUG
589600 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: ti " << ti << " :" << fine << " index "
590601 << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Phis "
@@ -593,13 +604,17 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
593604 if (fine) {
594605 r1 = tileFineRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
595606 r2 = tileFineRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
607+ #ifdef EDM_ML_DEBUG
596608 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
609+ #endif
597610 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
598611 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
599612 } else {
600613 r1 = tileCoarseRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
601614 r2 = tileCoarseRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
615+ #ifdef EDM_ML_DEBUG
602616 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
617+ #endif
603618 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
604619 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
605620 }
@@ -608,19 +623,23 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
608623 << fimin << " :" << fimax;
609624#endif
610625 double phi1 = dphi * (fimin - 1 );
611- double phi2 = dphi * (fimax - fimin + 1 ) - tol0_;
612- auto cshift = cassette_.getShift (layer + 1 , 1 , cassette, true );
626+ double phi2 = dphi * (fimax - fimin + 1 );
627+ r1 += retract_[layer0 - 1 ];
628+ r2 += retract_[layer0 - 1 ];
613629#ifdef EDM_ML_DEBUG
630+ double phi = phi1 + 0.5 * phi2;
631+ edm::LogVerbatim (" HGCalGeom" ) << " 1Layer " << ly << " :" << ii << " :" << copy << " :" << layer0 << " phi " << phi
632+ << " shift " << retract_[layer0 - 1 ];
614633 int cassette0 = HGCalCassette::cassetteType (2 , 1 , cassette); //
615634 int ir1 = (fine) ? std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
616635 : std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
617636 int ir2 = (fine) ? std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
618637 : std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
619- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 ) << " iR "
638+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << layer0 << " iR "
620639 << ir1 << " :" << ir2 << " R " << r1 << " :" << r2 << " Thick " << (2.0 * hthickl)
621640 << " phi " << fimin << " :" << fimax << " :" << convertRadToDeg (phi1) << " :"
622641 << convertRadToDeg (phi2) << " cassette " << cassette << " :" << cassette0
623- << " Shift " << cshift. first << " : " << cshift. second ;
642+ << " Shift " << retract_[layer0 - 1 ] ;
624643#endif
625644 std::string name = namesTop_[ii] + " L" + std::to_string (copy) + " F" + std::to_string (k);
626645 ++k;
@@ -631,7 +650,7 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
631650 << matName << " of dimensions " << r1 << " , " << r2 << " , " << hthickl << " , "
632651 << convertRadToDeg (phi1) << " , " << convertRadToDeg (phi2);
633652#endif
634- DDTranslation tran (-cshift. first , cshift. second , zpos);
653+ DDTranslation tran (0 , 0 , zpos);
635654 cpv.position (glog1, glog, copy, tran, rot);
636655#ifdef EDM_ML_DEBUG
637656 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Position " << glog1.name () << " number "
@@ -655,6 +674,7 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
655674 int ii = coverTypeTop_;
656675 int copy = copyNumberCoverTop_[absType - 1 ];
657676 int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
677+ int layer0 = (copy - std::min (firstFineLayer_, firstCoarseLayer_) + 1 );
658678 double hthickl = 0.5 * layerThickTop_[ii];
659679 zpos += hthickl;
660680 DDName matName (DDSplit (materialTop_[ii]).first , DDSplit (materialTop_[ii]).second );
@@ -668,29 +688,34 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
668688 ? tileCoarseLayerStart_[layer + 1 ]
669689 : static_cast <int >(tileCoarseIndex_.size ()));
670690#ifdef EDM_ML_DEBUG
671- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: TOP Layer " << ii << " :" << layer << " Copy "
672- << copy << " Tiles " << firstTile << " :" << lastTile << " Size "
691+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: TOP Layer " << ii << " :" << layer << " : " << layer0
692+ << " Copy " << copy << " Tiles " << firstTile << " :" << lastTile << " Size "
673693 << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Fine " << fine
674694 << " absType " << absType;
675695#endif
676696 for (int ti = firstTile; ti < lastTile; ++ti) {
677697 double r1, r2;
678- int cassette, fimin, fimax;
698+ int fimin, fimax;
679699#ifdef EDM_ML_DEBUG
680700 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: ti " << ti << " :" << fine << " index "
681701 << tileFineIndex_.size () << " :" << tileCoarseIndex_.size () << " Phis "
682702 << tileFinePhis_.size () << " :" << tileCoarsePhis_.size ();
703+ int cassette;
683704#endif
684705 if (fine) {
685706 r1 = tileFineRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
686707 r2 = tileFineRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti])) - 1 ];
708+ #ifdef EDM_ML_DEBUG
687709 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
710+ #endif
688711 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
689712 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileFinePhis_[ti]));
690713 } else {
691714 r1 = tileCoarseRMin_[std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
692715 r2 = tileCoarseRMax_[std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti])) - 1 ];
716+ #ifdef EDM_ML_DEBUG
693717 cassette = std::get<0 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
718+ #endif
694719 fimin = std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
695720 fimax = std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarsePhis_[ti]));
696721 }
@@ -700,18 +725,22 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
700725#endif
701726 double phi1 = dphi * (fimin - 1 );
702727 double phi2 = dphi * (fimax - fimin + 1 );
703- auto cshift = cassette_.getShift (layer + 1 , 1 , cassette, true );
728+ r1 += retract_[layer0 - 1 ];
729+ r2 += retract_[layer0 - 1 ];
704730#ifdef EDM_ML_DEBUG
731+ double phi = phi1 + 0.5 * phi2;
732+ edm::LogVerbatim (" HGCalGeom" ) << " 2Layer " << ii << " :" << copy << " :" << layer << " :" << layer0 << " phi " << phi
733+ << " shift " << retract_[layer0 - 1 ];
705734 int cassette0 = HGCalCassette::cassetteType (2 , 1 , cassette); //
706735 int ir1 = (fine) ? std::get<1 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
707736 : std::get<1 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
708737 int ir2 = (fine) ? std::get<2 >(HGCalTileIndex::tileUnpack (tileFineIndex_[ti]))
709738 : std::get<2 >(HGCalTileIndex::tileUnpack (tileCoarseIndex_[ti]));
710- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 ) << " iR "
711- << ir1 << " :" << ir2 << " R " << r1 << " :" << r2 << " Thick " << ( 2.0 * hthickl)
712- << " phi " << fimin << " : " << fimax << " :" << convertRadToDeg (phi1) << " :"
713- << convertRadToDeg (phi2 ) << " cassette " << cassette << " : " << cassette0
714- << " Shift " << cshift. first << " : " << cshift. second ;
739+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Layer " << copy << " :" << (layer + 1 ) << " : "
740+ << layer0 << " iR " << ir1 << " :" << ir2 << " R " << r1 << " :" << r2 << " Thick "
741+ << ( 2.0 * hthickl) << " phi " << fimin << " :" << fimax << " :"
742+ << convertRadToDeg (phi1 ) << " : " << convertRadToDeg (phi2) << " cassette " << cassette
743+ << " : " << cassette0 << " Shift " << retract_[layer0 - 1 ] ;
715744#endif
716745 std::string name = namesTop_[ii] + " L" + std::to_string (copy) + " F" + std::to_string (k);
717746 ++k;
@@ -722,7 +751,7 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
722751 << " of dimensions " << r1 << " , " << r2 << " , " << hthickl << " , "
723752 << convertRadToDeg (phi1) << " , " << convertRadToDeg (phi2);
724753#endif
725- DDTranslation tran (-cshift. first , cshift. second , zpos);
754+ DDTranslation tran (0 , 0 , zpos);
726755 cpv.position (glog1, glog, copy, tran, rot);
727756#ifdef EDM_ML_DEBUG
728757 edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Position " << glog1.name () << " number " << copy
@@ -734,17 +763,22 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
734763
735764 // Make the bottom part next
736765 int layer = (copyM - firstFineLayer_);
766+ int layer0 = (copyM - std::min (firstFineLayer_, firstCoarseLayer_) + 1 );
737767#ifdef EDM_ML_DEBUG
738- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Start bottom section for layer " << layer
739- << " absType " << absType;
768+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette: Start bottom section for layer " << ( layer + 1 )
769+ << " : " << layer0 << " absType " << absType;
740770#endif
741771 if (absType > 0 ) {
742772#ifdef EDM_ML_DEBUG
743773 int kount (0 );
744774#endif
745775 for (int k = 0 ; k < cassettes_; ++k) {
746776 int cassette = k + 1 ;
747- auto cshift = cassette_.getShift (layer + 1 , -1 , cassette);
777+ auto cshift = cassette_.getShift (layer0, -1 , cassette, false );
778+ #ifdef EDM_ML_DEBUG
779+ edm::LogVerbatim (" HGCalGeom" ) << " 3Layer " << layer << " :" << layer0 << " Cassette " << cassette << " shift "
780+ << cshift.first << " :" << cshift.second ;
781+ #endif
748782 double xpos = -cshift.first ;
749783 double ypos = cshift.second ;
750784 int i = layer * cassettes_ + k;
@@ -812,17 +846,21 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
812846 << " :" << waferProperty_[k] << " :" << layertype << " :" << type << " :" << part << " :" << orien << " :"
813847 << cassette << " :" << place;
814848#endif
815- auto cshift = cassette_.getShift (layer + 1 , -1 , cassette, false );
849+ auto cshift = cassette_.getShift (layer0, -1 , cassette, false );
850+ #ifdef EDM_ML_DEBUG
851+ edm::LogVerbatim (" HGCalGeom" ) << " Layer " << (layer + 1 ) << " :" << layer0 << " Cassette " << cassette << " shift "
852+ << cshift.first << " :" << cshift.second ;
853+ #endif
816854 double xpos = xyoff.first - cshift.first + nc * delx;
817855 double ypos = xyoff.second + cshift.second + nr * dy;
818856#ifdef EDM_ML_DEBUG
819857 double xorig = xyoff.first + nc * delx;
820858 double yorig = xyoff.second + nr * dy;
821859 double angle = std::atan2 (yorig, xorig);
822- edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette::Wafer: layer " << layer + 1 << " cassette "
823- << cassette << " Shift " << cshift.first << " :" << cshift.second << " Original "
824- << xorig << " : " << yorig << " :" << convertRadToDeg (angle) << " Final " << xpos
825- << " :" << ypos;
860+ edm::LogVerbatim (" HGCalGeom" ) << " DDHGCalMixRotatedFineCassette::Wafer: layer " << layer + 1 << " : " << layer0
861+ << " cassette " << cassette << " Shift " << cshift.first << " :" << cshift.second
862+ << " Original " << xorig << " :" << yorig << " : " << convertRadToDeg (angle)
863+ << " Final " << xpos << " :" << ypos;
826864#endif
827865 std::string wafer;
828866 int i (999 );
@@ -878,4 +916,20 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
878916 }
879917}
880918
919+ void DDHGCalMixRotatedFineCassette::testCassetteShift () {
920+ for (unsigned int k = 0 ; k < layers_.size (); ++k) {
921+ int layer = k + 1 ;
922+ for (int l = 0 ; l < cassettes_; ++l) {
923+ int cassette = l + 1 ;
924+ auto cf1 = cassette_.getShift (layer, 1 , cassette, false );
925+ auto cf2 = cassette_.getShift (layer, 1 , cassette, true );
926+ auto cf3 = cassette_.getShift (layer, -1 , cassette, false );
927+ auto cf4 = cassette_.getShift (layer, -1 , cassette, true );
928+ edm::LogVerbatim (" HGCalGeom" ) << " Layer " << layer << " Cassette " << cassette << " x for z+ " << cf1.first << " :"
929+ << cf2.first << " y for z+ " << cf1.second << " :" << cf2.second << " x for z- "
930+ << cf3.first << " :" << cf4.first << " y for z- " << cf3.second << " :" << cf4.second ;
931+ }
932+ }
933+ }
934+
881935DEFINE_EDM_PLUGIN (DDAlgorithmFactory, DDHGCalMixRotatedFineCassette, " hgcal:DDHGCalMixRotatedFineCassette" );
0 commit comments