-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove Parabolic and Hyperbolic mirror restrictions and add x_sep #81
Changes from 34 commits
9815117
dbcc47c
92fda9d
350dd66
2aefce7
941945d
7deb7d9
e6ed715
5077ff5
dc5541f
ad5b10d
a4dc161
c69bc30
b967ccb
f44569d
4540f6c
40ca3be
c9b4362
923a11f
04f2cee
6adc342
30aff7f
8b00dea
d45f68f
6c11abb
ae3d5a9
b2eaf97
320b038
0015cc3
a5836d0
3d2ff54
cc7e1e4
a402d7f
bfb5535
f971d3b
2799fde
d46604e
701c676
d688e78
60f5503
ccc31a6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -169,11 +169,22 @@ void TRestAxionTrueWolterOptics::Initialize() { | |
SetLibraryVersion(LIBRARY_VERSION); | ||
|
||
fR1 = GetR1(); | ||
fR2 = GetR2(); | ||
fR3 = GetR3(); | ||
fR4 = GetR4(); | ||
fR5 = GetR5(); | ||
fAlpha = GetAlpha(); | ||
fThickness = GetThickness(); | ||
|
||
fXSep.clear(); | ||
for (unsigned int n = 0; n < fAlpha.size(); n++) | ||
if (fR2[n] == fR3[n]) { | ||
fXSep.push_back(0); | ||
} else { | ||
fXSep.push_back(2 * (fR1[n] - fR3[n] - fMirrorLength * TMath::Sin(fAlpha[n])) / | ||
TMath::Tan(fAlpha[n])); | ||
} | ||
|
||
if (fAlpha.size() == 0) return; | ||
|
||
fCosAlpha.clear(); | ||
|
@@ -276,9 +287,10 @@ Int_t TRestAxionTrueWolterOptics::FirstMirrorReflection(const TVector3& pos, con | |
|
||
//// Reflection on first mirror | ||
fFirstInteractionPosition = REST_Physics::GetParabolicVectorIntersection( | ||
pos, dir, fAlpha[mirror], fR3[mirror], fMirrorLength); // should add this: TVector3(0, 0, -1), vertex | ||
pos, dir, fAlpha[mirror], fR3[mirror]); // should add this: TVector3(0, 0, -1), vertex | ||
|
||
if (fFirstInteractionPosition.Z() < GetEntrancePositionZ() || fFirstInteractionPosition.Z() > 0) { | ||
if (fFirstInteractionPosition.Z() < GetEntrancePositionZ() || | ||
fFirstInteractionPosition.Z() > -(0.5 * fXSep[mirror])) { | ||
RESTDebug << "TRestAxionTrueWolterOptics::FirstMirrorReflection. No interaction!" << RESTendl; | ||
fFirstInteractionPosition = REST_Physics::MoveByDistance(pos, dir, fMirrorLength / 2.); | ||
fMiddleDirection = fEntranceDirection; | ||
|
@@ -321,12 +333,12 @@ Int_t TRestAxionTrueWolterOptics::SecondMirrorReflection(const TVector3& pos, co | |
TVector3 vertex(0, 0, fBackVertex[mirror]); | ||
Double_t focal = fR3[mirror] / TMath::Tan(4 * fAlpha[mirror]); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is (this is how you end up with a "1500mm" LLNL telescope, which actually has a 1530mm focal length) Or is this equation for some reason correct as is for a true Wolter optic? edit: https://rest-for-physics.github.io/framework/classTRestAxionTrueWolterOptics.html it seems to be the former still. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So in the document for the true Wolter optics they call this the z-Koordinate of the detector/ focal point. I thought this would be roughly the same for each layer. What do you mean by "virtual reflection point"? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So for these true Wolter functions it is not the focal length of the whole optics but of the the single hyperbolic mirror as far as I understand. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The virtual point is indicated in this schematic I made for my thesis. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here is the true Wolter calculation I got from Vadim's colleague and it does state that what I call "focal" is calculated with R3. Interesting point though to note about the virtual reflection point! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok, good to know. Then I suppose this is indeed correct for a true Wolter optic. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. But it's not the whole optics focal spot, that is true and confusing^^ There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. But the PDF you sent explicitly says 'Fokallänge' for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, but the calculation is right there and they clearly mean R3 with r0 |
||
|
||
//// Reflection on first mirror | ||
fSecondInteractionPosition = | ||
REST_Physics::GetHyperbolicVectorIntersection(pos, dir, fAlpha[mirror], fR3[mirror], fMirrorLength, | ||
focal); // should add this: TVector3(0, 0, -1), vertex, | ||
//// Reflection on second mirror | ||
fSecondInteractionPosition = REST_Physics::GetHyperbolicVectorIntersection( | ||
pos, dir, fAlpha[mirror], fR3[mirror], focal); // should add this: TVector3(0, 0, -1), vertex, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Imo it's confusing that this function receives α and you compute 3α in the body of the function. Ideally, have a separate angle that simply describes the correct angle for the second set of mirrors, or compute it in place to clarify? It makes |
||
|
||
if (fSecondInteractionPosition.Z() > GetExitPositionZ() || fSecondInteractionPosition.Z() < 0) { | ||
if (fSecondInteractionPosition.Z() > GetExitPositionZ() || | ||
fSecondInteractionPosition.Z() < (0.5 * fXSep[mirror])) { | ||
RESTDebug << "TRestAxionTrueWolterOptics::SecondMirrorReflection. No interaction!" << RESTendl; | ||
fSecondInteractionPosition = REST_Physics::MoveByDistance(pos, dir, fMirrorLength / 2.); | ||
fExitDirection = fMiddleDirection; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would probably specify more explicitly that in this approach you compute
xSep
based on R1, R3, α and lMirror. Alternatively, you could havexSep
entirely fixed for a telescope and then R4 and and 3α (or whatever the second set of mirrors have) to place the mirrors.When fixing xSep you can still get a different effective distance between first and second set of mirrors. But at that point it is 'deterministic' and depending on whether you want to align each sets of mirrors at their front / center / end.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remind me: For the LLNL optics, was it the same value for x_sep for every layer or a different one?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to my memory there was no information about a set x_sep for NuSTAR optics and they were just aligned in the front and the back which should be fine with this because it just assumes lMirror to always be the same and then the difference between one x_sep to the next should be about 0.03mm which would be what you loose by tilting the mirror further (don't know if that makes sense). But I do think we should align the mirrors in the middle with this calculation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What Jaime and me agreed on is that probably the right thing to do for LLNL is to say x_sep = 4 mm along the optical axis. From there you place the cones, which due to their l = 225 mm then means the physical x_sep for each layer is slightly different and larger. If one were to align the mirrors along the rear (1st set of mirrors) and front (2nd set of mirrors) one would recover x_sep = 4 mm exactly, at the expense of having ragged mirrors (like a staircase) at the entrance and exit of the optic.
What one does in the end is not going to matter /too much/ (you see the difference though if you look at the illumination of each shell in my experience). But I would document the choice you make explicitly. That's my only point.