Skip to content
Snippets Groups Projects
Commit 0a4cc06f authored by Christopher Dilks's avatar Christopher Dilks Committed by Sylvester Joosten
Browse files

[dRICh] update envelope for 25cm solenoid shift

parent a592c348
No related branches found
No related tags found
No related merge requests found
......@@ -359,14 +359,14 @@ Examples:
<constant name="TrackerBarrel_zmax" value="TrackerBarrel_length/2.0"/>
<constant name="TrackerBarrelInside_length" value="VertexTrackingRegion_length"/>
<constant name="TrackerBarrelInside_zmax" value="TrackerBarrelInside_length/2.0"/>
<constant name="TrackerEndcapP_length" value="925.0*mm"/>
<constant name="TrackerEndcapP_length" value="1025.0*mm"/>
<constant name="TrackerEndcapN_length" value="495.0*mm"/>
<documentation level="0">
### PID Detector Region Parameters
</documentation>
<constant name="ForwardPID_length" value="145.0*cm"/>
<constant name="ForwardPID_length" value="140.0*cm"/>
<constant name="ForwardPID_rmin1" value="Beampipe_rmax + 90*mm"/>
<constant name="ForwardPID_rmin2" value="18.0*cm"/>
......
......@@ -10,9 +10,9 @@
<constant name="DRICH_wall_thickness" value="0.5*cm"/> <!-- thickness of radial walls -->
<constant name="DRICH_window_thickness" value="0.1*cm"/> <!-- thickness of entrance and exit walls -->
<!-- tank geometry: cylinder, holding the majority of detector components -->
<constant name="DRICH_rmax2" value="200*cm"/> <!-- cylinder radius; 20 cm gap between dRICh and HCalBarrel -->
<constant name="DRICH_rmax2" value="220*cm"/> <!-- cylinder radius, near maximal to fit HCal barrel inner polygon -->
<!-- snout geometry: cone with front radius rmax0 and back radius of rmax1 -->
<constant name="DRICH_SnoutLength" value="25.0*cm"/>
<constant name="DRICH_SnoutLength" value="4.0*cm"/>
<constant name="DRICH_SnoutSlope" value="DRICH_rmax2 / (DRICH_zmin + DRICH_Length)"/>
<constant name="DRICH_rmax0" value="DRICH_SnoutSlope * DRICH_zmin"/>
<constant name="DRICH_rmax1" value="DRICH_SnoutSlope * ( DRICH_zmin + DRICH_SnoutLength)"/>
......@@ -101,7 +101,7 @@
</documentation>
<radiator
rmin="DRICH_rmin0 + DRICH_wall_thickness + 2.0*cm"
rmax="DRICH_rmax0 - DRICH_wall_thickness - 2.0*cm"
rmax="DRICH_rmax0 - DRICH_wall_thickness - 0.2*cm"
phiw="60*degree"
frontplane="DRICH_window_thickness + 0.5*DRICH_aerogel_thickness"
pitch="0*degree"
......@@ -131,13 +131,10 @@
- `phiw`: azimuthal width of one sector
- `thickness` is the radial thickness of the mirror; note that `backplane` is given for the
reflective mirror surface, the inner radius of the sphere
- `focus_tune*` are tuning parameters for the focal plane:
- linearly retune focal point, using a real number; reference numbers are:
- 0.0: disabled, ideal focus at sensor sphere center
- 1.0: ideal focus re-tuned to be on sensor sphere
- `focus_tune_long` moves toward centroid sensor, while `focus_tune_perp` moves transverse
to this direction; movements are in the xz-plane only
- due to aberrations, ideal focus may not coincide with apparent focal region
- `focus_tune*` are tuning parameters for the focal region:
- `focus_tune_z` and `focus_tune_x` will move the focal region, with respect
to the sensor sphere center (i.e., set both to zero for focus at the sensor sphere center
(ignoring spherical aberrations effects))
- other settings:
- `debug`: set to 1 so draw reference sphere instead, view with y-clipping
</documentation>
......@@ -150,8 +147,8 @@
rmax="DRICH_rmax2 - DRICH_wall_thickness - 5.0*cm"
phiw="59.5*degree"
thickness="0.2*cm"
focus_tune_long="0.5"
focus_tune_perp="0.2"
focus_tune_x="40.0*cm"
focus_tune_z="-30.0*cm"
debug="DRICH_debug_mirror"
/>
......@@ -208,14 +205,14 @@
- `zmin`: z-plane cut
</documentation>
<sphere
centerz="-112.0 * cm"
centerz="-80.0 * cm"
centerx="DRICH_rmax2 - 35.0*cm"
radius="160.0 * cm"
radius="100.0 * cm"
debug="DRICH_debug_sensors"
/>
<sphericalpatch
phiw="18*degree"
rmin="DRICH_rmax1 + 10.0*cm"
rmin="DRICH_rmax1 + 0.0*cm"
rmax="DRICH_rmax2 - 5.0*cm"
zmin="DRICH_SnoutLength + 5.0*cm"
/>
......
......@@ -77,8 +77,8 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
double mirrorRmin = mirrorElem.attr<double>(_Unicode(rmin));
double mirrorRmax = mirrorElem.attr<double>(_Unicode(rmax));
double mirrorPhiw = mirrorElem.attr<double>(_Unicode(phiw));
double focusTuneLong = mirrorElem.attr<double>(_Unicode(focus_tune_long));
double focusTunePerp = mirrorElem.attr<double>(_Unicode(focus_tune_perp));
double focusTuneZ = mirrorElem.attr<double>(_Unicode(focus_tune_z));
double focusTuneX = mirrorElem.attr<double>(_Unicode(focus_tune_x));
// - sensor module
auto sensorElem = detElem.child(_Unicode(sensors)).child(_Unicode(module));
auto sensorMat = desc.material(sensorElem.attr<std::string>(_Unicode(material)));
......@@ -395,16 +395,12 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
// BUILD MIRRORS ====================================================================
// attributes, re-defined w.r.t. IP, needed for mirror positioning
double zS = sensorSphCenterZ + vesselZmin; // sensor sphere attributes
double xS = sensorSphCenterX;
double rS = sensorSphRadius;
double B = vesselZmax - mirrorBackplane; // distance between IP and mirror back plane
// derive spherical mirror parameters `(zM,xM,rM)`, for given image point
// coordinates `(zI,xI)` and `dO`, defined as the z-distance between the
// object and the mirror surface; all coordinates are specified w.r.t. the
// object point coordinates
// object and the mirror surface
// - all coordinates are specified w.r.t. the object point coordinates
// - this is point-to-point focusing, but it can be used to effectively steer
// parallel-to-point focusing
double zM,xM,rM;
auto FocusMirror = [&zM,&xM,&rM](double zI, double xI, double dO) {
zM = dO*zI / (2*dO-zI);
......@@ -412,6 +408,12 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
rM = dO - zM;
};
// attributes, re-defined w.r.t. IP, needed for mirror positioning
double zS = sensorSphCenterZ + vesselZmin; // sensor sphere attributes
double xS = sensorSphCenterX;
double rS = sensorSphRadius;
double B = vesselZmax - mirrorBackplane; // distance between IP and mirror back plane
// focus 1: set mirror to focus IP on center of sensor sphere `(zS,xS)`
/*double zF = zS;
double xF = xS;
......@@ -423,6 +425,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
// - `focusTuneLong` is the distance to move, given as a fraction of `sensorSphRadius`
// - `focusTuneLong==0` means `(zF,xF)==(zS,xS)`
// - `focusTuneLong==1` means `(zF,xF)` will be on the sensor sphere, near the centroid
/*
double zC = sensorCentroidZ + vesselZmin;
double xC = sensorCentroidX;
double slopeF = (xC-xS) / (zC-zS);
......@@ -436,12 +439,19 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
zF += focusTunePerp * sensorSphRadius * std::cos(M_PI/2-thetaF);
xF += focusTunePerp * sensorSphRadius * std::sin(M_PI/2-thetaF);
FocusMirror(zF,xF,B);
*/
// focus 4: use (z,x) coordinates for tune parameters
double zF = zS + focusTuneZ;
double xF = xS + focusTuneX;
FocusMirror(zF,xF,B);
/*
printf("(zC,xC) = ( %.2f, %.2f )\n",zC,xC);
printf("zS = %f\n",zS);
printf("xS = %f\n",xS);
printf("B = %f\n",B);
// print some calculated parameters, viz. mirror attributes
//printf("(zC,xC) = ( %.2f, %.2f )\n",zC,xC);
//printf("zS = %f\n",zS);
//printf("xS = %f\n",xS);
//printf("B = %f\n",B);
printf("zM = %f\n",zM);
printf("xM = %f\n",xM);
printf("rM = %f\n",rM);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment