Regelman’s cascade

F.P. Laussy
24 July 2024

g2

g2[clicks1_,clicks2_,sz_,ctmax_]:=Module[{n1,n2,fitα,fitβ,samplesize,nimin,nimax,rn2,td,ftd,bc,tmax,norm},
(* max time difference considered for the binning *)
n1=Length[clicks1];
n2=Length[clicks2];
fitα=Fit[clicks2,{t,1},t]/.t->0;
fitβ=(Fit[clicks2,{t,1},t]-fitα)/.t->1;
(*slope2=Fit[clicks2,{1,t},t]/.t->1;*)
(*This is how many points we locally compare*)
(*nimin=Position[clicks1,Nearest[clicks1,(samplesize)slope2][[1]]][[1,1]]+1;
nimax=Position[clicks1,Nearest[clicks1,(n2-samplesize)slope2][[1]]][[1,1]]-1;*)
samplesize=500;
rn2=Range[n2];
tmax=Max[clicks1[[-1]]-clicks1[[1]],clicks2[[-1]]-clicks2[[1]]];
td=Table[clicks2[[Intersection[Range@@Round[((clicks1[[ni]]-fitα)/(fitβ))+{-samplesize,samplesize}],rn2]]]-clicks1[[ni]],{ni,1,n1}];
ftd=DeleteCases[Flatten[td],0.];
bc=BinCounts[ftd,{-ctmax,ctmax,sz}];
norm=N[Table[Min[{((n1 n2 sz)/(tmax^2))(tmax+nt),((n1 n2 sz)/(tmax^2))(tmax-nt)}],{nt,-ctmax,ctmax,((2ctmax)/(Length[bc]-1))}]];
bc/norm
]

Monte Carlo simulation:

Number of levels:

Ν=5;

Decay rates of each level (random)

lγ=Table[Random[],{i,Ν}]

(or all equal)

lγ=Range[Ν]0+.33

In all cases, the ground state must not decay:

lγ[[1]]=0;lγ

Gain: (pumping)
The highest excited state must also not be excited:

lG=Table[.5,{i,Ν}];lG[[-1]]=0;lG

This will record the photon clicks of our transitions:

clicks=Table[{0},{i,Ν}];

Number of points (roughly per level, this depends on decay/pumping rates, of course):

npts=50000*Ν

Time (starts at zero)

currentime=0;

Starting level (ground state, doesn’t matter in the long run):

level=1;

The Monte Carlo code:

Timing[Do[
If[Random[]>((lG[[level]])/(lG[[level]]+lγ[[level]])),climb=-1,climb=1];
If[climb==1,
currentime+=Random[ExponentialDistribution[lG[[level]]]],
clicks[[level]]=Append[clicks[[level]],currentime=currentime+Random[ExponentialDistribution[lγ[[level]]]]]
];
level=level+climb,
{i,npts}
]]

Number of events for each transition (none for the ground state, which doesn’t decay):

Length/@clicks

ListPlot[%]

Max correlation time:

maxτ=100;

Calculations of various correlations:

Timing[mg2cor22=g2[clicks[[2]],clicks[[2]],.5,100];]

Timing[mg2cor23=g2[clicks[[2]],clicks[[3]],.5,100];]

Timing[mg2cor33=g2[clicks[[3]],clicks[[3]],.5,100];]

Timing[mg2cor44=g2[clicks[[4]],clicks[[4]],.5,100];]

Timing[mg2cor55=g2[clicks[[5]],clicks[[5]],.5,100];]

Timing[mg2cor25=g2[clicks[[2]],clicks[[5]],.5,100];]

Results:

We observe bunching elbows around antibunching for the final (to ground state) transition, due to it being squished from below:

ListLinePlot[mg2cor22,PlotRange->All,DataRange->{-maxτ,maxτ}]

Antibunching for other transitions:

ListLinePlot[mg2cor33,PlotRange->All,DataRange->{-maxτ,maxτ}]

ListLinePlot[mg2cor44,PlotRange->All,DataRange->{-maxτ,maxτ}]

And bunching again for the excited state, squished from above:

ListLinePlot[mg2cor55,PlotRange->All,DataRange->{-maxτ,maxτ}]

Cascade for the cross-correlations (contiguous)

ListLinePlot[mg2cor23,PlotRange->All,DataRange->{-maxτ,maxτ}]

Or not if far apart:

ListLinePlot[mg2cor25,PlotRange->All,DataRange->{-maxτ,maxτ}]