Skip to content

Incorrect photon paths from complex refractive index #22

@MarkusDittmer

Description

@MarkusDittmer

Ramy found mismatches between real world behavior and simulation. When shooting photons through a PMT sideways, the beam path should go upwards. In the simulation it goes downwards. See https://icecube-spno.slack.com/archives/C08N2UBPEQG/p1753248826406709 for details.

Visualization:

Measurement setup
Image
Measurement result
Image
Simulation
Image

Suggested Fix:

In OMSimOpBoundaryProcess.cc (starting at line 1718) change the calculation of lE2Perp and lE2Parl. The difference is that the new calculation uses lCost1Complex.real() instead of lCost1

/* lS1 = fRindex1 * lCost1;
    G4double lCost2 = lCost1 > 0.0 ? std::sqrt(1. - lSint2 * lSint2) : -std::sqrt(1. - lSint2 * lSint2);

    lE2Perp = 2. * lS1 * lE1Perp / (fRindex1 * lCost1 + fRindex2 * lCost2);
    lE2Parl = 2. * lS1 * lE1Parl / (fRindex2 * lCost1 + fRindex1 * lCost2);
    lE2Total = lE2Perp * lE2Perp + lE2Parl * lE2Parl;

    G4double lCostTL = lCost1 > 0.0 ? std::sqrt(1. - lSintTL * lSintTL) : -std::sqrt(1. - lSintTL * lSintTL);
    */

    lCostTLComplex = lCost1 > 0.0 ? std::sqrt(G4complex(1.0, 0.0) - lSintTLComplex * lSintTLComplex) : -std::sqrt(G4complex(1.0, 0.0) - lSintTLComplex * lSintTLComplex);
    lCost2Complex = lCost1 > 0.0 ? std::sqrt(G4complex(1.0, 0.0) - lSint2Complex * lSint2Complex) : -std::sqrt(G4complex(1.0, 0.0) - lSint2Complex * lSint2Complex);

    lCost1Complex = G4complex(lCost1, 0);

    if (lMyInfo->getVolumeHistorySize() > 1 && lRindexBefore != 0)
    {
      G4complex lSintLayer0 = fRindex1 * lSint1 / lRindexBefore;
      G4complex lSint1 = lBeforeComplexRindex * lSintLayer0 / lComplexRindex1;
      lCost1Complex = std::sqrt(G4complex(1.0, 0.0) - lSint1 * lSint1);
    }

    lS1 = fRindex1 * lCost1Complex.real();

    lE2Perp = 2. * lS1 * lE1Perp / (fRindex1 * lCost1Complex.real() + fRindex2 * lCost2Complex.real());
    lE2Parl = 2. * lS1 * lE1Parl / (fRindex2 * lCost1Complex.real() + fRindex1 * lCost2Complex.real());
    lE2Total = lE2Perp * lE2Perp + lE2Parl * lE2Parl;

Metadata

Metadata

Labels

bugSomething isn't workinghelp wantedExtra attention is needed

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions