548 <<
" LBNEVolumePlacements::PlaceFinalLBNFConceptHornB..Rev 2 Drawing F10071359... Start with upstream IO/layer. " 553 const double in = 25.4*CLHEP::mm;
556 "LBNEVolumePlacements::PlaceFinalLBNFConceptHornB");
557 G4LogicalVolume *volMother = plDatMother->
fCurrent;
558 const double lengthMother=plDatMother->
fParams[2];
559 const double zShiftMotherCoords = 0.005*CLHEP::mm;
560 const size_t nSegUpstrIO = 20;
561 const double radInnerInner = 159.0*CLHEP::mm;
562 const double thickInner = 3.0*CLHEP::mm;
564 const double zStartUpstrIOC = -0.5*lengthMother + 0.025*CLHEP::mm;
565 const double deltaPhiUpstrIO = M_PI/nSegUpstrIO;
566 const double radOuterUpstIO = 0.5*(642. - radInnerInner) *CLHEP::mm;
567 const double radInnerUpstIO = 0.5*(2.0*radOuterUpstIO - 8.0*CLHEP::mm - thickInner);
568 const double distUpstreamToBeginIC = radOuterUpstIO + 0.025 ;
569 const double zZeroLocalCoord = -0.5*lengthMother + distUpstreamToBeginIC;
570 const double radInnerOC = 634.0*CLHEP::mm;
571 std::cerr <<
" .....Mother Volume name " << volMother->GetName()
572 <<
" zShiftMother " << zShiftMotherCoords <<
" distUpstreamToBeginIC " 573 << distUpstreamToBeginIC <<
" zZeroLocalCoords " << zZeroLocalCoord <<
std::endl;
575 std::vector<double> zTmps(20, 0.); std::vector<double> rTmps(20, 0.);
576 G4ThreeVector zeroC(0., 0., 0.);
577 G4Material *myAlumina = G4Material::GetMaterial(
"Alumina");
582 G4Material *myWater = 0;
584 size_t nSegUpstrIOBy2 = nSegUpstrIO/2;
588 for (
size_t kPhi = 0; kPhi != nSegUpstrIO; kPhi++ ) {
589 std::ostringstream aNStrStr; aNStrStr << header <<
"UpstrIOSect" << kPhi;
592 const double phi0 = kPhi*deltaPhiUpstrIO + 1.0e-5;
593 const double phi1 = phi0 + deltaPhiUpstrIO - 2.0e-5;
594 zTmps[0] = zStartUpstrIOC + radOuterUpstIO - radOuterUpstIO*std::sin(phi1);
595 zTmps[1] = zStartUpstrIOC + radOuterUpstIO - radOuterUpstIO*std::sin(phi0);
596 zTmps[2] = zStartUpstrIOC + radOuterUpstIO - radInnerUpstIO*std::sin(phi0);
597 zTmps[3] = zStartUpstrIOC + radOuterUpstIO - radInnerUpstIO*std::sin(phi1);
598 rTmps[0] = radInnerInner + radOuterUpstIO - radOuterUpstIO*std::cos(phi1);
599 rTmps[1] = radInnerInner + radOuterUpstIO - radOuterUpstIO*std::cos(phi0);
600 rTmps[2] = radInnerInner + thickInner + radInnerUpstIO - radInnerUpstIO*std::cos(phi0);
601 rTmps[3] = radInnerInner + thickInner + radInnerUpstIO - radInnerUpstIO*std::cos(phi1);
605 G4GenericPolycone *aVolGP =
new G4GenericPolycone(aNStr, 0.0, 360.0*CLHEP::degree, 4, &rTmps[0], &zTmps[0]);
606 G4LogicalVolume *aVolG =
new G4LogicalVolume(aVolGP, myAlumIC, aNStr);
607 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolG, aNStr +
std::string(
"_P"),
608 volMother,
false, 1,
true);
610 if (kPhi < nSegUpstrIO/2) {
620 const double thickUpstrICFlangeTr = 10.0;
621 const double radInnerICFl = 634.*CLHEP::mm;
622 const double radOuterICFlTr = radInnerICFl + 10.0*(1.0- M_PI/4.);
625 G4Tubs* aVolICFlG0 =
new G4Tubs(aNStrTmp0, radInnerICFl, radOuterICFlTr,
626 0.5*thickUpstrICFlangeTr, 0.0, 360.0*CLHEP::degree);
627 G4LogicalVolume *aVolICFlGL0 =
new G4LogicalVolume(aVolICFlG0, myAlumIC, aNStrTmp0);
629 G4ThreeVector posTmp0(0., 0.,
630 zZeroLocalCoord + 0.5*thickUpstrICFlangeTr + 0.05*CLHEP::mm);
631 new G4PVPlacement((G4RotationMatrix *) 0, posTmp0, aVolICFlGL0, aNStrTmp0 +
std::string(
"_P"),
632 volMother,
false, 1,
true);
634 const double thickUpstrICFlange = 29.8;
635 const double radOuterICFl = 691.5*CLHEP::mm;
637 G4Tubs* aVolICFlG =
new G4Tubs(aNStrTmp, radInnerICFl, radOuterICFl,
638 0.5*thickUpstrICFlange, 0.0, 360.0*CLHEP::degree);
639 G4LogicalVolume *aVolICFlGL =
new G4LogicalVolume(aVolICFlG, myAlumIC, aNStrTmp);
641 G4ThreeVector posTmp(0., 0.,
642 zZeroLocalCoord + thickUpstrICFlangeTr + 0.5*thickUpstrICFlange + 0.1*CLHEP::mm);
643 new G4PVPlacement((G4RotationMatrix *) 0, posTmp, aVolICFlGL, aNStrTmp +
std::string(
"_P"),
644 volMother,
false, 1,
true);
649 double zCoordLocalCurrent = zZeroLocalCoord;
652 const double lengthFirstCylIC = 1089.*CLHEP::mm;
653 const double lengthFirstCylICWUp = lengthFirstCylIC - 126.*CLHEP::mm;
655 const double lengthSpiderWebSupportOnIC = 27*CLHEP::mm;
656 std::vector<double> zPosSpiderWebSupportOnIC(3, 0.);
657 std::vector<double> radRingSpiderSuppICOuter(3, 0.);
660 const double radInnerOuter = radInnerInner + thickInner;
662 G4Tubs* aVolIC0GT =
new G4Tubs(aNStrTmp,
663 radInnerInner, radInnerOuter, 0.5*lengthFirstCylIC, 0.0, 360.0*CLHEP::degree);
664 G4LogicalVolume *aVolIC0G =
new G4LogicalVolume(aVolIC0GT, myAlumIC, aNStrTmp);
665 G4ThreeVector posTmp(0., 0., zZeroLocalCoord + 0.5*lengthFirstCylIC);
666 new G4PVPlacement((G4RotationMatrix *) 0, posTmp, aVolIC0G, aNStrTmp +
std::string(
"_P"),
667 volMother,
false, 1,
true);
668 zCoordLocalCurrent += lengthFirstCylIC + 0.025*CLHEP::mm;
670 const double radInnerW = radInnerOuter + 0.010;
673 G4Tubs* aVolIC0GTWUp =
new G4Tubs(aNStrTmpWUp,
674 radInnerW, radOuterW, 0.5*lengthFirstCylICWUp, 0.0, 360.0*CLHEP::degree);
675 G4LogicalVolume *aVolIC0GWUp =
new G4LogicalVolume(aVolIC0GTWUp, myWater, aNStrTmpWUp);
676 G4ThreeVector posTmpWUp(0., 0., zZeroLocalCoord + 0.5*lengthFirstCylICWUp);
677 new G4PVPlacement((G4RotationMatrix *) 0, posTmpWUp, aVolIC0GWUp, aNStrTmpWUp +
std::string(
"_P"),
678 volMother,
false, 1,
true);
681 const double lengthFirstCylICWDw = 92. *CLHEP::mm;
683 G4Tubs* aVolIC0GTWDw =
new G4Tubs(aNStrTmpWDw,
684 radInnerW, radOuterW, 0.5*lengthFirstCylICWDw, 0.0, 360.0*CLHEP::degree);
685 G4LogicalVolume *aVolIC0GWDw =
new G4LogicalVolume(aVolIC0GTWDw, myWater, aNStrTmpWDw);
686 G4ThreeVector posTmpWDw(0., 0.,
687 zZeroLocalCoord + lengthFirstCylIC - 0.5*lengthFirstCylICWDw);
688 new G4PVPlacement((G4RotationMatrix *) 0, posTmpWDw, aVolIC0GWDw, aNStrTmpWDw +
std::string(
"_P"),
689 volMother,
false, 1,
true);
696 const double lengthFirstWeld = 16.0*CLHEP::mm;
697 double radInnerWeld = radInnerOuter + 0.010;
698 double radOuterWeld = radInnerWeld + 2.0;
700 if (fWaterLayerThickInHorns > 1.0e-6) {
705 G4Tubs* aVolIC0GTWe =
new G4Tubs(aNStrTmpWeld,
706 radInnerWeld, radOuterWeld, 0.5*lengthFirstWeld, 0.0, 360.0*CLHEP::degree);
707 G4LogicalVolume *aVolIC0GWe =
new G4LogicalVolume(aVolIC0GTWe, myAlumIC, aNStrTmpWeld);
708 G4ThreeVector posTmpWeld(0., 0., zZeroLocalCoord + lengthFirstCylIC - 36.);
709 new G4PVPlacement((G4RotationMatrix *) 0, posTmpWeld, aVolIC0GWe, aNStrTmpWeld +
std::string(
"_P"),
710 volMother,
false, 1,
true);
714 G4Tubs* aVolIC0GTSpd =
new G4Tubs(aNStrTmpSpd,
715 radInnerOuter+0.010*CLHEP::mm,
716 radInnerOuter+7.5*CLHEP::mm, 0.5*lengthSpiderWebSupportOnIC, 0.0, 360.0*CLHEP::degree);
717 G4LogicalVolume *aVolIC0GSpd =
new G4LogicalVolume(aVolIC0GTSpd, myAlumIC, aNStrTmpSpd);
718 G4ThreeVector posTmpSpd(0., 0., zZeroLocalCoord + lengthFirstCylIC - 110.*CLHEP::mm);
720 zPosSpiderWebSupportOnIC[0] = posTmpSpd[2];
721 radRingSpiderSuppICOuter[0] = radInnerOuter+7.5*CLHEP::mm + 0.025*CLHEP::mm;
722 new G4PVPlacement((G4RotationMatrix *) 0, posTmpSpd, aVolIC0GSpd, aNStrTmpSpd +
std::string(
"_P"),
723 volMother,
false, 1,
true);
729 const double radInnerInnerNeck = 81.0*CLHEP::mm;
732 const double lengthUpstrConeSec1 = 18.23*CLHEP::mm;
733 const double lengthUpstrConeSec2 = 851.46*CLHEP::mm;
734 const double lengthUpstrConeSec3 = 8.98*CLHEP::mm;
735 const double lengthUpstrCone = (lengthUpstrConeSec1 + lengthUpstrConeSec2 + lengthUpstrConeSec3);
737 std::cerr <<
" Before defining upstream conical section, zCoordLocalCurrent " 739 zTmps[0] = zCoordLocalCurrent;
740 rTmps[0] = radInnerInner;
741 zTmps[1] = zCoordLocalCurrent + lengthUpstrConeSec1;
742 rTmps[1] = 158.2*CLHEP::mm;
743 zTmps[2] = zTmps[1] + lengthUpstrConeSec2;
744 rTmps[2] = 81.42*CLHEP::mm;
745 zTmps[3] = zTmps[2] + lengthUpstrConeSec3;
746 rTmps[3] = radInnerInnerNeck;
747 for (
size_t kk=0; kk != 4; kk++) {
748 zTmps[4+kk] = zTmps[4 - kk - 1];
749 rTmps[4+kk] = rTmps[4 - kk - 1] + thickInner;
751 for(
size_t kk=0; kk != 4; kk++) {
755 G4GenericPolycone *aVolGPCU =
756 new G4GenericPolycone(aNStrTmp, 0.0, 360.0*CLHEP::degree, 8, &rTmps[0], &zTmps[0]);
757 G4LogicalVolume *aVolGCU =
new G4LogicalVolume(aVolGPCU, myAlumIC, aNStrTmp);
758 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolGCU, aNStrTmp +
std::string(
"_P"),
759 volMother,
false, 1,
true);
761 if (fWaterLayerThickInHorns > 1.0e-6) {
764 std::vector<double> zTmpsW(zTmps);
765 std::vector<double> rTmpsW(rTmps);
766 for (
size_t kk=0; kk != 2; kk++) rTmpsW[kk] += thickInner + .025*CLHEP::mm;
767 zTmpsW[2] = zTmpsW[1] + 686.*CLHEP::mm;
768 rTmpsW[2] = (0.5+99.27)*CLHEP::mm;
769 for (
size_t kk=0; kk != 3; kk++) {
770 zTmpsW[3+kk] = zTmpsW[3 - kk - 1];
773 std::cerr <<
" Last Z coord for water layer, upstream cone, upstr section " << zTmpsW[2] <<
std::endl;
776 G4GenericPolycone* aVolUCGTWUp =
777 new G4GenericPolycone(aNStrTmpWUp, 0.0, 360.0*CLHEP::degree, 6, &rTmpsW[0], &zTmpsW[0]);
778 G4LogicalVolume *aVolUCGWUp =
new G4LogicalVolume(aVolUCGTWUp, myWater, aNStrTmpWUp);
779 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolUCGWUp, aNStrTmpWUp +
std::string(
"_P"),
780 volMother,
false, 1,
true);
781 const double lengthUpstrUpstrConeW = lengthUpstrConeSec1 + 686.*CLHEP::mm;
782 zTmpsW[0] = zCoordLocalCurrent + lengthUpstrUpstrConeW + lengthSpiderWebSupportOnIC + 0.5*CLHEP::mm;
783 rTmpsW[0] = (96.650 + 0.3)*CLHEP::mm;
784 zTmpsW[1] = zTmpsW[0] + 143.*CLHEP::mm;
785 rTmpsW[1] = (radInnerInnerNeck + thickInner + 0.6)*CLHEP::mm;
786 zTmpsW[2] = zTmpsW[1];
788 zTmpsW[3] = zTmpsW[0];
790 std::cerr <<
" Last zCoord for LBNFConceptHornBUpstrConeWaterDw " 791 << zTmpsW[1] <<
" lengthUpstrUpstrConeW " <<lengthUpstrUpstrConeW
792 <<
" zCoordLocalCurrent " << zCoordLocalCurrent <<
std::endl;
794 G4GenericPolycone* aVolUCGTWDw =
795 new G4GenericPolycone(aNStrTmpWDw, 0.0, 360.0*CLHEP::degree, 4, &rTmpsW[0], &zTmpsW[0]);
796 G4LogicalVolume *aVolUCGWDw =
new G4LogicalVolume(aVolUCGTWDw, myWater, aNStrTmpWDw);
797 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolUCGWDw, aNStrTmpWDw +
std::string(
"_P"),
798 volMother,
false, 1,
true);
805 G4Tubs* aVolICodGTSpd =
new G4Tubs(aNStrTmpSpd,
806 99.20+0.030*CLHEP::mm,
807 99.23+7.5*CLHEP::mm, 0.5*lengthSpiderWebSupportOnIC, 0.0, 360.0*CLHEP::degree);
808 G4LogicalVolume *aVolICodGSpd =
new G4LogicalVolume(aVolICodGTSpd, myAlumIC, aNStrTmpSpd);
809 G4ThreeVector posTmpSpd(0., 0.,
810 zCoordLocalCurrent + lengthUpstrCone - 173.2*CLHEP::mm + 0.5*lengthSpiderWebSupportOnIC );
811 zPosSpiderWebSupportOnIC[1] = posTmpSpd[2];
812 radRingSpiderSuppICOuter[1] = 99.23 + 7.5*CLHEP::mm + 0.025*CLHEP::mm;
813 new G4PVPlacement((G4RotationMatrix *) 0, posTmpSpd, aVolICodGSpd, aNStrTmpSpd +
std::string(
"_P"),
814 volMother,
false, 1,
true);
816 zCoordLocalCurrent += lengthUpstrCone + 0.025;
817 std::cerr <<
" Last Z coord for upstr. cone " << zCoordLocalCurrent <<
std::endl;
819 const double thickNeck = 3.0*CLHEP::mm;
824 const double lengthNeck = 62.4;
825 const double radInnerOuterNeck = radInnerInnerNeck + thickNeck;
827 G4Tubs* aVolNeckGT =
new G4Tubs(aNStrTmp,
828 radInnerInnerNeck, radInnerOuterNeck, 0.5*lengthNeck, 0.0, 360.0*CLHEP::degree);
829 G4LogicalVolume *aVolNeckG =
new G4LogicalVolume(aVolNeckGT, myAlumIC, aNStrTmp);
830 G4ThreeVector posTmp(0., 0., zCoordLocalCurrent + 0.5*lengthNeck);
831 new G4PVPlacement((G4RotationMatrix *) 0, posTmp, aVolNeckG, aNStrTmp +
std::string(
"_P"),
832 volMother,
false, 1,
true);
833 if (fWaterLayerThickInHorns > 1.0e-6) {
834 const double lengthNeckW = lengthNeck - 0.010*CLHEP::mm;
835 const double radInnerNeckW = radInnerOuterNeck + 0.010;
838 G4Tubs* aVolNeckGTW =
new G4Tubs(aNStrTmpW,
839 radInnerNeckW, radOuterNeckW, 0.5*lengthNeckW, 0.0, 360.0*CLHEP::degree);
840 G4LogicalVolume *aVolNeckGW =
new G4LogicalVolume(aVolNeckGTW, myWater, aNStrTmpW);
841 G4ThreeVector posTmpW(posTmp); posTmpW[2] -= 0.050*CLHEP::mm;
842 new G4PVPlacement((G4RotationMatrix *) 0, posTmpW, aVolNeckGW, aNStrTmpW +
std::string(
"_P"),
843 volMother,
false, 1,
true);
846 zCoordLocalCurrent += lengthNeck + 0.025*CLHEP::mm;
849 std::cerr <<
" Last Z coord for upstr. cone and neck " << zCoordLocalCurrent <<
std::endl;
856 zTmps[0] = zCoordLocalCurrent;
857 rTmps[0] = radInnerInnerNeck;
858 const double zDwnstCL1 = 22.3*CLHEP::mm;
859 zTmps[1] = zTmps[0] + zDwnstCL1;
860 rTmps[1] = 83.6*CLHEP::mm;
861 const double zDwnstCL2 = 595.75*CLHEP::mm;
862 zTmps[2] = zTmps[1] + zDwnstCL2;
863 rTmps[2] = 219.9*CLHEP::mm;
864 const double zDwnstCL3 = 44.63*CLHEP::mm;
865 zTmps[3] = zTmps[2] + zDwnstCL3;
866 rTmps[3] = 225.0*CLHEP::mm;
867 for (
size_t kk=0; kk != 4; kk++) {
868 zTmps[4+kk] = zTmps[4 - kk - 1];
869 rTmps[4+kk] = rTmps[4 - kk - 1] + thickInner;
872 G4GenericPolycone *aVolGPCD =
873 new G4GenericPolycone(aNStrTmp, 0.0, 360.0*CLHEP::degree, 8, &rTmps[0], &zTmps[0]);
874 G4LogicalVolume *aVolGCD =
new G4LogicalVolume(aVolGPCD, myAlumIC, aNStrTmp);
875 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolGCD, aNStrTmp +
std::string(
"_P"),
876 volMother,
false, 1,
true);
877 for(
size_t kk=0; kk != 4; kk++) {
881 if (fWaterLayerThickInHorns > 1.0e-6) {
883 std::vector<double> rTmpsW(rTmps);
884 for (
size_t kk=0; kk != 4; kk++) rTmps[kk] = rTmps[4+kk] + 0.025*CLHEP::mm;
885 for (
size_t kk=0; kk != 4; kk++) rTmps[kk+4] = rTmps[4] + fWaterLayerThickInHorns;
886 std::vector<double> zTmpsW(zTmps);
888 G4GenericPolycone* aVolDCGTW =
889 new G4GenericPolycone(aNStrTmpW, 0.0, 360.0*CLHEP::degree, 8, &rTmpsW[0], &zTmpsW[0]);
890 G4LogicalVolume *aVolDCGW =
new G4LogicalVolume(aVolDCGTW, myWater, aNStrTmpW);
891 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolDCGW, aNStrTmpW +
std::string(
"_P"),
892 volMother,
false, 1,
true);
895 zCoordLocalCurrent += zDwnstCL1 + zDwnstCL2 + zDwnstCL3 + 0.025*CLHEP::mm;
896 std::cerr <<
" zCoordLocalCurrent, just before defining downstream cylinder " << zCoordLocalCurrent <<
std::endl;
902 const double lengthICDwnstrCyl = (1042.82 - 0.1)*CLHEP::mm;
904 const double radInnerInnerDw = 225.0*CLHEP::mm;
907 const double radInnerOuterDw = radInnerInnerDw + thickInner;
909 G4Tubs* aVolIC0GT =
new G4Tubs(aNStrTmp,
910 radInnerInnerDw, radInnerOuterDw, 0.5*lengthICDwnstrCyl, 0.0, 360.0*CLHEP::degree);
911 G4LogicalVolume *aVolIC0G =
new G4LogicalVolume(aVolIC0GT, myAlumIC, aNStrTmp);
912 G4ThreeVector posTmp(0., 0., zCoordLocalCurrent + 0.5*lengthICDwnstrCyl);
913 std::cerr <<
" Long. Position of downstream cylinder " << posTmp[2] <<
" length " << lengthICDwnstrCyl<<
std::endl;
914 new G4PVPlacement((G4RotationMatrix *) 0, posTmp, aVolIC0G, aNStrTmp +
std::string(
"_P"),
915 volMother,
false, 1,
true);
916 if (fWaterLayerThickInHorns > 1.0e-6) {
917 double lengthICDwnCylICWUp = 101.5*CLHEP::mm - 1.0*CLHEP::mm;
919 const double radInnerW = radInnerOuterDw + 0.010;
922 G4Tubs* aVolIC0GTWUp =
new G4Tubs(aNStrTmpWUp,
923 radInnerW, radOuterW, 0.5*lengthICDwnCylICWUp, 0.0, 360.0*CLHEP::degree);
924 G4LogicalVolume *aVolIC0GWUp =
new G4LogicalVolume(aVolIC0GTWUp, myWater, aNStrTmpWUp);
925 G4ThreeVector posTmpWUp(0., 0., zCoordLocalCurrent + 0.5*lengthICDwnCylICWUp + 0.5*CLHEP::mm);
927 std::cerr <<
" Long. Position of downstream cylinder water layer, upstream " 928 << posTmpWUp[2] <<
" Length " << lengthICDwnCylICWUp <<
std::endl;
929 new G4PVPlacement((G4RotationMatrix *) 0, posTmpWUp, aVolIC0GWUp, aNStrTmpWUp +
std::string(
"_P"),
930 volMother,
false, 1,
true);
933 const double lengthICDwnCylICWDw = lengthICDwnstrCyl -
934 lengthICDwnCylICWUp - lengthSpiderWebSupportOnIC - 1.0*CLHEP::mm;
936 G4Tubs* aVolIC0GTWDw =
new G4Tubs(aNStrTmpWDw,
937 radInnerW, radOuterW, 0.5*lengthICDwnCylICWDw, 0.0, 360.0*CLHEP::degree);
938 G4LogicalVolume *aVolIC0GWDw =
new G4LogicalVolume(aVolIC0GTWDw, myWater, aNStrTmpWDw);
939 G4ThreeVector posTmpWDw(0., 0.,
940 zCoordLocalCurrent + lengthICDwnCylICWUp +
941 lengthSpiderWebSupportOnIC + 0.5*lengthICDwnCylICWDw + 1.0*CLHEP::mm);
942 std::cerr <<
" Long. Position of downstream cylinder water layer, downsstream " 943 << posTmpWDw[2] <<
" Length " << lengthICDwnCylICWDw <<
std::endl;
944 new G4PVPlacement((G4RotationMatrix *) 0, posTmpWDw, aVolIC0GWDw, aNStrTmpWDw +
std::string(
"_P"),
945 volMother,
false, 1,
true);
952 const double length2ndWeld = 16.0*CLHEP::mm;
953 double radInnerWeld = radInnerOuterDw + 0.010;
954 double radOuterWeld = radInnerWeld + 2.0;
956 if (fWaterLayerThickInHorns > 1.0e-6) {
961 G4Tubs* aVolIC0GTWe =
new G4Tubs(aNStrTmpWeld,
962 radInnerWeld, radOuterWeld, 0.5*length2ndWeld, 0.0, 360.0*CLHEP::degree);
963 G4LogicalVolume *aVolIC0GWe =
new G4LogicalVolume(aVolIC0GTWe, myAlumIC, aNStrTmpWeld);
964 G4ThreeVector posTmpWeld(0., 0., zCoordLocalCurrent + 48.5*CLHEP::mm + 0.5*length2ndWeld);
965 new G4PVPlacement((G4RotationMatrix *) 0, posTmpWeld, aVolIC0GWe, aNStrTmpWeld +
std::string(
"_P"),
966 volMother,
false, 1,
true);
971 G4Tubs* aVolIC1GTSpd =
new G4Tubs(aNStrTmpSpd,
972 radInnerOuterDw+0.010*CLHEP::mm,
973 radInnerOuterDw+7.5*CLHEP::mm, 0.5*lengthSpiderWebSupportOnIC, 0.0, 360.0*CLHEP::degree);
974 G4LogicalVolume *aVolIC1GSpd =
new G4LogicalVolume(aVolIC1GTSpd, myAlumIC, aNStrTmpSpd);
975 G4ThreeVector posTmpSpd(0., 0.,
976 zCoordLocalCurrent + 101.5*CLHEP::mm + 0.5*lengthSpiderWebSupportOnIC );
977 zPosSpiderWebSupportOnIC[2] = posTmpSpd[2];
978 radRingSpiderSuppICOuter[2] = radInnerOuterDw + 7.5*CLHEP::mm + 0.025*CLHEP::mm;
979 std::cerr <<
" Long. Position of last spider web support ring " 980 << posTmpSpd[2] <<
" Length " << lengthSpiderWebSupportOnIC <<
std::endl;
981 new G4PVPlacement((G4RotationMatrix *) 0, posTmpSpd, aVolIC1GSpd, aNStrTmpSpd +
std::string(
"_P"),
982 volMother,
false, 1,
true);
984 zCoordLocalCurrent += lengthICDwnstrCyl + 0.025*CLHEP::mm;
988 std::cerr <<
" Distance between the downstream end of IC and zZeroLocal Coord " 989 << zCoordLocalCurrent - zZeroLocalCoord <<
std::endl;
995 for (
size_t iCs=0; iCs != 3; iCs++) {
997 const double zSpiderSupport = zPosSpiderWebSupportOnIC[iCs];
1003 std::ostringstream osstrTmp; osstrTmp << iCs;
1004 nameStrH += osstrTmp.str() +
std::string(
"_support");
1005 G4String nameStr2(nameStrH); nameStr2 += G4String(
"_Riser");
1006 const double heightRiser = 0.333*in - 0.020*CLHEP::mm;
1007 const double widthH = 1.5*in;
1008 const double thickH = 0.184*2*in;
1009 G4Box *aBoxRiser =
new G4Box(nameStr2, widthH/2., heightRiser/2.0, thickH/2.0);
1010 G4LogicalVolume *pCurrentRiser =
1011 new G4LogicalVolume(aBoxRiser, myAlumIC, nameStr2);
1013 G4String nameStr3(nameStrH); nameStr3 += G4String(
"Hanger");
1014 const double heightH = radInnerOC - radRingSpiderSuppICOuter[iCs] - 1.0*CLHEP::mm - heightRiser;
1015 const double widthH2 = 1.0*in;
1017 const double thickH2 = 0.031*in;
1018 G4Box *aBoxHanger =
new G4Box(nameStr3, widthH2/2., heightH/2.0, thickH2/2.0);
1019 G4LogicalVolume *pCurrentHanger =
1020 new G4LogicalVolume(aBoxHanger, myAlumIC, nameStr3);
1022 G4ThreeVector posTmp(0., 0., zSpiderSupport);
1024 for (
int iRot=0; iRot != 3; iRot++) {
1025 std::ostringstream rnStrStr; rnStrStr <<
"_" << (iRot+1);
1026 G4String rnStr(rnStrStr.str());
1028 G4RotationMatrix * rMatPr = 0;
1030 rMatPr =
new G4RotationMatrix;
1031 rMatPr->rotateZ(2.0*M_PI/3.);
1032 }
else if (iRot == 2) {
1033 rMatPr =
new G4RotationMatrix;
1034 rMatPr->rotateZ(-2.0*M_PI/3.);
1037 const double dHRiser = radRingSpiderSuppICOuter[iCs] + 0.010*CLHEP::mm + heightRiser/2.;
1038 posTmp[0] = 0.; posTmp[1] = dHRiser;
1040 posTmp[0] = dHRiser*rMatPr->xy();
1041 posTmp[1] = dHRiser*rMatPr->yy();
1044 new G4PVPlacement(rMatPr, posTmp, pCurrentRiser, nameStr2 +
std::string(
"_P") + rnStr,
1047 new G4PVPlacement(G4Transform3D(*rMatPr, posTmp), pCurrentRiser, nameStr2 +
std::string(
"_P") + rnStr,
1048 volMother,
false, iRot,
true);
1052 const double dHHanger = radRingSpiderSuppICOuter[iCs] + 0.010*CLHEP::mm + 0.5*CLHEP::mm + heightRiser + heightH/2.;
1053 posTmp[0] = 0.; posTmp[1] = dHHanger;
1055 posTmp[0] = dHHanger*rMatPr->xy();
1056 posTmp[1] = dHHanger*rMatPr->yy();
1060 new G4PVPlacement(rMatPr, posTmp, pCurrentHanger, nameStr3 +
std::string(
"_P") + rnStr,
1063 new G4PVPlacement(G4Transform3D(*rMatPr, posTmp), pCurrentHanger, nameStr3 +
std::string(
"_P") + rnStr,
1064 volMother,
false, iRot,
true);
1071 double zEndICIOFl = 0.;
1073 const double radOuterDownstrtIO = 0.5*(525. - radInnerInnerDw)*CLHEP::mm;
1074 const double radInnerDownstrtIO = 0.5*(2.0*radOuterDownstrtIO - 8.0*CLHEP::mm - thickInner);
1075 const double phiStartInnerDownstrtIO = 0.;
1076 const double yCenterInnerDownstrtIO = radInnerInnerDw + thickInner + radInnerDownstrtIO;
1077 const double yCenterOuterDownstrtIO = radInnerInnerDw + radOuterDownstrtIO;
1078 const double zCenterDownstrtIO = zCoordLocalCurrent;
1079 std::cerr <<
" Check distance between start of the downstream IO section to zZeroLocalCoord " 1080 << zCenterDownstrtIO - zZeroLocalCoord <<
std::endl;
1081 const size_t nSegDownstrIO = 20.;
1083 const double deltaPhiDownstrIO = (M_PI - phiStartInnerDownstrtIO)/nSegDownstrIO;
1085 for (
size_t kPhi = 0; kPhi != nSegDownstrIO; kPhi++ ) {
1086 std::ostringstream aNStrStr; aNStrStr << header <<
"DownstrIOSect" << kPhi;
1089 const double phi0 = phiStartInnerDownstrtIO + kPhi*deltaPhiDownstrIO + 1.0e-5;
1090 const double phi1 = phi0 + deltaPhiDownstrIO - 2.0e-5;
1091 zTmps[0] = zCenterDownstrtIO + radInnerDownstrtIO*std::sin(phi0);
1092 zTmps[1] = zCenterDownstrtIO + radOuterDownstrtIO*std::sin(phi0);
1093 zTmps[2] = zCenterDownstrtIO + radOuterDownstrtIO*std::sin(phi1);
1094 zTmps[3] = zCenterDownstrtIO + radInnerDownstrtIO*std::sin(phi1);
1095 rTmps[0] = yCenterInnerDownstrtIO - radInnerDownstrtIO*std::cos(phi0);
1096 rTmps[1] = yCenterOuterDownstrtIO - radOuterDownstrtIO*std::cos(phi0);
1097 rTmps[2] = yCenterOuterDownstrtIO - radOuterDownstrtIO*std::cos(phi1);
1098 rTmps[3] = yCenterInnerDownstrtIO - radInnerDownstrtIO*std::cos(phi1);
1102 G4GenericPolycone *aVolGP =
new G4GenericPolycone(aNStr, 0.0, 360.0*CLHEP::degree, 4, &rTmps[0], &zTmps[0]);
1103 G4LogicalVolume *aVolG =
new G4LogicalVolume(aVolGP, myAlumIC, aNStr);
1104 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolG, aNStr +
std::string(
"_P"),
1105 volMother,
false, 1,
true);
1106 if (kPhi < nSegDownstrIO/2) {
1115 double zLocalDwnstrICFlange = 0.;
1119 const double radInnerFlDownstrtIO = 50.*CLHEP::mm;
1120 const double radOuterFlDownstrtIO = 24.5*CLHEP::mm;
1121 const double phiStartInnerFlDownstrtIO = 0.083333;
1122 const double phiStartOuterFlDownstrtIO = 0.0;
1123 const double yCenterOuterFlDownstrtIO = radOuterFlDownstrtIO + 525.0*CLHEP::mm;
1124 const double yCenterInnerFlDownstrtIO = radInnerFlDownstrtIO + 517.0*CLHEP::mm;
1125 const double zCenterFlDownstrtIO = zCoordLocalCurrent - 0.050*CLHEP::mm;
1126 const size_t nSegFlDownstrIO = 10;
1127 const double deltaPhiFlDownstrIOInner = (M_PI/2.0 - phiStartInnerFlDownstrtIO)/nSegFlDownstrIO;
1128 const double deltaPhiFlDownstrIOOuter = (M_PI/2.0 - phiStartOuterFlDownstrtIO)/nSegFlDownstrIO;
1132 for (
size_t kPhi = 0; kPhi != nSegFlDownstrIO; kPhi++ ) {
1133 std::ostringstream aNStrStr; aNStrStr << header <<
"DwnstrFlIOSect" << kPhi;
1135 const double phi0Inner = phiStartInnerFlDownstrtIO + kPhi*deltaPhiFlDownstrIOInner + 1.0e-2;
1136 const double phi1Inner = phi0Inner + deltaPhiFlDownstrIOInner - 2.0e-2;
1137 const double phi0Outer = phiStartOuterFlDownstrtIO + kPhi*deltaPhiFlDownstrIOOuter + 1.0e-2;
1138 const double phi1Outer = phi0Outer + deltaPhiFlDownstrIOOuter - 2.0e-2;
1139 zTmps[0] = zCenterFlDownstrtIO - radOuterFlDownstrtIO*std::cos(phi0Outer);
1140 zTmps[1] = zCenterFlDownstrtIO - radOuterFlDownstrtIO*std::cos(phi1Outer);
1141 zTmps[2] = zCenterFlDownstrtIO - radInnerFlDownstrtIO*std::cos(phi1Inner);
1142 zTmps[3] = zCenterFlDownstrtIO - radInnerFlDownstrtIO*std::cos(phi0Inner);
1143 rTmps[0] = yCenterOuterFlDownstrtIO - radOuterFlDownstrtIO*std::sin(phi0Outer);
1144 rTmps[1] = yCenterOuterFlDownstrtIO - radOuterFlDownstrtIO*std::sin(phi1Outer);
1145 rTmps[2] = yCenterInnerFlDownstrtIO - radInnerFlDownstrtIO*std::sin(phi1Inner);
1146 rTmps[3] = yCenterInnerFlDownstrtIO - radInnerFlDownstrtIO*std::sin(phi0Inner);
1150 G4GenericPolycone *aVolGP =
new G4GenericPolycone(aNStr, 0.0, 360.0*CLHEP::degree, 4, &rTmps[0], &zTmps[0]);
1151 G4LogicalVolume *aVolG =
new G4LogicalVolume(aVolGP, myAlumIC, aNStr);
1152 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolG, aNStr +
std::string(
"_P"),
1153 volMother,
false, 1,
true);
1157 zTmps[0] = zCenterFlDownstrtIO - radOuterFlDownstrtIO;
1158 rTmps[0] = 629.5*CLHEP::mm;
1159 zTmps[1] = zTmps[0];
1160 rTmps[1] = yCenterOuterFlDownstrtIO + 0.010*CLHEP::mm;
1161 zTmps[2] = zCenterFlDownstrtIO - radInnerFlDownstrtIO;;
1162 rTmps[2] = yCenterInnerFlDownstrtIO + 0.010*CLHEP::mm;;
1163 zTmps[3] = zTmps[2];
1164 rTmps[3] = rTmps[0];
1167 G4GenericPolycone* aVolDwnstrFlA =
1168 new G4GenericPolycone(aNStrTmpO, 0.0, 360.0*CLHEP::degree, 4, &rTmps[0], &zTmps[0]);
1169 G4LogicalVolume *aVolDwnstrFlAG =
new G4LogicalVolume(aVolDwnstrFlA, myAlumOC, aNStrTmpO);
1170 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolDwnstrFlAG, aNStrTmpO +
std::string(
"_P"),
1171 volMother,
false, 1,
true);
1172 zEndICIOFl = zTmps[0];
1178 double zLocalDwnstrOCFlange = 0.;
1179 double zLocalStartICEQ = 0.;
1180 double zLocalStartOCEQ = 0.;
1182 const double thickUpstrFlange = (28.0 -1.5)*CLHEP::mm;
1183 const double spacerUstrFlange = 67.0*CLHEP::mm;
1184 const double lengthOC = (3149.2 - 0.05)*CLHEP::mm;
1185 const double radOuterOC = 650.*CLHEP::mm;
1187 G4Tubs* aVolOCG =
new G4Tubs(aNStrTmp, radInnerOC, radOuterOC,
1188 0.5*lengthOC, 0.0, 360.0*CLHEP::degree);
1189 G4LogicalVolume *aVolOCGL =
new G4LogicalVolume(aVolOCG, myAlumOC, aNStrTmp);
1190 G4ThreeVector posTmp(0., 0., zZeroLocalCoord + spacerUstrFlange + 0.5*lengthOC + 0.010*CLHEP::mm);
1191 std::cerr <<
" Position of Outer Conductor main cylinder " << posTmp[2] <<
" length " 1193 new G4PVPlacement((G4RotationMatrix *) 0, posTmp, aVolOCGL, aNStrTmp +
std::string(
"_P"),
1194 volMother,
false, 1,
true);
1196 zLocalDwnstrOCFlange += posTmp[2] + 0.5*lengthOC + 0.010*CLHEP::mm;
1197 std::cerr <<
" Z position of the start of the OC " << posTmp[2] - 0.5*lengthOC <<
std::endl;
1198 std::cerr <<
" Z position of the start of the OC downstream flange and drain connect " <<
1203 const double radInnerOCFl = 634*CLHEP::mm;
1204 const double radOuterOCFl = 688.*CLHEP::mm;
1206 G4Tubs* aVolOCFlG =
new G4Tubs(aNStrTmp2, radInnerOCFl, radOuterOCFl,
1207 0.5*thickUpstrFlange, 0.0, 360.0*CLHEP::degree);
1208 G4LogicalVolume *aVolOCFlGL =
new G4LogicalVolume(aVolOCFlG, myAlumOC, aNStrTmp);
1210 G4ThreeVector posTmp2(0., 0., zZeroLocalCoord + 39.5*CLHEP::mm + 0.5*thickUpstrFlange + 0.5*CLHEP::mm);
1211 new G4PVPlacement((G4RotationMatrix *) 0, posTmp2, aVolOCFlGL, aNStrTmp2 +
std::string(
"_P"),
1212 volMother,
false, 1,
true);
1220 const double thickOC = 16.0*CLHEP::mm;
1221 zTmps[0] = zLocalDwnstrOCFlange;
1222 rTmps[0] = 634.0*CLHEP::mm;
1223 zTmps[1] = zTmps[0] + 108.76*CLHEP::mm;
1224 rTmps[1] = 702.2*CLHEP::mm;
1225 zTmps[2] = zTmps[0] + 138.2*CLHEP::mm;
1226 rTmps[2] = 707.5*CLHEP::mm;
1227 zTmps[3] = zTmps[0] + 297.4*CLHEP::mm;
1228 rTmps[3] = 691.*CLHEP::mm;
1229 zTmps[4] = zTmps[0] + 359.1*CLHEP::mm;
1230 rTmps[4] = 651.*CLHEP::mm;
1231 zTmps[5] = zTmps[0] + 376.*CLHEP::mm;
1232 rTmps[5] = 651.*CLHEP::mm;
1233 zTmps[6] = zTmps[0] + 404.*CLHEP::mm;
1234 rTmps[6] = 634.*CLHEP::mm;
1235 zTmps[7] = zTmps[0] + 404.*CLHEP::mm;
1236 rTmps[7] = 634.*CLHEP::mm;
1237 for (
size_t kk=0; kk != 8; kk++) {
1238 zTmps[kk+8] = zTmps[7 - kk];
1239 rTmps[kk+8] = rTmps[7 - kk] + thickOC;
1241 rTmps[8] = 697.*CLHEP::mm;
1242 rTmps[9] = 766.5*CLHEP::mm;
1243 rTmps[10] = 766.5*CLHEP::mm;
1245 G4GenericPolycone* aVolDwnstrFlA =
1246 new G4GenericPolycone(aNStrTmpO, 0.0, 360.0*CLHEP::degree, 16, &rTmps[0], &zTmps[0]);
1247 G4LogicalVolume *aVolDwnstrFlAG =
new G4LogicalVolume(aVolDwnstrFlA, myAlumOC, aNStrTmpO);
1248 new G4PVPlacement((G4RotationMatrix *) 0, zeroC, aVolDwnstrFlAG, aNStrTmpO +
std::string(
"_P"),
1249 volMother,
false, 1,
true);
1250 zLocalStartOCEQ = zTmps[7];
1256 const double thickInsulator = (70.0 - 0.050)*CLHEP::mm;
1257 const double radInnerInsul = 634.0*CLHEP::mm;
1258 const double radOuterInsul = 694.0*CLHEP::mm;
1260 G4Tubs* aVolOCInsulG =
new G4Tubs(aNStrTmp, radInnerInsul, radOuterInsul,
1261 0.5*thickInsulator, 0.0, 360.0*CLHEP::degree);
1262 G4LogicalVolume *aVolOCInsulGL =
new G4LogicalVolume(aVolOCInsulG, myAlumina, aNStrTmp);
1263 std::cerr <<
" Placing insulator ring, from zLocalStartICEQ " << zLocalStartICEQ <<
std::endl;
1265 G4ThreeVector posTmp(0., 0., zLocalStartOCEQ + 0.5*thickInsulator + 0.025*CLHEP::mm);
1266 std::cerr <<
" .... zLocalStartICEQ after installation of the insulator ring .. " << zLocalStartICEQ <<
std::endl;
1268 new G4PVPlacement((G4RotationMatrix *) 0, posTmp, aVolOCInsulGL, aNStrTmp +
std::string(
"_P"),
1269 volMother,
false, 1,
true);
1271 zLocalStartICEQ = posTmp[2] + 0.5*thickInsulator + 0.050*CLHEP::mm;
1278 const double thickCon1 = 23.*CLHEP::mm;
1279 const double thickCon2 = (45. - thickCon1 - 0.050)*CLHEP::mm;
1280 const double radInnerCon1 = 630.1*CLHEP::mm;
1281 const double radOuterCon1 = 697.0*CLHEP::mm;
1282 const double radInnerCon2 = 570.0*CLHEP::mm;
1283 const double radOuterCon2 = radOuterCon1;
1285 G4Tubs* aVolOC1G =
new G4Tubs(aNStrTmp1, radInnerCon1, radOuterCon1,
1286 0.5*thickCon1, 0.0, 360.0*CLHEP::degree);
1288 G4Tubs* aVolOC2G =
new G4Tubs(aNStrTmp2, radInnerCon2, radOuterCon2,
1289 0.5*thickCon2, 0.0, 360.0*CLHEP::degree);
1290 G4LogicalVolume *aVolOC1GL =
new G4LogicalVolume(aVolOC1G, myAlumOC, aNStrTmp1);
1291 G4LogicalVolume *aVolOC2GL =
new G4LogicalVolume(aVolOC2G, myAlumOC, aNStrTmp2);
1297 G4ThreeVector posTmp1(0., 0., zLocalStartICEQ + 0.5*thickCon1 + 0.05*CLHEP::mm);
1298 std::cerr <<
" Zstart of Inner IC connect Flange to EQ IC1 " << posTmp1[2] - 0.5*thickCon1
1299 <<
" Zend of of the downstream IC flange " << zEndICIOFl <<
std::endl;
1300 std::cerr <<
" Dist Zstart of Inner IC connect Flange to EQ IC1 " << posTmp1[2] - 0.5*thickCon1 - zZeroLocalCoord
1301 <<
" and dist Zend of of the downstream IC flange " << zEndICIOFl - zZeroLocalCoord <<
std::endl;
1303 new G4PVPlacement((G4RotationMatrix *) 0, posTmp1, aVolOC1GL, aNStrTmp1 +
std::string(
"_P"),
1304 volMother,
false, 1,
true);
1305 std::cerr <<
" Z position of the connecting flange, inner " << posTmp1[2] <<
std::endl;
1306 G4ThreeVector posTmp2(0., 0., posTmp1[2] + 0.5*thickCon1 + 0.5*thickCon2 + 0.015*CLHEP::mm);
1307 new G4PVPlacement((G4RotationMatrix *) 0, posTmp2, aVolOC2GL, aNStrTmp2 +
std::string(
"_P"),
1308 volMother,
false, 1,
true);
1309 std::cerr <<
" Z position of the connecting flange, outer " << posTmp2[2] <<
std::endl;
1310 zLocalDwnstrICFlange = posTmp2[2] + 0.5*thickCon2 + 0.025*CLHEP::mm;
1312 const double radInnerCon3 = radOuterCon1 + 0.015*CLHEP::mm;
1313 const double radOuterCon3 = 715.*CLHEP::mm;
1314 const double thickCon3 = 12.9*CLHEP::mm;
1316 G4Tubs* aVolOC3G =
new G4Tubs(aNStrTmp3, radInnerCon3, radOuterCon3,
1317 0.5*thickCon3, 0.0, 360.0*CLHEP::degree);
1318 G4LogicalVolume *aVolOC3GL =
new G4LogicalVolume(aVolOC3G, myAlumOC, aNStrTmp3);
1319 G4ThreeVector posTmp3(0., 0., zLocalDwnstrICFlange - 0.5*thickCon3 + 0.0125*CLHEP::mm);
1320 new G4PVPlacement((G4RotationMatrix *) 0, posTmp3, aVolOC3GL, aNStrTmp3 +
std::string(
"_P"),
1321 volMother,
false, 1,
true);
1330 std::cerr <<
" ... Installing the current equalizer section for IC , Starting at Z " <<
1331 zLocalDwnstrICFlange <<
" (In Horn2 coord sys.), " << std::endl
1332 <<
" ..... length of mother " << lengthMother <<
1336 const double thickFlDWICICEQ = 27.31*CLHEP::mm;
1337 const double radInnerICICEQ = 707.*CLHEP::mm;
1338 const double radOuterICICEQ = 715.*CLHEP::mm;
1339 const double radInnerFlDWICICEQ = 707.0*CLHEP::mm;
1340 const double radOuterFlDWICICEQ = 730.0*CLHEP::mm;
1344 G4Tubs* aVolOC1G =
new G4Tubs(aNStrTmp1, radInnerICICEQ, radOuterICICEQ,
1346 G4LogicalVolume *aVolOC1GL =
new G4LogicalVolume(aVolOC1G, myAlumOC, aNStrTmp1);
1349 new G4PVPlacement((G4RotationMatrix *) 0, posTmp, aVolOC1GL, aNStrTmp1 +
std::string(
"_P"),
1350 volMother,
false, 1,
true);
1352 G4Tubs* aVolOC2G =
new G4Tubs(aNStrTmp2, radInnerFlDWICICEQ, radOuterFlDWICICEQ,
1353 0.5*thickFlDWICICEQ, 0.0, 360.0*CLHEP::degree);
1355 0.0125*CLHEP::mm + 0.5*thickFlDWICICEQ);
1356 G4LogicalVolume *aVolOC2GL =
new G4LogicalVolume(aVolOC2G, myAlumOC, aNStrTmp2);
1357 new G4PVPlacement((G4RotationMatrix *) 0, posTmp2, aVolOC2GL, aNStrTmp2 +
std::string(
"_P"),
1358 volMother,
false, 1,
true);
1363 const double angleHalfWPad = 0.131;
1364 const double radOuterPaDWICICEQ = 760.0*CLHEP::mm;
1365 const double radInnerPaDWICICEQ = (730.0+0.015)*CLHEP::mm;
1366 const double thickPaDWICICEQ = thickFlDWICICEQ;
1368 double angleHalfPad = M_PI/4.;
1369 for (
size_t kk=0; kk !=4; kk++) {
1370 std::ostringstream aStrStrTmpK3; aStrStrTmpK3 <<
"_" << kk;
1371 std::string aNStrTmpK3(aNStrTmp3); aNStrTmpK3 += aStrStrTmpK3.str();
1372 G4Tubs* aVolOC3G =
new G4Tubs(aNStrTmpK3, radInnerPaDWICICEQ, radOuterPaDWICICEQ,
1373 0.5*thickPaDWICICEQ, angleHalfPad-angleHalfWPad, 2.0*angleHalfWPad);
1374 G4LogicalVolume *aVolOC3GL =
new G4LogicalVolume(aVolOC3G, myAlumOC, aNStrTmpK3);
1376 new G4PVPlacement((G4RotationMatrix *) 0, posTmp2, aVolOC3GL, aNStrTmpK3 +
std::string(
"_P"),
1377 volMother,
false, 1,
true);
1378 angleHalfPad += M_PI/2.;
1386 std::cerr <<
" ... Installing the current equalizer section for oC , Starting at Z " <<
1387 zLocalStartOCEQ <<
" (In Horn2 coord sys.), " << std::endl
1388 <<
" ..... length of mother " << lengthMother <<
1392 const double thickFl1 = 32.5*CLHEP::mm;
1394 const double radInnerFl1 = 714.*CLHEP::mm;
1395 const double radOuterFl1 = 766.5*CLHEP::mm;
1396 const double radInnerTube = 758.5*CLHEP::mm;
1397 const double radOuterTube = radOuterFl1;
1401 G4Tubs* aVolOC1G =
new G4Tubs(aNStrTmp1, radInnerFl1, radOuterFl1,
1402 0.5*thickFl1, 0.0, 360.0*CLHEP::degree);
1403 G4LogicalVolume *aVolOC1GL =
new G4LogicalVolume(aVolOC1G, myAlumOC, aNStrTmp1);
1405 G4ThreeVector posTmp(0., 0., zLocalStartOCEQ + 0.5*thickFl1 + 0.025*CLHEP::mm);
1406 std::cerr <<
" ZStart of EQOC upstrs flange " << posTmp[2] - 0.5*thickFl1 <<
" length " << thickFl1 <<
std::endl;
1407 new G4PVPlacement((G4RotationMatrix *) 0, posTmp, aVolOC1GL, aNStrTmp1 +
std::string(
"_P"),
1408 volMother,
false, 1,
true);
1410 G4Tubs* aVolOC2G =
new G4Tubs(aNStrTmp2, radInnerTube, radOuterTube,
1411 0.5*lengthTube, 0.0, 360.0*CLHEP::degree);
1412 G4LogicalVolume *aVolOC2GL =
new G4LogicalVolume(aVolOC2G, myAlumOC, aNStrTmp2);
1413 G4ThreeVector posTmp2(0., 0., posTmp[2] + 0.5*thickFl1 + 0.5*lengthTube + 0.0125*CLHEP::mm);
1414 std::cerr <<
" ZStart of EQOC upstrs body " << posTmp2[2] - 0.5*lengthTube <<
" length " << lengthTube <<
std::endl;
1415 new G4PVPlacement((G4RotationMatrix *) 0, posTmp2, aVolOC2GL, aNStrTmp2 +
std::string(
"_P"),
1416 volMother,
false, 1,
true);
1418 const double thickFl2 = 27.5*CLHEP::mm;
1419 const double radInnerFl2 = 766.5*CLHEP::mm;
1420 const double radOuterFl2 = 773.5*CLHEP::mm;
1422 G4Tubs* aVolOC3G =
new G4Tubs(aNStrTmp3, radInnerFl2, radOuterFl2,
1423 0.5*thickFl2, 0.0, 360.0*CLHEP::degree);
1424 G4LogicalVolume *aVolOC3GL =
new G4LogicalVolume(aVolOC3G, myAlumOC, aNStrTmp3);
1425 G4ThreeVector posTmp3(posTmp2);
1426 posTmp3[2] += 0.5*lengthTube + 0.5*thickFl2 + 0.050*CLHEP::mm;
1427 new G4PVPlacement((G4RotationMatrix *) 0, posTmp3, aVolOC3GL, aNStrTmp3 +
std::string(
"_P"),
1428 volMother,
false, 1,
true);
1432 const double radOuterPaDWOCOCEQ = 811.5*CLHEP::mm;
1433 const double angleHalfWPad = (210.*CLHEP::mm)/radOuterPaDWOCOCEQ;
1434 const double radInnerPaDWOCOCEQ = (773.5+0.015)*CLHEP::mm;
1435 const double thickPaDWOCOCEQ = thickFl2;
1437 double angleHalfPad = M_PI/4.;
1438 for (
size_t kk=0; kk !=4; kk++) {
1439 std::ostringstream aStrStrTmpK4; aStrStrTmpK4 <<
"_" << kk;
1440 std::string aNStrTmpK4(aNStrTmp4); aNStrTmpK4 += aStrStrTmpK4.str();
1441 G4Tubs* aVolOC4G =
new G4Tubs(aNStrTmpK4, radInnerPaDWOCOCEQ, radOuterPaDWOCOCEQ,
1442 0.5*thickPaDWOCOCEQ, angleHalfPad-angleHalfWPad, 2.0*angleHalfWPad);
1443 G4LogicalVolume *aVolOC4GL =
new G4LogicalVolume(aVolOC4G, myAlumOC, aNStrTmpK4);
1445 new G4PVPlacement((G4RotationMatrix *) 0, posTmp3, aVolOC4GL, aNStrTmpK4 +
std::string(
"_P"),
1446 volMother,
false, 1,
true);
1447 angleHalfPad += M_PI/2.;
1456 std::cerr <<
" Dump of the R/Z map, accurate, for the magnetic field " <<
std::endl;
double fThickICDRevisedHornB
G4double fRadInnerOCCurrEqHorn2
const LBNEVolumePlacementData * Find(const G4String &name, const char *motherName, const char *method) const
G4LogicalVolume * fCurrent
G4double fLengthCurrEqOCInMotherHorn2
G4double fRadOuterICCurrEqHorn2
G4double fRadInnerICCurrEqHorn2
G4String fHorn2InnerCondMat
std::vector< G4String > fHorn2IC
std::vector< double > fParams
G4double fRadOuterOCCurrEqHorn2
std::vector< double > fRInCoordCDRevisedHornB
bool fCheckVolumeOverLapWC
std::vector< double > fZCoordCDRevisedHornB
G4String fHorn2AllCondMat
G4double fWaterLayerThickInHorns
QTextStream & endl(QTextStream &s)
std::vector< G4String > fHorn1IC
G4double fLengthCurrEqICInMotherHorn2