<!-- 
RSS generated by JIRA (8.3.4#803005-sha1:1f96e09b3c60279a408a2ae47be3c745f571388b) at Sat Feb 10 16:30:39 JST 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>PFS-JIRA</title>
    <link>https://pfspipe.ipmu.jp/jira</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.3.4</version>
        <build-number>803005</build-number>
        <build-date>13-09-2019</build-date>
    </build-info>


<item>
            <title>[INSTRM-980] provide a hxActor simulator that can fake exposure</title>
                <link>https://pfspipe.ipmu.jp/jira/browse/INSTRM-980</link>
                <project id="10300" key="INSTRM">Instrument control development</project>
                    <description>&lt;p&gt;spsActor needs to handle synchronisation between hx and ccd actors.&lt;/p&gt;

&lt;p&gt;I suspect it will require some debugging to do this correctly, and we obviously don&apos;t want to do that with real hardware.&lt;/p&gt;

&lt;p&gt;The simulator does not need to create realistic frame, an empty frame would do it.&lt;/p&gt;

&lt;p&gt;What really matters is command flow/timing etc ..&lt;/p&gt;</description>
                <environment></environment>
        <key id="14389">INSTRM-980</key>
            <summary>provide a hxActor simulator that can fake exposure</summary>
                <type id="3" iconUrl="https://pfspipe.ipmu.jp/jira/secure/viewavatar?size=xsmall&amp;avatarId=10518&amp;avatarType=issuetype">Task</type>
                                            <priority id="10000" iconUrl="https://pfspipe.ipmu.jp/jira/images/icons/priorities/medium.svg">Normal</priority>
                        <status id="10002" iconUrl="https://pfspipe.ipmu.jp/jira/images/icons/statuses/generic.png" description="The issue is resolved, reviewed, and merged">Done</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="cloomis">cloomis</assignee>
                                    <reporter username="arnaud.lefur">arnaud.lefur</reporter>
                        <labels>
                            <label>NIR</label>
                            <label>SPS</label>
                    </labels>
                <created>Wed, 13 May 2020 16:31:19 +0000</created>
                <updated>Tue, 19 Jul 2022 19:55:58 +0000</updated>
                            <resolved>Wed, 30 Mar 2022 14:09:09 +0000</resolved>
                                                                    <component>ics_hxActor</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                <comments>
                            <comment id="18078" author="cloomis" created="Wed, 25 Nov 2020 17:20:54 +0000"  >&lt;p&gt;The single command which matters is &lt;tt&gt;ramp nread=N visit=V&lt;/tt&gt;. Before that is sent you will have the &lt;tt&gt;readTime&lt;/tt&gt; keyword value, which is how long a single read takes. That will be between 5.57 and 11.14 seconds, depending on how we end up configuring reference pixel interleaving (&quot;IRP&quot;).&lt;/p&gt;

&lt;p&gt;For the purpose of SPS/ICC sequencing it is worth keeping in mind that during a ramp the detector continuously reads out from top to bottom, then immediately continues at the top. That said, we always start a ramp with a reset frame, which takes the same readTime as a real read: the start of your requested ramp will be delayed by one readTime. [ We might want to add more resets under some circumstances, but don&apos;t worry about that yet. ]&lt;/p&gt;

&lt;p&gt;Part of the puzzle will be whether we can reliably synchronize the read edges with any interesting SPS changes: shutter transitions, lamp transitions, ccd transitions. At worst we will lose a read at the start and a read at the end, because they overlap with shutter or lamp changes. &lt;span class=&quot;error&quot;&gt;&amp;#91;I have some more detailed notes on this which I will try to recover and merge with these comments. &amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;I am nearly certain that we will want to continue taking reads while the ccd are reading out, for two reasons. One is that we will not need to get the relative timings exactly right. And we will be able to get our first measurement of persistence from the exposure.&lt;/p&gt;

&lt;p&gt;I still need to understand how to figure out when the first read &lt;em&gt;will&lt;/em&gt; start. That may not matter: if we started the ramp along with the ccd wipe (I think we will want to) we can synchronize the shutter/lamp start events &lt;em&gt;after&lt;/em&gt; the ramp has started. At which point I &lt;em&gt;think&lt;/em&gt; we will know when the first read started. &lt;span class=&quot;error&quot;&gt;&amp;#91;But remember the reset frame time. &amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Given those various points I suggest that the starting design should be to send the ramp command along with the ccd wipe command (or earlier if possible), and that nread be set to the expected time between the end of the reset frame and the end of the ccd readout. &lt;span class=&quot;error&quot;&gt;&amp;#91;We need to generate a ccdReadTime keyword, hmm.&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;The main keywords are:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;readTime=seconds. The time a single read will take; this should be good to microseconds. This keyword will come when the DAQ is initialized or reconfigured: before you would send any &lt;tt&gt;ramp&lt;/tt&gt; command. A ramp is a completely synchronous sequence of these per-read times.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;read0Start=timestamp. This is the timestamp for when the first read started. I do not yet know how good I can get this, but am guessing to better than 0.1s. Given read0Start and readTime, you can reliably calculate all later transition times. I hope to generate a decent guess for this shortly after the ramp command has been started, but have not yet tried.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;spsFileIds=camName,dateDir,visit,smNum,armNum &amp;#8211; same as for ccdActor. When this arrives the visit has been entirely finished and all files flushed and closed. (the camName field is there just for humans, etc.)&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;hxRead=visit,readN,ofN &amp;#8211; a running report of completed reads. This is generated after any file writes for that read have been flushed.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;We will need handle the shutter close, etc. times differently from the CCDs for the purpose of EXPTIME, etc.. There is no clean wipe/read split like for the ccd. I think a shutterClosed keyword similar to the new lampX keywords will have to do.&lt;/p&gt;

</comment>
                            <comment id="25707" author="hassan" created="Wed, 8 Dec 2021 14:27:31 +0000"  >&lt;p&gt;This ticket, and subsequent related tickets, will be scheduled for implementation one month prior to the shipping date of N1 to LAM.&lt;/p&gt;</comment>
                            <comment id="30647" author="cloomis" created="Wed, 30 Mar 2022 14:09:09 +0000"  >&lt;p&gt;Merged at a5afcc, tagged 2.3.0&lt;/p&gt;

&lt;p&gt;Only simulates the ramp command and its keywords.&lt;/p&gt;

&lt;p&gt;If the actor config has simulator=True the ramp command is replaced by a simulator, which does not touch or need and hardware, nor does it create files.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="15092">INSTRM-1137</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="22707">INSTRM-1563</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="16986">INSTRM-1336</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10500" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|02qpuc:i6001gr068fhw9qo4o0m38y</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10005" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="84">SM1PD-2020 K</customfieldvalue>
    <customfieldvalue id="89">SM1PD-2020 L</customfieldvalue>
    <customfieldvalue id="99">SM1PD-2021 A 2</customfieldvalue>
    <customfieldvalue id="100">SM1PD-2021 A 3</customfieldvalue>
    <customfieldvalue id="101">SM1PD-2021 A 4</customfieldvalue>
    <customfieldvalue id="103">SM1PD-2021 A 5</customfieldvalue>
    <customfieldvalue id="104">SM1PD-2021 A 6</customfieldvalue>
    <customfieldvalue id="106">SM1PD-2021 A7</customfieldvalue>
    <customfieldvalue id="107">SM1PD-2021 A8</customfieldvalue>
    <customfieldvalue id="108">SM1PD-2021 A9</customfieldvalue>
    <customfieldvalue id="110">SM1PD-2021 A10</customfieldvalue>
    <customfieldvalue id="112">SM1PD-2021 A 11</customfieldvalue>
    <customfieldvalue id="113">SM1PD-2021 A 12</customfieldvalue>
    <customfieldvalue id="114">SM1PD-2021 A 13</customfieldvalue>
    <customfieldvalue id="117">SM1PD-2021 A 14</customfieldvalue>
    <customfieldvalue id="120">SM1PD-2021 A 15</customfieldvalue>
    <customfieldvalue id="132">SM1PD-2022 B</customfieldvalue>
    <customfieldvalue id="140">SM1PD-2022 C</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10002" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>6.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                        </customfields>
    </item>
</channel>
</rss>