Skip to content

Commit

Permalink
move changes to new ALLEGRO version
Browse files Browse the repository at this point in the history
  • Loading branch information
giovannimarchiori authored and BrieucF committed Nov 8, 2024
1 parent cb1da09 commit 4a90833
Show file tree
Hide file tree
Showing 20 changed files with 1,384 additions and 0 deletions.
122 changes: 122 additions & 0 deletions FCCee/ALLEGRO/compact/ALLEGRO_o1_v04/ALLEGRO_o1_v04.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">

<info name="ALLEGRO_o1_v04 Master"
title="ALLEGRO_o1_v04 Master"
author="Giovanni Marchiori"
url="no"
status="development"
version="1.0">
<comment>
Master compact file describing the latest developments of the FCCee ALLEGRO detector concept. With respect to v02 it features an ECal barrel with 11 layers and cell corners projective along phi
</comment>
</info>

<include ref="${DD4hepINSTALL}/DDDetectors/compact/detector_types.xml" />

<includes>
<gdmlFile ref="elements.xml"/>
<gdmlFile ref="materials.xml"/>
</includes>

<define>
<constant name="world_size" value="25*m"/>
<constant name="world_x" value="world_size"/>
<constant name="world_y" value="world_size"/>
<constant name="world_z" value="world_size"/>
</define>

<include ref="./DectDimensions.xml" />

<!-- shape based model of the beam pipe -->
<include ref="../../../MDI/compact/MDI_o1_v00/Beampipe_o4_v05.xml" />
<include ref="../../../MDI/compact/MDI_o1_v00/BeamInstrumentation_o1_v01.xml" />

<!-- In order to use the CAD beampipe, build k4geo with the following CMake option:
cmake -D INSTALL_BEAMPIPE_STL_FILES=ON which will download the files needed -->
<!-- engineered CAD model of the beam pipe -->
<!-- <include ref="../../../MDI/compact/MDI_o1_v01/Beampipe_CADimport_o1_v02.xml" /> -->
<!-- <include ref="../../../MDI/compact/MDI_o1_v01/BeamInstrumentation_o1_v01.xml"/> -->

<include ref="LumiCal.xml"/>
<include ref="VertexComplete_IDEA_o1_v03.xml"/> <!-- symbolic link to ../../../IDEA/compact/IDEA_o1_v03/VertexComplete_IDEA_o1_v03.xml -->
<include ref="DriftChamber_o1_v02.xml"/> <!-- symbolic link to ../../../IDEA/compact/IDEA_o1_v03/DriftChamber_o1_v02.xml -->
<include ref="SiliconWrapper_o1_v03.xml"/> <!-- symbolic link to ../../../IDEA/compact/IDEA_o1_v03/SiliconWrapper_o1_v03.xml -->
<include ref="ECalBarrel_thetamodulemerged.xml"/> <!-- if you remove the ECalBarrel, you also have to remove or update the "GlobalSolenoid" field (it depends on ECAL dimensions) -->
<include ref="HCalBarrel_TileCal_v02.xml"/>
<include ref="ECalEndcaps_Turbine.xml"/>
<include ref="HCalEndcaps_ThreeParts_TileCal_v02.xml"/>
<include ref="MuonTagger.xml"/>

<fields>
<!-- FIXME this is a place holder to get a reasonable magnetic field, it should be a real MAP obtained from FEM tools taking into account HCAL return yoke -->
<!-- The z extent should also accomodate space for the feedthroughs, need input from R&D and decisions on cold/warm electronics -->
<field name="GlobalSolenoid" type="solenoid"
inner_field="SolenoidField"
outer_field="-1.0*tesla"
zmax="EMBarrel_dz"
outer_radius="BarCryoECal_rmax-CryoBarrelBackWarm-CryoBarrelBackCold">
</field>


<!-- MDI magnetic fields -->
<!-- Important for background studies -->

<field name="CompensatingSolenoidZplus" type="solenoid"
inner_field="-SolenoidField -SolenoidField * QD0_min_z / ( QD0_min_z - CompSol_min_z)"
outer_field="0*tesla"
zmax="QD0_min_z"
zmin="CompSol_min_z"
outer_radius="20*cm">
</field>

<field name="CompensatingSolenoidZminus" type="solenoid"
inner_field="-SolenoidField -SolenoidField * QD0_min_z / ( QD0_min_z - CompSol_min_z)"
outer_field="0*tesla"
zmin="-QD0_min_z"
zmax="-CompSol_min_z"
outer_radius="20*cm">
</field>

<!-- FFQ fields at Z pole, V23) -->
<!--
<field name="QC1L1_field_ED" type="MultipoleMagnet" Z="0.0*tesla">
<position y="0*cm" x="(QC1L1_len/2. + QC1L1_start)*sin(CrossingAngle/2.)" z="(QC1L1_len/2. + QC1L1_start)*cos(CrossingAngle/2.)"/>
<rotation x="0" y="CrossingAngle/2." z="0.0"/>
<coefficient coefficient="0*tesla"/>
<coefficient coefficient="(-1)*(45.6)*(-0.273)/0.3*tesla/m"/>
<shape type="Tube" rmin="0.*cm" rmax="QC1_rmin" dz="QC1L1_len/2." />
</field>
<field name="QC1L1_field_EU" type="MultipoleMagnet" Z="0.0*tesla">
<position y="0*cm" x="-(QC1L1_len/2. + QC1L1_start)*sin(CrossingAngle/2.)" z="-(QC1L1_len/2. + QC1L1_start)*cos(CrossingAngle/2.)"/>
<rotation x="0" y="CrossingAngle/2." z="0.0"/>
<coefficient coefficient="0*tesla"/>
<coefficient coefficient="(-1)*(45.6)*(-0.273)/0.3*tesla/m"/>
<shape type="Tube" rmin="0.*cm" rmax="QC1_rmin" dz="QC1L1_len/2." />
</field>
<field name="QC1L1_field_PD" type="MultipoleMagnet" Z="0.0*tesla">
<position y="0*cm" x="(QC1L1_len/2. + QC1L1_start)*sin(CrossingAngle/2.)" z="-(QC1L1_len/2. + QC1L1_start)*cos(CrossingAngle/2.)"/>
<rotation x="0" y="-CrossingAngle/2." z="0.0"/>
<coefficient coefficient="0*tesla"/>
<coefficient coefficient="(+1)*(45.6)*(-0.273)/0.3*tesla/m"/>
<shape type="Tube" rmin="0.*cm" rmax="QC1_rmin" dz="QC1L1_len/2." />
</field>
<field name="QC1L1_field_PU" type="MultipoleMagnet" Z="0.0*tesla">
<position y="0*cm" x="-(QC1L1_len/2. + QC1L1_start)*sin(CrossingAngle/2.)" z="(QC1L1_len/2. + QC1L1_start)*cos(CrossingAngle/2.)"/>
<rotation x="0" y="-CrossingAngle/2.+pi" z="0.0"/>
<coefficient coefficient="0*tesla"/>
<coefficient coefficient="(-1)*(45.6)*(-0.273)/0.3*tesla/m"/>
<shape type="Tube" rmin="0.*cm" rmax="QC1_rmin" dz="QC1L1_len/2." />
</field>
-->

<!--End of MDI magnetic fields -->

</fields>

</lccdd>
1 change: 1 addition & 0 deletions FCCee/ALLEGRO/compact/ALLEGRO_o1_v04/DectDimensions.xml
1 change: 1 addition & 0 deletions FCCee/ALLEGRO/compact/ALLEGRO_o1_v04/DectEmptyMaster.xml
165 changes: 165 additions & 0 deletions FCCee/ALLEGRO/compact/ALLEGRO_o1_v04/ECalBarrel_thetamodulemerged.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
<?xml version="1.0" encoding="UTF-8"?>
<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">

<info name="ALLEGRO_ECalBarrel"
title="Settings for FCCee ALLEGRO Inclined ECal Barrel Calorimeter"
author="M.Aleksa,J.Faltova,A.Zaborowska,V. Volkl,G.Marchiori"
url="no"
status="development"
version="1.0">
<comment>
Settings for the inclined EM calorimeter.
The barrel is filled with liquid argon. Passive material includes lead in the middle and steal on the outside, glued together.
Passive plates are inclined by a certain angle from the radial direction.
In between of two passive plates there is a readout.
Space between the plate and readout is of trapezoidal shape and filled with liquid argon.
Definition of sizes, visualization settings, readout and longitudinal segmentation are specified.
The geometrical parameters (tilt and plane lengths) are adjusted, based on EMBarrel_rmin/max, to yield 1536 modules and cell corners aligned in phi
</comment>
</info>

<define>
<!-- Inclination angle of the lead plates -->
<constant name="InclinationAngle" value="50.18*degree"/>
<!-- thickness of active volume between two absorber plates at barrel Rmin, measured perpendicular to the readout plate -->
<!--constant name="Sensitive_thickness" value="1.239749*2*mm"/-->
<constant name="Sensitive_thickness" value="1.246*2*mm"/>

<!-- Air margin, thicknesses of cryostat and LAr bath -->
<constant name="AirMarginThickness" value="49*mm"/> <!-- Space holder for air gap between cryostat vessels -->

<constant name="CryoBarrelFrontWarm" value="10*mm"/> <!-- Al solid corresponding to 0.11 X0 -->
<constant name="CryoBarrelFrontCold" value="3.8*mm"/> <!-- Al solid equivalent of 0.043 X0 sandwich CFRP -->
<constant name="CryoBarrelFront" value="CryoBarrelFrontWarm+CryoBarrelFrontCold"/>

<constant name="CryoBarrelBackCold" value="30*mm"/> <!-- Al solid corresponding to 0.34 X0 -->
<constant name="CryoBarrelBackWarm" value="2.7*mm"/> <!-- Al solid equivalent of 0.03 X0 sandwich CFRP -->
<constant name="SolenoidBarrel" value="70*mm"/> <!-- Al solenoid with thickness of 0.8 X0 -->
<constant name="CryoBarrelBack" value="CryoBarrelBackWarm+SolenoidBarrel+CryoBarrelBackCold"/>

<constant name="CryoBarrelSideWarm" value="30*mm"/>
<constant name="CryoBarrelSideCold" value="3.8*mm"/>
<constant name="CryoBarrelSide" value="CryoBarrelSideWarm+CryoBarrelSideCold"/>

<constant name="NLiqBathThicknessFront" value="10*mm"/>
<constant name="NLiqBathThicknessBack" value="40*mm"/>

<!-- air margin around calorimeter -->
<constant name="BarCryoECal_rmin" value="BarECal_rmin+AirMarginThickness"/>
<constant name="BarCryoECal_rmax" value="BarECal_rmax-AirMarginThickness"/>
<constant name="BarCryoECal_dz" value="BarECal_dz"/>
<!-- calorimeter active volume -->
<constant name="EMBarrel_rmin" value="BarCryoECal_rmin+CryoBarrelFront+NLiqBathThicknessFront"/>
<constant name="EMBarrel_rmax" value="BarCryoECal_rmax-CryoBarrelBack-NLiqBathThicknessBack"/>
<constant name="EMBarrel_dz" value="BarECal_dz-CryoBarrelSide"/>
<!-- Bath with margin for safe inclination -->
<constant name="safeMargin" value="3*mm"/>
<constant name="Bath_rmin" value="EMBarrel_rmin - safeMargin"/>
<constant name="Bath_rmax" value="EMBarrel_rmax + safeMargin"/>

<!-- passive layer consists of lead in the middle and steel on the outside, glued -->
<!-- When employing trapezoidal planes Pb_thickness corresponds to the minimum thickness, i.e at the front of the calo -->
<constant name="Pb_thickness" value="1.80*mm"/>
<constant name="planeLength" value="-EMBarrel_rmin*cos(InclinationAngle) + sqrt(EMBarrel_rmax*EMBarrel_rmax - EMBarrel_rmin*EMBarrel_rmin*sin(InclinationAngle)*sin(InclinationAngle))"/>
<constant name="ECalBarrelNumPlanes" value="1536"/>
<constant name="ECalBarrelNumLayers" value="11"/>
<constant name="phi" value="asin(planeLength / EMBarrel_rmax * sin(InclinationAngle))"/>
<!-- use a different value for Pb_thickness_max when employing trapezoidal planes -->
<!-- approximate constant sampling fraction: make the absorber grow linearly with the radius,
taking into account the angular projection effect -->
<!-- <constant name="Pb_thickness_max" value="1.3 * Pb_thickness * EMBarrel_rmax/EMBarrel_rmin *
cos(InclinationAngle - phi) / cos(InclinationAngle)" />-->
<constant name="Pb_thickness_max" value="Pb_thickness"/>
<!-- total amount of steel in one passive plate: it is divided for the outside layer on top and bottom -->
<constant name="Steel_thickness" value="0.1*mm"/>
<!-- total amount of glue in one passive plate: it is divided for the outside layer on top and bottom -->
<constant name="Glue_thickness" value="0.1*mm"/>
<!-- readout in between two absorber plates -->
<constant name="readout_thickness" value="1.2*mm"/>
</define>

<display>
<vis name="ecal_envelope" r="0.1" g="0.2" b="0.6" alpha="1" showDaughers="false" visible="true"/>
</display>

<readouts>
<!-- readout for the simulation, with the baseline merging: 2x along the module direction in each layer; 4x along theta in each layer except layer 1 -->
<!-- the lists mergedCells_Theta and mergedModules define the number of cells to group together in the theta and module direction as a function of the layer -->
<readout name="ECalBarrelModuleThetaMerged">
<segmentation type="FCCSWGridModuleThetaMerged_k4geo" nModules="ECalBarrelNumPlanes" mergedCells_Theta="4 1 4 4 4 4 4 4 4 4 4" mergedModules="2 2 2 2 2 2 2 2 2 2 2" grid_size_theta="0.009817477/4" offset_theta="0.5902785"/>
<id>system:4,cryo:1,type:3,subtype:3,layer:8,module:11,theta:10</id>
</readout>

<!-- example of adding a second readout for the reconstruction, to compare the two -->
<readout name="ECalBarrelModuleThetaMerged2">
<segmentation type="FCCSWGridModuleThetaMerged_k4geo" nModules="ECalBarrelNumPlanes" mergedCells_Theta="2 4 2 1 2 1 2 2 1 1 1" mergedModules="2 1 1 2 2 1 1 1 2 2 1" grid_size_theta="0.009817477/4" offset_theta="0.5902785"/>
<id>system:4,cryo:1,type:3,subtype:3,layer:8,module:11,theta:10</id>
</readout>
</readouts>

<detectors>
<detector id="BarECal_id" name="ECalBarrel" type="ECalBarrel_NobleLiquid_InclinedTrapezoids_o1_v04" readout="ECalBarrelModuleThetaMerged">
<type_flags type=" DetType_CALORIMETER + DetType_ELECTROMAGNETIC + DetType_BARREL"/>
<sensitive type="SimpleCalorimeterSD"/>
<dimensions rmin="BarCryoECal_rmin" rmax="BarCryoECal_rmax" dz="BarCryoECal_dz" vis="ecal_envelope"/>
<cryostat name="ECAL_Cryo">
<material name="Aluminum"/>
<dimensions rmin1="BarCryoECal_rmin" rmin2="BarCryoECal_rmin+CryoBarrelFront" rmax1="BarCryoECal_rmax-CryoBarrelBack" rmax2="BarCryoECal_rmax" dz="BarCryoECal_dz"/>
<front sensitive="false"/> <!-- inner wall of the cryostat -->
<side sensitive="false"/> <!-- both sides of the cryostat -->
<back sensitive="false"/> <!-- outer wall of the cryostat -->
</cryostat>
<bath name="ECAL_bath">
<material name="LAr"/>
<dimensions rmin="Bath_rmin" rmax="Bath_rmax" dz="EMBarrel_dz"/>
</bath>
<calorimeter name="EM_barrel">
<!-- offset defines the numbering of the modules: module==0 for phi=0 direction -->
<dimensions rmin="EMBarrel_rmin" rmax="EMBarrel_rmax" dz="EMBarrel_dz" offset="-InclinationAngle"/>
<active thickness="Sensitive_thickness">
<material name="LAr"/>
<!-- overlap offset is a specific feature of the construction; do not change! -->
<!-- one volume for a gap on both side of the readout) -->
<overlap offset="0.5"/>
</active>
<passive>
<rotation angle="InclinationAngle"/> <!-- inclination angle -->
<inner thickness="Pb_thickness" sensitive="false"> <!-- thickness of inner part of the absorber, at Rmin, and whether its is active in layer 1 -->
<material name="G10"/> <!-- material of the inner part of the absorber, in the first layer of the calorimeter -->
</inner>
<innerMax thickness="Pb_thickness_max" sensitive="false"> <!-- thickness of the inner part of the absorber, at Rmax, and whether its is active in layers 2-N -->
<material name="Lead"/> <!-- material of the inner part of the absorber, in the other layers (2-N) of the calorimeter -->
</innerMax>
<glue thickness="Glue_thickness" sensitive="false">
<material name="lArCaloGlue"/>
</glue>
<outer thickness="Steel_thickness" sensitive="false">
<material name="lArCaloSteel"/>
</outer>
</passive>
<readout thickness="readout_thickness" sensitive="false">
<material name="PCB"/>
</readout>
<layers>
<!-- pcb electrode segmentation (length of each layer along the electrode direction) -->
<!-- calculated given calo Rmin and inclination angle to yield cell corners aligned -->
<!-- in rho-phi view, with constant number of crossings vs phi for projective particles -->
<!-- (2 crossings in L0 and 4 in L1-10 -->
<layer thickness="2.33596*cm" repeat="1"/>
<layer thickness="4.75685*cm" repeat="1"/>
<layer thickness="4.89843*cm" repeat="1"/>
<layer thickness="5.04000*cm" repeat="1"/>
<layer thickness="5.20989*cm" repeat="1"/>
<layer thickness="5.36562*cm" repeat="1"/>
<layer thickness="5.54966*cm" repeat="1"/>
<layer thickness="5.73371*cm" repeat="1"/>
<layer thickness="5.94607*cm" repeat="1"/>
<layer thickness="6.15843*cm" repeat="1"/>
<layer thickness="6.39910*cm" repeat="1"/>
</layers>
</calorimeter>
</detector>
</detectors>
</lccdd>
Loading

0 comments on commit 4a90833

Please sign in to comment.