Simulated optics experiment/Data analysis: Difference between revisions

(→‎Task description: Added ATS as a reference implementation.)
Line 930:
CHSH violation +0.817493
 
</pre>
 
=={{header|Phix}}==
Gone for as simple as possible, includes the generation phase, and for javascript compatability file save/load commented out.
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">datalog</span>
<span style="color: #008080;">enum</span> <span style="color: #000000;">S</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">L</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">R</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">L1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">L2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">R1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">R2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">LL</span><span style="color: #0000FF;">=$</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">angles</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (this is indexed via L and R)</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">0.0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">45.0</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">22.5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">67.5</span><span style="color: #0000FF;">}}</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">detector_recieve</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">lr</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">amplitude</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">intensity</span> <span style="color: #0000FF;">:=</span> <span style="color: #000000;">amplitude</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">amplitude</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">randnum</span> <span style="color: #0000FF;">:=</span> <span style="color: #7060A8;">rnd</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">datalog</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">lr</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">:=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">randnum</span> <span style="color: #0000FF;"><=</span> <span style="color: #000000;">intensity</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">splitter_receive</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">lr</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">source_angle</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">rand_0_or_1</span> <span style="color: #0000FF;">:=</span> <span style="color: #7060A8;">rand_range</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">datalog</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">lr</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">rand_0_or_1</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">my_angle</span> <span style="color: #0000FF;">:=</span> <span style="color: #000000;">angles</span><span style="color: #0000FF;">[</span><span style="color: #000000;">lr</span><span style="color: #0000FF;">][</span><span style="color: #000000;">rand_0_or_1</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span>
<span style="color: #000000;">relative_angle</span> <span style="color: #0000FF;">:=</span> <span style="color: #000000;">my_angle</span> <span style="color: #0000FF;">-</span> <span style="color: #000000;">source_angle</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">amplitude1</span> <span style="color: #0000FF;">:=</span> <span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">cos</span><span style="color: #0000FF;">(</span><span style="color: #004600;">PI</span><span style="color: #0000FF;">/</span><span style="color: #000000;">180</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">relative_angle</span><span style="color: #0000FF;">)),</span>
<span style="color: #000000;">amplitude2</span> <span style="color: #0000FF;">:=</span> <span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sin</span><span style="color: #0000FF;">(</span><span style="color: #004600;">PI</span><span style="color: #0000FF;">/</span><span style="color: #000000;">180</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">relative_angle</span><span style="color: #0000FF;">))</span>
<span style="color: #000000;">detector_recieve</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">lr</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">amplitude1</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">detector_recieve</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">lr</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">amplitude2</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">light_source</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">num_events</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">num_events</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">rand_0_or_1</span> <span style="color: #0000FF;">:=</span> <span style="color: #7060A8;">rand_range</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">datalog</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">][</span><span style="color: #000000;">S</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">rand_0_or_1</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">rand_0_or_1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">splitter_receive</span><span style="color: #0000FF;">(</span><span style="color: #000000;">L</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0.0</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">splitter_receive</span><span style="color: #0000FF;">(</span><span style="color: #000000;">R</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90.0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">splitter_receive</span><span style="color: #0000FF;">(</span><span style="color: #000000;">L</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90.0</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">splitter_receive</span><span style="color: #0000FF;">(</span><span style="color: #000000;">R</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0.0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">generate</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">num_events</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">object</span> <span style="color: #000000;">output_file</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">datalog</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(-</span><span style="color: #000000;">9</span><span style="color: #0000FF;">,</span><span style="color: #000000;">LL</span><span style="color: #0000FF;">),</span><span style="color: #000000;">num_events</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">light_source</span><span style="color: #0000FF;">(</span><span style="color: #000000;">num_events</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #004080;">string</span><span style="color: #0000FF;">(</span><span style="color: #000000;">output_file</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">or</span> <span style="color: #000000;">num_events</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">20</span> <span style="color: #008080;">then</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">fn</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">iff</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span><span style="color: #0000FF;">(</span><span style="color: #000000;">output_file</span><span style="color: #0000FF;">)?</span><span style="color: #7060A8;">open</span><span style="color: #0000FF;">(</span><span style="color: #000000;">output_file</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"w"</span><span style="color: #0000FF;">):</span><span style="color: #000000;">output_file</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">num_events</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">l</span> <span style="color: #008080;">in</span> <span style="color: #000000;">datalog</span> <span style="color: #008080;">do</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #000000;">l</span><span style="color: #0000FF;">,</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">:=</span><span style="color: #008000;">"%d"</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">if</span> <span style="color: #004080;">string</span><span style="color: #0000FF;">(</span><span style="color: #000000;">output_file</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">close</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">generate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">100000</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">--generate(1e5,"datalog.log")</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">adjust_data_for_light_pulse_orientation</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">data</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span> <span style="color: #008080;">in</span> <span style="color: #000000;">data</span> <span style="color: #008080;">do</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">[</span><span style="color: #000000;">S</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">data</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">reinstate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">L1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">L2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">R1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">R2</span><span style="color: #0000FF;">},</span><span style="color: #7060A8;">extract</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">L2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">L1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">R2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">R1</span><span style="color: #0000FF;">}))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">data</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">split_data_according_to_PBS_setting</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">data</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">dataL1R1</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span> <span style="color: #000000;">dataL1R2</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span>
<span style="color: #000000;">dataL2R1</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span> <span style="color: #000000;">dataL2R2</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">d</span> <span style="color: #008080;">in</span> <span style="color: #000000;">data</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">dLR</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">[</span><span style="color: #000000;">L</span><span style="color: #0000FF;">..</span><span style="color: #000000;">R</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">dLR</span><span style="color: #0000FF;">={</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">}</span> <span style="color: #008080;">then</span> <span style="color: #000000;">dataL1R1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dataL1R1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">dLR</span><span style="color: #0000FF;">={</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}</span> <span style="color: #008080;">then</span> <span style="color: #000000;">dataL1R2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dataL1R2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">dLR</span><span style="color: #0000FF;">={</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">}</span> <span style="color: #008080;">then</span> <span style="color: #000000;">dataL2R1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dataL2R1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">dLR</span><span style="color: #0000FF;">={</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}</span> <span style="color: #008080;">then</span> <span style="color: #000000;">dataL2R2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dataL2R2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">else</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">dataL1R1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dataL1R2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dataL2R1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dataL2R2</span><span style="color: #0000FF;">}</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">compute_correlation_coefficient</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">data</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">N</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">data</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">NL1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">NL2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">NR1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">NR2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">item</span> <span style="color: #008080;">in</span> <span style="color: #000000;">data</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">NL1</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">item</span><span style="color: #0000FF;">[</span><span style="color: #000000;">L1</span><span style="color: #0000FF;">]</span>
<span style="color: #000000;">NL2</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">item</span><span style="color: #0000FF;">[</span><span style="color: #000000;">L2</span><span style="color: #0000FF;">]</span>
<span style="color: #000000;">NR1</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">item</span><span style="color: #0000FF;">[</span><span style="color: #000000;">R1</span><span style="color: #0000FF;">]</span>
<span style="color: #000000;">NR2</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">item</span><span style="color: #0000FF;">[</span><span style="color: #000000;">R2</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">sinL</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">NL1</span> <span style="color: #0000FF;">/</span> <span style="color: #000000;">N</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">cosL</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">NL2</span> <span style="color: #0000FF;">/</span> <span style="color: #000000;">N</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">sinR</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">NR1</span> <span style="color: #0000FF;">/</span> <span style="color: #000000;">N</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">cosR</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">NR2</span> <span style="color: #0000FF;">/</span> <span style="color: #000000;">N</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">cosLR</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">cosR</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">cosL</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">+</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">sinR</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">sinL</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">sinLR</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">sinR</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">cosL</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">-</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">cosR</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">sinL</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">kappa</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">cosLR</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">cosLR</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">-</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">sinLR</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">sinLR</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">kappa</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #000080;font-style:italic;">--function read_from_file(string input_file)
-- sequence data = read_lines(input_file)
-- assert(to_integer(data[1])+1=length(data))
-- data = data[2..$]
-- for i,d in data do
-- data[i] = scanf(d,"%d %d %d %d %d %d %d")[1]
-- end for
-- return data
--end function</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">run_analysis</span><span style="color: #0000FF;">()</span>
<span style="color: #000080;font-style:italic;">--procedure run_analysis(string input_file)
-- sequence data = read_from_file(input_file)
-- assert(data=datalog)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">data</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">datalog</span>
<span style="color: #000000;">datalog</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> <span style="color: #000080;font-style:italic;">-- (kill refcount)</span>
<span style="color: #000000;">data</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">adjust_data_for_light_pulse_orientation</span><span style="color: #0000FF;">(</span><span style="color: #000000;">data</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">sequence</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">dataL1R1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dataL1R2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dataL2R1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dataL2R2</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">split_data_according_to_PBS_setting</span><span style="color: #0000FF;">(</span><span style="color: #000000;">data</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #0000FF;">{{},{</span><span style="color: #000000;">angleL1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">angleL2</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">angleR1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">angleR2</span><span style="color: #0000FF;">}}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">angles</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">kappaL1R1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">compute_correlation_coefficient</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dataL1R1</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">kappaL1R2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">compute_correlation_coefficient</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dataL1R2</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">kappaL2R1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">compute_correlation_coefficient</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dataL2R1</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">kappaL2R2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">compute_correlation_coefficient</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dataL2R2</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">chsh_contrast</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">kappaL1R1</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">kappaL1R2</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">kappaL2R1</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">kappaL2R2</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">chsh_contrast_nominal</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">2</span> <span style="color: #0000FF;">*</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2.0</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n light pulse events %9d\n\n"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">data</span><span style="color: #0000FF;">))</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" correlation coefs\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" %4.1f° %4.1f° %+9.6f\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">angleL1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">angleR1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">kappaL1R1</span><span style="color: #0000FF;">})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" %4.1f° %4.1f° %+9.6f\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">angleL1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">angleR2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">kappaL1R2</span><span style="color: #0000FF;">})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" %4.1f° %4.1f° %+9.6f\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">angleL2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">angleR1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">kappaL2R1</span><span style="color: #0000FF;">})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" %4.1f° %4.1f° %+9.6f\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">angleL2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">angleR2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">kappaL2R2</span><span style="color: #0000FF;">})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" CHSH contrast %+9.6f\n"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">chsh_contrast</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" 2*sqrt(2) = nominal %+9.6f\n"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">chsh_contrast_nominal</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" difference %+9.6f\n"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">chsh_contrast</span> <span style="color: #0000FF;">-</span> <span style="color: #000000;">chsh_contrast_nominal</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n CHSH violation %+9.6f\n\n"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">chsh_contrast</span> <span style="color: #0000FF;">-</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">run_analysis</span><span style="color: #0000FF;">()</span>
<span style="color: #000080;font-style:italic;">--run_analysis("datalog.log")</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
   light pulse events      100000
 
    correlation coefs
           0.0° 22.5°   -0.708021
           0.0° 67.5°   +0.700617
          45.0° 22.5°   +0.709869
          45.0° 67.5°   +0.712739
 
        CHSH contrast   +2.831245
  2*sqrt(2) = nominal   +2.828427
           difference   +0.002818
 
       CHSH violation   +0.831245
</pre>
 
7,806

edits