Rootana javascript displays

From MidasWiki
Jump to navigation Jump to search


We are exploring ways of being able to view rootana histograms and plots on webpages, rather than in custom GUIs. The current scheme is based on building webpages based on data served up by the ROOT web server : THttpServer.

The rootana analyzer has a command line option to allow the initialization of a THttpServer. For instance, you can try doing

 /ana.exe -r8088 

with the programs in rootana/examples; this start the program with an instance of the THttpServer on port 8088.

We have a test MIDAS instance available here (username/pwd: testdaq/testdaq)

The default browser (the one that ROOT provides) for the rootana histograms is available here

Note that we have proxied both the MIDAS server and the THttpServer through APACHE in this case.

You can use the above link to explore the histograms created by the rootana program and plot them. You can see that I have histograms being filled with datafrom V792 (charge) and V1720 (waveforms); note that this is just simulated data.

Custom web display

In addition to providing a way to browse and plot the histograms, the THttpServer also provides direct access to the histogram data in JSON format. Based on this ability we have made a javascript webpage that requests the histogram data from rootana using the THttpServer and plots them using the dygraph plotting package. The webpage is available here

The html and javascript source for this page is available in rootana/examples/html.

Features of this webdisplay include

  • The ability to overlay multiple histograms or show two histograms side-by-side.
  • The webpage is configured by a JSON configuration file called generic_rootana_setup.json; this defines which histograms to create buttons to look at. The example configuration file shows how to define histograms that have multiple copies for different channels, as well as stand-alone histograms.
  • The ability to send reset commands back to the rootana program. Note that this resets the histograms for everyone, which may not be an annoying feature.
  • The 1D histograms are implemented using the dygraphs plotting package, whereas the 2D histograms are plotted using plotly . I did not make a lot of effort comparing the different plotting packages; these just seemed to work well enough.

Known problems

In addition to the general weakness of the html/javascript/css coding, there are some specific problems that still remain with this webpage.

  1. The webpage currently only works for looking at the histograms online. You could run rootana on a file and use this webpage to look at the plots; but I don't know how to get the webpage to tell rootana to only process one event at a time, so this isn't so useful. But maybe the idea of using a webpage to look at a particular file doesn't make much sense anyway.
  2. The webpage doesn't know anything about MIDAS events; all it know about are the histograms that it can grab. For instance, this is a problem with the V1720 histograms. If you overlay the first two histogram you should in principle see two peaks that are close together; at least that is what the data looks like in the underlying MIDAS events. But when viewed with my webpage you often see that the two peaks are far apart. This is because the webpage has grabbed the information for the waveform for one channel, then rootana changed to the next event and then the information for the waveform for the second channel. So you are actually looking at the waveforms for different events, which is confusing. I can imagine ugly ways of working around this; for instance, I could ensure that the waveform histogram are only filled every second, so that two AJAX would be for the same event. But even that wouldn't always work.
  3. When you pause the webpage, you can't switch between different channels, display types, etc. That is because the webpage only has the information for the histogram that it is currently plotting; it doesn't have information for any other histograms, so can't show them without un-pausing. In fact, I'm not really sure what the concept of 'pausing' means in this context, given problem ii).
  4. Most of the AJAX data transfers are asynchronous using Promise scheme. But there are still a couple trasnfers on the main thread.

I guess that problems i), ii) and iii) are probably problems that we also had with roody (not sure about i). They may be problems that are inherent to trying to decouple the generation of the histograms from their display.