Changeset 9565 for trunk/MagicSoft/Mars/msimreflector/MSimReflector.cc
- Timestamp:
- 03/30/10 14:47:27 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/msimreflector/MSimReflector.cc
r9564 r9565 18 18 ! Author(s): Thomas Bretz, 1/2009 <mailto:tbretz@astro.uni-wuerzburg.de> 19 19 ! 20 ! Copyright: CheObs Software Development, 2000-20 0920 ! Copyright: CheObs Software Development, 2000-2010 21 21 ! 22 22 ! … … 33 33 // obsolete except they can later be "moved" inside the detector, e.g. 34 34 // if you use MSimPSF to emulate a PSF by moving photons randomly 35 // on the focal plane. 35 // on the focal plane. To switch off this check set detector margin to -1. 36 36 // 37 37 ////////////////////////////////////////////////////////////////////////////// … … 206 206 // Focal length: F=R/2 | Focal length: F = 1/4p 207 207 // | 208 // r^2 + (z-2*F)^2 = (2*F)^2 | z = F/4*r^2208 // r^2 + (z-2*F)^2 = (2*F)^2 | z = r^2/4F 209 209 // | 210 210 // z = -sqrt(4*F*F - r*r) + 2*F | 211 211 // z-2*F = -sqrt(4*F*F - r*r) | 212 212 // (z-2*F)^2 = 4*F*F - r*r | 213 // z^2-4*F*z+4*F^2 = 4*F*F - r*r (4F^2-r^2>0) | z - F/4*r^2= 0213 // z^2-4*F*z+4*F^2 = 4*F*F - r*r (4F^2-r^2>0) | z - r^2/4F = 0 214 214 // z^2-4*F*z+r^2 = 0 215 215 // … … 223 223 // ------------------ 224 224 // 225 // z^2*(1+|v|^2) - 2*z*(2*F+q*v) + |q|^2 = 0 | z^2*|v|^2 - 2* (2/F+q*v)*z+ |q|^2 = 0225 // z^2*(1+|v|^2) - 2*z*(2*F+q*v) + |q|^2 = 0 | z^2*|v|^2 - 2*z*(2*F+q*v) + |q|^2 = 0 226 226 // 227 227 // z = (-b +- sqrt(b*b - 4ac))/(2*a) 228 228 // 229 229 // a = 1+|v|^2 | a = |v|^2 230 // b = - 2* (2*F+q*v) | b = - 2*(2/F+q*v)230 // b = - 2*b' with b' = 2*F+q*v | b = - 2*b' with b' = 2*F+q*v 231 231 // c = |q|^2 | c = |q|^2 232 232 // | … … 234 234 // substitute b := 2*b' 235 235 // 236 // z = ( -2*b' +- 2*sqrt(b'*b' - ac))/(2*a)237 // z = ( -b' +- sqrt(b'*b' - ac))/a238 // z = ( -b'/a +- sqrt(b'*b' - ac))/a236 // z = (2*b' +- 2*sqrt(b'*b' - ac))/(2*a) 237 // z = ( b' +- sqrt(b'*b' - ac))/a 238 // z = (b'/a +- sqrt(b'*b' - ac))/a 239 239 // 240 240 // substitute f := b'/a 241 241 // 242 // z = (-f +- sqrt(f^2 - c/a)242 // z = f +- sqrt(f^2 - c/a) 243 243 // 244 244 // ======================================================================================= … … 265 265 266 266 // Find the incident point of the vector to the mirror 267 // u corresponds to downwa qrd going particles, thus we use -u here267 // u corresponds to downward going particles, thus we use -u here 268 268 const Double_t b = G - q*v; 269 269 const Double_t a = v.Mod2(); … … 271 271 272 272 // Solution for q spherical (a+1) (parabolic mirror (a) instead of (a+1)) 273 const Double_t f = b/(a+1); 274 const Double_t g = c/(a+1); 273 const Double_t A = fShape ? a : a+1; 274 275 const Double_t f = b/A; 276 const Double_t g = c/A; 275 277 276 278 // Solution of second order polynomial (transformed: a>0) 277 279 // (The second solution can be omitted, it is the intersection 278 280 // with the upper part of the sphere) 279 // const Double_t dz = a==0 ? c/(2*b) : f - TMath::Sqrt(f*f - g); 280 const Double_t z = f - TMath::Sqrt(f*f - g); 281 const Double_t z = a==0 ? c/(2*b) : f - TMath::Sqrt(f*f - g); 281 282 282 283 // Move the photon along its trajectory to the x/y plane of the … … 293 294 294 295 // Get normal vector for reflection by calculating the derivatives 295 // of a spherical mirror along x and y 296 const Double_t d = TMath::Sqrt(G*G - p.R2()); 297 298 // This is a normal vector at the incident point 296 // of a the mirror's surface along x and y 297 const Double_t d = fShape ? G : TMath::Sqrt(G*G - p.R2()); 298 299 // The solution for the normal vector is 300 // TVector3 n(-p.X()/d, -p.Y()/d, 1)); 301 // Since the normal vector doesn't need to be of normal 302 // length we can avoid an obsolete division 299 303 TVector3 n(p.X(), p.Y(), -d); 300 // This is the obvious solution for the normal vector301 // TVector3 n(-p.X()/d, -p.Y()/d, 1));302 304 303 305 if (fSigmaPSF>0) … … 540 542 // It is detector specific not reflector specific 541 543 // Discard all photons which definitly can not hit the detector surface 542 if ( !fGeomCam->HitDetector(p, fDetectorMargin))544 if (fDetectorMargin>=0 && !fGeomCam->HitDetector(p, fDetectorMargin)) 543 545 continue; 544 546
Note:
See TracChangeset
for help on using the changeset viewer.