Yarra on XA Scanners

Background

The “Numaris X” or “XA” software, which is running on the newest MAGNETOM scanners (Vida, Sola) and on upgraded scanners (Prisma, Skyra, Aera, …), introduced several security or “system hardening” mechanisms, including the Windows Kiosk mode and the requirement to enter the admin password whenever starting an application outside of SyngoMR. While it is generally good news that the security has been improved, these new protections make it difficult to use Yarra routinely because they require leaving the Kiosk mode after each system reboot and require entering the admin password repeatedly when launching the Yarra RDS or ORT client.

Here, we describe an alternative way of starting the Yarra RDS client through a custom-developed “dummy” sequence, which we refer to as YarraLink sequence. In this way, the RDS client can be launched in Kiosk mode without entering any password. Once the RDS client is running, as indicated by the Yarra icon shown in the status bar on XA systems, the context menu that opens when right-clicking on the Yarra icon can be used for starting the ORT client – again without having to enter the admin password over and over again.

For legal reasons, we cannot share the source code of the YarraLink sequence publicly. Therefore, this article instead provides instructions how the sequence can be derived from the well-known MiniFLASH sequence, which comes with the IDEA development kit.

 

Creating the Sequence

The YarraLink sequence needs to be built using the Siemens IDEA software development kit. Make sure to install the IDEA DVD for the exact software baseline that is also running on the scanner. Unfortunately, this means: If you have multiple scanners with different software versions, different versions of the YarraLink sequence need to be compiled. Moreover, all of the scanners need an IDEA license (this can be checked in the system-information dialog).

The easiest and fastest way to generate the YarraLink sequence is to use the MiniFLASH sequence as template. To this end, open the IDEA shell, navigate to the sequence folder (e.g., using the cs command), make a copy of the MiniFLASH folder (which exists in every IDEA version), and edit the copied sequence code.

In the file a_MiniFLASH.cpp, insert the following function right before the constructor of the sequence class MiniFlash::MiniFlash():

#ifdef WIN32  
    #include <vector>
    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>	
    #include <iostream>
#endif

void launchClient()
{
#ifdef WIN32  
    printf("Launching the Yarra RDS Client...\n");

    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    TCHAR cmdline[512] = TEXT("C:\\yarra\\RDS.exe --start");
    
    // Start the child process
    if( !CreateProcess( NULL,   // No module name (use command line)
        cmdline,                // Command line
        NULL,                   // Process handle not inheritable
        NULL,                   // Thread handle not inheritable
        FALSE,                  // Set handle inheritance to FALSE
        CREATE_BREAKAWAY_FROM_JOB | NORMAL_PRIORITY_CLASS | CREATE_NEW_PROCESS_GROUP, 
        NULL,                   // Use parent's environment block
        NULL,                   // Use parent's starting directory 
        &si,                    // Pointer to STARTUPINFO structure
        &pi )                   // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
    }

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );	
#endif	
}

Next, add the following line to the constructor of the sequence class MiniFlash::MiniFlash():

    clientLaunched = false;

Next, at the end of the prepare function of the sequence MiniFlash::prepare(…), add the following lines right before the last “return” command:

    if (!rSeqLim.isContextPrepForBinarySearch())
    {
        if (!clientLaunched) 
        {
            clientLaunched = true;
            launchClient();
        }
    }

Finally, in the header file a_MiniFLASH.h, add the following variable to the “protected:” section of the MiniFlash class definition:

    bool clientLaunched;

That’s it! This sequence will now launch the Yarra RDS client on the host computer whenever the sequence is opened in the scanner UI or when a scan is started. The Yarra RDS client itself will only start once, so that it won’t be an issue if the sequence is opened or started multiple times.

To avoid that the dummy sequence creates any images, which could be confusing for clinical staff, configure the sequence to use the EmptyIceProgram by adding the following line to the prepare function of the sequence MiniFlash::prepare(…) (and create a corresponding .ipr file, named EmptyIceProgram.ipr, with an empty IceConfigurator section):

    rSeqExpo.setICEProgramFilename("%CustomerIceProgs%\\EmptyIceProgram");          
 

Scanner Installation & Protocol Setup

Install the Yarra Client into the folder C:\yarra (because the path is hard-coded in the function above). Moreover, install the code certificates for both the dummy sequence (generated by IDEA) and for the Yarra Client (provided by us on request). Copy the sequence files into the regular MRICustomer folder and insert the default protocol into the Dot Cockpit, as described in the IDEA user manual.

To minimize the time spent on running the dummy sequence, configure a scan protocol with a small base resolution (e.g., 64 pixels), set the flip angle to 0 deg, and configure other parameters to reduce the scan duration (e.g., use of partial Fourier, reduced phase resolution, …) The total scan duration should be less than 1 second (note that it’s not even necessary to actually run the sequence, the client will already start when opening the sequence card).

It can be helpful to add the dummy sequence to various routine imaging protocols that are used frequently in your clinical practice. This will ensure that the Yarra RDS client gets started automatically within short time after each reboot. Moreover, it might make sense to add a protocol for the dummy sequence to an easily visible location in the sequence tree of the Dot Cockpit, which technicians can use to manually launch the RDS client.