diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f542de902dab315afd91f6b6c5e0413dd005bd50..804c834b6a373d8c557c38150ba6cf537a1312c3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,6 +12,7 @@ default: dotenv: juggler.env before_script: - git clone https://eicweb.phy.anl.gov/EIC/NPDet.git + #- git clone https://eicweb.phy.anl.gov/EIC/NPDet.git && mkdir NPDet/build && cd NPDet/build && cmake ../. -DCMAKE_INSTALL_PREFIX=/usr/local && make -j20 install && cd ../.. - git clone https://eicweb.phy.anl.gov/EIC/detectors/topside.git && mkdir topside/build && cd topside/build && cmake ../. -DCMAKE_INSTALL_PREFIX=/usr/local && make -j20 install && cd ../.. - git clone https://eicweb.phy.anl.gov/EIC/detectors/accelerator.git && cd topside && ln -s ../accelerator/eic && cd ../. diff --git a/calorimeters/CentralBarrel_AMEGOX.xml b/calorimeters/CentralBarrel_AMEGOX.xml index 708ce6d8b4f46d2b2213d10d415cb2d889ec0c4f..ba8d8534cfd8253e36fed819421e7c350a053f03 100644 --- a/calorimeters/CentralBarrel_AMEGOX.xml +++ b/calorimeters/CentralBarrel_AMEGOX.xml @@ -24,16 +24,19 @@ <constant name="world_y" value="world_side"/> <constant name="world_z" value="world_side"/> + <constant name="tracker_region_zmax" value="6.0 * m"/> + <constant name="tracker_region_rmax" value="6.0 * m"/> + <constant name="cb_ECal_rmin" value="1.3*m" /> <constant name="cb_ECal_length" value="4.0*m"/> <constant name="cb_ECal_mod_length" value="0.5*m"/> <constant name="cb_ECal_mod_width" value="0.5*m"/> - <constant name="cb_ECal_SiliconThickness" value="500*um"/> - <constant name="cb_ECal_ElectronicsThickness" value="150*um"/> - <constant name="cb_ECal_CopperThickness" value="100*um"/> - <constant name="cb_ECal_KaptonThickness" value="200*um"/> - <constant name="cb_ECal_EpoxyThickness" value="100*um"/> + <constant name="cb_ECal_SiliconThickness" value="0.5*mm"/> + <constant name="cb_ECal_ElectronicsThickness" value="0.15*mm"/> + <constant name="cb_ECal_CopperThickness" value="0.1*mm"/> + <constant name="cb_ECal_KaptonThickness" value="0.2*mm"/> + <constant name="cb_ECal_EpoxyThickness" value="0.1*mm"/> <constant name="cb_ECal_CarbonThickness" value="0.5*mm"/> <constant name="cb_ECal_CarbonSpacerWidth" value="4*mm"/> <constant name="cb_ECal_LayerSpacing" value="5*mm"/> @@ -106,7 +109,7 @@ <readouts> <readout name="EcalBarrelHits"> <segmentation type="CartesianGridXY" grid_size_x="2.0 * cm" grid_size_y="2.0 * cm"/> - <id>system:8,barrel:3,module:4,layer:6,slice:5,x:32:-16,y:-16</id> + <id>system:8,barrel:3,module:4,layer:10,slice:5,x:32:-16,y:-16</id> </readout> </readouts> diff --git a/calorimeters/options/emcal_barrel_reco.py b/calorimeters/options/emcal_barrel_reco.py index b93775f72012259d06cb274f66185f91d643f287..8daa925316958a6e42eb60993f272118477b41be 100644 --- a/calorimeters/options/emcal_barrel_reco.py +++ b/calorimeters/options/emcal_barrel_reco.py @@ -44,7 +44,7 @@ from Configurables import Jug__Reco__SamplingECalHitsMerger as SamplingECalHitsM from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster from Configurables import Jug__Reco__ClusterRecoCoG as RecoCoG -podioinput = PodioInput("PodioReader", collections=["mcparticles","EcalBarrelHits"], OutputLevel=DEBUG) +podioinput = PodioInput("PodioReader", collections=["mcparticles","EcalBarrelAstroPixHits"], OutputLevel=DEBUG) # Thrown Information copier = MCCopier("MCCopier", @@ -53,44 +53,49 @@ copier = MCCopier("MCCopier", OutputLevel=DEBUG) # Geant4 Information embarrelcopier = CalCopier("CalBarrelCopier", - inputCollection="EcalBarrelHits", - outputCollection="EcalBarrelHits2", + inputCollection="EcalBarrelAstroPixHits", + outputCollection="EcalBarrelAstroPixHits2", OutputLevel=DEBUG) # Digitization embarreldigi = EcalTungstenSamplingDigi("ecal_barrel_digi", - inputHitCollection="EcalBarrelHits", - outputHitCollection="RawEcalBarrelHits", + inputHitCollection="EcalBarrelAstroPixHits", + outputHitCollection="RawEcalBarrelAstroPixHits", inputEnergyUnit=units.GeV, inputTimeUnit=units.ns, + dynamicRangeADC=700*units.keV, + energyResolutions=[0., 0.02, 0.], + pedestalSigma=40, OutputLevel=DEBUG) # Reconstruction embarrelreco = EcalTungstenSamplingReco("ecal_barrel_reco", - inputHitCollection="RawEcalBarrelHits", - outputHitCollection="RecoEcalBarrelHits", + inputHitCollection="RawEcalBarrelAstroPixHits", + outputHitCollection="RecoEcalBarrelAstroPixHits", + dynamicRangeADC=700*units.keV, + pedestalSigma=40, OutputLevel=DEBUG) # 2D+1 Clusterings # readout id definition for barrel ecal -# <id>system:8,barrel:3,module:4,layer:6,slice:5,x:32:-16,y:-16</id> -# xy_merger sum layers/slices, masking (8+3+4, 8+3+4+5+6-1) +# <id>system:8,barrel:3,module:4,layer:10,slice:5,x:32:-16,y:-16</id> +# xy_merger sum layers/slices, masking (8+3+4, 8+3+4+5+10-1) embarrelxymerger = SamplingECalHitsMerger("ecal_barrel_xy_merger", - cellIDMaskRanges=[(15, 25)], - inputHitCollection="RecoEcalBarrelHits", - outputHitCollection="RecoEcalBarrelHitsXY") -# xy_merger sum modules, masking (8+3+4+5+6, 8+3+4+5+6+32-1) + cellIDMaskRanges=[(15, 29)], + inputHitCollection="RecoEcalBarrelAstroPixHits", + outputHitCollection="RecoEcalBarrelAstroPixHitsXY") +# xy_merger sum modules, masking (8+3+4+5+10, 8+3+4+5+10+32-1) embarrelzmerger = SamplingECalHitsMerger("ecal_barrel_z_merger", - cellIDMaskRanges=[(26, 57)], - inputHitCollection="RecoEcalBarrelHits", - outputHitCollection="RecoEcalBarrelHitsZ") + cellIDMaskRanges=[(30, 61)], + inputHitCollection="RecoEcalBarrelAstroPixHits", + outputHitCollection="RecoEcalBarrelAstroPixHitsZ") # Clustering embarrelcluster = IslandCluster("ecal_barrel_cluster", - inputHitCollection="RecoEcalBarrelHitsXY", - outputClusterCollection="EcalBarrelClusters", - minClusterCenterEdep=5.0*units.MeV, + inputHitCollection="RecoEcalBarrelAstroPixHitsXY", + outputClusterCollection="EcalBarrelAstroPixClusters", + minClusterCenterEdep=0.5*units.MeV, splitCluster=False, - groupRange=5.0) + groupRanges=[2.0*units.cm, 2.0*units.cm, 2.0*units.cm]) # Reconstruct the cluster with Center of Gravity method embarrelclusterreco = RecoCoG("ecal_barrel_clusterreco", - clusterCollection="EcalBarrelClusters", + clusterCollection="EcalBarrelAstroPixClusters", logWeightBase=6.2) out = PodioOutput("out", filename=output_rec_file) diff --git a/calorimeters/run_emcal_barrel_electrons.sh b/calorimeters/run_emcal_barrel_electrons.sh index 3634a1cb5fdf79d6ac3572263e1de32696ddc281..b735f190f2cd8f60cb7d8bac11e80d2440bbbd81 100755 --- a/calorimeters/run_emcal_barrel_electrons.sh +++ b/calorimeters/run_emcal_barrel_electrons.sh @@ -47,7 +47,7 @@ npsim --runType batch \ -v WARNING \ --part.minimalKineticEnergy 0.5*GeV \ --numberOfEvents ${JUGGLER_N_EVENTS} \ - --compactFile topside/${JUGGLER_DETECTOR}.xml \ + --compactFile ${JUGGLER_DETECTOR}/${JUGGLER_DETECTOR}.xml \ --inputFiles ${JUGGLER_FILE_NAME_TAG}.hepmc \ --outputFile sim_output/${JUGGLER_SIM_FILE} diff --git a/calorimeters/run_emcal_barrel_pions.sh b/calorimeters/run_emcal_barrel_pions.sh index 8ce7ee4a7db64172f7284d7c42be0d1ed6eb2ffb..f82bfaa9bc974a5b4207b137d964738f51d311d8 100755 --- a/calorimeters/run_emcal_barrel_pions.sh +++ b/calorimeters/run_emcal_barrel_pions.sh @@ -47,7 +47,7 @@ npsim --runType batch \ -v WARNING \ --part.minimalKineticEnergy 0.5*GeV \ --numberOfEvents ${JUGGLER_N_EVENTS} \ - --compactFile topside/${JUGGLER_DETECTOR}.xml \ + --compactFile ${JUGGLER_DETECTOR}/${JUGGLER_DETECTOR}.xml \ --inputFiles ${JUGGLER_FILE_NAME_TAG}.hepmc \ --outputFile sim_output/${JUGGLER_SIM_FILE} diff --git a/calorimeters/scripts/emcal_barrel_electrons_analysis.cxx b/calorimeters/scripts/emcal_barrel_electrons_analysis.cxx index 1ad13946f5f6c29c09d57a651ceb45da70ab001e..828ba6130046a3ab2fd2667024099fbc86570ced 100644 --- a/calorimeters/scripts/emcal_barrel_electrons_analysis.cxx +++ b/calorimeters/scripts/emcal_barrel_electrons_analysis.cxx @@ -92,10 +92,10 @@ void emcal_barrel_electrons_analysis(const char* input_fname = "sim_output/rec_e // Define variables auto d1 = d0.Define("Ethr", Ethr, {"mcparticles2"}) - .Define("ErecXY", ErecXY, {"RecoEcalBarrelHitsXY"}) - .Define("ErecZ", ErecZ, {"RecoEcalBarrelHitsZ"}) - .Define("ncluster", ncluster, {"EcalBarrelClusters"}) - .Define("Ecluster", Ecluster, {"EcalBarrelClusters"}) + .Define("ErecXY", ErecXY, {"RecoEcalBarrelAstroPixHitsXY"}) + .Define("ErecZ", ErecZ, {"RecoEcalBarrelAstroPixHitsZ"}) + .Define("ncluster", ncluster, {"EcalBarrelAstroPixClusters"}) + .Define("Ecluster", Ecluster, {"EcalBarrelAstroPixClusters"}) .Define("fsam", fsam, {"Ecluster","Ethr"}) ; @@ -105,7 +105,7 @@ void emcal_barrel_electrons_analysis(const char* input_fname = "sim_output/rec_e auto hErecZ = d1.Histo1D({"hErecZ", "Reconstructed Energy in Z merger; Reconstructed Energy [GeV]; Events", 100, -0.5, 10.5}, "ErecZ"); auto hNCluster = d1.Histo1D({"hNCluster", "Number of Clusters; # of Clusters; Events", 20, -0.5, 20.5}, "ncluster"); auto hEcluster = d1.Histo1D({"hEcluster", "Cluster Energy; Cluster Energy [GeV]; Events", 100, -0.5, 10.5}, "Ecluster"); - auto hfsam = d1.Histo1D({"hfsam", "Sampling Fraction; Sampling Fraction; Events", 100, 0.0, 1.0}, "fsam"); + auto hfsam = d1.Histo1D({"hfsam", "Sampling Fraction; Sampling Fraction; Events", 100, 0.0, 0.1}, "fsam"); // Event Counts auto nevents_thrown = d1.Count(); @@ -162,7 +162,7 @@ void emcal_barrel_electrons_analysis(const char* input_fname = "sim_output/rec_e hfsam->GetYaxis()->SetTitleOffset(1.4); hfsam->SetLineWidth(2); hfsam->SetLineColor(kBlue); - hfsam->Fit("gaus","","",0.1,1.0); + hfsam->Fit("gaus","","",0.01,0.1); hfsam->GetFunction("gaus")->SetLineWidth(2); hfsam->GetFunction("gaus")->SetLineColor(kRed); hfsam->DrawClone(); diff --git a/calorimeters/scripts/emcal_barrel_pions_analysis.cxx b/calorimeters/scripts/emcal_barrel_pions_analysis.cxx index 01c9ac7fb00b0a1d44a4098cc7524a1b0ee181d2..5a91f99a147416417ed84f24f3d4073a9e6a3974 100644 --- a/calorimeters/scripts/emcal_barrel_pions_analysis.cxx +++ b/calorimeters/scripts/emcal_barrel_pions_analysis.cxx @@ -92,10 +92,10 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/rec_emcal // Define variables auto d1 = d0.Define("Ethr", Ethr, {"mcparticles2"}) - .Define("ErecXY", ErecXY, {"RecoEcalBarrelHitsXY"}) - .Define("ErecZ", ErecZ, {"RecoEcalBarrelHitsZ"}) - .Define("ncluster", ncluster, {"EcalBarrelClusters"}) - .Define("Ecluster", Ecluster, {"EcalBarrelClusters"}) + .Define("ErecXY", ErecXY, {"RecoEcalBarrelAstroPixHitsXY"}) + .Define("ErecZ", ErecZ, {"RecoEcalBarrelAstroPixHitsZ"}) + .Define("ncluster", ncluster, {"EcalBarrelAstroPixClusters"}) + .Define("Ecluster", Ecluster, {"EcalBarrelAstroPixClusters"}) .Define("fsam", fsam, {"Ecluster","Ethr"}) ; @@ -105,7 +105,7 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/rec_emcal auto hErecZ = d1.Histo1D({"hErecZ", "Reconstructed Energy in Z merger; Reconstructed Energy [GeV]; Events", 100, -0.5, 10.5}, "ErecZ"); auto hNCluster = d1.Histo1D({"hNCluster", "Number of Clusters; # of Clusters; Events", 20, -0.5, 20.5}, "ncluster"); auto hEcluster = d1.Histo1D({"hEcluster", "Cluster Energy; Cluster Energy [GeV]; Events", 100, -0.5, 10.5}, "Ecluster"); - auto hfsam = d1.Histo1D({"hfsam", "Sampling Fraction; Sampling Fraction; Events", 100, 0.0, 1.0}, "fsam"); + auto hfsam = d1.Histo1D({"hfsam", "Sampling Fraction; Sampling Fraction; Events", 100, 0.0, 0.1}, "fsam"); // Event Counts auto nevents_thrown = d1.Count(); @@ -162,7 +162,7 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/rec_emcal hfsam->GetYaxis()->SetTitleOffset(1.4); hfsam->SetLineWidth(2); hfsam->SetLineColor(kBlue); - hfsam->Fit("gaus","","",0.1,1.0); + hfsam->Fit("gaus","","",0.01,0.1); hfsam->GetFunction("gaus")->SetLineWidth(2); hfsam->GetFunction("gaus")->SetLineColor(kRed); hfsam->DrawClone(); diff --git a/calorimeters/topside_defs.xml b/calorimeters/topside_defs.xml new file mode 100644 index 0000000000000000000000000000000000000000..7bc0cc49ef3c3b2aaefcee4e491d4248b4b9de5f --- /dev/null +++ b/calorimeters/topside_defs.xml @@ -0,0 +1,462 @@ + <define> + <comment>Although not explicit in the design study, the eRHIC crossing angle is not symmetric.</comment> + <constant name="CrossingAngle" value="0.025"/> + <constant name="ionCrossingAngle" value="0.0166667"/> + <constant name="electronCrossingAngle" value="0.00833333"/> + <constant name="CrossingSlope" value="0.0166682"/> + + <constant name="Pi" value="3.14159265359"/> + <constant name="world_side" value="30*m"/> + <constant name="world_x" value="world_side"/> + <constant name="world_y" value="world_side"/> + <constant name="world_z" value="100*m"/> + + <constant name="mil" value="0.0254*mm"/> + + <comment> + ------------ + Detector IDs + ------------ + + Note about ACTS tracking geometry construction + ---------------------------------------------- + + The tracking surfaces need to be structured in a barrel + endcapP + endcapN where + endcapP/endcapN are the endcaps at positive/negative z values. + See https://acts.readthedocs.io/en/latest/plugins/dd4hep.html for more details. + + The tracking geometry needs to beconstructed from cylinders from the inside out. For this reason + each layer needs its own subsystem assembly. This increases the number of top level system IDs. + For example the silicon tracker needs 3 IDs for each area (endcap+barrel+endcap) and a subassembly for each + layer. Therefore it needs a minimum of 20 IDs. Therefore we will allocate blocks of ~25 for each major subsystem. + Note, future improvements will likely include a more sophisticated ACTS-dd4hep plugin, + eliminating the need for so many system IDs at construction time. + + This barrel/endcap structure needs IDs to be in increasing order going outward. + The space of IDs for the subassemblies starts at (Subassembly_ID*10+101). + + The unused IDs below are saved for future use. + </comment> + + + <comment> + =================== + (1-9) Reserved IDs + =================== + Unused IDs: 1-9 + + ==================================== + (10-24) Interaction region beamline + ==================================== + + Beampipe ID : 10 + Unused IDs: 11-24 + + </comment> + <constant name="BeamPipe_ID" value="10"/> + + + <comment> + =============================== + (25-49) Silicon Vertex Tracker + =============================== + SiVertex subsystem ID: 25 + Layer 1 subassembly ID: 26 + Layer 2 subassembly ID: 27 + Layer 3 subassembly ID: 28 + Layer 4 subassembly ID: 29 + Layer 5 subassembly ID: 30 + </comment> + <constant name="SiVertexSubAssembly_ID" value="25"/> + <comment> + Unused values reserved for vertex: + constant name="SiVertexSubAssemblyLayer1_ID" value="121" + constant name="SiVertexSubAssemblyLayer2_ID" value="122" + constant name="SiVertexSubAssemblyLayer3_ID" value="123" + constant name="SiVertexSubAssemblyLayer4_ID" value="124" + constant name="SiVertexSubAssemblyLayer5_ID" value="125" + </comment> + + <comment> + =============================== + (50-74) Silicon Tracker System + =============================== + + SiTracker subsystem ID: 50 + Layer 1 subassembly ID: 51 + Layer 2 subassembly ID: 52 + Layer 3 subassembly ID: 53 + Layer 4 subassembly ID: 54 + Layer 5 subassembly ID: 55 + + (56-70) etc... + + Unused IDs: 71-74 + + </comment> + + <constant name="SiTrackerSubAssembly_ID" value="50"/> + <constant name="SiTrackerSubAssemblyLayer1_ID" value="51"/> + <constant name="SiTrackerSubAssemblyLayer2_ID" value="52"/> + <constant name="SiTrackerSubAssemblyLayer3_ID" value="53"/> + <constant name="SiTrackerSubAssemblyLayer4_ID" value="54"/> + <constant name="SiTrackerSubAssemblyLayer5_ID" value="55"/> + + <constant name="SiTrackerBarrel_Layer1_ID" value="56"/> + <constant name="SiTrackerEndcapP_Layer1_ID" value="57"/> + <constant name="SiTrackerEndcapN_Layer1_ID" value="58"/> + + <constant name="SiTrackerBarrel_Layer2_ID" value="59"/> + <constant name="SiTrackerEndcapP_Layer2_ID" value="60"/> + <constant name="SiTrackerEndcapN_Layer2_ID" value="61"/> + + <constant name="SiTrackerBarrel_Layer3_ID" value="62"/> + <constant name="SiTrackerEndcapP_Layer3_ID" value="63"/> + <constant name="SiTrackerEndcapN_Layer3_ID" value="64"/> + + <constant name="SiTrackerBarrel_Layer4_ID" value="65"/> + <constant name="SiTrackerEndcapP_Layer4_ID" value="66"/> + <constant name="SiTrackerEndcapN_Layer4_ID" value="67"/> + + <constant name="SiTrackerBarrel_Layer5_ID" value="68"/> + <constant name="SiTrackerEndcapP_Layer5_ID" value="69"/> + <constant name="SiTrackerEndcapN_Layer5_ID" value="70"/> + + <comment> + =================== + (75-99 Reserved IDs + =================== + + Unused IDs: 75-99 + TBD + </comment> + + <comment> + ===================================== + (100-109) Electromagnetic Calorimeter + ===================================== + + ECal subsystem ID: 100 + Barrel subassembly ID: 101 + EndcapP subassembly ID: 102 + EndcapN subassembly ID: 103 + Crystal subassembly ID: 104 + + Unused IDs: 105-109 + + </comment> + <constant name="ECalSubAssembly_ID" value="100"/> + <constant name="ECalBarrel_ID" value="101"/> + <constant name="ECalEndcapP_ID" value="102"/> + <constant name="ECalEndcapN_ID" value="103"/> + <constant name="CrystalEndcap_ID" value="104"/> + + <comment> + ===================================== + (110-119Hadronic Calorimeter + ===================================== + + HCal subsystem ID: 110 + Barrel subassembly ID: 111 + EndcapP subassembly ID: 112 + EndcapN subassembly ID: 113 + + Unused IDs: 114-119 + </comment> + <constant name="HCalSubAssembly_ID" value="110"/> + <constant name="HCalBarrel_ID" value="111"/> + <constant name="HCalEndcapP_ID" value="112"/> + <constant name="HCalEndcapN_ID" value="113"/> + + <comment> + ===================================== + (120-129) (near) Forward reserved + ===================================== + + Forwardtracking ID: 120 + Forward RICH ID: 121 + + Unused IDs: 122-129 + </comment> + <constant name="ForwardTracking_ID" value="120"/> + <constant name="ForwardRICH_ID" value="121"/> + + <comment> + ===================================== + (130-139) Backward reserved + ===================================== + + TBD + + </comment> + + <comment> + ===================================== + (140-149) Central Magnet + ===================================== + + Solenoid ID: 140 + Solenoid support ID: 141 + Solenoid Yoke ID: 142 + + Unused IDs: 143-149 + + </comment> + <constant name="Solenoid_ID" value="140"/> + <constant name="SolenoidSupport_ID" value="141"/> + <constant name="SolenoidYoke_ID" value="142"/> + + <comment> + ===================================== + (150-169) Far Forward Detectors + ===================================== + + Forward Roman Pot ID: 150 + Zero Degree Cal. ID: 160 + + </comment> + <constant name="ForwardRomanPot_ID" value="150"/> + <constant name="ZDC_ID" value="160"/> + + <comment> + ===================================== + (170-189) Forward Beamline Magnets + ===================================== + </comment> + + <comment> + ===================================== + (190-199) Backward Beamline Magnets + ===================================== + </comment> + + + + <comment> + For reference, here are the sPhenix solenoid and calorimeter Parameters. + </comment> + <constant name="sPhenixCoilInnerRadius" value="1420.0*mm"/> + <constant name="sPhenixCoilOuterRadius" value="1800.0*mm"/><!-- guestimate --> + <constant name="sPhenixCoilLength" value="4050.0*mm"/> <!-- guestimate --> + <constant name="sPhenixEMCalInnerRadius" value="890.00*mm"/> + <constant name="sPhenixEMCalOuterRadius" value="1155.8*mm"/> + <constant name="sPhenixEMCalLength" value="1727.2*2*mm"/> + <constant name="sPhenixInnerHCalInnerRadius" value="sPhenixEMCalOuterRadius - 1.0*cm"/> <!-- guestimate --> + <constant name="sPhenixInnerHCalOuterRadius" value="1370.0*mm"/> + <constant name="sPhenixInnerHCalLength" value="2175*2*mm"/> + + <comment> + -------------------------- + Solenoid Magnet Parameters + -------------------------- + </comment> + <constant name="Solenoid_rmin" value="1420.0*mm"/> + <constant name="Solenoid_rmax" value="1800.0*mm"/> + <constant name="SolenoidLength" value="4050.0*mm"/> + + <constant name="SolenoidBarrelCryostatThickness" value=" 1.0 * cm"/> + <constant name="SolenoidBarrelGapThickness" value=" 3.3 * cm"/> + <constant name="SolenoidBarrelAlConductorThickness" value="12.0 * cm"/> + <constant name="SolenoidBarrelQuenchbackThickness" value=" 1.5 * cm"/> + <constant name="SolenoidBarrelOuterGapThickness" value=" 5.6 * cm"/> + <constant name="SolenoidBarrelOuterCryostatThickness" value=" 1.2 * cm"/> + + <constant name="SolenoidEndPlateGapThickness" value=" 5.7 * cm"/> + <constant name="SolenoidEndPlateCryostatThickness" value=" 1.5 * cm"/> + + <constant name="SolenoidBarrel_rmin" value="Solenoid_rmin"/> + <constant name="SolenoidBarrelLenth" value="SolenoidLength"/> + <constant name="SolenoidBarrel_zmax" value="SolenoidBarrelLenth/2.0"/> + + <constant name="SolenoidCoilConductor_rmin" + value="SolenoidBarrel_rmin + SolenoidBarrelCryostatThickness + SolenoidBarrelGapThickness"/> + <constant name="SolenoidCoilConductor_rmax" + value="SolenoidCoilConductor_rmin + SolenoidBarrelAlConductorThickness + SolenoidBarrelQuenchbackThickness"/> + <constant name="SolenoidBarrel_rmax" + value="SolenoidCoilConductor_rmax + SolenoidBarrelOuterGapThickness + SolenoidBarrelOuterCryostatThickness"/> + + <constant name="SolenoidCoil_zmax" + value="SolenoidBarrel_zmax - SolenoidEndPlateCryostatThickness - SolenoidEndPlateGapThickness"/> + + <constant name="SolenoidalFieldRadius" + value="SolenoidCoilConductor_rmin + SolenoidBarrelAlConductorThickness / 2.0"/> + + <constant name="SolenoidCoilLength" value="SolenoidCoil_zmax*2.0"/> + + <constant name="SolenoidThickness" value="Solenoid_rmax - Solenoid_rmin"/> + + <constant name="SolenoidYokeEndcapP_rmin" value="800*mm"/> + <constant name="SolenoidYokeEndcapN_rmin" value="800*mm"/> + <constant name="SolenoidYokeEndcapThickness" value="0.2 * m"/> + <constant name="SolenoidYokeEndcap_zmin" value="SolenoidBarrel_zmax"/> + <constant name="SolenoidYokeEndcap_zmax" value="SolenoidYokeEndcap_zmin + SolenoidYokeEndcapThickness"/> + + <constant name="SolenoidYokeChamferAngle" value="0.2"/> + + <comment> + ------------------------- + Vertex Tracker Parameters + ------------------------- + </comment> + <constant name="VertexTrackerInnerRadius" value="30.0*mm"/> + <constant name="VertexTrackerOuterRadius" value="90.0*mm"/> + <constant name="VertexTrackerOuterBarrelLength" value="300.0*mm"/> + <constant name="tracker_region_rmax" value="Solenoid_rmax"/> + <constant name="tracker_region_zmax" value="SolenoidLength/2.0"/> + + <comment> + -------------------------- + Silicon Tracker Parameters + -------------------------- + </comment> + <constant name="SiliconTrackerInnerRadius" value="95.0*mm"/> + <constant name="SiliconTrackerInnerBarrelLength" value="400.0*mm"/> + <constant name="SiliconTrackerOuterRadius" value="860.0*mm"/> + <constant name="SiliconTrackerOuterBarrelLength" value="SiliconTrackerOuterRadius*2"/> + + <comment> + ------------ + Calorimeters + ------------ + </comment> + <constant name="EcalBarrel_rmin" value="SiliconTrackerOuterRadius + 3.0 * cm"/> + <constant name="HcalBarrel_rmax" value="Solenoid_rmin - 5.0 *cm "/> + <constant name="AvailTotalBarrelCalorimetryThickness" value="HcalBarrel_rmax - EcalBarrel_rmin"/> + <constant name="CalBarrelDivider" value="0.5"/> <!-- Ecal and Hcal have the same thickness --> + <constant name="EcalBarrelAvailTotalThickness" value="AvailTotalBarrelCalorimetryThickness * CalBarrelDivider"/> + <constant name="HcalBarrelAvailTotalThickness" value="AvailTotalBarrelCalorimetryThickness * (1.0 - CalBarrelDivider)"/> + + <constant name="EcalBarrelLength" value="SiliconTrackerOuterBarrelLength+50.0*cm"/> + <constant name="EcalEndcap_zmin" value="EcalBarrelLength/2.0"/> + + <constant name="AvailTotalEndcapCalorimetryThickness" value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcap_zmin + 10.0 * mm)"/> + <constant name="CalEndcapDivider" value="0.5"/> <!-- Ecal and Hcal have the same thickness --> + <constant name="EcalEndcapAvailTotalThickness" value="AvailTotalEndcapCalorimetryThickness * CalEndcapDivider"/> + <constant name="HcalEndcapAvailTotalThickness" value="AvailTotalEndcapCalorimetryThickness * (1.0 - CalEndcapDivider)"/> + + <constant name="EcalEndcapP_rmin" value="250.0*mm"/> + <constant name="EcalEndcapN_rmin" value="350.0*mm"/> + + <constant name="HcalEndcapP_rmin" value="250.0 * mm"/> + <constant name="HcalEndcapN_rmin" value="350.0 * mm"/> + + <comment> + ------------------------- + EM Calorimeter Parameters + ------------------------- + </comment> + <constant name="CaloSides" value="12"/> + + <!-- Material Thickness --> + <constant name="EcalSiliconThickness" value="9.00 * mm"/> + <constant name="EcalCopperThickness" value="0.05 * mm"/> + <constant name="EcalKaptonThickness" value="0.30 * mm"/> + <constant name="EcalAir1Thickness" value="0.33 * mm"/> + <constant name="EcalAir2Thickness" value="0.25 * mm"/> + <constant name="EcalThinTungstenThickness" value="2.50 * mm"/> + <constant name="EcalThickTungstenThickness" value="5.00 * mm"/> + + <!-- Layer Thickness --> + <constant name="EcalFirstLayerThickness" + value="EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/> + <constant name="EcalThinOneLayerThickness" + value="EcalThinTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/> + <constant name="EcalThickOneLayerThickness" + value="EcalThickTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/> + + <!-- EM Barrel N Layer; same number of layers for EcalThin and EcalThick --> + <constant name="EcalBarrelLayers" + value="floor((EcalBarrelAvailTotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/> + <constant name="EcalBarrelThinLayers" value="EcalBarrelLayers"/> + <constant name="EcalBarrelThickLayers" value="EcalBarrelLayers"/> + <!-- EM Barrel Thickness --> + <constant name="EcalBarrelThickness" + value="EcalFirstLayerThickness + (EcalBarrelThinLayers * EcalThinOneLayerThickness) + (EcalBarrelThickLayers * EcalThickOneLayerThickness)"/> + <constant name="EcalBarrel_rmax" value="EcalBarrel_rmin + EcalBarrelThickness"/> + + <!-- EM Endcap N Layer; same number of layers for EcalThin and EcalThick --> + <constant name="EcalEndcapLayers" + value="floor((EcalEndcapAvailTotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/> + <constant name="EcalEndcapThinLayers" value="EcalEndcapLayers"/> + <constant name="EcalEndcapThickLayers" value="EcalEndcapLayers"/> + <!-- EM Endcap Thickness --> + <constant name="EcalEndcapThickness" + value="EcalFirstLayerThickness + (EcalEndcapThinLayers * EcalThinOneLayerThickness) + (EcalEndcapThickLayers * EcalThickOneLayerThickness)"/> + + <comment> + ------------------------------- + Hadronic Calorimeter Parameters + ------------------------------- + </comment> + <constant name="HcalBarrel_rmin" value="EcalBarrel_rmax+10.0*mm"/> + <constant name="HcalBarrelAvailThickness" value="HcalBarrel_rmax - HcalBarrel_rmin"/> + <constant name="HcalBarrelLength" value="EcalBarrelLength+2.0*EcalEndcapThickness + 10.0*mm "/> + <constant name="HcalEndcap_zmin" value="HcalBarrelLength/2.0"/> + <constant name="HcalEndcapAvailThickness" value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - HcalEndcap_zmin"/> + + <!-- Material Thickness --> + <constant name="HcalSteelThickness" value="1.89 * cm"/> + <constant name="HcalPyrexThickness" value="1.10 * mm"/> + <constant name="HcalRPCGasThickness" value="1.20 * mm"/> + <constant name="HcalG10Thickness" value="3.00 * mm"/> + <constant name="HcalAirThickness" value="1.60 * mm"/> + + <!-- Layer Thickness --> + <constant name="HcalOneLayerThickness" + value="HcalSteelThickness + (2 * HcalPyrexThickness) + HcalRPCGasThickness + HcalG10Thickness + HcalAirThickness"/> + + <!-- H Barrel Layers and Thickness --> + <constant name="HcalBarrelLayers" value="floor(HcalBarrelAvailThickness / HcalOneLayerThickness)"/> + <constant name="HcalBarrelThickness" value="HcalBarrelLayers * HcalOneLayerThickness"/> + + <!-- H Endcap Layers and Thickness --> + <constant name="HcalEndcapLayers" value="floor(HcalEndcapAvailThickness / HcalOneLayerThickness)"/> + <constant name="HcalEndcapThickness" value="HcalEndcapLayers * HcalOneLayerThickness"/> + + <comment> + ----------------------- + Gaseous RICH Parameters + ----------------------- + </comment> + <constant name="RICHZMin" value="SolenoidYokeEndcap_zmin + 1 * cm"/> + <constant name="RICHRMin" value="15 * cm"/> + <constant name="RICHDepth" value="1 * m"/> + + + <comment> + -------------------------- + Forward Tracker Parameters + -------------------------- + </comment> + <constant name="TempForwardTrackerSpace" value="1.5 * m"/> + <constant name="ForwardEcalZMin" value="RICHZMin + RICHDepth + TempForwardTrackerSpace"/> + <constant name="ForwardCaloAngle" value="2 * SolenoidYokeChamferAngle"/> + <constant name="ForwardEcalRInner" value="10 * cm"/> + <constant name="ForwardEcalROuter" value="EcalBarrel_rmin + tan(SolenoidYokeChamferAngle) * (RICHDepth) + tan(ForwardCaloAngle) * (ForwardEcalZMin - RICHZMin - RICHDepth)"/> + <constant name="ForwardHcalZMin" value="RICHZMin + RICHDepth + TempForwardTrackerSpace + EcalEndcapThickness + 1 * mm"/> + <constant name="ForwardHcalAngle" value="ForwardCaloAngle"/> + <constant name="ForwardHcalRInner" value="10 * cm"/> + <constant name="ForwardHcalROuter" value="ForwardEcalROuter + tan(ForwardCaloAngle) * (ForwardHcalZMin - ForwardEcalZMin)"/> + + <comment> + -------------------------- + Forward ECal Parameters + -------------------------- + </comment> + + <comment> + -------------------------- + Forward HCal Parameters + -------------------------- + </comment> + + <comment> + For DDsim. See ddsim --help for details. + </comment> + <constant name="tracker_region_zmax" value="SiliconTrackerOuterBarrelLength/2.0"/> + <constant name="tracker_region_rmax" value="SiliconTrackerOuterRadius"/> + + + + </define> +