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: ...@@ -359,14 +359,14 @@ Examples:
<constant name="TrackerBarrel_zmax" value="TrackerBarrel_length/2.0"/> <constant name="TrackerBarrel_zmax" value="TrackerBarrel_length/2.0"/>
<constant name="TrackerBarrelInside_length" value="VertexTrackingRegion_length"/> <constant name="TrackerBarrelInside_length" value="VertexTrackingRegion_length"/>
<constant name="TrackerBarrelInside_zmax" value="TrackerBarrelInside_length/2.0"/> <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"/> <constant name="TrackerEndcapN_length" value="495.0*mm"/>
<documentation level="0"> <documentation level="0">
### PID Detector Region Parameters ### PID Detector Region Parameters
</documentation> </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_rmin1" value="Beampipe_rmax + 90*mm"/>
<constant name="ForwardPID_rmin2" value="18.0*cm"/> <constant name="ForwardPID_rmin2" value="18.0*cm"/>
......
...@@ -10,9 +10,9 @@ ...@@ -10,9 +10,9 @@
<constant name="DRICH_wall_thickness" value="0.5*cm"/> <!-- thickness of radial walls --> <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 --> <constant name="DRICH_window_thickness" value="0.1*cm"/> <!-- thickness of entrance and exit walls -->
<!-- tank geometry: cylinder, holding the majority of detector components --> <!-- 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 --> <!-- 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_SnoutSlope" value="DRICH_rmax2 / (DRICH_zmin + DRICH_Length)"/>
<constant name="DRICH_rmax0" value="DRICH_SnoutSlope * DRICH_zmin"/> <constant name="DRICH_rmax0" value="DRICH_SnoutSlope * DRICH_zmin"/>
<constant name="DRICH_rmax1" value="DRICH_SnoutSlope * ( DRICH_zmin + DRICH_SnoutLength)"/> <constant name="DRICH_rmax1" value="DRICH_SnoutSlope * ( DRICH_zmin + DRICH_SnoutLength)"/>
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
</documentation> </documentation>
<radiator <radiator
rmin="DRICH_rmin0 + DRICH_wall_thickness + 2.0*cm" 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" phiw="60*degree"
frontplane="DRICH_window_thickness + 0.5*DRICH_aerogel_thickness" frontplane="DRICH_window_thickness + 0.5*DRICH_aerogel_thickness"
pitch="0*degree" pitch="0*degree"
...@@ -131,13 +131,10 @@ ...@@ -131,13 +131,10 @@
- `phiw`: azimuthal width of one sector - `phiw`: azimuthal width of one sector
- `thickness` is the radial thickness of the mirror; note that `backplane` is given for the - `thickness` is the radial thickness of the mirror; note that `backplane` is given for the
reflective mirror surface, the inner radius of the sphere reflective mirror surface, the inner radius of the sphere
- `focus_tune*` are tuning parameters for the focal plane: - `focus_tune*` are tuning parameters for the focal region:
- linearly retune focal point, using a real number; reference numbers are: - `focus_tune_z` and `focus_tune_x` will move the focal region, with respect
- 0.0: disabled, ideal focus at sensor sphere center to the sensor sphere center (i.e., set both to zero for focus at the sensor sphere center
- 1.0: ideal focus re-tuned to be on sensor sphere (ignoring spherical aberrations effects))
- `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
- other settings: - other settings:
- `debug`: set to 1 so draw reference sphere instead, view with y-clipping - `debug`: set to 1 so draw reference sphere instead, view with y-clipping
</documentation> </documentation>
...@@ -150,8 +147,8 @@ ...@@ -150,8 +147,8 @@
rmax="DRICH_rmax2 - DRICH_wall_thickness - 5.0*cm" rmax="DRICH_rmax2 - DRICH_wall_thickness - 5.0*cm"
phiw="59.5*degree" phiw="59.5*degree"
thickness="0.2*cm" thickness="0.2*cm"
focus_tune_long="0.5" focus_tune_x="40.0*cm"
focus_tune_perp="0.2" focus_tune_z="-30.0*cm"
debug="DRICH_debug_mirror" debug="DRICH_debug_mirror"
/> />
...@@ -208,14 +205,14 @@ ...@@ -208,14 +205,14 @@
- `zmin`: z-plane cut - `zmin`: z-plane cut
</documentation> </documentation>
<sphere <sphere
centerz="-112.0 * cm" centerz="-80.0 * cm"
centerx="DRICH_rmax2 - 35.0*cm" centerx="DRICH_rmax2 - 35.0*cm"
radius="160.0 * cm" radius="100.0 * cm"
debug="DRICH_debug_sensors" debug="DRICH_debug_sensors"
/> />
<sphericalpatch <sphericalpatch
phiw="18*degree" phiw="18*degree"
rmin="DRICH_rmax1 + 10.0*cm" rmin="DRICH_rmax1 + 0.0*cm"
rmax="DRICH_rmax2 - 5.0*cm" rmax="DRICH_rmax2 - 5.0*cm"
zmin="DRICH_SnoutLength + 5.0*cm" zmin="DRICH_SnoutLength + 5.0*cm"
/> />
......
...@@ -77,8 +77,8 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec ...@@ -77,8 +77,8 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
double mirrorRmin = mirrorElem.attr<double>(_Unicode(rmin)); double mirrorRmin = mirrorElem.attr<double>(_Unicode(rmin));
double mirrorRmax = mirrorElem.attr<double>(_Unicode(rmax)); double mirrorRmax = mirrorElem.attr<double>(_Unicode(rmax));
double mirrorPhiw = mirrorElem.attr<double>(_Unicode(phiw)); double mirrorPhiw = mirrorElem.attr<double>(_Unicode(phiw));
double focusTuneLong = mirrorElem.attr<double>(_Unicode(focus_tune_long)); double focusTuneZ = mirrorElem.attr<double>(_Unicode(focus_tune_z));
double focusTunePerp = mirrorElem.attr<double>(_Unicode(focus_tune_perp)); double focusTuneX = mirrorElem.attr<double>(_Unicode(focus_tune_x));
// - sensor module // - sensor module
auto sensorElem = detElem.child(_Unicode(sensors)).child(_Unicode(module)); auto sensorElem = detElem.child(_Unicode(sensors)).child(_Unicode(module));
auto sensorMat = desc.material(sensorElem.attr<std::string>(_Unicode(material))); 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 ...@@ -395,16 +395,12 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
// BUILD MIRRORS ==================================================================== // 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 // derive spherical mirror parameters `(zM,xM,rM)`, for given image point
// coordinates `(zI,xI)` and `dO`, defined as the z-distance between the // 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 and the mirror surface
// object point coordinates // - 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; double zM,xM,rM;
auto FocusMirror = [&zM,&xM,&rM](double zI, double xI, double dO) { auto FocusMirror = [&zM,&xM,&rM](double zI, double xI, double dO) {
zM = dO*zI / (2*dO-zI); zM = dO*zI / (2*dO-zI);
...@@ -412,6 +408,12 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec ...@@ -412,6 +408,12 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
rM = dO - zM; 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)` // focus 1: set mirror to focus IP on center of sensor sphere `(zS,xS)`
/*double zF = zS; /*double zF = zS;
double xF = xS; double xF = xS;
...@@ -423,6 +425,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec ...@@ -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` is the distance to move, given as a fraction of `sensorSphRadius`
// - `focusTuneLong==0` means `(zF,xF)==(zS,xS)` // - `focusTuneLong==0` means `(zF,xF)==(zS,xS)`
// - `focusTuneLong==1` means `(zF,xF)` will be on the sensor sphere, near the centroid // - `focusTuneLong==1` means `(zF,xF)` will be on the sensor sphere, near the centroid
/*
double zC = sensorCentroidZ + vesselZmin; double zC = sensorCentroidZ + vesselZmin;
double xC = sensorCentroidX; double xC = sensorCentroidX;
double slopeF = (xC-xS) / (zC-zS); double slopeF = (xC-xS) / (zC-zS);
...@@ -436,12 +439,19 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec ...@@ -436,12 +439,19 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
zF += focusTunePerp * sensorSphRadius * std::cos(M_PI/2-thetaF); zF += focusTunePerp * sensorSphRadius * std::cos(M_PI/2-thetaF);
xF += focusTunePerp * sensorSphRadius * std::sin(M_PI/2-thetaF); xF += focusTunePerp * sensorSphRadius * std::sin(M_PI/2-thetaF);
FocusMirror(zF,xF,B); 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); // print some calculated parameters, viz. mirror attributes
printf("zS = %f\n",zS); //printf("(zC,xC) = ( %.2f, %.2f )\n",zC,xC);
printf("xS = %f\n",xS); //printf("zS = %f\n",zS);
printf("B = %f\n",B); //printf("xS = %f\n",xS);
//printf("B = %f\n",B);
printf("zM = %f\n",zM); printf("zM = %f\n",zM);
printf("xM = %f\n",xM); printf("xM = %f\n",xM);
printf("rM = %f\n",rM); 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