Commit 5de37799 authored by Chao Peng's avatar Chao Peng
Browse files

Resolve "RICH volume overlaps"

parent 31c85505
Pipeline #7774 passed with stages
in 8 minutes and 10 seconds
......@@ -112,7 +112,7 @@
<include ref="topside/hcal.xml"/>
<include ref="topside/solenoid.xml"/>
-->
<include ref="topside/topside_rich.xml"/>
<include ref="topside/forward_rich.xml"/>
<!--
<include ref="topside/roman_pots.xml"/>
<include ref="../accelerator/eic/forward_ion_beamline.xml"/>
......
......@@ -58,7 +58,7 @@ def run_sim(args):
outputfile = args.output
if outputfile is None:
outputfile = 'data/topside_rich_' + time.strftime('%Y-%m-%d_%H-%M')
outputfile = 'data/forward_rich_' + time.strftime('%Y-%m-%d_%H-%M')
podio = DDG4.EventAction(kernel, 'Geant4Output2Podio/RootOutput', True)
podio.HandleMCTruth = False
......
......@@ -147,14 +147,21 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
// an envelope for the detector
// use a complicated shape to avoid conflict with the other parts
// cone for radiator and the first set of mirrors
// cone for radiator
double halfLength = length/2.;
Cone env1(halfLength, rmin, rmax1, rmin, rmax2);
// envelope for detection plane
// Cone env2(halfLength - pZ/2., rmin, pRmax, rmin, rmax2);
Tube env2(rmin, pRmax + pTol + pGap + 1.0*cm, (length - pZ)/2., 0., 2*M_PI);
// envelope for mirror sets
double rMirEnv = rmax2;
for (xml::Collection_t sl(mir, _Unicode(slice)); sl; ++sl) {
auto mr = sl.attr<double>(_Unicode(rmax));
rMirEnv = mr > rMirEnv ? mr: rMirEnv;
}
Tube env3(rmin, rMirEnv + 1.0*cm, mir.attr<double>(_Unicode(env_length))/2., 0., 2*M_PI);
UnionSolid envShape(env1, env2, Position(0., 0., pZ));
UnionSolid env12(env1, env2, Position(0., 0., pZ/2.));
UnionSolid envShape(env12, env3, Position(0., 0., mirZ/2.));
Volume envVol(detName + "_envelope", envShape, gasMat);
envVol.setVisAttributes(desc.visAttributes(detElem.visStr()));
......@@ -230,6 +237,8 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
mcpVol.setSensitiveDetector(sens);
// photo-detector plane envelope
double rmcp = pRmin - pTol - pGap;
double pZ2 = pZ - rmcp*std::sin(richCenterAngle) + 5.0*cm;
for (size_t ipd = 0; ipd < 6; ++ipd) {
double phmin = -M_PI/6.;
double phmax = M_PI/6.;
......@@ -243,7 +252,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
DetElement mcpDE(det, Form("MCPPMT_DE%d_%d", ipd + 1, i + 1), i + 1);
mcpDE.setPlacement(mcpPV);
}
Transform3D tr = Translation3D(0., 0., -halfLength + pZ + pThick/2.0) // move for z position
Transform3D tr = Translation3D(0., 0., -halfLength + pZ2 + pThick/2.0) // move for z position
* RotationZ(ipd*M_PI/3.) // rotate phi angle
* RotationY(-richCenterAngle); // rotate to perpendicular position
auto pdPV = envVol.placeVolume(pdVol, tr);
......
......@@ -113,7 +113,7 @@
<include ref="topside/ecal.xml"/>
<include ref="topside/hcal.xml"/>
<include ref="topside/solenoid.xml"/>
<include ref="topside/topside_rich.xml"/>
<include ref="topside/forward_rich.xml"/>
<!--
<include ref="topside/roman_pots.xml"/>
-->
......
......@@ -7,11 +7,11 @@
<detector id="ForwardRICH_ID" name="ForwardRICH" type="ForwardRICH" readout="ForwardRICHHits" vis="BlueVis">
<dimensions z0="RICHZMin" length="RICHDepth+20*cm" rmin="RICHRMin" rmax1="RICHRMin+40*cm" rmax2="RICHRMin+80*cm"/>
<radiator material="N2cherenkov" />
<mcppmt zdiff="15.0*cm" rmin="SolenoidYokeEndcapP_rmin - 10*cm" rmax="SolenoidYokeEndcapP_rmin + 80*cm" rtol="1.0*cm" vis="BlueVis"
module_size="10*cm" module_gap="0.2*cm" thickness="1.0*cm" material="Quartz" />
<mcppmt zdiff="25.0*cm" rmin="SolenoidYokeEndcapP_rmin-10*cm" rmax="SolenoidYokeEndcapP_rmin+80*cm" rtol="1.0*cm"
vis="BlueVis" module_size="10*cm" module_gap="0.2*cm" thickness="1.0*cm" material="Quartz" />
<tank zdiff="5.0*cm" length="RICHDepth" gas="N2cherenkov" vis="GreenVis"
rmin="RICHRMin" rmax1="RICHRMin+40*cm" rmax2="RICHRMin+80*cm" />
<mirror zdiff="RICHDepth+7.0*cm" thickness="1*mm" material="PyrexGlass" vis="GrayVis">
<mirror zdiff="RICHDepth+7.0*cm" thickness="1*mm" material="PyrexGlass" vis="GrayVis" env_length="40*cm">
<slice focus="10*cm" curve="300*cm" rmin="RICHRMin" rmax="RICHRMin+80*cm" phiw="59*degree" rotz="0*degree" />
<slice focus="10*cm" curve="300*cm" rmin="RICHRMin" rmax="RICHRMin+80*cm" phiw="59*degree" rotz="60*degree" />
<slice focus="10*cm" curve="300*cm" rmin="RICHRMin" rmax="RICHRMin+80*cm" phiw="59*degree" rotz="120*degree" />
......
......@@ -234,7 +234,7 @@
<vis name="GrayVis" alpha="0.5" r= "0.75" g="0.75" b="0.75" showDaughters="true" visible="true"/>
</display>
<include ref="topside/topside_rich.xml"/>
<include ref="topside/forward_rich.xml"/>
<!--
<include ref="topside/vertex_tracker.xml"/>
<include ref="topside/silicon_tracker.xml"/>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment