<lccdd>

  <comment> Simplified All Silicon Tracker based on:
    https://github.com/reynier0611/g4lblvtx/blob/master/macros/auxiliary_studies/simplified_geometry/Fun4All_G4_simplified_v2.C
    With some added info on ITS3 chip from
    https://indico.bnl.gov/event/10677/contributions/45591/attachments/33204/53254/20210318-IR2%40EIC-SVT.pdf
    To be used as standin until we get more detailed specs from the working group on the tracker.
    Note that most details are replaced with 

    Note: initial implementation with hard-coded values,
          TODO: add parametrization
  </comment>

  <define>

    <constant name="VtxRadius1"                 value="3.3*cm"/>
    <constant name="VtxRadius2"                 value="5.7*cm"/>
    <constant name="VtxLength"                  value="30*cm"/>
    <constant name="VtxThickness"               value="0.05/100*9.37*cm"/>
    <constant name="VtxServiceThickness"        value="VtxThickness-ITS3Thickness"/>

    <constant name="TrkBarrelThickness"         value="0.55/100*9.37*cm"/>
    <constant name="TrkBarrelServiceThickness"  value="TrkBarrelThickness-ITS3Thickness"/>

    <constant name="TrkBarrel1Radius1"          value="21.0*cm"/>
    <constant name="TrkBarrel1Radius2"          value="22.68*cm"/>
    <constant name="TrkBarrel1Length1"          value="54.0*cm"/>
    <constant name="TrkBarrel1Length2"          value="60.0*cm"/>

    <constant name="TrkBarrel2Radius1"          value="39.3*cm"/>
    <constant name="TrkBarrel2Radius2"          value="43.23*cm"/>
    <constant name="TrkBarrel2Length1"          value="105.0*cm"/>
    <constant name="TrkBarrel2Length2"          value="114.0*cm"/>

    <constant name="TrkDiskThickness"           value="0.25/100*9.37*cm"/>
    <constant name="TrkDiskServiceThickness"    value="TrkDiskThickness-ITS3Thickness"/>
    <constant name="TrkNumOuterDisks"           value="3"/>
    <constant name="TrkInnerDisk1_z"            value="25.0*cm"/>
    <constant name="TrkInnerDisk2_z"            value="49.0*cm"/>
    <constant name="TrkOuterDisk_zmin"          value="73.0*cm"/>
    <constant name="TrkOuterDisk_zmax"          value="121.0*cm"/>
    <constant name="TrkOuterDisk_deltaz"        value="(TrkOuterDisk_zmax-TrkOuterDisk_zmin)/(TrkNumOuterDisks-1)" />

    <constant name="TrkInnerDisk1_rmin"         value="0.05025461*TrkInnerDisk1_z-0.180808*cm"/>
    <constant name="TrkInnerDisk2_rmin"         value="0.05025461*TrkInnerDisk2_z-0.180808*cm"/>
    <constant name="TrkOuterDisk_rmin"          value="3.18*cm"/>

    <constant name="TrkInnerDisk1_rmax"         value="18.5*TrkInnerDisk1_z/TrkInnerDisk1_z*cm"/>
    <constant name="TrkInnerDisk2_rmax"         value="18.5*TrkInnerDisk2_z/TrkInnerDisk1_z*cm"/>
    <constant name="TrkOuterDisk_rmax"          value="43.23*cm"/>
  </define>

  <limits>
  </limits>

  <regions>
  </regions>

  <display>
  </display>

  <detectors>
    <detector id="AllSiliconVtx_ID" name="AllSiliconVtx" type="refdet_CylinderTrackerBarrel" readout="ITS3Hits">
      <module name="Module1" vis="AnlGreen">
        <module_envelope rmin="VtxRadius1" thickness="VtxThickness" length="VtxLength" phi="360*degree" />
        <module_component rmin="VtxRadius1" thickness="ITS3Thickness" material="Silicon" name="ITS3" sensitive="true" />
        <module_component rmin="VtxRadius1 + ITS3Thickness" thickness="VtxServiceThickness" material="Silicon" name="VtxServices" />
      </module>
      <module name="Module2" vis="AnlGreen">
        <module_envelope rmin="VtxRadius2" thickness="VtxThickness" length="VtxLength" phi="360*degree" />
        <module_component rmin="VtxRadius2" thickness="ITS3Thickness" material="Silicon" name="ITS3" sensitive="true" />
        <module_component rmin="VtxRadius2 + ITS3Thickness" thickness="VtxServiceThickness" material="Silicon" name="VtxServices" />
      </module>
      <layer module="Module1" id="1" vis="AnlGreen">
        <barrel_envelope inner_r="VtxRadius1" outer_r="VtxRadius1 + VtxThickness" z_length="VtxLength" />
        <rphi_layout phi_tilt="0.0" nphi="1" phi0="0.0" rc="VtxRadius1" dr="0.0*mm" />
        <z_layout dr="0.0*mm" z0="0" nz="1" />
      </layer>
      <layer module="Module2" id="2" vis="AnlGreen">
        <barrel_envelope inner_r="VtxRadius2" outer_r="VtxRadius2 + VtxThickness" z_length="VtxLength" />
        <rphi_layout phi_tilt="0.0" nphi="1" phi0="0.0" rc="VtxRadius2" dr="0.0*mm" />
        <z_layout dr="0.0*mm" z0="0" nz="1" />
      </layer>
    </detector>

    <detector id="AllSiliconTrk1Assembly_ID" name="AllSiliconTrkAssembly1" type="DD4hep_SubdetectorAssembly" vis="AnlGreen">
      <composite name="AllSiliconTrkDisk1N" />
      <composite name="AllSiliconTrkDisk1P" />
      <composite name="AllSiliconBarrel1" />
    </detector>
    <detector id="AllSiliconTrkBarrel1_ID" name="AllSiliconTrkBarrel1" type="refdet_CylinderTrackerBarrel" readout="ITS3Hits">
      <module name="Module1" id="1" vis="AnlGreen">
        <module_envelope rmin="TrkBarrel1Radius1" thickness="TrkBarrelThickness" length="TrkBarrel1Length1" phi="360*degree" />
        <module_component rmin="TrkBarrel1Radius1" thickness="ITS3Thickness" material="Silicon" name="ITS3" sensitive="true" />
        <module_component rmin="TrkBarrel1Radius1 + ITS3Thickness" thickness="TrkBarrelServiceThickness" material="Silicon" name="TrkBarrel1Services" />
      </module>
      <module name="Module2" id="2" vis="AnlGreen">
        <module_envelope rmin="TrkBarrel1Radius2" thickness="TrkBarrelThickness" length="TrkBarrel1Length2" phi="360*degree" />
        <module_component rmin="TrkBarrel1Radius2" thickness="ITS3Thickness" material="Silicon" name="ITS3" sensitive="true" />
        <module_component rmin="TrkBarrel1Radius2 + ITS3Thickness" thickness="TrkBarrelServiceThickness" material="Silicon" name="TrkBarrel1Services" />
      </module>
      <layer module="Module1" id="1" vis="AnlGreen">
        <barrel_envelope inner_r="TrkBarrel1Radius1" outer_r="TrkBarrel1Radius1 + TrkBarrelThickness" z_length="TrkBarrel1Length1" />
        <rphi_layout phi_tilt="0.0" nphi="1" phi0="0.0" rc="TrkBarrel1Radius1" dr="0.0*mm" />
        <z_layout dr="0.0*mm" z0="0" nz="1" />
      </layer>
      <layer module="Module2" id="2" vis="AnlGreen">
        <barrel_envelope inner_r="TrkBarrel1Radius2" outer_r="TrkBarrel1Radius2 + TrkBarrelThickness" z_length="TrkBarrel1Length2" />
        <rphi_layout phi_tilt="0.0" nphi="1" phi0="0.0" rc="TrkBarrel1Radius2" dr="0.0*mm" />
        <z_layout dr="0.0*mm" z0="0" nz="1" />
      </layer>
    </detector>
    <detector id="AllSiliconTrkDisk1N_ID" name="AllSiliconTrkDisk1N" type="ref_DiskTracker" insideTrackingVolume="true" reflect="true" vis="kAnlGreen">
        <position x="0" y="0" z="0"/>
        <layer id="1" vis="AnlGreen"
          inner_z="TrkInnerDisk1_z"
          inner_r="TrkInnerDisk1_rmin"
          outer_r="TrkInnerDisk1_rmax">
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
    </detector>
    <detector id="AllSiliconTrkDisk1P_ID" name="AllSiliconTrkDisk1P" type="ref_DiskTracker" insideTrackingVolume="true" reflect="false" vis="kAnlGreen">
        <position x="0" y="0" z="0"/>
        <layer id="1" vis="AnlGreen"
          inner_z="TrkInnerDisk1_z"
          inner_r="TrkInnerDisk1_rmin"
          outer_r="TrkInnerDisk1_rmax">
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
    </detector>

    <detector id="AllSiliconTrk2Assembly_ID" name="AllSiliconTrkAssembly2" type="DD4hep_SubdetectorAssembly" vis="AnlGreen">
      <composite name="AllSiliconTrkDisk2N" />
      <composite name="AllSiliconTrkDisk2P" />
      <composite name="AllSiliconBarrel2" />
    </detector>
    <detector id="AllSiliconTrkBarrel2_ID" name="AllSiliconTrkBarrel2" type="refdet_CylinderTrackerBarrel" readout="ITS3Hits">
      <module name="Module1" id="1" vis="AnlGreen">
        <module_envelope rmin="TrkBarrel2Radius1" thickness="TrkBarrelThickness" length="TrkBarrel2Length1" phi="360*degree" />
        <module_component rmin="TrkBarrel2Radius1" thickness="ITS3Thickness" material="Silicon" name="ITS3" sensitive="true" />
        <module_component rmin="TrkBarrel2Radius1 + ITS3Thickness" thickness="TrkBarrelServiceThickness" material="Silicon" name="TrkBarrel2Services" />
      </module>
      <module name="Module2" id="2" vis="AnlGreen">
        <module_envelope rmin="TrkBarrel2Radius2" thickness="TrkBarrelThickness" length="TrkBarrel2Length2" phi="360*degree" />
        <module_component rmin="TrkBarrel2Radius2" thickness="ITS3Thickness" material="Silicon" name="ITS3" sensitive="true" />
        <module_component rmin="TrkBarrel2Radius2 + ITS3Thickness" thickness="TrkBarrelServiceThickness" material="Silicon" name="TrkBarrel2Services" />
      </module>
      <layer module="Module1" id="1" vis="AnlGreen">
        <barrel_envelope inner_r="TrkBarrel2Radius1" outer_r="TrkBarrel2Radius1 + TrkBarrelThickness" z_length="TrkBarrel2Length1" />
        <rphi_layout phi_tilt="0.0" nphi="1" phi0="0.0" rc="TrkBarrel2Radius1" dr="0.0*mm" />
        <z_layout dr="0.0*mm" z0="0" nz="1" />
      </layer>
      <layer module="Module2" id="2" vis="AnlGreen">
        <barrel_envelope inner_r="TrkBarrel2Radius2" outer_r="TrkBarrel2Radius2 + TrkBarrelThickness" z_length="TrkBarrel2Length2" />
        <rphi_layout phi_tilt="0.0" nphi="1" phi0="0.0" rc="TrkBarrel2Radius2" dr="0.0*mm" />
        <z_layout dr="0.0*mm" z0="0" nz="1" />
      </layer>
    </detector>
    <detector id="AllSiliconTrkDisk2N_ID" name="AllSiliconTrkDisk2N" type="ref_DiskTracker" insideTrackingVolume="true" reflect="true" vis="kAnlGreen">
        <position x="0" y="0" z="0"/>
        <layer id="1" vis="AnlGreen"
          inner_z="TrkInnerDisk2_z"
          inner_r="TrkInnerDisk2_rmin"
          outer_r="TrkInnerDisk2_rmax">
          <!--slice material="Silicon" thickness="ITS3Thickness" vis="AnlGreen" sensitive="true"/-->
          <!--slice material="Silicon" thickness="TrkDiskServiceThickness" vis="AnlGreen" /-->
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
    </detector>
    <detector id="AllSiliconTrkDisk2P_ID" name="AllSiliconTrkDisk2P" type="ref_DiskTracker" insideTrackingVolume="true" reflect="false" vis="kAnlGreen">
        <position x="0" y="0" z="0"/>
        <layer id="1" vis="AnlGreen"
          inner_z="TrkInnerDisk2_z"
          inner_r="TrkInnerDisk2_rmin"
          outer_r="TrkInnerDisk2_rmax">
          <!--slice material="Silicon" thickness="ITS3Thickness" vis="AnlGreen" sensitive="true"/-->
          <!--slice material="Silicon" thickness="TrkDiskServiceThickness" vis="AnlGreen" /-->
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
    </detector>
    <detector id="AllSiliconTrkOuterN_ID" name="AllSiliconTrkOuterN" type="ref_DiskTracker" insideTrackingVolume="true" reflect="true" vis="kAnlGreen">
        <position x="0" y="0" z="0"/>

        <layer id="1" vis="AnlGreen"
          inner_z="TrkOuterDisk_zmin"
          inner_r="TrkOuterDisk_rmin"
          outer_r="TrkOuterDisk_rmax">
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
        <layer id="2" vis="AnlGreen"
          inner_z="TrkOuterDisk_zmin + 1 * TrkOuterDisk_deltaz"
          inner_r="TrkOuterDisk_rmin"
          outer_r="TrkOuterDisk_rmax">
          <!--slice material="Silicon" thickness="ITS3Thickness" vis="AnlGreen" sensitive="true"/-->
          <!--slice material="Silicon" thickness="TrkDiskServiceThickness" vis="AnlGreen" /-->
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
        <layer id="3" vis="AnlGreen"
          inner_z="TrkOuterDisk_zmin + 2 * TrkOuterDisk_deltaz"
          inner_r="TrkOuterDisk_rmin"
          outer_r="TrkOuterDisk_rmax">
          <!--slice material="Silicon" thickness="ITS3Thickness" vis="AnlGreen" sensitive="true"/-->
          <!--slice material="Silicon" thickness="TrkDiskServiceThickness" vis="AnlGreen" /-->
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
    </detector>
    <detector id="AllSiliconTrkOuterP_ID" name="AllSiliconTrkOuterP" type="ref_DiskTracker" insideTrackingVolume="true" reflect="false" vis="kAnlGreen">
        <position x="0" y="0" z="0"/>
        <layer id="1" vis="AnlGreen"
          inner_z="TrkOuterDisk_zmin"
          inner_r="TrkOuterDisk_rmin"
          outer_r="TrkOuterDisk_rmax">
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
        <layer id="2" vis="AnlGreen"
          inner_z="TrkOuterDisk_zmin + 1 * TrkOuterDisk_deltaz"
          inner_r="TrkOuterDisk_rmin"
          outer_r="TrkOuterDisk_rmax">
          <!--slice material="Silicon" thickness="ITS3Thickness" vis="AnlGreen" sensitive="true"/-->
          <!--slice material="Silicon" thickness="TrkDiskServiceThickness" vis="AnlGreen" /-->
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
        <layer id="3" vis="AnlGreen"
          inner_z="TrkOuterDisk_zmin + 2 * TrkOuterDisk_deltaz"
          inner_r="TrkOuterDisk_rmin"
          outer_r="TrkOuterDisk_rmax">
          <!--slice material="Silicon" thickness="ITS3Thickness" vis="AnlGreen" sensitive="true"/-->
          <!--slice material="Silicon" thickness="TrkDiskServiceThickness" vis="AnlGreen" /-->
          <slice material="Silicon" thickness="TrkDiskThickness" vis="AnlGreen" />
        </layer>
      </detector>
    </detectors>

  <readouts>
    <readout name="ITS3Hits">
      <segmentation type="CartesianGridXY" grid_size_x="0.010*mm" grid_size_y="0.010*mm" />
      <id>system:8,barrel:2,layer:4,module:7,sensor:2,x:30:-17,y:-17</id>  
    </readout>
  </readouts>

  <plugins>
  </plugins>

  <fields>
  </fields>
</lccdd>