2009.10.05 Fix to the Jason geometry file

Why volume numbers has changed in Jason geometry file?

The number of nested volumes (nv),
is the total number of parent volumes for the sensitive volume
(sensitive volume is indicated by the HITS in the tree structure below).

For the Jason and CVS files this nv number seems to be the same
(see block tree structures below).
Then why volume ids id in g2t tables has changed?

The answer I found (which seems trivial to me know)
is that in the original (CVS) file ECAL
block has been instantiated (positioned) twice.
The second appearance is the prototype (East) version of the Endcap
(Original ecalgeo.g from CVS)

        if (emcg_OnOff==1 | emcg_OnOff==3) then
             Position ECAL in CAVE z=+center
        endif
        if (emcg_OnOff==2 | emcg_OnOff==3) then
             Position ECAL in CAVE z=-center ThetaZ=180
        endif

In Jason version the second appearance has been removed
(what seems natural and it should not have any effect)
(ecalgeo.g Jason edits, g23):

        IF (emcg_OnOff>0) THEN
           Create ECAL

              .....

        IF (emcg_OnOff==2 ) THEN
           Prin1
             ('East Endcap has been removed from the geometry' )
        ENDIF               EndIF! emcg_OnOff

Unfortunately, this affects the way GEANT counts nested volumes

 

(effectively the total number was reduced by 1, from 8 to 7)

 

and this is the reason why the volume numbering scheme

 

in g2t tables has been affected.

 

I propose to put back these East Endcap line back,

 

since in this case it  will not require any additional

 

changes to the EEMC decoder and g2t tables.

 

 

Block tree of the geometry file

blue - added volumes in Jason file
red - G10 volume removed in Jason file
HITS - sensitive volumes

 ---- Jason file ----

ECAL
 EAGA
  |EMSS
  |  -EFLP
  |  |ECVO
  |  |  |EMOD
  |  |  |  |ESEC
  |  |  |  |  |ERAD
  |  |  |  |  | -ELED
  |  |  |  |  |EMGT
  |  |  |  |  |  |EPER
  |  |  |  |  |  |  |ETAR
  |  |  |  |  |  |  |  -EALP
  |  |  |  |  |  |  |  -ESCI -> HITS
  |  |ESHM
  |  |  |ESPL
  |  |  |  |EXSG
  |  |  |  |  -EXPS
  |  |  |  |  -EHMS -> HITS
  |  |  |  |  -EBLS
  |  |  |  |  -EFLS
  |  |  |ERSM
  |  -ESSP
  |  -ERCM
  |  -EPSB
  |ECGH
  |  -ECHC


---- CVS file ----
ECAL
 EAGA
  |EMSS
  |  -EFLP
  |  |ECVO
  |  |  |EMOD
  |  |  |  |ESEC
  |  |  |  |  |ERAD
  |  |  |  |  | -ELED
  |  |  |  |  |EMGT
  |  |  |  |  |  |EPER
  |  |  |  |  |  |  |ETAR
  |  |  |  |  |  |  |  -EALP
  |  |  |  |  |  |  |  -ESCI -> HITS
  |  |ESHM
  |  |  |ESPL
  |  |  |  |EXSG
  |  |  |  |  -EHMS -> HITS
  |  |  |  -EXGT
  |  |  -ERSM
  |  -ESSP
  |  -ERCM
  |  -EPSB
  |ECGH
  |  -ECHC

 

 

Block definitions

Jason geometry file 

Create ECAL

Block ECAL is one EMC EndCap wheel
  Create and Position EAGA AlphaZ=halfi
EndBlock

Block EAGA IS HALF OF WHEEL AIR VOLUME FORTHE ENDCAP MODULE
  Create AND Position EMSS konly='MANY'
  Create AND Position ECGH alphaz=90 kOnly='ONLY'
EndBlock

Block EMSS is the steel support of the endcap module
  Create AND Position EFLP z=zslice-center+zwidth/2
  Create AND Position ECVO z=zslice-center+zwidth/2
  Create AND Position ESHM z=zslice-center+zwidth/2 kOnly='MANY'
  Create AND Position ECVO z=zslice-center+zwidth/2
  Create AND Position ESSP z=zslice-center+zwidth/2
  Create ERCM
  Create EPSB
EndBlock

Block ECVO is one of endcap volume with megatiles and radiators
  Create AND Position EMOD alphaz=d3 ncopy=i_sector
EndBlock

Block ESHM is the shower maxsection
  Create and Position ESPL z=currentk Only='MANY'
  Create ERSM
EndBlock

Block ECGH is air gap between endcap half wheels
  Create ECHC
EndBlock

Block ECHC is steel endcap half cover
EndBlock

Block ESSP is stainless steelback plate 
EndBlock

Block EPSB IS A PROJECTILE STAINLESS STEEL BAR
EndBlock

Block ERCM is stainless steel tie rod in calorimeter sections
EndBlock

Block ERSM is stainless steel tie rod in shower max
EndBlock

Block EMOD (fsect,lsect) IS ONE MODULEOF THE EM ENDCAP
  Create AND Position ESEC z=section-curr+secwid/2
EndBlock

Block ESEC is a single em section
  Create AND Position ERAD z=length+(cell)/2+esec_deltaz
  Create AND Position EMGT z=length+(gap+cell)/2+esec_deltaz
  Create AND Position ERAD z=length+cell/2+esec_deltaz
EndBlock

Block EMGT is a 30 degree megatile
  Create AND Position EPER alphaz=myPhi
EndBlock

Block EPER is a 5 degree slice of a 30 degree megatile (subsector)
  Create and Position ETAR x=(rbot+rtop)/2ort=yzx
EndBlock

Block ETAR is a single calorimeter cell, containing scintillator, fiber router, etc...
  Create AND Position EALP y=(-megatile+emcs_alincell)/2
  Create AND Position ESCI y=(-megatile+g10)/2+emcs_alincell _
EndBlock

Block ESCI is the active scintillator (polystyrene) layer
EndBlock

Block ERAD is the lead radiator with stainless steel cladding
  Create AND Position ELED 
EndBlock

Block ELED is a lead absorber plate
EndBlock

Block EFLP is the aluminum (aluminium) front plate of the endcap
EndBlock

Block EALP is the thin aluminium plate in calorimeter cell
EndBlock

Block ESPL is the logical volume containing an SMD plane
  Create and Position EXSG alphaz=d3 ncopy=isec kOnly='MANY'
  Create and Position EXSG alphaz=d3 ort=x-y-z ncopy=isec kOnly='MANY'
  Create and Position EXSG alphaz=d3 ncopy=isec kOnly='MANY'
  Create and Position EXSG alphaz=d3 ort=x-y-z ncopy=isec kOnly='MANY'
  Create and Position EXSG alphaz=d3 ncopy=isec kOnly='MANY'
EndBlock

Block EXSG Is another logical volume... this one acutally creates the planes
  Create and Position EXPS kONLY='MANY'
  Create and Position EHMS x=xc y=yc alphaz=-45 kOnly='ONLY'
  Create and Position EBLS x=xc y=yc z=(+esmd_apex/2+esmd_back_layer/2) alphaz=-45 kOnly='ONLY'
  Create and Position EHMS x=xc y=yc alphaz=-45 ort=x-y-z kOnly='ONLY'
  Create and Position EFLS x=xc y=yc z=(-esmd_apex/2-esmd_front_layer/2) alphaz=-45 ort=x-y-z kOnly='ONLY'
EndBlock

Block EHMS defines the triangular SMD strips
Endblock! EHMS

Block EFLS is the layer of material on the front of the SMD planes
EndBlock! EFLS

Block EBLS is the layer of material on the back of the SMD planes
EndBlock! EFLS

Block EXPS is the plastic spacer in the shower maximum section
EndBlock

 

CVS geometry file 

Create ECAL

Block ECAL is one EMC EndCap wheel
  Create and Position EAGA AlphaZ=halfi
EndBlock

Block EAGA is half of wheel air volume forthe EndCap module
  Create and Position EMSS konly='MANY'
  Create and Position ECGH AlphaZ=90 konly='ONLY'
EndBlock

Block EMSS is steel support of the EndCap module
  Create and Position EFLP z=zslice-center+slcwid/2
  Create and Position ECVO z=zslice-center+slcwid/2
  Create and Position ESHM z=zslice-center+slcwid/2
  Create and Position ECVO z=zslice-center+slcwid/2
  Create and Position ESSP z=zslice-center+slcwid/2
  Create ERCM
  Create EPSB
EndBlock

Block ECVO is one of EndCap Volume with megatiles and radiators
  Create and Position EMOD AlphaZ=d3 Ncopy=J_section
EndBlock

Block ESHM is the SHower Maxsection
  Create and Position ESPL z=current
  Create ERSM
Endblock

Block ECGH is air Gap between endcap Half wheels
  Create ECHC
EndBlock

Block ECHC is steel EndCap Half Cover
EndBlock

Block ESSP is Stainless Steelback Plate 
endblock

Block EPSB is Projectile Stainless steel Bar
endblock

Block ERCM is stainless steel tie Rod in CaloriMeter sections
endblock

Block ERSM is stainless steel tie Rod in Shower Max
endblock

Block EMOD is one moduleof the EM EndCap
  Create and Position ESEC z=section-curr+secwid/2
endblock

Block ESEC is a single EM section
  Create and Position ERAD z=len + (cell)/2
  Create and Position EMGT z=len +(gap+cell)/2
  Create and Position ERAD z=len + cell/2
Endblock

Block EMGT is a megatile EM section
  Create and Position EPER AlphaZ=(emcs_Nslices/2-isec+0.5)*dphi
Endblock

Block EPER is a EM subsection period (super layer)
  Create and Position ETAR x=(RBot+RTop)/2ORT=YZX
EndBlock

Block ETAR is one CELL of scintillator, fiber and plastic
  Create and Position EALP y=(-mgt+emcs_AlinCell)/2
  Create and Position ESCI y=(-mgt+G10)/2+emcs_AlinCell _
EndBlock

Block ESCI is the active scintillator (polystyren) layer
endblock

Block ERAD is radiator 
  Create and PositionELED 
endblock

Block ELED is lead absorber Plate 
endblock

Block EFLP is First Aluminium plate 
endblock

Block EALP is ALuminiumPlate in calorimeter cell
endblock

Block ESPL is one of the Shower maxPLanes
  Create and position EXSG AlphaZ=d3Ncopy=isec
  Create and position EXSG AlphaZ=d3Ncopy=isec
  Create and position EXGT z=msecwd AlphaZ=d3
  Create and position EXSG AlphaZ=d3 ORT=X-Y-Z Ncopy=isec
  Create and position EXGT z=-msecwd AlphaZ=d3
  Create and position EXSG AlphaZ=d3Ncopy=isec
  Create and position EXGT z=msecwd AlphaZ=d3
  Create and position EXSG AlphaZ=d3 ORT=X-Y-Z Ncopy=isec
  Create and position EXGT z=-msecwd AlphaZ=d3
Endblock

Block EXSG is the Shower maxGap for scintillator strips
  Create EHMS
endblock

Block EHMS is sHower Max Strip
Endblock

Block EXGT is the G10 layer in the Shower Max
EndBlock

 

Original (ecalgeo.g) file from CVS

Original (ecalgeo.g) file from CVS

******************************************************************************
Module ECALGEO is the EM EndCap Calorimeter GEOmetry
Created   26 jan 1996
Author    Rashid Mehdiyev
*
* Version 1.1, W.J. Llope
*               - changed sensitive medium names...
*
* Version 2.0, R.R. Mehdiyev                                  16.04.97
*               - Support walls included
*               - intercell and intermodule gaps width updated
*               - G10 layers inserted
* Version 2.1, R.R. Mehdiyev                                  23.04.97
*               - Shower Max Detector geometry added          
*               - Variable eta grid step size introduced 
* Version 2.2, R.R. Mehdiyev                                  03.12.97
*               - Eta grid corrected 
*               - Several changes in volume's dimensions
*               - Material changes in SMD
*       
* Version 3.0, O. Rogachevsky                                 28.11.99
*               - New proposal for calorimeter SN 0401
*
* Version 4.1, O.Akio                                          3 Jan 01
*               - Include forward pion detectors

* Version 5.0, O. Rogachevsky                                 20.11.01
*               - FPD is eliminated in this version
*               - More closed to proposal description
*                 of calorimeter and SMD structure
*
******************************************************************************
+CDE,AGECOM,GCONST,GCUNIT.
*
      Content    EAGA,EALP,ECAL,ECHC,ECVO,ECGH,EFLP,EHMS,
                 ELED,EMGT,EMOD,EPER,EPSB,ERAD,ERCM,ERSM,
		 ESHM,ESEC,ESCI,ESGH,ESPL,ESSP,EMSS,
		 ETAR,EXGT,EXSG
*
      Structure  EMCG { Version, int Onoff, int fillMode}

      Structure  EMCS { Type,ZOrig,ZEnd,EtaMin,EtaMax,
                        PhiMin,PhiMax,Offset,
                        Nsupsec,Nsector,Nsection,Nslices,
                        Front,AlinCell,Frplast,Bkplast,PbPlate,LamPlate,
												BckPlate,Hub,Rmshift,SMShift,GapPlt,GapCel,
                        GapSMD,SMDcentr,TieRod(2),Bckfrnt,GapHalf,Cover}
*
      Structure  EETR { Type,Etagr,Phigr,Neta,EtaBin(13)}
*
      Structure  ESEC { Isect, FPlmat, Cell, Scint, Nlayer }
*
      Structure  EMXG {Version,Sapex,Sbase,Rin,Rout,F4}
*
      Structure  EXSE {Jsect,Zshift,Sectype(6)}
*
      Integer    I_section,J_section,Ie,is,isec,i_str,Nstr,Type,ii,jj,
                 cut,fsect,lsect,ihalf,filled
*                       
      Real       center,Plate,Cell,G10,diff,halfi,
                 tan_low,tan_upp,Tanf,RBot,Rtop,Deta,etax,sq2,sq3,
                 dup,dd,d2,d3,rshift,dphi,radiator,orgkeep,endkeep
								 
*
      Real       maxcnt,msecwd,mxgten,curr,Secwid,Section,
                 curcl,EtaTop,EtaBot,slcwid,zslice,Gap,mgt,
                 xleft,xright,yleft,yright,current,
                 rth,len,p,xc,yc,xx,yy,rbotrad,
                 Rdel,dxy,ddn,ddup
                 
    Integer    N
    Parameter (N=12)
* 
    Tanf(etax) = tan(2*atan(exp(-etax)))
* 
* ----------------------------------------------------------------------------
*
* FillMode =1 only 2-5 sectors (in the first half) filled with scintillators 
* FillMode =2 all sectors filled (still only one half of one side)
* FillMode =3 both halves (ie all 12 sectors are filled)

Fill  EMCG                          ! EM EndCAp Calorimeter basic data 
      Version  = 5.0                ! Geometry version 
      OnOff    = 3                  ! Configurations 0-no, 1-west 2-east 3-both
      FillMode = 3                  ! sectors fill mode 

Fill  EMCS                          ! EM Endcap Calorimeter geometry
      Type     = 1                  ! =1 endcap, =2 fpd edcap prototype
      ZOrig    = 268.763            ! calorimeter origin in z
      ZEnd     = 310.007            ! Calorimeter end in z
      EtaMin   = 1.086              ! upper feducial eta cut 
      EtaMax   = 2.0,               ! lower feducial eta cut
      PhiMin   = -90                ! Min phi 
      PhiMax   = 90                 ! Max phi
      Offset   = 0.0                ! offset in x
      Nsupsec  = 6                  ! Number of azimuthal supersectors        
      Nsector  = 30                 ! Number of azimutal sectors (Phi granularity)
      Nslices  = 5                  ! number of phi slices in supersector
      Nsection = 4                  ! Number of readout sections
      Front    = 0.953              ! thickness of the front AL plates
      AlinCell   = 0.02             ! Aluminim plate in cell
      Frplast  = 0.015              ! Front plastic in megatile
      Bkplast  = 0.155              ! Fiber routing guides and back plastic
      Pbplate  = 0.457              ! Lead radiator thickness
      LamPlate  = 0.05              ! Laminated SS plate thickness
      BckPlate = 3.175              ! Back SS plate thickness
      Hub      = 3.81               ! thickness of EndCap hub
      Rmshift  = 2.121              ! radial shift of module
      smshift  = 0.12               ! radial shift of steel support walls
      GapPlt   = 0.3/2              ! HALF of the inter-plate gap in phi
      GapCel   = 0.03/2             ! HALF of the radial inter-cell gap
      GapSMD   = 3.400              ! space for SMD detector
      SMDcentr = 279.542            ! SMD position
      TieRod   = {160.,195}         ! Radial position of tie rods
      Bckfrnt  = 306.832            ! Backplate front Z
      GapHalf  = 0.4                ! 1/2 Gap between halves of endcap wheel
      Cover    = 0.075              ! Cover of wheel half
*      Rmshift  = 2.121              ! radial shift of module
* --------------------------------------------------------------------------
Fill EETR                      ! Eta and Phi grid values
      Type     = 1             ! =1 endcap, =2 fpd
      EtaGr    = 1.0536        ! eta_top/eta_bot tower granularity
      PhiGr    = 0.0981747     ! Phi granularity (radians)
      NEta     = 12            ! Eta granularity
      EtaBin   = {2.0,1.9008,1.8065,1.7168,1.6317,1.5507,1.4738,
                  1.4007,1.3312,1.2651,1.2023,1.1427,1.086}! Eta rapidities
*---------------------------------------------------------------------------
Fill ESEC           ! First EM section
      ISect    = 1                           ! Section number   
      Nlayer   = 1                           ! Number of Sci layers along z
      Cell     = 1.505                       ! Cell full width in z
      Scint    = 0.5                         ! Sci layer thickness
*
Fill ESEC           ! First EM section
      ISect    = 2                           ! Section number   
      Nlayer   = 1                           ! Number of Sci layers along z
      Cell     = 1.505                       ! Cell full width in z
      Scint    = 0.5                         ! Sci layer thickness
*
Fill ESEC           ! Second EM section
      ISect    = 3                           ! Section number
      Nlayer   = 4                           ! Number of Sci layers along z
      Cell     = 1.405                       ! Cell full width in z
      Scint    = 0.4                         ! Sci layer thickness
*
Fill ESEC           ! Third EM section
      ISect    = 4                           ! Section
      Nlayer   = 18                          ! Number of layers along z
      Cell     = 1.405                       ! Cell full width in z
      Scint    = 0.4                         ! Sci layer thickness
*
Fill ESEC           ! 4th EM section
      ISect    = 5                           ! Section
      Nlayer   = 1                           ! Number of  layers along z
      Cell     = 1.505                       ! Cell full width in z
      Scint    = 0.5                         ! Sci layer thickness
*----------------------------------------------------------------------------
Fill EMXG           ! EM Endcap SMD basic data
      Version   = 1                         ! Geometry version
      Sapex     = 0.7                       ! Scintillator strip apex
      Sbase     = 1.0                       ! Scintillator strip base
      Rin = 77.41                           ! inner radius of SMD plane  
      Rout = 213.922                        ! outer radius of SMD plane
      F4 = .15                              ! F4 thickness
*----------------------------------------------------------------------------
Fill EXSE           ! First SMD section
      JSect    = 1                           ! Section number
      Zshift   = -1.215                      ! Section width
      sectype  = {4,1,0,2,1,0}               ! 1-V,2-U,3-cutV,4-cutU    
*
Fill EXSE           ! Second SMD section
      JSect    = 2                           ! Section number   
      Zshift   = 0.                          ! Section width
      sectype  = {0,2,1,0,2,3}               ! 1-V,2-U,3-cutV,4-cutU    
*
Fill EXSE           ! Third SMD section
      JSect    = 3                           ! Section number   
      Zshift   = 1.215                       ! Section width
      sectype  = {1,0,2,1,0,2}               ! 1-V,2-U,3-cutV,4-cutU    

*----------------------------------------------------------------------------
*
      Use    EMCG
*
      sq3 = sqrt(3.)
      sq2 = sqrt(2.)

      prin1 emcg_version 
        ('ECALGEO version ', F4.2)

* Endcap
      USE EMCS type=1
      USE EETR type=1
      orgkeep =  emcs_ZOrig
      endkeep =  emcs_ZEnd
      if(emcg_OnOff>0) then
        diff = 0.0
        center  = (emcs_ZOrig+emcs_ZEnd)/2
        Tan_Upp = tanf(emcs_EtaMin)
        Tan_Low = tanf(emcs_EtaMax)
        rth  = sqrt(1. + Tan_Low*Tan_Low)
        rshift  = emcs_Hub * rth
        dup=emcs_Rmshift*Tan_Upp
        dd=emcs_Rmshift*rth
        d2=rshift + dd
        radiator  = emcs_Pbplate + 2*emcs_LamPlate
*       d3=emcs_Rmshift-2*emcs_smshift
        dphi = (emcs_PhiMax-emcs_PhiMin)/emcs_Nsector
        Create ECAL
        if (emcg_OnOff==1 | emcg_OnOff==3) then
             Position ECAL in CAVE z=+center
        endif
        if (emcg_OnOff==2 | emcg_OnOff==3) then
             Position ECAL in CAVE z=-center ThetaZ=180
        endif

        if(section > emcs_Zend) then
          prin0 section,emcs_Zend
          (' ECALGEO error: sum of sections exceeds maximum ',2F12.4)
        endif
        prin1 section
        (' EndCap calorimeter total depth ',F12.4)
      endif
 
      prin1
        ('ECALGEO finished')
*
* ----------------------------------------------------------------------------
Block ECAL is one EMC EndCap wheel
      Material  Air
      Medium    standard
      Attribute ECAL   seen=1 colo=7                            !  lightblue
      shape     CONE   dz=(emcs_Zend-emcs_ZOrig)/2,
                Rmn1=orgkeep*Tan_Low-d2 Rmn2=endkeep*Tan_Low-d2,
                Rmx1=orgkeep*Tan_Upp+dup Rmx2=endkeep*Tan_Upp+dup


      do ihalf=1,2
	 filled=1
	 halfi = -105 + (ihalf-1)*180
         if (ihalf=2 & emcg_FillMode<3) filled = 0	

         Create and Position EAGA  AlphaZ=halfi

      enddo
*
			
EndBlock
* ----------------------------------------------------------------------------
Block EAGA is half of wheel air volume for  the EndCap module
      Attribute EAGA      seen=1    colo=1   serial=filled           ! black
                        
      Material  Air
      shape     CONS   dz=(emcs_Zend-emcs_ZOrig)/2,
                Rmn1=orgkeep*Tan_Low-d2 Rmn2=endkeep*Tan_Low-d2,
                Rmx1=orgkeep*Tan_Upp+dup Rmx2=endkeep*Tan_Upp+dup,
                phi1=emcs_PhiMin phi2=emcs_PhiMax

        if (filled=1) then
          Create and Position EMSS  konly='MANY'
      		curr = orgkeep ; curcl = endkeep
      		Create and position ECGH  AlphaZ=90 konly='ONLY'
				endif


EndBlock

* ----------------------------------------------------------------------------
Block EMSS is steel support of the EndCap module
      Attribute EMSS      seen=1    colo=1              ! black
                        
      Material  Iron
      shape     CONS   dz=(emcs_Zend-emcs_ZOrig)/2,
                Rmn1=orgkeep*Tan_Low-d2 Rmn2=endkeep*Tan_Low-d2,
                Rmx1=orgkeep*Tan_Upp+dup Rmx2=endkeep*Tan_Upp+dup,
                phi1=emcs_PhiMin phi2=emcs_PhiMax

      zslice = emcs_ZOrig
      prin1 zslice
      (' Front Al plane starts at:  ',F12.4)
      slcwid  = emcs_Front
      Create and Position EFLP  z=zslice-center+slcwid/2
      zslice = zslice + slcwid
                        
      prin1 zslice
      (' First calorimeter starts at:  ',F12.4)

      fsect = 1; lsect = 3

			slcwid = emcs_SMDcentr - emcs_GapSMD/2 - zslice
*
       Create and Position ECVO  z=zslice-center+slcwid/2

      slcwid  = emcs_GapSMD
      zslice = emcs_SMDcentr - emcs_GapSMD/2

			prin1 section,zslice
      (' 1st calorimeter ends, SMD starts at:  ',2F10.5)

      Create and Position ESHM  z=zslice-center+slcwid/2
      zslice = zslice + slcwid

      prin1 zslice
      ('  SMD ends at:  ',F10.5)
*
      slcwid = 0
      fsect = 4; lsect = 5
      do I_section =fsect,lsect
        USE ESEC Isect=I_section  
        Slcwid  = slcwid + esec_cell*esec_Nlayer
      enddo

			slcwid = emcs_bckfrnt - zslice

*
      Create and Position ECVO  z = zslice-center+slcwid/2

      zslice = emcs_bckfrnt

			prin1 section,zslice
      (' 2nd calorimeter ends, Back plate starts at:  ',2F10.5)

      slcwid  = emcs_BckPlate
*
         Create and Position ESSP    z=zslice-center+slcwid/2
         zslice = zslice + slcwid
      prin1 zslice
      (' BackPlate ends at:  ',F10.5)

        slcwid = emcs_Zend-emcs_ZOrig
        Create ERCM

				do i_str = 1,2
					do is = 1,5
				  	xx = emcs_phimin + is*30
						yy = xx*degrad
						xc = cos(yy)*emcs_TieRod(i_str)
						yc = sin(yy)*emcs_TieRod(i_str)
        		Position ERCM z=0 x=xc y=yc  
					enddo
				enddo

        rth = orgkeep*Tan_Upp+dup + 2.5/2
				xc = (endkeep - orgkeep)*Tan_Upp
				len = .5*(endkeep + orgkeep)*Tan_Upp + dup + 2.5/2
				yc = emcs_Zend-emcs_ZOrig
				p = atan(xc/yc)/degrad

				Create EPSB
				do is = 1,6
				  xx = -75 + (is-1)*30
					yy = xx*degrad
					xc = cos(yy)*len
					yc = sin(yy)*len
        	Position EPSB x=xc y=yc  AlphaZ=xx
				enddo

EndBlock
* ----------------------------------------------------------------------------
Block ECVO is one of EndCap Volume with megatiles and radiators
      Material  Air
      Attribute ECVO   seen=1 colo=3                            ! green
      shape     CONS   dz=slcwid/2,
                Rmn1=zslice*Tan_Low-dd Rmn2=(zslice+slcwid)*Tan_Low-dd,
                Rmx1=zslice*Tan_Upp+dup Rmx2=(zslice+slcwid)*Tan_Upp+dup

      do J_section = 1,6
			if (1 < J_section < 6 | emcg_FillMode > 1)then
			 filled = 1
			else
			 filled = 0
			endif
			d3 = 75 - (J_section-1)*30
      Create and Position EMOD AlphaZ=d3   Ncopy=J_section
			enddo

*

EndBlock
* ----------------------------------------------------------------------------
Block ESHM  is the SHower Max  section
*
      Material  Air 
      Attribute ESHM   seen=1   colo=4                  !  blue
      Shape     CONS   dz=SlcWid/2,
          rmn1=zslice*Tan_Low-dd,
          rmn2=(zslice+slcwid)*Tan_Low-dd,
          rmx1=(zslice)*Tan_Upp+dup,
          rmx2=(zslice+slcwid)*Tan_Upp+dup,
          phi1=emcs_PhiMin phi2=emcs_PhiMax

      USE EMXG Version=1
      maxcnt = emcs_SMDcentr
          prin1 zslice,section,center
          (' Z start for SMD,section:  ',3F12.4)
*
        do J_section = 1,3
         USE EXSE Jsect=J_section
*
          current = exse_Zshift
          secwid  = emxg_Sapex + 2.*emxg_F4
          section = maxcnt + exse_zshift
          prin1 j_section,current,section,secwid
          (' layer, Z, width :  ',i3,3F12.4)
          rbot=section*Tan_Low
          rtop=section*Tan_Upp
          prin1 j_section,rbot,rtop
          (' layer, rbot,rtop :  ',i3,2F12.4)
          Create and position ESPL z=current
*
        end do

        Create ERSM
				do i_str = 1,2
					do is = 1,5
				  	xx = emcs_phimin + (is)*30
						yy = xx*degrad
						xc = cos(yy)*emcs_TieRod(i_str)
						yc = sin(yy)*emcs_TieRod(i_str)
        		Position ERSM z=0 x=xc y=yc  
					enddo
				enddo

Endblock
* ----------------------------------------------------------------------------
Block ECGH is air Gap between endcap Half wheels
      Material  Air
      Medium    standard
      Attribute ECGH   seen=0 colo=7                            !  lightblue
      shape     TRD1   dz=(emcs_Zend-emcs_ZOrig)/2,
                dy =(emcs_gaphalf+emcs_cover)/2,
                dx1=orgkeep*Tan_Upp+dup,
                dx2=endkeep*Tan_Upp+dup
                

      rth = emcs_GapHalf + emcs_cover
			xx=curr*Tan_Low-d2
			xleft = sqrt(xx*xx - rth*rth)
			yy=curr*Tan_Upp+dup
			xright = sqrt(yy*yy - rth*rth)
			secwid = yy - xx
			xx=curcl*Tan_Low-d2
			yleft = sqrt(xx*xx - rth*rth)
			yy=curcl*Tan_Upp+dup
			yright = sqrt(yy*yy - rth*rth)
			slcwid = yy - xx
      xx=(xleft+xright)/2
      yy=(yleft + yright)/2
			xc = yy - xx
			len = (xx+yy)/2
			yc = curcl - curr
			p = atan(xc/yc)/degrad
      rth = -(emcs_GapHalf + emcs_cover)/2
      Create  ECHC
      Position ECHC  x=len y=rth
      Position ECHC  x=-len y=rth AlphaZ=180

EndBlock
* ----------------------------------------------------------------------------
Block ECHC is steel EndCap Half Cover
      Attribute ECHC      seen=1    colo=1              ! black
                        
      Material  Iron
      shape     TRAP   dz=(curcl-curr)/2,
			          thet=p,
                bl1=secwid/2,
                tl1=secwid/2,
                bl2=slcwid/2,
                tl2=slcwid/2,
                h1=emcs_cover/2 h2=emcs_cover/2,
                phi=0  alp1=0 alp2=0
EndBlock
* ----------------------------------------------------------------------------
Block ESSP  is Stainless Steel  back Plate 
*
      Material  Iron      
      Attribute ESSP   seen=1  colo=6 fill=1    
      shape     CONS   dz=emcs_BckPlate/2,
                Rmn1=zslice*Tan_Low-dd Rmn2=(zslice+slcwid)*Tan_Low-dd,
                Rmx1=zslice*Tan_Upp+dup Rmx2=(zslice+slcwid)*Tan_Upp+dup,
                phi1=emcs_PhiMin phi2=emcs_PhiMax
endblock
* ----------------------------------------------------------------------------
Block EPSB  is Projectile Stainless steel Bar
*
      Material  Iron      
      Attribute EPSB   seen=1  colo=6 fill=1    
      shape     TRAP   dz=(emcs_Zend-emcs_ZOrig)/2,
			          thet=p,
                bl1=2.5/2,
                tl1=2.5/2,
                bl2=2.5/2,
                tl2=2.5/2,
                h1=2.0/2  h2=2.0/2,
                phi=0  alp1=0 alp2=0
endblock
* ----------------------------------------------------------------------------
Block ERCM  is stainless steel tie Rod in CaloriMeter sections
*
      Material  Iron      
      Attribute ERSM   seen=1  colo=6 fill=1    
      shape     TUBE   dz=slcwid/2,
                rmin=0,
                rmax=1.0425  !    nobody knows exactly
endblock
* ----------------------------------------------------------------------------
Block ERSM  is stainless steel tie Rod in Shower Max
*
      Material  Iron      
      Attribute ERSM   seen=1  colo=6 fill=1    
      shape     TUBE   dz=slcwid/2,
                rmin=0,
                rmax=1.0425
endblock
* ----------------------------------------------------------------------------
Block EMOD is one module  of the EM EndCap
      Attribute EMOD      seen=1    colo=3  serial=filled         ! green
      Material  Air
      Shape     CONS   dz=slcwid/2,
           phi1=emcs_PhiMin/emcs_Nsupsec,
           phi2=emcs_PhiMax/emcs_Nsupsec,
           Rmn1=zslice*Tan_Low-dd  Rmn2=(zslice+slcwid)*Tan_Low-dd,
           Rmx1=zslice*Tan_Upp+dup Rmx2=(zslice+slcwid)*Tan_Upp+dup
*
*    Running parameter 'section' contains the position of the current section
*     It should not be modified in daughters, use 'current' variable instead.
*     SecWid is used in all 'CONS' daughters to define dimensions.
*
*
        section = zslice
        curr = zslice + slcwid/2

        Do I_section =fsect,lsect

         USE ESEC Isect=I_section  
*
         Secwid  = esec_cell*esec_Nlayer
         if (I_section = 3 | I_section = 5) then   ! no last radiator 
           Secwid  = Secwid - radiator
         else if (I_section = 4) then         ! add one more radiator 
           Secwid  = Secwid - esec_cell + radiator
         endif  
         Create and position ESEC      z=section-curr+secwid/2
         section = section + secwid
* 
      enddo
endblock
* ----------------------------------------------------------------------------
Block ESEC is a single EM section
      Attribute ESEC   seen=1    colo=1 serial=filled
      Material Air
      Medium standard
*
      Shape     CONS  dz=secwid/2,  
                rmn1=(section-diff)*Tan_Low-dd,
								rmn2=(section+secwid-diff)*Tan_Low-dd,
                rmx1=(section-diff)*Tan_Upp+dup,
								rmx2=(section+secwid-diff)*Tan_Upp+dup
*
			len = -secwid/2
      current = section
			mgt = esec_scint + emcs_AlinCell _
			       + emcs_FrPlast + emcs_BkPlast
      gap = esec_cell - radiator - mgt
      prin2 I_section,section
      (' ESEC:I_section,section',i3,F12.4)

      Do is = 1,esec_Nlayer
			
* define actual  cell thickness:         
        Cell = esec_cell
				plate = radiator
*
        if (is=nint(esec_Nlayer) & (I_section = 3 | I_section = 5)) then  
         Cell = mgt + gap
         Plate=0
        else if (I_section = 4 & is = 1) then    ! radiator only
         Cell = radiator  
        endif
*                
        prin2 I_section,is,len,cell,current
        (' ESEC:I_section,is,len,cell,current  ',2i3,3F12.4)

      	if (I_section = 4 & is = 1) then       ! radiator only
			  	cell = radiator + .14
     			Create and Position    ERAD     z=len + (cell)/2
        	len = len + cell
        	current = current + cell
      	else
          cell = mgt
					if(filled = 1) then
          	Create and Position EMGT	z=len +(gap+cell)/2
            xx = current + (gap+cell)/2
            prin2 I_section,is,xx
            (' MEGA  I_section,is ',2i3,F10.4)						
					endif
        	len = len + cell + gap
        	current = current + cell + gap

      		if (Plate>0) then
				  	cell = radiator
      			Create and Position    ERAD     z=len + cell/2
          	len = len + cell
          	current = current + cell
      		end if
        end if
      end do 
Endblock
* ----------------------------------------------------------------------------
Block EMGT is a megatile EM section
      Attribute EMGT   seen=1  colo=1 
      Material Air
      Medium standard
*
      Shape     CONS  dz=mgt/2,
      rmn1=(current-diff)*Tan_Low-dd,  rmn2=(current+mgt-diff)*Tan_Low-dd,
      rmx1=(current-diff)*Tan_Upp+dup, rmx2=(current+mgt-diff)*Tan_Upp+dup

      if (I_section=1 | I_section=2 | I_section=5) then
         Call GSTPAR (ag_imed,'CUTGAM',0.00001)
         Call GSTPAR (ag_imed,'CUTELE',0.00001)
      else
         Call GSTPAR (ag_imed,'CUTGAM',0.00008)
         Call GSTPAR (ag_imed,'CUTELE',0.001)
         Call GSTPAR (ag_imed,'BCUTE',0.0001)
      end if
*
      Do isec=1,nint(emcs_Nslices)
         Create and Position EPER AlphaZ=(emcs_Nslices/2-isec+0.5)*dphi
      End Do 
Endblock
*---------------------------------------------------------------------------
Block EPER  is a EM subsection period (super layer)
*
      Material  POLYSTYREN
      Attribute EPER   seen=1  colo=1
      Shape     CONS  dz=mgt/2, 
                phi1=emcs_PhiMin/emcs_Nsector,
                phi2=+emcs_PhiMax/emcs_Nsector,
                rmn1=(current-diff)*Tan_Low-dd,
								rmn2=(current+mgt-diff)*Tan_Low-dd,
                rmx1=(current-diff)*Tan_Upp+dup,
								rmx2=(current+mgt-diff)*Tan_Upp+dup
* 
      curcl = current+mgt/2 
      Do ie = 1,nint(eetr_NEta)
        EtaBot  = eetr_EtaBin(ie)
        EtaTop  = eetr_EtaBin(ie+1)

          RBot=(curcl-diff)*Tanf(EtaBot)
*
        if(Plate > 0) then         ! Ordinary Sci layer
         RTop=min((curcl-diff)*Tanf(EtaTop), _
                    ((current-diff)*Tan_Upp+dup))
        else                     ! last Sci layer in section
         RTop=min((curcl-diff)*Tanf(EtaTop), _
                    ((current-diff)*Tan_Upp+dup))
        endif
        check RBot<RTop
*
        xx=tan(pi*emcs_PhiMax/180.0/emcs_Nsector)
        yy=cos(pi*emcs_PhiMax/180.0/emcs_Nsector)

        Create and Position  ETAR    x=(RBot+RTop)/2  ORT=YZX
        prin2 ie,EtaTop,EtaBot,rbot,rtop
        (' EPER : ie,EtaTop,EtaBot,rbot,rtop ',i3,4F12.4)
      enddo
*
EndBlock
*  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Block ETAR is one CELL of scintillator, fiber and plastic
*
      Attribute ETAR   seen=1  colo=4                           ! blue
*     local z goes along the radius, y is the thickness
      Shape     TRD1   dy=mgt/2   dz=(RTop-RBot)/2,
           dx1=RBot*xx-emcs_GapCel/yy,
           dx2=RTop*xx-emcs_GapCel/yy
*
        Create and Position EALP          y=(-mgt+emcs_AlinCell)/2
      	G10 = esec_scint
      	Create and Position    ESCI       y=(-mgt+G10)/2+emcs_AlinCell _
				                                            +emcs_FrPlast
EndBlock
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Block ESCI  is the active scintillator (polystyren) layer  
*
  Material  POLYSTYREN
      Material  Cpolystyren   Isvol=1
      Attribute ESCI   seen=1   colo=7   fill=0         ! lightblue
*     local z goes along the radius, y is the thickness
      Shape     TRD1   dy=esec_scint/2,
			                 dz=(RTop-RBot)/2-emcs_GapCel
      Call GSTPAR (ag_imed,'CUTGAM',0.00008)
      Call GSTPAR (ag_imed,'CUTELE',0.001)
      Call GSTPAR (ag_imed,'BCUTE',0.0001)
      Call GSTPAR (ag_imed,'CUTNEU',0.001)
      Call GSTPAR (ag_imed,'CUTHAD',0.001)
      Call GSTPAR (ag_imed,'CUTMUO',0.001)
* define Birks law parameters
      Call GSTPAR (ag_imed,'BIRK1',1.)
      Call GSTPAR (ag_imed,'BIRK2',0.013)
      Call GSTPAR (ag_imed,'BIRK3',9.6E-6)
*     
       HITS ESCI   Birk:0:(0,10)  
*                  xx:16:H(-250,250)   yy:16:(-250,250)   zz:16:(-350,350),
*                  px:16:(-100,100)    py:16:(-100,100)   pz:16:(-100,100),
*                  Slen:16:(0,1.e4)    Tof:16:(0,1.e-6)   Step:16:(0,100),
*                  none:16:         
endblock
* ----------------------------------------------------------------------------
Block ERAD  is radiator 
*
      Material  Iron
      Attribute ERAD   seen=1  colo=6 fill=1            ! violet
      Shape     CONS  dz=radiator/2, 
                rmn1=(current)*Tan_Low-dd,
								rmn2=(current+cell)*Tan_Low-dd,
                rmx1=(current)*Tan_Upp+dup,
								rmx2=(current+radiator)*Tan_Upp+dup

      		Create and Position    ELED     

endblock
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Block ELED  is lead absorber Plate 
*
      Material  Lead
      Attribute ELED   seen=1   colo=4  fill=1
      Shape     TUBS  dz=emcs_Pbplate/2,  
                rmin=(current)*Tan_Low,
								rmax=(current+emcs_Pbplate)*Tan_Upp,

      Call GSTPAR (ag_imed,'CUTGAM',0.00008)
      Call GSTPAR (ag_imed,'CUTELE',0.001)
      Call GSTPAR (ag_imed,'BCUTE',0.0001)
      Call GSTPAR (ag_imed,'CUTNEU',0.001)
      Call GSTPAR (ag_imed,'CUTHAD',0.001)
      Call GSTPAR (ag_imed,'CUTMUO',0.001)

endblock
* ----------------------------------------------------------------------------
Block EFLP  is First Aluminium plate 
*
      Material  Aluminium
      Attribute EFLP   seen=1  colo=3 fill=1                    ! green
      shape     CONS   dz=emcs_Front/2,
                Rmn1=68.813 Rmn2=68.813,
                Rmx1=(zslice-diff)*Tan_Upp+dup,
								Rmx2=(zslice + slcwid-diff)*Tan_Upp+dup,
                phi1=emcs_PhiMin phi2=emcs_PhiMax


endblock
* ----------------------------------------------------------------------------
Block EALP  is ALuminium  Plate in calorimeter cell
*
      Material  Aluminium
      Material  StrAluminium isvol=0
      Attribute EALP   seen=1  colo=1
      Shape     TRD1   dy=emcs_AlinCell/2  dz=(RTop-RBot)/2
      Call GSTPAR (ag_imed,'CUTGAM',0.00001)
      Call GSTPAR (ag_imed,'CUTELE',0.00001)
      Call GSTPAR (ag_imed,'LOSS',1.)
      Call GSTPAR (ag_imed,'STRA',1.)
endblock
* ----------------------------------------------------------------------------
Block ESPL  is one of the Shower max  PLanes
*
      Material  Air 
      Attribute ESPL   seen=1   colo=3                  !  blue
      Shape     TUBS   dz=SecWid/2,
                rmin=section*Tan_Low-1.526,
                rmax=(section-secwid/2)*Tan_Upp+dup,
                phi1=emcs_PhiMin phi2=emcs_PhiMax

      USE EMXG Version=1
      msecwd = (emxg_Sapex+emxg_F4)/2
			
      do isec=1,6
	 cut=1
  	 d3 = 75 - (isec-1)*30
	 if (exse_sectype(isec) = 0 | (emcg_FillMode=1 & (isec=6 | isec=1))) then
 	    cut = 0
            Create and position EXSG AlphaZ=d3              Ncopy=isec
	 else if(exse_sectype(isec) = 1) then               !   V
            Create and position EXSG AlphaZ=d3              Ncopy=isec
            Create and position EXGT z=msecwd AlphaZ=d3
	 else if(exse_sectype(isec) = 2) then               !   U
            Create and position EXSG AlphaZ=d3 ORT=X-Y-Z   Ncopy=isec
            Create and position EXGT z=-msecwd AlphaZ=d3
	 else if(exse_sectype(isec) = 3) then               !  cut V
	    cut=2
            Create and position EXSG AlphaZ=d3              Ncopy=isec
            Create and position EXGT z=msecwd AlphaZ=d3
	 else if(exse_sectype(isec) = 4) then               !  cut U 
	    cut=2
            Create and position EXSG AlphaZ=d3 ORT=X-Y-Z   Ncopy=isec
            Create and position EXGT z=-msecwd AlphaZ=d3
	 endif
      enddo

Endblock
* ----------------------------------------------------------------------------
Block EXSG  is the Shower max  Gap for scintillator strips
*
      Attribute EXSG   seen=1   colo=7   serial=cut     ! black
      Material  Air   
      Shape     TUBS   dz=SecWid/2,
                rmin=section*Tan_Low-1.526,
                rmax=(section-secwid/2)*Tan_Upp+dup,
                phi1=emcs_PhiMin/emcs_Nsupsec,
                phi2=emcs_PhiMax/emcs_Nsupsec
*
      Rbot = emxg_Rin
      Rtop = emxg_Rout

      if(cut > 0) then
      if(cut = 1) then
      	Rdel = 3.938
       	Nstr = 288
			else
      	Rdel = -.475
       	Nstr = 285
			endif
			rth = .53*rdel        ! .53 --- tentatavily
    	ddn = sq3*1.713 + Rdel  
    	ddup = .5*1.846 + 1.713 
       prin2 Rbot,Rtop,Nstr
       (' EXSG: Rbot,Rtop,Nstr',2F12.4,I5)
			 mgt = emxg_Sbase + .01
    	do i_str = 1,nstr
        p = .5*(i_str-1)*mgt + 41.3655
*
        if (p <= (.5*rbot*sq3 + rth)) then
           dxy = 1.9375*sq2
           xleft = .5*sq2*p*(sq3 + 1.) - dxy
           yleft = .5*sq2*p*(sq3 - 1.) - dxy 
           yright = .5*sq2*(sqrt( rbot*rbot - p*p) - p)
           xright = sq2*p + yright
        else if ((.5*rbot*sq3  + rth) < p <= (.5*Rtop + 1.5)) then 
           prin2 i_str,p
           (' EXSG: 2 - -i_str,p:',i3,F12.4)
           dxy = 1.9375*sq2
           xleft = .5*sq2*p*(sq3 + 1.) - dxy
           yleft = .5*sq2*p*(sq3 - 1.) - dxy 
					 dxy = rdel*sq2/sq3
           yright = .5*sq2*p*(1.- 1./sq3)
           xright = sq2*p - yright - dxy
           yright = -yright - dxy
        else if (p > (.5*rtop +1.5)) then
           prin2 i_str,p
           (' EXSG: 3 - - i_str,p:',i3,F12.4)
           yleft = (sqrt(rtop*rtop - p*p) - p)/sq2
           xleft = sq2*p + yleft
					 dxy = rdel*sq2/sq3
           yright = .5*sq2*p*(1.- 1./sq3)
           xright = sq2*p - yright - dxy
           yright = -yright - dxy
           dxy = 0. 
           if ((.5*sq3*160.- ddn) < p <= (.5*sq3*160.+ ddup) ) then
             prin2 i_str,p
             (' EXSG: 4 - - i_str,p:',i3,F12.4)
						 xc = .5*(sq3*160.+1.846)
						 yc = xc - .5*sq3*1.713
           if (p > yc) then
             dxy = .5*sq2*(2/sq3*rdel + .5*sq3*1.846 +_
								   sqrt(1.713*1.713 - (p-xc)*(p-xc)))
					 else
             dxy = sq2/sq3*(p - .5*sq3* 160. + ddn)
					 endif
           else if ((.5*sq3*195.- ddn) < p <= (.5*sq3*195. + ddup) ) then
             prin2 i_str,p
             (' EXSG: 5 - - i_str,p:',i3,F12.4)
						 xc = .5*(sq3*195.+1.846)
						 yc = xc - .5*sq3*1.713
           if (p > yc) then
             dxy = .5*sq2*(2/sq3*rdel + .5*sq3*1.846 +_
								   sqrt(1.713*1.713 - (p-xc)*(p-xc)))
					 else
             dxy = sq2/sq3*(p - .5*sq3*195. + ddn)
					 endif
           endif
             xright = xright + dxy
             yright = yright + dxy
          endif

          dxy = section*Tan_Upp - Rtop
          xc = .5*(xright+xleft) + dxy
          yc = .5*(yright+yleft)
          xx = .5*sq2*(xleft+yleft)
          yy = .5*sq2*(xright+yright)
          len = xx-yy
           prin2 i_str,p,yy,xx,len,xc,yc
           (' EXSG: i_str,x,y1,y2,len,xc,yc:',i3,6F12.4)
*
       	 Create  EHMS
      	 if (mod(i_str,2) != 0 ) then                     
          	 Position EHMS  x=xc y=yc AlphaZ=-45
      	 else
          	 Position EHMS  x=xc y=yc AlphaZ=-45 ORT=X-Y-Z
      	 endif
        end do
     	 endif


*     dcut exsg z 0 0 10 0.1 0.1
*     dcut exsg y 0 10 -50 0.7 0.7

endblock
* ----------------------------------------------------------------------------
Block EHMS is  sHower Max Strip
*
      Material  POLYSTYREN
      Material  Cpolystyren   Isvol=1
      Attribute EHMS      seen=1    colo=2  serial=cut          ! red
      Shape     TRD1 dx1=0 dx2=emxg_Sbase/2 dy=len/2 dz=emxg_Sapex/2
      Call GSTPAR (ag_imed,'CUTGAM',0.00008)
      Call GSTPAR (ag_imed,'CUTELE',0.001)
      Call GSTPAR (ag_imed,'BCUTE',0.0001)
* define Birks law parameters
      Call GSTPAR (ag_imed,'BIRK1',1.)
      Call GSTPAR (ag_imed,'BIRK2',0.0130)
      Call GSTPAR (ag_imed,'BIRK3',9.6E-6)
*
       HITS EHMS     Birk:0:(0,10)  
*                     xx:16:SH(-250,250)  yy:16:(-250,250)  zz:16:(-350,350),
*                     px:16:(-100,100)    py:16:(-100,100)  pz:16:(-100,100),
*                     Slen:16:(0,1.e4)    Tof:16:(0,1.e-6)  Step:16:(0,100),
*                     none:16:            Eloss:0:(0,10)
* 
Endblock
* ----------------------------------------------------------------------------
Block EXGT  is the G10 layer in the Shower Max  
*
*     G10 is about 60% SiO2 and 40% epoxy
      Component Si    A=28.08  Z=14   W=0.6*1*28./60.
      Component O     A=16     Z=8    W=0.6*2*16./60.
      Component C     A=12     Z=6    W=0.4*8*12./174.
      Component H     A=1      Z=1    W=0.4*14*1./174.
      Component O     A=16     Z=8    W=0.4*4*16./174.
      Mixture   g10   Dens=1.7
      Attribute EXGT   seen=1   colo=7
      Shape     TUBS   dz=emxg_F4/2,
                rmin=(section-diff)*Tan_Low-1.526,
                rmax=(section+msecwd-diff)*Tan_Upp,
                phi1=emcs_PhiMin/emcs_Nsupsec,
                phi2=emcs_PhiMax/emcs_Nsupsec
      Call GSTPAR (ag_imed,'CUTGAM',0.00001)
      Call GSTPAR (ag_imed,'CUTELE',0.00001)
EndBlock
* ----------------------------------------------------------------------------
* ECAL nice views: dcut ecvo x 1       10 -5  .5 .1
*                  draw emdi 105 0 160  2 13  .2 .1
*                  draw emdi 120 180 150  1 14  .12 .12
* ---------------------------------------------------------------------------
end

ecalgeo.g geometry file (Jason edits, g23)

ecalgeo.g geometry file (Jason Webb edits, g23)

 

 

c*****************************************************************************
Module ECALGEO is the EM EndCap Calorimeter GEOmetry
c--
Created   26 jan 1996
Author    Rashid Mehdiyev
c--
c Version 1.1, W.J. Llope
c               - changed sensitive medium names...
c
c Version 2.0, R.R. Mehdiyev                                  16.04.97
c               - Support walls included
c               - intercell and intermodule gaps width updated
c               - G10 layers inserted
c Version 2.1, R.R. Mehdiyev                                  23.04.97
c               - Shower Max Detector geometry added          
c               - Variable eta grid step size introduced 
c Version 2.2, R.R. Mehdiyev                                  03.12.97
c               - Eta grid corrected 
c               - Several changes in volumes dimensions
c               - Material changes in SMD
c       
c Version 3.0, O. Rogachevsky                                 28.11.99
c               - New proposal for calorimeter SN 0401
c
c Version 4.1, O.Akio                                          3 Jan 01
c               - Include forward pion detectors
c
c Version 5.0, O. Rogachevsky                                 20.11.01
c               - FPD is eliminated in this version
c               - More closed to proposal description
c                 of calorimeter and SMD structure
c
c*****************************************************************************
+CDE,AGECOM,GCONST,GCUNIT.
*
      Content    EAGA,EALP,ECAL,ECHC,ECVO,ECGH,EFLP,EHMS,
                 ELED,EMGT,EMOD,EPER,EPSB,ERAD,ERCM,ERSM,
                 ESHM,ESEC,ESCI,ESGH,ESPL,ESSP,EMSS,ETAR,
                 EXGT,EXSG,EXPS,EFLS,EBLS

      Structure  EMCG { Version, int Onoff, int fillMode}

      Structure  EMCS { Version,Type,zorg,zend,EtaMin,EtaMax,
                        PhiMin,PhiMax,Offset,
                        Nsupsec,Nsector,Nsection,Nslices,
                        Front,AlinCell,Frplast,Bkplast,PbPlate,LamPlate,
                        BckPlate,Hub,Rmshift,SMShift,GapPlt,GapCel,
                        GapSMD,SMDcentr,TieRod(2),Bckfrnt,GapHalf,Cover,
                        Rtie,slop}

      Structure  EETR { Type,Etagr,Phigr,Neta,EtaBin(13)}

      Structure  ESEC { Isect, FPlmat, Cell, Scint, Nlayer, deltaz, Jiggle(18) }

      Structure  EMXG {Version,Sapex,Sbase,Rin,Rout,F4}

      Structure  EXSE {Jsect,Zshift,Sectype(6)}

      Structure  ESMD {Version, front_layer, back_layer, spacer_layer, base, apex }

      Integer    I_section,J_section,Ie,is,isec,istrip,Nstr,Type,ii,jj,
                 cut,fsect,lsect,ihalf,filled,i,j,k,i_sector
                       
      Real       center,Plate,Cell,G10,halfi,
                 tan_low,tan_upp,Tanf,RBot,Rtop,Deta,etax,sq2,sq3,
                 dup,dd,d2,d3,rshift,dphi,radiator
								 
      Real       maxcnt,msecwd,mxgten,curr,Secwid,Section,
                 curcl,EtaTop,EtaBot,zwidth,zslice,Gap,megatile,
                 xleft,xright,yleft,yright,current,
                 rth,length,p,xc,yc,xx,yy,rdel,dxy,ddn,ddup

      Real       myPhi
                 
      Integer    N
      Parameter (N=12)

      Tanf(etax) = tan(2*atan(exp(-etax)))
 
c--------------------------------------------------------------------------------
c                                                                            Data
c
c FillMode =1 only 2-5 sectors (in the first half) filled with scintillators 
c FillMode =2 all sectors filled (still only one half of one side)
c FillMode =3 both halves (ie all 12 sectors are filled)
c
c OnOff    =0 Do not build geometry
c OnOff    =1 Build West Endcap
c OnOff    =2 Build East Endcap (disabled)
c OnOff    =3 Build Both Endcaps (east disabled)
c
c Note: 

Fill  EMCG                          ! EM EndCAp Calorimeter basic data 
      Version  = 5.0                ! Geometry version 
      OnOff    = 3                  ! Configurations 0-no, 1-west 2-east 3-both
      FillMode = 3                  ! sectors fill mode 
c--
Fill  EMCS                          ! EM Endcap Calorimeter geometry
      Version  = 1                  ! Versioning
      Type     = 1                  ! =1 endcap, =2 fpd edcap prototype
      ZOrg     = 268.763            ! calorimeter origin in z
      ZEnd     = 310.007            ! Calorimeter end in z
      EtaMin   = 1.086              ! upper feducial eta cut 
      EtaMax   = 2.0,               ! lower feducial eta cut
      PhiMin   = -90                ! Min phi 
      PhiMax   = 90                 ! Max phi
      Offset   = 0.0                ! offset in x
      Nsupsec  = 6                  ! Number of azimuthal supersectors        
      Nsector  = 30                 ! Number of azimutal sectors (Phi granularity)
      Nslices  = 5                  ! number of phi slices in supersector
      Nsection = 4                  ! Number of readout sections
      Front    = 0.953              ! thickness of the front AL plates
      AlinCell   = 0.02             ! Aluminim plate in cell
      Frplast  = 0.015              ! Front plastic in megatile
      Bkplast  = 0.155              ! Fiber routing guides and back plastic
      Pbplate  = 0.457              ! Lead radiator thickness
      LamPlate  = 0.05              ! Laminated SS plate thickness
      BckPlate = 3.175              ! Back SS plate thickness
      Hub      = 3.81               ! thickness of EndCap hub
      Rmshift  = 2.121              ! radial shift of module
      smshift  = 0.12               ! radial shift of steel support walls
      GapPlt   = 0.3/2              ! HALF of the inter-plate gap in phi
      GapCel   = 0.03/2             ! HALF of the radial inter-cell gap
      GapSMD   = 3.400              ! space for SMD detector                << version 2 -- 3.600 >>
      SMDcentr = 279.542            ! SMD position
      TieRod   = {160.,195}         ! Radial position of tie rods
      Bckfrnt  = 306.832            ! Backplate front Z
      GapHalf  = 0.4                ! 1/2 Gap between halves of endcap wheel
      Cover    = 0.075              ! Cover of wheel half
      Rtie     = 1.0425             ! Radius of tie rod
      Slop     = 0.1400             ! Added to cell containing radiator 6 (formerly hardcoded in geom)
c--
Fill  EMCS                          ! EM Endcap Calorimeter geometry
      Version  = 2                  ! Versioning
      Type     = 1                  ! =1 endcap, =2 fpd edcap prototype
      ZOrg     = 268.763            ! calorimeter origin in z
      ZEnd     = 310.007            ! Calorimeter end in z
      EtaMin   = 1.086              ! upper feducial eta cut 
      EtaMax   = 2.0,               ! lower feducial eta cut
      PhiMin   = -90                ! Min phi 
      PhiMax   = 90                 ! Max phi
      Offset   = 0.0                ! offset in x
      Nsupsec  = 6                  ! Number of azimuthal supersectors        
      Nsector  = 30                 ! Number of azimutal sectors (Phi granularity)
      Nslices  = 5                  ! number of phi slices in supersector
      Nsection = 4                  ! Number of readout sections
      Front    = 0.953              ! thickness of the front AL plates
      AlinCell   = 0.02             ! Aluminim plate in cell
      Frplast  = 0.015              ! Front plastic in megatile
      Bkplast  = 0.155              ! Fiber routing guides and back plastic
      Pbplate  = 0.457              ! Lead radiator thickness
      LamPlate  = 0.05              ! Laminated SS plate thickness
      BckPlate = 3.175              ! Back SS plate thickness
      Hub      = 3.81               ! thickness of EndCap hub
      Rmshift  = 2.121              ! radial shift of module
      smshift  = 0.12               ! radial shift of steel support walls
      GapPlt   = 0.3/2              ! HALF of the inter-plate gap in phi
      GapCel   = 0.03/2             ! HALF of the radial inter-cell gap
      GapSMD   = 3.600              ! space for SMD detector              (* from master_geom_bmp.xls *)
      SMDcentr = 279.542            ! SMD position
      TieRod   = {160.,195}         ! Radial position of tie rods
      Bckfrnt  = 306.832            ! Backplate front Z
      GapHalf  = 0.4                ! 1/2 Gap between halves of endcap wheel
      Cover    = 0.075              ! Cover of wheel half
      Rtie     = 0.75               ! Radius of tie rod
      Slop     = 0.0000             ! Added to cell containing radiator 6 (formerly hardcoded in geom)
c--
c---------------------------------------------------------------------------
c--
c-- Supporting documentation:
c-- http://drupal.star.bnl.gov/STAR/system/files/SMD_module_stack.pdf
c--
Fill  ESMD                     ! shower maximum detector information
      Version  = 1             ! versioning information
      front_layer  = 0.161     ! thickness of front layer 
      back_layer   = 0.210     ! thickness of back layer
      base         = 1.0       ! base of the SMD strip
      apex         = 0.7       ! apex of the SMD strip
      spacer_layer = 1.2       ! spacer layer
c--
Fill EETR                      ! Eta and Phi grid values
      Type     = 1             ! =1 endcap, =2 fpd
      EtaGr    = 1.0536        ! eta_top/eta_bot tower granularity
      PhiGr    = 0.0981747     ! Phi granularity (radians)
      NEta     = 12            ! Eta granularity
      EtaBin   = {2.0,1.9008,1.8065,1.7168,1.6317,1.5507,1.4738,
                  1.4007,1.3312,1.2651,1.2023,1.1427,1.086}! Eta rapidities
c--
c---------------------------------------------------------------------------
c--
Fill ESEC        ! Preshower 1 / Radiator 1
      ISect    = 1                           ! Section number   
      Nlayer   = 1                           ! Number of Sci layers along z
      Cell     = 1.505                       ! Cell full width in z
      Scint    = 0.475                       ! Sci layer thickness (4.75mm Bicron)
      deltaz   = -0.014                      ! Amount to shift section in z to align with as-built numbers
      Jiggle   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ! Degrees to shift EPER in each layer
c--
c-- Note: Jiggle allows one to shift each megatile by Jiggle(i) degrees, where
c-- i indicates the layer within the section of the calorimeter.  This feature
c-- has only been crudely tested... i.e. it compiles and creates a reasonable
c-- set of pictures, but I have not verified that every scintillator shows up...
c-- There could be volume conflicts and this would need to be checked.  --JW
c--
Fill ESEC      ! Preshower 2 / Radiator 2
      ISect    = 2                           ! Section number   
      Nlayer   = 1                           ! Number of Sci layers along z
      Cell     = 1.505                       ! Cell full width in z
      Scint    = 0.475                       ! Sci layer thickness (4.75mm Bicron)
      deltaz   = -0.0182                     ! Amount to shift section in z to align with as-built numbers
      Jiggle   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ! Degrees to shift EPER in each layer
c--
Fill ESEC      ! Megatiles 3-6 / Radiators 3-5
      ISect    = 3                           ! Section number
      Nlayer   = 4                           ! Number of Sci layers along z
      Cell     = 1.405                       ! Cell full width in z
      Scint    = 0.4                         ! Sci layer thickness
      deltaz   = -0.0145                     ! Amount to shift section in z to align with as-built numbers
      Jiggle   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ! Degrees to shift EPER in each layer
c--
Fill ESEC      ! Megatiles 7-23 / Radiators 6-23
      ISect    = 4                           ! Section
      Nlayer   = 18                          ! Number of layers along z
      Cell     = 1.405                       ! Cell full width in z
      Scint    = 0.4                         ! Sci layer thickness
      deltaz   = +0.0336                     ! Amount to shift section in z to align with as-built numbers
      Jiggle   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ! Degrees to shift EPER in each layer
c--
Fill ESEC      ! Postshower
      ISect    = 5                           ! Section
      Nlayer   = 1                           ! Number of  layers along z
      Cell     = 1.505                       ! Cell full width in z
      Scint    = 0.5                         ! Sci layer thickness (5.0mm Kurarary)
      deltaz   = +0.036                      ! Amount to shift section in z to align with as-built numbers
      Jiggle   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ! Degrees to shift EPER in each layer
c--
c----------------------------------------------------------------------------
c--
Fill EMXG           ! EM Endcap SMD basic data
      Version   = 1                          ! Geometry version
      Sapex     = 0.7                        ! Scintillator strip apex
      Sbase     = 1.0                        ! Scintillator strip base
      Rin       = 77.41                      ! inner radius of SMD plane  
      Rout      = 213.922                    ! outer radius of SMD plane
      F4        = .15                        ! F4 thickness
c--
c----------------------------------------------------------------------------
c--
Fill EXSE           ! First SMD section
      JSect    = 1                           ! Section number
      Zshift   = -1.215                      ! Section width
      sectype  = {4,1,0,2,1,0}               ! 1-V,2-U,3-cutV,4-cutU    
c--
Fill EXSE           ! Second SMD section
      JSect    = 2                           ! Section number   
      Zshift   = 0.                          ! Section width
      sectype  = {0,2,1,0,2,3}               ! 1-V,2-U,3-cutV,4-cutU    
c--
Fill EXSE           ! Third SMD section
      JSect    = 3                           ! Section number   
      Zshift   = 1.215                       ! Section width
      sectype  = {1,0,2,1,0,2}               ! 1-V,2-U,3-cutV,4-cutU    
c--
c----------------------------------------------------------------------------
c--                                                                 Materials
c--
c--  PVC used in the SMD spacer layers
c--
     Component H  A=1       Z=1   W=3.0*1.0/62.453
     Component C  A=12      Z=6   W=2.0*12.0/62.453
     Component Cl A=35.453  Z=17  W=1.0*35.453/62.453
     Mixture   PVC_Spacer   Dens=1.390*(1.20/1.00)
c--
c--  Lead alloy used in the radiators
c--
     Component  Sn        A=118.710  Z=50  W=0.014
     Component  Ca        A=40.0780  Z=20  W=0.00075
     Component  Al        A=26.9815  Z=13  W=0.0003
     Component  Pb        A=207.190  Z=82  W=0.98495
     Mixture    PbAlloy   DENS=11.35
c--
c-- Stainless Steel used in various places
c--
      Component  Cr      A=51.9960  Z=24  W=0.19
      Component  Ni      A=58.6934  Z=28  W=0.09
      Component  Fe      A=55.8450  Z=26  W=0.72
      Mixture    Steel   DENS=8.03
c--
c-- Aluminized mylar.  According to information which I dug up on a google
c-- search, this is typically mylar coated with a thin (1000 angstrom) layer
c-- of aluminium on each side.
c--
c-- http://www.eljentechnology.com/datasheets/EJ590-B10HH%20data%20sheet.pdf
c--
      Component Mylar   A=12.875 Z=6.4580 w=0.999
      Component Al      A=26.980 Z=13.000 w=0.001
      Mixture   AlMylar dens=1.390
c--
c-- G10 Epoxy used in various places
c--
      Component Si    A=28.08  Z=14   W=0.6*1*28./60.
      Component O     A=16     Z=8    W=0.6*2*16./60.
      Component C     A=12     Z=6    W=0.4*8*12./174.
      Component H     A=1      Z=1    W=0.4*14*1./174.
      Component O     A=16     Z=8    W=0.4*4*16./174.
      Mixture   G10   Dens=1.7
c--
c-- Fibreglass cloth used in SMD stackup.  I googled this one too... a self-
c-- described expert quotes typical densities and percent by volume
c-- http://en.allexperts.com/q/Composite-Materials-2430/fiberglass-1.htm
c-- 
c-- glass fiber: 2.6 g/cm3 (17.6%)   resin: 1.3 g/cm3 (82.4%)
c--
c-- Fiberglass density = 1.529 g/cm3
c--
c-- I will assume that G10 epoxy is close enough to the typical resins
c-- used, at least in terms of chemical composition. Then
c--
        Component G10   A=18.017     Z=9.013    W=1.3*0.824/(1.3*0.824+2.6*0.176)
        Component Si    A=28.08      Z=14       W=2.6*0.176/(1.3*0.824+2.6*0.176)*28.08/60.08
        Component O     A=16         Z=8        W=2.6*0.176/(1.3*0.824+2.6*0.176)*32.00/60.08
        Mixture   Fiberglass         dens=1.53
c--
c--
c----------------------------------------------------------------------------
c-- Select versions of various geometry data
c--
      Use    EMCG    
      Use    EMCS   Version=2   
      Use    EETR    
c--
c----------------------------------------------------------------------------
c-- Calculate frequently used quantities
c--
      sq3 = sqrt(3.)                                ! 1/tan(30deg) = sq3
      sq2 = sqrt(2.)
c--
c--
      center  = (emcs_zorg+emcs_zend)/2             ! center of the calorimeter
      tan_upp = tanf(emcs_etamin)                   ! think this is angle pointing to top of calo
      tan_low = tanf(emcs_etamax)                   ! think this is angle pointing to bot of calo
      rth     = sqrt(1. + tan_low*tan_low)          ! ??
      rshift  = emcs_hub * rth                      ! ??
      dup     = emcs_rmshift*tan_upp                !
      dd      = emcs_rmshift*rth                    !
      d2      = rshift + dd                         !
      radiator  = emcs_pbplate + 2*emcs_lamplate    ! thickness of radiator assembly
      dphi = (emcs_phimax-emcs_phimin)/emcs_nsector ! single endcap sector
c--
c----------------------------------------------------------------------------

c----------------------------------------------------------------------------
c--                                                                     BEGIN
      Prin1 emcg_version
        ('ecalgeo version: ',F4.2) 
c--
      IF (emcg_OnOff>0) THEN
c--
c--     Build the EEMC geometry for one half wheel
c--
        Create ECAL
c--
c--     Position the two halves.  Bottom half installed in 2003, top
c--     half in 2004... so we allow logic to allow for the time
c--     evolution of the calorimeter
c--

c--
c--     West Endcap
c--
        IF (emcg_OnOff==1 | emcg_OnOff==3) THEN
           Position ECAL in CAVE z=+center
        ENDIF
        IF (section > emcs_zend) THEN
          Prin1 section, emcs_zend
            (' ECALGEO error: sum of sections exceeds maximum ',2F12.4)
        ENDIF

        IF (emcg_OnOff==2 ) THEN
           Prin1
             ('East Endcap has been removed from the geometry' )
        ENDIF
c--
      EndIF! emcg_OnOff
c--
      Prin1
        ('ECALGEO finished')

c--
c--                                                                       END
c----------------------------------------------------------------------------








c----------------------------------------------------------------- Block ECAL --
c--
Block ECAL    is one EMC EndCap wheel
c--
c-- The EEMC is built from two 180 degree half-wheels tilted at an angle
c-- with respect to zero in the STAR reference frame.  This block is serves
c-- as a logical volume which creates the two half wheels.  
c--
c-- Creates:
c-- + EAGA
c--
      Material  Air
      Attribute ECAL   seen=0 colo=7                           !  lightblue
c--
      Shape     CONE   dz=(emcs_zend-emcs_zorg)/2,
                       rmn1=emcs_zorg*tan_low-d2,
                       rmn2=emcs_zend*tan_low-d2,
                       rmx1=emcs_zorg*tan_upp+dup,
                       rmx2=emcs_zend*tan_upp+dup
c--
c--
      DO ihalf=1,2
c--
	     filled = 1
	     halfi  = -105 + (ihalf-1)*180
         if (ihalf=2 & emcg_FillMode<3) filled = 0	
c--
         Create and Position EAGA  AlphaZ=halfi
c--
      ENDDO
c--		
EndBlock




c----------------------------------------------------------------- Block EAGA --
c--
Block EAGA        IS HALF OF WHEEL AIR VOLUME FOR  THE ENDCAP MODULE
c--
c-- The eemc is divided into two halves.  one half installed for 2003 run,
c-- second half added for 2004 and beyond.  the eaga block represents one
c-- of these half-wheels.  it is an air volume which will be filled in 
c-- with additional detector components.
c--
c-- Creates:
c-- + EMSS -- steel support block
c-- + ECGH -- air gap between the two halves
c--
C--                        
      Material  AIR
      Attribute EAGA      seen=0    colo=1   serial=FILLED           ! BLACK
C--
      Shape     CONS   dz=(emcs_zend-emcs_zorg)/2,
                rmn1=emcs_zorg*tan_low-d2 rmn2=emcs_zend*tan_low-d2,
                rmx1=emcs_zorg*tan_upp+dup rmx2=emcs_zend*tan_upp+dup,
                phi1=emcs_phimin phi2=emcs_phimax
c--
c--
      IF ( FILLED .EQ. 1 ) THEN
c--
          Create AND Position EMSS konly='MANY'
c--
          curr  = emcs_zorg 
          curcl = emcs_zend
c--
          Create AND Position ECGH alphaz=90 kOnly='ONLY'
c--
      ENDIF
c--
EndBlock



c----------------------------------------------------------------- Block EMSS --
c--
Block EMSS                             is the steel support of the endcap module
c--
c-- Creates:
c--   + EFLP -- ALUMINIUM FRONT PLATE
c--   + ECVO -- VOLUMES TO CONTAIN RADIATORS AND MEGATILES
c--   + ESHM -- SHOWER MAX DETECTOR VOLUME
c--   + ESSP -- STAINLESS STEEL BACKPLATE
c--   + ERCM -- STAINLESS STEEL TIE-RODS PENETRATING ECVO
c--
c--                        
      Material  Steel
c--
      Attribute EMSS      seen=1    colo=1              ! BLACK
      Shape     CONS   dz=(emcs_zend-emcs_zorg)/2,
                rmn1=emcs_zorg*tan_low-d2 rmn2=emcs_zend*tan_low-d2,
                rmx1=emcs_zorg*tan_upp+dup rmx2=emcs_zend*tan_upp+dup,
                phi1=emcs_phimin phi2=emcs_phimax
c--
c--   Aluminium front plate 
C--
      zslice = emcs_zorg
      zwidth = emcs_front
c--
      Prin1 zslice+zwidth/2
        (' Front Al plate centered at: ', F12.4 )
c--
      Create AND Position EFLP z=zslice-center+zwidth/2
      zslice = zslice + zwidth
C--
      Prin1 zslice
         (' FIRST CALORIMETER STARTS AT:  ',F12.4)
c--
c--   Preshower 1, preshower 2, and calorimeter tiles up to
c--   megatile number six.
c--
      fsect = 1                                          ! first section 
      lsect = 3                                          ! last section
c--
      zwidth = emcs_smdcentr - emcs_gapsmd/2 - zslice    ! width of current slice
c--
      Prin1 zslice+zwidth/2
        ('Sections 1-3 positioned at: ', F12.4 )
c--
      Create AND Position ECVO  z=zslice-center+zwidth/2
c--
      zwidth  = emcs_gapsmd
      zslice  = emcs_smdcentr - emcs_gapsmd/2
c--
      Prin1 section, zslice
        (' 1st calorimeter ends, smd starts at:  ',2f10.5)
      Prin1 zwidth
        (' smd width = ',f10.5 )
c--
      Prin1 zslice+zwidth/2
         ('SMD section centered at:  ', F12.4 )
c--                                                             Do not kill neighbors
      Create AND Position ESHM  z=zslice-center+zwidth/2        kOnly='MANY'
      zslice = zslice + zwidth
c--
      Prin1 zslice
        ('  SMD ends at:  ',f10.5)
c--
c--
      fsect = 4                                             ! first section
      lsect = 5                                             ! last section
c--
c--   Calculate the width of  the last two calorimeter sections
c--
      zwidth = 0
      DO i_section = fsect,lsect
c--
        USE ESEC isect=i_section  
        zwidth  = zwidth + esec_cell*esec_nlayer
c--
      ENDDO
c--
c--   =============================================================
c--
c--   Total width will be between the back plate and the current
c--   position... this effectively turns the geometry into an
c--   accordian... whatever was defined earlier will compress
c--   / expand this section.  so correcting the smd gap will 
c--   result in some small, sub-mm shifts of radiators and 
c--   megatiles... one would like to actually place these 
c--   into their absolute positions.
c--
c--   ==============================================================
c--
      zwidth = emcs_bckfrnt - zslice
c--
      Prin1 zslice+zwidth/2
        ('Sections 4-5 positioned at: ', F12.4 )
c--
      Create AND Position ECVO  z=zslice-center+zwidth/2
c--
      zslice = emcs_bckfrnt
c--
      Prin1 section,zslice
        (' 2nd calorimeter ends, back plate starts at:  ',2f10.5)
c--
      zwidth  = emcs_bckplate
c--
      Create AND Position ESSP    z=zslice-center+zwidth/2
c--
      zslice = zslice + zwidth
c--
      Prin1 zslice
        ('EEMC Al backplate ends at: ',F12.4 )
c--
c-- Done with the calorimeter stackup.  now go back and cut through the
c-- calorimeter stack with the tie rods
c--
c--   slice width will be full calorimeter depth
      zwidth = emcs_zend-emcs_zorg
c--
      Create ERCM
c--
      DO i = 1,2               ! two tie rods along 
         DO j = 1,5            ! each gap between sectors (5 gaps)
            xx = emcs_phimin + j*30
            yy = xx*degrad
            xc = cos(yy)*emcs_tierod(i)
            yc = sin(yy)*emcs_tierod(i)
            Position ERCM z=0 x=xc y=yc  
         ENDDO
      ENDDO
c--
c--   Now add in projective steel bars which form part of the support
c--   structure of the eemc
c--
      rth = emcs_zorg*tan_upp+dup + 2.5/2
      xc = (emcs_zend - emcs_zorg)*tan_upp
      length = .5*(emcs_zend + emcs_zorg)*tan_upp + dup + 2.5/2
      yc = emcs_zend-emcs_zorg
      p = atan(xc/yc)/degrad
c--
      Create EPSB
      DO i = 1,6
c--
         xx = -75 + (i-1)*30
         yy = xx*degrad
         xc = cos(yy)*length
         yc = sin(yy)*length
c--
         Position EPSB X=XC Y=YC  ALPHAZ=XX
c--
      ENDDO
c--
EndBlock








c----------------------------------------------------------------- Block ECVO --
c--
Block ECVO                  is one of endcap volume with megatiles and radiators
c--
c-- CreateS:
c-- + EMOD -- Responsible for creating esec which, in a glorious example
c--           of spaghetti code, turns around and creates esec, which is
c--           responsible for creating the radiators before and after the
c--           smd layers.
C--
      Material  AIR
      Attribute ECVO   seen=1 colo=3                            ! GREEN
      Shape     CONS   dz=zwidth/2,
                rmn1=zslice*tan_low-dd,
                rmn2=(zslice+zwidth)*tan_low-dd,
                rmx1=zslice*tan_upp+dup,
                rmx2=(zslice+zwidth)*tan_upp+dup
c--
c--   Loop over the SIX SECTORS in the current half-wheel.  determine
c--   whether the sector is filled or not, and create the "module".
c--   By "module", we really mean endcap sector.  (Lots of code in the
c--   EEMC borrows from the barrel, and so barrel modlues get mapped
c--   to EEMC sectors).
c--
      DO i_sector = 1,6
c--
         IF (1 < I_SECTOR < 6 | EMCG_FILLMODE > 1) THEN
			 filled = 1
         ELSE
			 filled = 0
         ENDIF
c--
         d3 = 75 - (i_sector-1)*30
         Create AND Position EMOD alphaz=d3   ncopy=i_sector
c--
       ENDDO
c--
EndBlock








c----------------------------------------------------------------- Block ESHM --
c--
Block ESHM                                            is the shower max  section
c--
c-- CreateS:
c-- + ESPL -- SHOWER MAXIMUM DETECTOR PLANES
c-- + ERSM -- TIE RODS W/IN THE SHOWER MAXIMUM DETECTOR
c--
      Material  AIR 
      Attribute ESHM   seen=1   colo=4           !  BLUE
c--
      Shape     CONS   dz=zwidth/2,
                rmn1=(zslice*tan_low)-dd,
                rmn2=(zslice+zwidth)*tan_low-dd,
                rmx1=(zslice)*tan_upp+dup,
                rmx2=(zslice+zwidth)*tan_upp+dup,
                phi1=emcs_phimin phi2=emcs_phimax
c--
      USE EMXG 
c--
      maxcnt = emcs_smdcentr
      Prin1 zslice, section, center
        (' === z start for smd,section:  ',3f12.4)
c--
c--   Loop over the three possible locations for the smd planes and
c--   create them.  note that code w/in espl will decide which of
c--   5 types of smd planes are created... u, v, cutu,cutv or spacer.
c--
       DO j_section = 1,3
c--
          USE EXSE jsect=j_section
c--
          current = exse_zshift
          secwid  = emxg_sapex + 2.*emxg_f4
          section = maxcnt + exse_zshift
c--
          Prin1 j_section,current,section,secwid
            (' layer, z, width :  ',i3,3f12.4)
c--
          rbot=section*tan_low
          rtop=section*tan_upp
c--
          Prin1 j_section,rbot,rtop
            (' layer, rbot,rtop :  ',i3,2f12.4)
c--
          Prin1 j_section, center+current
            (' smd layer=',I1,' z=',F12.4 )
c--                                                           Do not kill neighbors
          Create and Position ESPL z=current                  kOnly='MANY'
c--
       ENDDO
c--
c--    Add in the tie rods which penetrate the SMD layers
c--
       Create ERSM
c--
       DO i = 1,2
		  DO j = 1,5
		  	xx = emcs_phimin + j*30
			yy = xx*degrad
			xc = cos(yy)*emcs_tierod(i)
			yc = sin(yy)*emcs_tierod(i)
            Position ERSM Z=0 X=XC Y=YC  
          END DO
       END DO
C--
EndBlock








c----------------------------------------------------------------- Block ECGH --
c--
Block ECGH                                is air gap between endcap half wheels
c--
c-- Creates:
c-- + ECHC -- THE STAINLESS STEEL COVER FOR 1/2 OF THE EEMC.
c--
      Material  AIR
      Medium    standard
      Attribute ECGH   seen=0 colo=7                            !  LIGHTBLUE
      Shape     TRD1   dz=(emcs_zend-emcs_zorg)/2,
                dy =(emcs_gaphalf+emcs_cover)/2,
                dx1=emcs_zorg*tan_upp+dup,
                dx2=emcs_zend*tan_upp+dup
c--
c--                
      rth = emcs_gaphalf + emcs_cover
      xx=curr*tan_low-d2
      xleft = sqrt(xx*xx - rth*rth)
      yy=curr*tan_upp+dup
      xright = sqrt(yy*yy - rth*rth)
      secwid = yy - xx
      xx=curcl*tan_low-d2
      yleft = sqrt(xx*xx - rth*rth)
      yy=curcl*tan_upp+dup
      yright = sqrt(yy*yy - rth*rth)
      zwidth = yy - xx
      xx=(xleft+xright)/2
      yy=(yleft + yright)/2
      xc = yy - xx
      length = (xx+yy)/2
      yc = curcl - curr
      p = atan(xc/yc)/degrad
      rth = -(emcs_gaphalf + emcs_cover)/2
c--
      Create  ECHC
c--
      Position ECHC  X=+LENGTH Y=RTH
      Position ECHC  X=-LENGTH Y=RTH ALPHAZ=180
c--
EndBlock




c----------------------------------------------------------------- Block ECHC --
c--
Block ECHC                                            is steel endcap half cover
c--
      Material  steel
      Attribute ECHC      seen=1    colo=1              ! BLACK
c--
      Shape     TRAP   dz=(curcl-curr)/2,
	            thet=p,
                bl1=secwid/2,
                tl1=secwid/2,
                bl2=zwidth/2,
                tl2=zwidth/2,
                h1=emcs_cover/2,
                h2=emcs_cover/2,
                phi=0,  
                alp1=0,
                alp2=0
c--
EndBlock



c----------------------------------------------------------------- Block ESSP --
c--
Block ESSP                                        is stainless steel  back plate 
c--
      Material  steel
      Attribute ESSP   seen=1  colo=6 fill=1    
      Shape     CONS   dz=emcs_bckplate/2,
                       rmn1=zslice*tan_low-dd,
                       rmn2=(zslice+zwidth)*tan_low-dd,
                       rmx1=zslice*tan_upp+dup,
                       rmx2=(zslice+zwidth)*tan_upp+dup,
                       phi1=emcs_phimin,
                       phi2=emcs_phimax
c--
EndBlock




c----------------------------------------------------------------- Block EPSB --
c--
Block EPSB  IS A PROJECTILE STAINLESS STEEL BAR
C--
      Material  Steel
      Attribute EPSB   seen=1  colo=6 FILL=1    
      Shape     TRAP   dz=(emcs_zend-emcs_zorg)/2,
	            thet=p,
                bl1=2.5/2,
                tl1=2.5/2,
                bl2=2.5/2,
                tl2=2.5/2,
                h1=2.0/2,
                h2=2.0/2,
                phi=0,
                alp1=0,
                alp2=0
c--
c--
EndBlock





c----------------------------------------------------------------- Block ERCM --
c--
Block ERCM                    is stainless steel tie rod in calorimeter sections
c--
      Material  Steel
      Attribute ERSM     seen=1  colo=6 FILL=1    
c--
      Shape     TUBE   dz=zwidth/2,
                rmin=0,
                rmax=emcs_rtie
c--
c-- Looks like the tie rods are meant to engage the 1.525 cm diameter holes 
c-- piercing the ears of the smd spacer... 1.5 cm may be a better approximation
c-- here.
c--
c-- http://drupal.star.bnl.gov/star/system/files/smd_spacer_drawings.pdf
c--
EndBlock






c----------------------------------------------------------------- Block ERSM --
c--
Block ERSM                             is stainless steel tie rod in shower max
c--
      Material  Steel
      Attribute ERSM       seen=1  colo=6 FILL=1    
c--
      Shape     TUBE dz=zwidth/2,
                rmin=0,
                rmax=emcs_rtie
c--
c-- see comments above
c--
EndBlock







c----------------------------------------------------------------- Block EMOD --
c--
Block EMOD   (fsect,lsect)  IS ONE MODULE  OF THE EM ENDCAP
c--
c-- Arguements: (do be defined prior to the creation of this block)
c--
c--   fsect -- first section to create
c--   lsect -- last section to create
c--
      Attribute EMOD      seen=1    colo=3  serial=FILLED         ! GREEN
      Material  Air
      Shape     CONS   dz=zwidth/2,
                phi1=emcs_phimin/emcs_nsupsec,
                phi2=emcs_phimax/emcs_nsupsec,
                rmn1=zslice*tan_low-dd,
                rmn2=(zslice+zwidth)*tan_low-dd,
                rmx1=zslice*tan_upp+dup,
                rmx2=(zslice+zwidth)*tan_upp+dup
c--
c--  Running parameter 'section' contains the position of the current section
c--   it should not be modified in daughters, use 'current' variable instead.
c--   secwid is used in all 'cons' daughters to define dimensions.
c--
        section = zslice
        curr = zslice + zwidth/2
c--
c--
        DO i_section = fsect, lsect

        USE ESEC isect=i_section  
c--
        secwid  = esec_cell*esec_nlayer
c--
c--     Section 3 precedes the smd.  section 5 is the post shower.  in
c--     both cases these sections end with a scintillator layer and no
c--     radiator.
c--
        IF (I_SECTION = 3 | I_SECTION = 5) THEN   
           secwid  = secwid - radiator
        ELSE IF (I_SECTION = 4) THEN                     ! add one more radiator 
           secwid  = secwid - esec_cell + radiator
        ENDIF
c--  
        Prin1 i_section, section-curr+secwid/2
          ('+ ECVO isection=',I1,' zcenter=', F12.4)
c--
        Create AND Position ESEC z=section-curr+secwid/2
c--
        section = section + secwid
c--
      ENDDO! Loop over sections
c--
EndBlock








c----------------------------------------------------------------- Block ESEC --
c--
Block ESEC                                              is a single em section

      Material  AIR
      Medium    standard
      Attribute ESEC seen=1 colo=1 serial=filled  lsty=2
c--
      Shape     CONS  dz=secwid/2,  
                rmn1=(section)*tan_low-dd,
                rmn2=(section+secwid)*tan_low-dd,
                rmx1=(section)*tan_upp+dup,
                rmx2=(section+secwid)*tan_upp+dup
c--
      length = -secwid/2
      current = section
c--
      megatile = esec_scint+emcs_alincell+emcs_frplast+emcs_bkplast
c--
      gap = esec_cell - radiator - megatile
      Prin2 i_section,section
        (' ESEC:i_section,section',i3,f12.4)
c--
c--   Loop over all layers in this section
c--
      DO is = 1,esec_nlayer
c--
c--	    Define actual  cell thickness:         
        cell  = esec_cell
        plate = radiator
c--
        IF (is=nint(esec_nlayer) & (i_section = 3 | i_section = 5)) THEN
c--
           cell = megatile + gap
           plate=0
c--
        ELSE IF (i_section = 4 & is = 1) THEN    ! RADIATOR ONLY
c--
           cell = radiator  
c--
        ENDIF
c--
        Prin2 i_section,is,length,cell,current
          (' esec:i_section,is,length,cell,current  ',2i3,3f12.4)
C--
C--     This handles the special case in the section after the smd.
c--     this section begins with a lead radiator.  the previous section
c--     ended with a plastic scintillator
c--
      	IF (i_section = 4 & is = 1) THEN       ! radiator only
c--
c$$$           cell = radiator + .14
           cell = radiator + emcs_slop
                          ! ^^^^ probably the fiber router layer... but is this needed here?
c--
           Prin1 is, current + cell/2+esec_deltaz
              ( '  + ESEC radiator ilayer=',I2,' z=',F12.4 )
           Create AND Position ERAD z=length+(cell)/2+esec_deltaz
c--
           length  = length + cell
           current = current + cell
c--
c--     All other cases are standard radiator followed by scintillator
c--
        ELSE
c--
           cell = megatile
           IF (FILLED = 1) THEN
c--
              Create AND Position EMGT z=length+(gap+cell)/2+esec_deltaz
c--
              xx = current + (gap+cell)/2+esec_deltaz
              prin2 i_section,is,xx
                (' mega  i_section,is ',2i3,f10.4)
              Prin1 is, xx
                 ('  + ESEC megatile ilayer=',I2,' z=',F12.4)
c--
           ENDIF 
c--
           length  = length  + cell + gap
           current = current + cell + gap
c--
           IF (PLATE>0) THEN
c--
              cell = radiator
              Prin1 is, current + cell/2+esec_deltaz
                 ( '  + ESEC radiator ilayer=',I2,' z=',F12.4 )
              Create AND Position ERAD z=length+cell/2+esec_deltaz
c--
              length  = length  + cell
          	  current = current + cell
c--
           ENDIF
c--
         ENDIF
c--
      ENDDO
c--
c--
EndBlock








c----------------------------------------------------------------- Block EMGT --
c--
Block EMGT                                               is a 30 degree megatile
c--
      Material  Air
      Medium    Standard
      Attribute EMGT   seen=1  colo=1    lsty=2
c--
      Shape     CONS  dz=megatile/2,
                rmn1=(current)*tan_low-dd,  
                rmn2=(current+megatile)*tan_low-dd,
                rmx1=(current)*tan_upp+dup, 
                rmx2=(current+megatile)*tan_upp+dup
c--
c--
      DO isec=1,nint(emcs_nslices)
c--
         myPhi = (emcs_nslices/2-isec+0.5)*dphi + esec_jiggle(is)
c--
         Create AND Position EPER alphaz=myPhi
c--
      END DO 
c--
EndBlock




c----------------------------------------------------------------- Block EPER --
c--
Block EPER               is a 5 degree slice of a 30 degree megatile (subsector)
c--
c--   Creates:
c--   + ETAR -- The pseudo-rapidity divivisions in the megatiles
c--
      Material  Polystyren
      Attribute EPER       seen=1  colo=1   lsty=1
c--
c--
c--
      Shape     CONS  dz=megatile/2, 
                phi1=emcs_phimin/emcs_nsector,
                phi2=emcs_phimax/emcs_nsector,
                rmn1=(current)*tan_low-dd,
                rmn2=(current+megatile)*tan_low-dd,
                rmx1=(current)*tan_upp+dup,
                rmx2=(current+megatile)*tan_upp+dup
c--
      curcl = current+megatile/2 
      DO ie = 1, nint(eetr_neta)
c--
        etabot  = eetr_etabin(ie)
        etatop  = eetr_etabin(ie+1)

        rbot=(curcl)*tanf(etabot)
        rtop=min((curcl)*tanf(etatop), ((current)*tan_upp+dup))
c--
        check rbot<rtop
c--
        xx=tan(pi*emcs_phimax/180.0/emcs_nsector)
        yy=cos(pi*emcs_phimax/180.0/emcs_nsector)

        Create and Position  ETAR    x=(rbot+rtop)/2  ort=yzx
        prin2 ie,etatop,etabot,rbot,rtop
          (' EPER : ie,etatop,etabot,rbot,rtop ',i3,4f12.4)
c--
      ENDDO
c--
EndBlock






c----------------------------------------------------------------- Block ETAR --
c--
c-- ETAR is a single cell of scintillator, including fiber router, plastic,
c-- etc...
c-- 
c-- local z is radially outward in star
c-- local y is the thickness of the layer
c--
Block ETAR is a single calorimeter cell, containing scintillator, fiber router, etc...
c--
      Material  POLYSTYREN
      Attribute ETAR   seen=1  colo=4  lsty=1                         ! BLUE
c--
      Shape TRD1 dy=megatile/2 dz=(rtop-rbot)/2,
            dx1=rbot*xx-emcs_gapcel/yy,
            dx2=rtop*xx-emcs_gapcel/yy
c--
        Create AND Position EALP y=(-megatile+emcs_alincell)/2
      	g10 = esec_scint
      	Create AND Position ESCI y=(-megatile+g10)/2+emcs_alincell _
				                               +emcs_frplast
c--
EndBlock







c----------------------------------------------------------------- Block ESCI --
c--
Block ESCI                        is the active scintillator (polystyrene) layer  
c--
c--   Obtain the definition of polystyrene on this line, next line clones
      Material  Polystyren 
      Material  Ecal_scint   isvol=1
      Medium    Ecal_active  isvol=1
c--
      Attribute ESCI   seen=1   colo=7   fill=0    lsty=1     ! LIGHTBLUE
c--   local z goes along the radius, y is the thickness
      Shape     TRD1   dy=esec_scint/2,
                dz=(rtop-rbot)/2-emcs_gapcel
c--
c--
      Call ecal_set_cuts( ag_imed, 'detector' )
c--
c--
      HITS ESCI   BIRK:0:(0,10)  
c--
c--
EndBlock







c----------------------------------------------------------------- Block ERAD --
c--
Block ERAD                   is the lead radiator with stainless steel cladding
c--
c-- Creates:
c-- + ELED -- the business end of the calorimeter...
c--
      Material STEEL
c--
      Attribute ERAD   seen=1  colo=6 fill=1    lsty=1        ! VIOLET
      Shape     CONS  dz=radiator/2, 
                rmn1=(current)*tan_low-dd,
                rmn2=(current+cell)*tan_low-dd,
                rmx1=(current)*tan_upp+dup,
                rmx2=(current+radiator)*tan_upp+dup
c--
      Create AND Position ELED     
c--
EndBlock
c-------------------------------------------------------------------------






c----------------------------------------------------------------- Block ELED --
c--
Block ELED                                              is a lead absorber plate
c--
c--
      Material  PbAlloy
      Medium    Ecal_lead
      Attribute ELED   seen=1 colo=4 fill=1 lsty=1
c--
      Shape     TUBS  dz=emcs_pbplate/2,  
                rmin=(current)*tan_low,
                rmax=(current+emcs_pbplate)*tan_upp,
c--
      Call ecal_set_cuts( ag_imed, 'radiator' )
c--
EndBlock
c--
c-----------------------------------------------------------------------------






c----------------------------------------------------------------- Block EFLP --
c--
Block EFLP                 is the aluminum (aluminium) front plate of the endcap
c--
      Material  ALUMINIUM
      Attribute EFLP   seen=1  colo=3  fill=1   lsty=1                   ! GREEN
      Shape     CONS   dz=emcs_front/2,
                rmn1=68.813 rmn2=68.813,
                rmx1=(zslice)*tan_upp+dup,
                rmx2=(zslice+zwidth)*tan_upp+dup,
                phi1=emcs_phimin phi2=emcs_phimax
c--
EndBlock
c-----------------------------------------------------------------------------








c----------------------------------------------------------------- Block EALP --
c--
Block EALP                       is the thin aluminium plate in calorimeter cell
c--
c--
      Material  Aluminium
      Attribute EALP seen=1 colo=1 lsty=1
c--
c--
      Shape     TRD1   dy=emcs_alincell/2  dz=(rtop-rbot)/2
c--
c--   Thin aluminium plate in each calorimeter cell.  The energy-loss
c--   fluctuations are restricted in this thin material.
c--
      CALL GsTPar (AG_IMED,'CUTGAM',0.00001)
      CALL GsTPar (AG_IMED,'CUTELE',0.00001)
      CALL GsTPar (AG_IMED,'LOSS',1.)
      CALL GsTPar (AG_IMED,'STRA',1.)
c--
EndBlock





c----------------------------------------------------------------- Block ESPL --
c--
Block ESPL                         is the logical volume containing an SMD plane
c--
      Material  Air 
      Attribute ESPL   seen=1   colo=4   lsty=4
      Shape     TUBS   dz=emcs_gapsmd/3/2,
                rmin=section*tan_low-1.526,
                rmax=(section-secwid/2)*tan_upp+dup,
                phi1=emcs_phimin phi2=emcs_phimax
c--
      USE EMXG version=1
      msecwd = (emxg_sapex+emxg_f4)/2		
c--   ^^^^^^ what is this used for?  --jw
c--          looks like the g10 layer which we are retiring
c--
c--   loop over the six sectors in an endcap half wheel
c--	
      DO isec=1,6
         cut=1
         d3 = 75 - (isec-1)*30
c--
         IF (exse_sectype(isec)=0|(emcg_fillmode=1&(isec=6|isec=1))) THEN
            cut = 0
c        -- come back and build spacers --
	     ElseIF (exse_sectype(isec) = 1) then !   v
c--
            Create and Position EXSG alphaz=d3 ncopy=isec              kOnly='MANY'
c--
	     ElseIF (exse_sectype(isec) = 2) then               !   u
c--
            Create and Position EXSG alphaz=d3 ort=x-y-z ncopy=isec    kOnly='MANY'
c--
	     ElseIF (exse_sectype(isec) = 3) then               !  cut v
c--
            cut=2
            Create and Position EXSG alphaz=d3 ncopy=isec              kOnly='MANY'
c--
	     ElseIF (exse_sectype(isec) = 4) then               !  cut u 
c--
            cut=2
            Create and Position EXSG alphaz=d3 ort=x-y-z ncopy=isec    kOnly='MANY'
c--
         EndIF
c--
      EndDO! loop over six sectors in eemc half wheel
c--
c--   repeat the loop and add in the spacer layers
c--
      DO isec=1,6
         d3=75 - (isec-1)*30
         IF (exse_sectype(isec)=0|(emcg_fillmode=1&(isec=6|isec=1))) then                                                                               
            cut = 0         
c--                                                                 Do not kill neighbors
            Create and Position EXSG alphaz=d3 ncopy=isec           kOnly='MANY'
c           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c           potential side effect... may screw up the mapping
c           of the smd strips into the tables?
c
         EndIF
      EndDO
c--
EndBlock











c----------------------------------------------------------------- Block EXSG --
c--
Block EXSG   Is another logical volume... this one acutally creates the planes
c--
c-- Creates:
c-- + EHMS -- shower max strips
c-- + EFLS -- front cover for SMD planes
c-- + EBLS -- back cover for SMD planes
c--
      Attribute EXSG   seen=1   colo=7   serial=cut   lsty=3   ! MEH
      Material  Air
c$$$      Medium    TMED_EXSG stemax=0.01
      Shape     TUBS   dz=emcs_gapsmd/3/2,
                rmin=section*tan_low-1.526,
                rmax=(section-secwid/2)*tan_upp+dup,
                phi1=emcs_phimin/emcs_nsupsec-5,
                phi2=emcs_phimax/emcs_nsupsec+5
c--
      rbot = emxg_rin
      rtop = emxg_rout
c--
c--   Code to handle smd spacers
c--
      IF ( cut .eq. 0 ) THEN
         Create and Position EXPS kONLY='MANY'
      ENDIF
c--
c--   Code to handle smd planes
c--
      IF (cut > 0) THEN
c--
c--     setup which plane we are utilizing
c--
        IF (cut = 1) THEN
           nstr = 288
        ELSE
           nstr = 285
        ENDIF

c--
c--    loop over all smd strips and place them w/in this smd plane
c--
    	DO istrip = 1,nstr
c--
          Call ecal_get_strip( section, cut, istrip, xc, yc, length )
c--
          IF (mod(istrip,2) != 0 ) THEN
             Create and Position EHMS  x=xc y=yc alphaz=-45 kOnly='ONLY'
             Create and Position EBLS  x=xc y=yc z=(+esmd_apex/2+esmd_back_layer/2) alphaz=-45 kOnly='ONLY'
          ELSE
             Create and Position EHMS  x=xc y=yc alphaz=-45 ort=x-y-z kOnly='ONLY'
             Create and Position EFLS  x=xc y=yc z=(-esmd_apex/2-esmd_front_layer/2) alphaz=-45 ort=x-y-z kOnly='ONLY'
          ENDIF
c--
          Prin1 istrip, xc, yc, length
            ( 'SMD Plane: strip=',I3,' xc=',F5.1,' yc=,'F5.1,' length=',F5.1 )
c--
        ENDDO
c--
      ENDIF
c--
c--
*     dcut exsg z 0 0 10 0.1 0.1
*     dcut exsg y 0 10 -50 0.7 0.7
c--
EndBlock
c--
c--
c-----------------------------------------------------------------------------








c----------------------------------------------------------------- Block EHMS --
c--
Block EHMS                                     defines the triangular SMD strips
c--
      Material  Ecal_scint
      Medium    Ecal_active isvol=1
      Attribute EHMS      seen=1    colo=2  serial=cut  lsty=1        ! red
c--
      Shape     TRD1 dx1=0 dx2=emxg_Sbase/2 dy=length/2 dz=emxg_Sapex/2
c--
      HITS EHMS     Birk:0:(0,10)  
c--
Endblock! EHMS
c-----------------------------------------------------------------------------




c---
c-- Several thin layers of material are applied to the front and back of the 
c-- SMD planes to provide structural support.  We combine these layers into
c-- a single effective volume, which is affixed to the base of the SMD
c-- strips.  As with the SMD strips, z along the depth, y is length
c--
c-- http://drupal.star.bnl.gov/STAR/system/files/SMD_module_stack.pdf
c--
c-- 1.19 mm G10
c-- 0.25 mm Fiberglass and epoxy
c-- 0.17 mm Aluminized mylar
c--
c-- Weight in mixture by mass = (depth)*(Area)
c--
c-- Weighted density is given by sum (density)_i * (depth)_i / sum (depth)_i
c--


c----------------------------------------------------------------- Block EFLS --
c--
Block EFLS               is the layer of material on the front of the SMD planes
c--
c--
      Component G10        A=18.017 Z=9.013 w=1.19*1.700/(1.19*1.700+0.25*1.530+0.17*1.390)
      Component Fiberglass A=19.103 Z=9.549 w=0.25*1.530/(1.19*1.700+0.25*1.530+0.17*1.390) 
      Component AlMylar    A=12.889 Z=6.465 w=0.17*1.390/(1.19*1.700+0.25*1.530+0.17*1.390) 
      Mixture   EFLS       dens=(1.19*1.7+0.25*1.53+0.17*1.39)/(1.19+0.25+0.17)

      Attribute EFLS seen=1 colo=22 lsty=1
      Shape     TRD1 dz=esmd_front_layer/2 dy=length/2 dx1=esmd_base/2 dx2=esmd_base/2 
c--
EndBlock! EFLS


c--
c-- see link above for documentation
c--
c-- 0.10 mm aluminized mylar
c-- 0.25 mm fiberglass and epoxy
c-- 1.50 mm WLS fiber router layer (polystyrene)
c-- 0.25 mm aluminum
c--


c----------------------------------------------------------------- Block EBLS --
c--
Block EBLS                is the layer of material on the back of the SMD planes
c--
      Component AlMylar    A=12.889 Z=6.465   w=0.10*1.390/(0.10*1.390+0.25*1.530+1.50*1.032+0.25*2.699)  
      Component Fiberglass A=19.103 Z=9.549   w=0.25*1.530/(0.10*1.390+0.25*1.530+1.50*1.032+0.25*2.699)  
      Component Polystyren A=11.154 Z=5.615   w=1.50*1.032/(0.10*1.390+0.25*1.530+1.50*1.032+0.25*2.699)  
      Component Al         A=28.08  Z=14.00   w=0.25*2.699/(0.10*1.390+0.25*1.530+1.50*1.032+0.25*2.699)  
      Mixture   EBLS       dens=(0.10*1.390+0.25*1.530+1.50*1.032+0.25*2.699)/(0.10+0.25+1.50+0.25)
c--
      Attribute EFLS seen=1 colo=22 lsty=1
      Shape     TRD1 dz=esmd_back_layer/2 dy=length/2 dx1=esmd_base/2 dx2=esmd_base/2 
c--
EndBlock! EFLS






c----------------------------------------------------------------- Block EXPS --
c--
Block EXPS                   is the plastic spacer in the shower maximum section
c--
c--   Simple implementation of the spacer in the shwoer maximum detector.
c--   This implmentation neglects the ears and the source tube.
c--
c--      n.b.  There may be a side effect in the way this gets created...
c--            it could overwrite SMD strips which extend into this plane.
c--            Probably need to go with a different approach here.
c--
c--   Scanned Drawings:
c--   + http://drupal.star.bnl.gov/STAR/system/files/SMD_spacer_drawings.pdf
c--
c--     thickness is 1.2 cm, as given by detail B and C... but I do not want
c--     to do alot of complicated recoding of the geometry.  So I am limiting
c--     it to be the same width as a normal SMD volume.
c--
      Material  PVC_Spacer
      Attribute EXPS   seen=1   colo=6    lsty=1    lwid=2
c--
c--   Spacer layers are extended by +/- 5 degrees into the adjacent sectors.
c--   The kONLY='Many' option at creation time should mean that conflicts
c--   in volume will be resolved in favor of the SMD strips.
c--
      Shape   TUBS   dz=esmd_apex/2,
              rmin=(section)*Tan_Low-1.526,
              rmax=(section+msecwd)*Tan_Upp,
              phi1=emcs_PhiMin/emcs_Nsupsec,
              phi2=emcs_PhiMax/emcs_Nsupsec
c--
EndBlock
c--
END
c----------------------------------------------------------------- End Module --












c------------------------------------------------------------------------------
c--                                           Helper subroutines and functions

c------------------------------------------------------------------------------
c--
c-- Subroutine ecal_set_cuts(id, medium)
c--
c--   id -- integer ID idetifying the current tracking medium
c--   medium -- character switch selecting the type of cuts to be
c--             used in this tracking volumne
c--
c------------------------------------------------------------------------------
        Subroutine ecal_set_cuts(id,medium)         
c--
          Implicit NONE
          Integer    id
          Character  medium*(*)
c--
          Integer radiator, megatile, detector
          Save    radiator, megatile, detector
c--
          IF ( medium == 'print' ) THEN
c--
            Write (*,400) radiator
            Write (*,401) megatile
            Write (*,402) detector
c--
            Call GpTMed( +radiator )
            Call GpTMed( -megatile )
            Call GpTMed( -detector )
c--
            Return
c--
          ENDIF
c--
  400     Format('radiator cuts set for ag_imed=',I3)
  401     Format('megatile cuts set for ag_imed=',I3)
  402     Format('detector cuts set for ag_imed=',I3)
c--

c--
c--       Setup common cuts for neutrons, hadrons and muons
c--
          Call GsTPar (id,'CUTNEU',0.001)
          Call GsTPar (id,'CUTHAD',0.001)
          Call GsTPar (id,'CUTMUO',0.001)
c--
          IF ( medium == 'radiator' ) THEN
               Call GsTPar (id,'CUTGAM',0.00008)
               Call GsTPar (id,'CUTELE',0.001)
               Call GsTPar (id,'BCUTE' ,0.0001)
               radiator = id
C--       
c--
          ELSEIF ( medium == 'megatile' ) THEN
               Call GsTPar (id,'CUTGAM',0.00008)
               Call GsTPar (id,'CUTELE',0.001)
               Call GsTPar (id,'BCUTE' ,0.0001)
               megatile = id
c--
c--
          ELSEIF ( medium == 'detector' ) THEN
               Call GsTPar (id,'CUTGAM',0.00008)
               Call GsTPar (id,'CUTELE',0.001)
               Call GsTPar (id,'BCUTE' ,0.0001)
c--
               Call GsTPar (id,'BIRK1',1.)
               Call GsTPar (id,'BIRK2',0.0130)
               Call GsTPar (id,'BIRK3',9.6E-6)
               detector = id
c--
c--
           ELSE
               Call GsTPar (id,'CUTGAM',0.00008)
               Call GsTPar (id,'CUTELE',0.001)
               Call GsTPar (id,'BCUTE' ,0.0001)
               Write(*,300) 
  300          Format('Warning: unknown medium[',A20,'] in ecal_set_cuts')
c--
c--
          ENDIF
c--
          Return
         
        End
c-----------------------------------------------------------------------
c-----------------------------------------------------------------------
c--
c--
        Subroutine ecal_get_strip( section, cut, istrip, xcenter, ycenter, length )
c--                                in       in   in      out      out      out
          Implicit NONE
c--
          Real     section
          Integer  cut         ! 0=no plane  1=normal plane  2=cut plane
          Integer  istrip      ! strip index
          Real     xcenter     ! output
          Real     ycenter     ! output
          Real     length      ! output
c--
          Integer  nstrips     
          Real     rdel        ! shift in radius (?)
          Real     rth
          Real     ddn, ddup   
          Real     megatile, p
c--
          Real     xleft, yleft, xright, yright 
          Real     dxy, xx, yy
          Real     sqrt2, sqrt3
c--
c--       SMD data copied from data structures above
c--
          Real base, apex
          Data base, apex / 1.0, 0.7/ !cm
c--
          Real Rbot, Rtop
          Data Rbot, Rtop / 77.41, 213.922 /
c--
          Real EtaMin, EtaMax
          Data EtaMin, EtaMax / 1.086, 2.000 /
c--
          Real tan_theta_min, tan_theta_max
c--
          Real tanf, eta
          tanf(eta) = tan(2*atan(exp(-eta)))
c--
          tan_theta_min = tanf( EtaMax )
          tan_theta_max = tanf( EtaMin )
c--
          IF (cut    = 1) THEN                                                                                                       
             rdel    = 3.938                                                                                                         
             nstrips = 288                                                                                                           
          ELSE                                                                                                                    
             rdel    = -.475                                                                                                         
             nstrips = 285                                                                                                           
          ENDIF               
c--
          xcenter=0. 
          ycenter=0.
          length=0.
c--
          IF ( cut = 0 ) THEN
          RETURN
          ENDIF
c--
          sqrt2 = sqrt(2.0)
          sqrt3 = sqrt(3.0)
c--
          rth = .53*rdel        ! .53 --- tentatavily    jcw-- wtf?                                                               
          ddn = sqrt(3.0)*1.713 + rdel                                                                                                  
          ddup = .5*1.846 + 1.713             
          megatile = base + .01
c--
          p = .5*(istrip-1)*megatile + 41.3655  

          IF (p <= (.5*rbot*sqrt3 + rth)) THEN
          dxy     = 1.9375*sqrt2
          xleft  = .5*sqrt2*p*(sqrt3 + 1.) - dxy
          yleft  = .5*sqrt2*p*(sqrt3 - 1.) - dxy 
          yright = .5*sqrt2*(sqrt( rbot*rbot - p*p) - p)
          xright = sqrt2*p + yright
          ELSEIF ((.5*rbot*sqrt3  + rth) < p <= (.5*rtop + 1.5)) THEN
          dxy = 1.9375*sqrt2
          xleft = .5*sqrt2*p*(sqrt3 + 1.) - dxy
          yleft = .5*sqrt2*p*(sqrt3 - 1.) - dxy 
          dxy = rdel*sqrt2/sqrt3
          yright = .5*sqrt2*p*(1.- 1./sqrt3)
          xright = sqrt2*p - yright - dxy
          yright = -yright - dxy
          ELSEIF (p > (.5*rtop +1.5)) THEN
          yleft = (sqrt(rtop*rtop - p*p) - p)/sqrt2
          xleft = sqrt2*p + yleft
          dxy = rdel*sqrt2/sqrt3
          yright = .5*sqrt2*p*(1.- 1./sqrt3)
          xright = sqrt2*p - yright - dxy
          yright = -yright - dxy
          dxy = 0. 
c--
          IF ((.5*sqrt3*160.- ddn) < p <= (.5*sqrt3*160.+ ddup) ) THEN
          xcenter = .5*(sqrt3*160.+1.846)
          ycenter = xcenter - .5*sqrt3*1.713
          IF (p > ycenter) THEN
              dxy = .5*sqrt2*(2/sqrt3*rdel + .5*sqrt3*1.846 +_
              sqrt(1.713*1.713 - (p-xcenter)*(p-xcenter)))
          ELSE
              dxy = sqrt2/sqrt3*(p - .5*sqrt3* 160. + ddn)
          ENDIF
          ELSEIF ((.5*sqrt3*195.- ddn) < p <= (.5*sqrt3*195. + ddup) ) THEN
          xcenter = .5*(sqrt3*195.+1.846)
          ycenter = xcenter - .5*sqrt3*1.713
          IF (p > ycenter) THEN
             dxy = .5*sqrt2*(2/sqrt3*rdel + .5*sqrt3*1.846 +_
             sqrt(1.713*1.713 - (p-xcenter)*(p-xcenter)))
          ELSE
             dxy = sqrt2/sqrt3*(p - .5*sqrt3*195. + ddn)
          ENDIF
          ENDIF
             xright = xright + dxy
             yright = yright + dxy
          ENDIF

          dxy     =  section*tan_theta_max - rtop                                                                                                            
          xcenter = .5*(xright+xleft) + dxy                                                                                                            
          ycenter = .5*(yright+yleft)                                                                                                                  
          xx = .5*sqrt2*(xleft+yleft)                                                                                                               
          yy = .5*sqrt2*(xright+yright)                                                                                                             
          length = xx-yy                              
c--
c--          
          Return
c--
        End! Subroutine smd_strip
c--
* ----------------------------------------------------------------------------
* ECAL nice views: dcut ecvo x 1       10 -5  .5 .1
*                  draw emdi 105 0 160  2 13  .2 .1
*                  draw emdi 120 180 150  1 14  .12 .12
* ---------------------------------------------------------------------------



c-- examples of HITS
*      HITS EHMS     Birk:0:(0,10)  
*                     xx:16:SH(-250,250)  yy:16:(-250,250)  zz:16:(-350,350),
*                     px:16:(-100,100)    py:16:(-100,100)  pz:16:(-100,100),
*                     Slen:16:(0,1.e4)    Tof:16:(0,1.e-6)  Step:16:(0,100),
*                     none:16:            Eloss:0:(0,10)
*