EXI — EXtended ISPyB
In order to build EXI, you need to have:
- The latest npm and git 1.7 or later. Earlier versions might work, but are not supported.
- Bower (installable from npm)
- Grunt version v0.4.5 or later (http://gruntjs.com/)
Clone a copy of the main EXI git repo by running:
git clone git://github.com/ispyb/EXI.git
Enter into the installation directory and run the build script:
npm install
Download dependencies by running:
bower install
If you want to see which dependencies EXI needs run:
bower list
Build EXI by running Grunt, the javascript task runner
grunt
If you want to build a version where the javascript will be not minified for developing then use the profile dev
grunt dev
Using bower one can update a package by typing:
bower update ispyb-js-api
EXI makes an intensive use of HTML templates. Dustjs has been chosen as engine because:
- High integration with Grunt
- Easy to use
- Maintened by linkedin
- Possibility to precompile the template in order to execute them faster
Use case:
- Template can be uses when we want to render HTML within a Ext component. For instance a column on a Ext.grid.Panel object
- Create a javascript file on /templates
- The name of the file will correspond with the name of the template that dust will give to the precompiled function Example: templates/test.js
<table>
{#.}
<tr>
<td>
{.count}
</td>
<td>
{.step}
</td>
</tr>
{/.}
</table>
- Run Grunt or Grunt dev. Because we need to precompile the templates we need to build the application before hand
- Use the template
dust.render("workflowstepsection_workflowstep", [{step:'test1', count:5},{step:'test2', count:4},], function(err, out){
console.log(out);
});
The expected output is:
<table><tr><td>5</td><td>test1</td></tr><tr><td>4</td><td>test2</td></tr></table>
There is a new task on Grunt. It takes all the javascript files on templates folder and it precompiles on the min folder
dustjs: {
compile: {
files: {
'min/precompiled.templates.min.js': ['templates/*js']
}
}
}
In order to configure EXI some modifications should be done on config.js that it may be found on:
- /saxs/config.js
- /mx/config.js
It allows to use different configuration for different techniques/beamlines.
The format of the file is JSON and it looks like this
{
"detectors" : {
"Pilatus3_2M" : {
"pixelSize": {
"x" : 1475,
"y" : 1679
},
"sensitiveArea" : {
"x" : 253.7,
"y" : 288.8
},
"pixelSizeHorizontal" : 0.172,
"img" : "https://www.dectris.com/tl_files/root/products/PILATUS%20S%20Serie/Systems/PILATUS3_S_2M.png"
},
"Pilatus_6M_F" : {
"pixelSize": {
"x" : 2463,
"y" : 2527
},
"sensitiveArea" : {
"x" : 423.6,
"y" : 434.6
},
"pixelSizeHorizontal" : 0.172,
"img" : "https://www.dectris.com/tl_files/root/products/PILATUS%20S%20Serie/Systems/PILATUS3_S_6M.png"
},
"Pilatus3_6M" : {
"pixelSize": {
"x" : 2463,
"y" : 2527
},
"sensitiveArea" : {
"x" : 423.6,
"y" : 434.6
},
"pixelSizeHorizontal" : 0.172,
"img" : "https://www.dectris.com/tl_files/root/products/PILATUS%20S%20Serie/Systems/PILATUS3_S_6M.png"
}
},
"sites":[
{
"name":"ESRF",
"url":"https://wwws.esrf.fr/ispyb/ispyb-ws/rest",
"exiUrl":"http://pc593.embl.fr:8080/extispyb-ws/rest",
"beamlines":{
"SAXS":[
"BM29"
],
"MX":[
"ID23-1","ID29","ID30B","ID23-2","ID30A-3","ID30A-1","ID30A-2","BM14U","BM30A","ID14-1","ID14-2","ID14-3","ID14-4"
]
}
}
]
}
Detectors node defines the detectors used as a hash map "name of detector" :
Sites node define to which sources EXI will be able to connect. These are the main parameters to be defined:
- name: this name is an ID for the site and will appear when you sign in
- url : a valid url pointing to the rest webservices from a ISPyB active instance
- exiurl : !ONTEST this is pointing to the offline data analysis server set of webservices
- Beamlines