15 Dec 2023, Art Olin, Bug Report, options offered in help
|
In running alphaAnalysis.exe, a instance of manalyser, I would like to use the ---usetimerange option. When I include it on the commandline I get back the messages including this option which suggests that it is input incorrectly, but I also don't see it anymore in the manalyzer.cxx code.
Has it been deliberately removed, and, if so, should not the help be amended to reflect this. This option would be highly useful to me. |
04 Apr 2023, Marius Koeppel, Suggestion, Python Plotting
|
Hi all,
again an idea from the mail conversation:
Mail me: Having an „easy way“ to explore the data - maybe some simple Python bindings. Especially when the data protocol is not fully settled in the experiment it’s maybe nice to have a simple way of plotting histograms. But also in general more and more people go to Python.
Mail Konstantin: I am not sure how python can come into this. manalyzer is a C++ analysis framework for experiments with needs beyound "toy" analyzers written in scripting languages (in performance and in complexity). if we want a python analysis framework, we can create one, but I am not sure how much of manalyzer we can reuse, python != C++. if you are thinking of a mixed framework, lets see your examples and use cases.
So a bit of what we did in the past. At some point MIDAS did not have this nice REST API to get events directly by request. At that time we had a python flask server running which used the Python MIDAS binding and gets some events from the buffer and created a REST API so our event display could display the events. However, my idea for the analyzer would be to further extend this idea of having an REST API which provides the user analyzed data. So my "python binding" can be anything at the end (also still a c++ application). So the focus is more from an experiment side: A few people develop the an anlyzer for an experiment but when it's going to be complex users have a hard time to even plot a "simple" histogram if they are non-experts. But if each module could export its flow events via a REST API debugging and easy development for new histograms / checks etc. could be quite easy.
What do you thing?
Best,
Marius |
04 Apr 2023, Stefan Ritt, Suggestion, Python Plotting
|
I can add here my five cents:
Since a while, there is an API to request individual events. Have a look at the new "Event Dump" page (which is a pure custom page using mjsonrpc_call("bm_receive_event") ).
In the mjsonrpc call you can specify the "midas even buffer", which is "SYSTEM" by default where all front-end dump their data. Nothing prevents you to create a new
buffer "ANALYZER" and send analyzed events there from your analyzer. The logger only listens to SYSTEM, so does not store these analyzed events. But you can use
the bm_receive_event call to request those analyzed events in a custom page and make a nice single event display from it. This technique would not require any
modification in midas, just add code to your analyzer to send events to a new buffer.
Best,
Stefan |
04 Apr 2023, Marius Koeppel, Suggestion, Python Plotting
|
Hi,
> Since a while, there is an API to request individual events. Have a look at the new "Event Dump" page (which is a pure custom page using mjsonrpc_call("bm_receive_event") ).
> In the mjsonrpc call you can specify the "midas even buffer", which is "SYSTEM" by default where all front-end dump their data. Nothing prevents you to create a new
> buffer "ANALYZER" and send analyzed events there from your analyzer. The logger only listens to SYSTEM, so does not store these analyzed events. But you can use
> the bm_receive_event call to request those analyzed events in a custom page and make a nice single event display from it. This technique would not require any
> modification in midas, just add code to your analyzer to send events to a new buffer.
Question would be if this functionality should be implemented into the manalyzer framework so that everyone can use it if needed.
Best,
Marius |
04 Apr 2023, Stefan Ritt, Suggestion, Python Plotting
|
> Question would be if this functionality should be implemented into the manalyzer framework so that everyone can use it if needed.
You need to function calls for that bm_open_buffer and bm_send_event (both part of the MIDAS C API). The contents of the event
is anyhow up to the user. There also might be cases where one want not one but several different buffers, like for different
event types. So I would recommend start outside the manalyzer framework with that (since it's just two lines of code ... plus maybe
some error checking), and once we all know what is good we can promote this to the manalyzer framework.
Stefan |
04 Apr 2023, Marius Koeppel, Suggestion, Python Plotting
|
Hi,
> The contents of the event is anyhow up to the user.
Correct me but the bm_send_event wants a event in the MIDAS format. I was more thinking about a json format.
BTW: at my current MIDAS setup I get: Error: Invalid URL "" or query "cmd=Event%20Dump" or command "Event Dump" and Error: Invalid URL "" or query "cmd=OldODB" or command "OldODB" when I try to open the Event Dump or OldODB pages - rest of the pages work.
Best,
Marius |
04 Apr 2023, Marius Koeppel, Suggestion, Python Plotting
|
Hi,
I have now a mini working setup to get the events from the new buffer:
TEST(Analyzer, GetBuffer)
{
INT status, request_id;
HNDLE hBufEvent;
INT EVENT_BUFFER_SIZE = 10000 * (1 << 25);
status = cm_connect_experiment("", "Mu3e", "Simple Analyzer", NULL);
if (status != CM_SUCCESS)
ASSERT_TRUE(false);
bm_open_buffer("ANALYZER", EVENT_BUFFER_SIZE, &hBufEvent);
bm_request_event(hBufEvent, 1, TRIGGER_ALL, GET_ALL, &request_id, process_event);
cm_disconnect_experiment();
ASSERT_TRUE(true);
}
For sending the events I am not sure how to do this in the correct way. Since all the methods like bk_init etc. require some kind of frontend logic. Is there an easy way to create a MIDAS event without having a frontend?
Also when I created the new buffer I saw that there is no option to create an uint ODB entry (see file).
Best,
Marius
|
04 Apr 2023, Stefan Ritt, Suggestion, Python Plotting
|
> For sending the events I am not sure how to do this in the correct way.
bm_compose_event()
bm_send_event()
You can use bk_init (better bk_init32) to create a bank structure inside an event, but that's not mandatory.
Nothing prevents you from putting a JSON string into your event, as long as the midas even header (created
via bm_compose_event() is correct).
Best,
Stefan |
04 Apr 2023, Stefan Ritt, Suggestion, Python Plotting
|
> Also when I created the new buffer I saw that there is no option to create an uint ODB entry (see file). |
05 Apr 2023, Stefan Ritt, Suggestion, Python Plotting
|
> BTW: at my current MIDAS setup I get: Error: Invalid URL "" or query "cmd=Event%20Dump" or command "Event Dump" and Error: Invalid URL "" or query "cmd=OldODB" or command "OldODB" when I try to open the Event Dump or OldODB pages - rest of the pages work.
You have to update to the develop branch of midas and refresh your browser cache.
Stefan |
05 Apr 2023, Marius Koeppel, Suggestion, Python Plotting1
|
> You have to update to the develop branch of midas and refresh your browser cache.
I already tried it and my local installation is 2 days old. I pulled again the dev branch now and I also got another error (actually a while ago but I forgot to report it):
Commit d5263e gives me the following error:
/home/makoeppe/mu3e/midas/progs/mhdump.cxx:393:42: error: ‘ctime’ was not declared in this scope
393 | printf(" %s", ctime(&t));
| ^~~~~
/home/makoeppe/mu3e/midas/progs/mhdump.cxx:25:1: note: ‘ctime’ is defined in header ‘<ctime>’; did you forget to ‘#include <ctime>’?
24 | #include <vector>
+++ |+#include <ctime>
25 |
gcc (GCC) 12.2.0
Linux office 5.15.86-1-lts #1 SMP Sun, 01 Jan 2023 16:03:00 +0000 x86_64 GNU/Linux
After adding #include <ctime> it compiles fine.
However, after cleaning the ODB and setting up everything fresh I don't even have the pages on the left bar anymore.
Best,
Marius |
05 Apr 2023, Stefan Ritt, Suggestion, Python Plotting1
|
> > You have to update to the develop branch of midas and refresh your browser cache.
> I already tried it and my local installation is 2 days old. I pulled again the dev branch now and I also got another error (actually a while ago but I forgot to report it):
>
> Commit d5263e gives me the following error:
>
> /home/makoeppe/mu3e/midas/progs/mhdump.cxx:393:42: error: ‘ctime’ was not declared in this scope
> 393 | printf(" %s", ctime(&t));
> | ^~~~~
> /home/makoeppe/mu3e/midas/progs/mhdump.cxx:25:1: note: ‘ctime’ is defined in header ‘<ctime>’; did you forget to ‘#include <ctime>’?
> 24 | #include <vector>
> +++ |+#include <ctime>
> 25 |
>
> gcc (GCC) 12.2.0
> Linux office 5.15.86-1-lts #1 SMP Sun, 01 Jan 2023 16:03:00 +0000 x86_64 GNU/Linux
>
> After adding #include <ctime> it compiles fine.
mhdump.cxx is written by Konstantin, so he should give his ok to add the include.
> However, after cleaning the ODB and setting up everything fresh I don't even have the pages on the left bar anymore.
The menu on the left side is controlled via the ODB flags /Experiment/Menu. Probably the "Event dump" is of by default.
Stefan |
15 Jun 2023, Marius Koeppel, Suggestion, Python Plotting1
|
> > > You have to update to the develop branch of midas and refresh your browser cache.
> > I already tried it and my local installation is 2 days old. I pulled again the dev branch now and I also got another error (actually a while ago but I forgot to report it):
> >
> > Commit d5263e gives me the following error:
> >
> > /home/makoeppe/mu3e/midas/progs/mhdump.cxx:393:42: error: ‘ctime’ was not declared in this scope
> > 393 | printf(" %s", ctime(&t));
> > | ^~~~~
> > /home/makoeppe/mu3e/midas/progs/mhdump.cxx:25:1: note: ‘ctime’ is defined in header ‘<ctime>’; did you forget to ‘#include <ctime>’?
> > 24 | #include <vector>
> > +++ |+#include <ctime>
> > 25 |
> >
> > gcc (GCC) 12.2.0
> > Linux office 5.15.86-1-lts #1 SMP Sun, 01 Jan 2023 16:03:00 +0000 x86_64 GNU/Linux
> >
> > After adding #include <ctime> it compiles fine.
>
>
> mhdump.cxx is written by Konstantin, so he should give his ok to add the include.
Any news on this? We had this issue now on couple of more PCs and operating systems (Arch, OpenSuse and Fedora)
Best,
Marius |
15 Jun 2023, Stefan Ritt, Suggestion, Python Plotting1
|
> > mhdump.cxx is written by Konstantin, so he should give his ok to add the include.
> Any news on this? We had this issue now on couple of more PCs and operating systems (Arch, OpenSuse and Fedora)
Since I didn't get any complaint in the last two months, I added the include.
Stefan |
04 Apr 2023, Marius Koeppel, Suggestion, Histogram Class Templates
|
Hi all,
Having different histogram class templates to make processing easier.
My idea here was to create a parser which can take json input and creates automated default histograms from this. So here are a toy example how this could look like:
{
"default1D": {
"title": "bla",
"x": "bla",
"y": "#",
"minX": "0",
"maxX": 128,
"nBins": 128,
},
"default2D": {
"title": "bla",
"x": "bla",
"y": "#",
"minX": "0",
"maxX": 128,
"nBinsX": 128,
"minY": "0",
"maxY": 128,
"nBinsY": 128,
},
"detectorX": {
"1DHistos":
[
{
"name": "FPGAID",
"type": "count",
"y": "#",
"minX": 0,
"maxX": 12,
"nBins": 12,
"value": "fpgaID",
"startChipID": 0,
"endChipID": 128,
"condition": "ROOT style: tree->Draw("X","X>10","");"
},
{
"name": "timeDiff",
"type": "diff",
"y": "#",
"xaxis": "col",
"minX": -256,
"maxX": 256,
"nBins": 512,
"value": "chipID",
"startChipID": 0,
"endChipID": 128,
"condition": "ROOT style: tree->Draw("X","X>10","");"
},
]
....
}
Best,
Marius |
04 Apr 2023, Marius Koeppel, Info, Documentation Event Flow
|
Hi all,
following the e-mail conversation from Konstantin. The next topic we discussed was the event flow.
What I want to have (especially for commissioning phases for an experiment) is the possibility to have some kind of online calibration setup.
So one has some kind of detector X which sends data and another detector Y which also sends data and I want to correlate the two detectors after applying some kinds of cleaning steps to the data.
Mail me: Having the event flow maybe „orthogonal“ - not sure how to say this correctly but at the moment there is only one flow in a linear direction.
So something like was my intuition:
eventX -> decodeX -flow-> cleanX -> buffer -> correlation of X/Y
^
|
eventY -> decodeY -flow-> cleanY -> |
Mail Konstantin: yes, you will have to explain what you mean. right now, the flow is linear, as is typical for most physics analysis.
however, at any point one is permitted to create new flow events and inject them to the top of the modules pipeline, this adds "loops".
So how would injection into the top help? So I clean x/y and than I inject them back to the top and create a third flow for the correlation?
If this is true maybe a simple example or some more words on the documentation would help. I would be also willing to do that. After I fully understand how this would be possible.
Best,
Marius |
25 Apr 2022, Marius Koeppel, Suggestion, Support for THttpServer Options
|
Dear all,
I would like to have the possibility to add different options when I create a THttpServer. At the moment the manalyzer.cxx only adds the port:
2840: sprintf(str, "http:127.0.0.1:%d?cors", httpPort);
But there are more options which one can use https://github.com/root-project/jsroot/blob/master/docs/HttpServer.md.
Best regards,
Marius |
27 Apr 2022, Konstantin Olchanski, Suggestion, Support for THttpServer Options
|
> I would like to have the possibility to add different options when I create a THttpServer.
I would like to know your "use case". What different options do you want to use in addition to what's already there?
I must ask because some options are insecure (i.e. exposing the webserver to external connections) and
while I have no problem with others shooting themselves in the foot, I think they should be warned
before they do it and I do not want to read it in the news that they did it using a gun I built.
TLDR follows:
> At the moment the manalyzer.cxx only adds the port:
> 2840: sprintf(str, "http:127.0.0.1:%d?cors", httpPort);
this is by design. it is only safe to bind thttpserver to localhost, exposing to external connections is not safe. (until somebody
can review the security situation with the version of civetweb, an antique clone of mongoose, inside ROOT).
same situation with mhttpd, it is not safe to expose it to external connections, it should always live
behind a password protected https proxy.
> But there are more options which one can use https://github.com/root-project/jsroot/blob/master/docs/HttpServer.md.
yes, I see there is more options now that there used to be before.
which ones do you want to use? and which ones you think are generally useful in what we do?
- threads - I am not sure what the latest thread-safe situation is on ROOT. is it useful to increase number of threads beyond 10?
- top=name - yes, useful, but I think jsroot overrides that.
- auth_file, auth_domain - digest authentication .htdigest file stores passwords effectively as plain text, if you steal the .htdigest file, you
can login into the web server (as opposed to stealing /etc/passwd, you cannot login anywhere with it, not until you crack the hashes).
- loopback - this is what I want to enforce
- debug - could be useful, but is it?
- websocket - does this do anything useful for us?
- cors=domain - same as in midas mhttpd, I think we respond with CORS "*", is some other reponse useful?
- readonly - (is the default?)
- readwrite - I think should be *our* default
- global - (is the default, I agree)
- noglobal - any use case where we may want this?
- anything else?
For general use, I want maximum security configuration: bind to localhost, cors enabled, user can specify tcp port number, plus anything else from
the list above?
For maximum flexibility we should probably have "--insecure-thttpd" to specify
the complete THttpServer() constructor argument. But it would be silly to force everybody
to use that just to set the "debug" option.
K.O. |
04 Apr 2023, Marius Koeppel, Suggestion, Support for THttpServer Options
|
Hi Konstantin,
sorry I did not set the mail notification on on this elog. So I never got the info that you replayed to this topic.
Maybe its also time to have a elog for manalyzer since rootana is not really used anymore.
Following our e-mail conversion I would start with this topic first:
Mail from me: > Supporting more function of the root browser
Mail from you: > yes, I would like to add/have more code to interact with jsroot. basically jsroot specifies/implements a simple RPC and we should have support for it in manalyzer. (unless your "the root browser" is something else).
> I would like to know your "use case". What different options do you want to use in addition to what's already there?
So the main problem I have in short is that the readwrite flag is not the default in manalyzer. If its set to rw one can simply get histos on custom page via:
let gH = await httpRequest(serverIP + '/PathToHisto/' + '/root.json', 'object');
redraw('NAME', gH, 'hist');
> I must ask because some options are insecure (i.e. exposing the webserver to external connections) and
> while I have no problem with others shooting themselves in the foot, I think they should be warned
> before they do it and I do not want to read it in the news that they did it using a gun I built.
I agree here one needs to at least warn the user what he is going to do now.
> > At the moment the manalyzer.cxx only adds the port:
> > 2840: sprintf(str, "http:127.0.0.1:%d?cors", httpPort);
>
> this is by design. it is only safe to bind thttpserver to localhost, exposing to external connections is not safe. (until somebody
> can review the security situation with the version of civetweb, an antique clone of mongoose, inside ROOT).
I fully agree with having only localhost allowed. My comment was more about the different options like rw, ro etc.
> - threads - I am not sure what the latest thread-safe situation is on ROOT. is it useful to increase number of threads beyond 10?
We never had problems with the performance - but I can not tell for others so better have an option for this so the user can choose?
> - top=name - yes, useful, but I think jsroot overrides that.
Would like to have the option especially when you have multiple analyzers running in the network can get confusing.
> - auth_file, auth_domain - digest authentication .htdigest file stores passwords effectively as plain text, if you steal the .htdigest file, you
> can login into the web server (as opposed to stealing /etc/passwd, you cannot login anywhere with it, not until you crack the hashes).
Better not.
> - loopback - this is what I want to enforce
Yes, I agree.
> - debug - could be useful, but is it?
I had it on a couple of times while writing custom pages displaying histograms.
> - websocket - does this do anything useful for us?
I don't think so, but I also never look into it in detail.
> - cors=domain - same as in midas mhttpd, I think we respond with CORS "*", is some other reponse useful?
At the moment we have with sprintf(str, "http:127.0.0.1:%d?cors", httpPort); CORS "*" I think other responses are not super useful.
> - readonly - (is the default?)
This it default at the moment I would also like to have readwrite as default
> - readwrite - I think should be *our* default
Yes.
> - global - (is the default, I agree)
Yes should be default.
> - noglobal - any use case where we may want this?
Maybe when users run into performance issues?
That's all of my thoughts about what setting should be possible.
Best,
Marius |
29 Apr 2021, Konstantin Olchanski, Info, manalyzer split into a git submodule
|
In preparation to including the manalyzer into MIDAS, I split it into a separate
repository and included it into ROOTANA as a git submodule.
https://bitbucket.org/tmidas/manalyzer/src/master/
This will cause a minor difficulty and require a manual adjustment next time you
do a "git pull":
- check that (a) manalyzer directory is empty or (b) it only has .o and .exe
files, in both cases delete it
- run "git submodule init; git submodule update", you should see it clone the
manalyzer repository
K.O. |
12 Apr 2021, Gennaro Tortone, Forum, rootana and TAnaManager
|
Hi,
I'm facing with a strange problem with rootana:
I fetched and built rootana (master branch) as usual (make / make install);
If I build 'examples' and launch:
./root_server.exe -v
I got a lot of this messages:
Info in <TCling::LoadPCM>: In-memory ROOT PCM candidate /opt/root/lib/.....
and at the end:
*** Break *** segmentation violation
Generating stack trace...
0x00007f9a876a7df1 in ROOT::AddClassAlternate(char const*, char const*) + 0x31
from /opt/root/lib/root/libCore.so
0x0000557debfea956 in <unknown> from ./root_server.exe
0x0000557debfead72 in <unknown> from ./root_server.exe
0x0000557debfead9b in <unknown> from ./root_server.exe
0x0000557dec034605 in __libc_csu_init + 0x45 from ./root_server.exe
0x00007f9a856e802a in __libc_start_main + 0x7a from /lib/x86_64-linux-
gnu/libc.so.6
0x0000557debf759fa in _start + 0x2a from ./root_server.exe
I'm using ROOT 6.22/06 compiled from source files on Debian 10 on a virtual
machine...
The problem seems to be less critical if I connect with SSH with -XC option
or if I set DISPLAY variable. In these case I got only TCling messages with
this warning:
Error in <TGClient::TGClient>: can't open display "0:0", switching to batch
mode...
In case you run from a remote ssh session, reconnect with ssh -Y
If I build manalyzer everything goes fine and it seems that problem is
related to TAnaManager in some ways...
Regards,
Gennaro |
15 Apr 2021, Thomas Lindner, Forum, rootana and TAnaManager
|
Hi,
Hmm, unfortunately I cannot produce your seg fault. I run the command
./root_server.exe
and it runs without a seg-fault. I can run it with the following combinations:
1) Centos-7.7 with ROOT 6.18
2) Ubuntu 20.04.2 with ROOT 6.22/02
Note that I don't think 'root_server.exe -v' is a valid option.
I will try to make a ROOT 6.22/06 version sometime, but it seems surprising that that is the problem. This ROOT
application stuff is annoying and I will try to remove it soon.
I do get the same annoying Cling errors as you. They are annoying, but seem to be benign.
Cheers,
Thomas
> Hi,
>
> I'm facing with a strange problem with rootana:
> I fetched and built rootana (master branch) as usual (make / make install);
>
> If I build 'examples' and launch:
>
> ./root_server.exe -v
>
> I got a lot of this messages:
>
> Info in <TCling::LoadPCM>: In-memory ROOT PCM candidate /opt/root/lib/.....
>
> and at the end:
>
>
> *** Break *** segmentation violation
> Generating stack trace...
> 0x00007f9a876a7df1 in ROOT::AddClassAlternate(char const*, char const*) + 0x31
> from /opt/root/lib/root/libCore.so
> 0x0000557debfea956 in <unknown> from ./root_server.exe
> 0x0000557debfead72 in <unknown> from ./root_server.exe
> 0x0000557debfead9b in <unknown> from ./root_server.exe
> 0x0000557dec034605 in __libc_csu_init + 0x45 from ./root_server.exe
> 0x00007f9a856e802a in __libc_start_main + 0x7a from /lib/x86_64-linux-
> gnu/libc.so.6
> 0x0000557debf759fa in _start + 0x2a from ./root_server.exe
>
>
> I'm using ROOT 6.22/06 compiled from source files on Debian 10 on a virtual
> machine...
>
> The problem seems to be less critical if I connect with SSH with -XC option
> or if I set DISPLAY variable. In these case I got only TCling messages with
> this warning:
>
> Error in <TGClient::TGClient>: can't open display "0:0", switching to batch
> mode...
> In case you run from a remote ssh session, reconnect with ssh -Y
>
> If I build manalyzer everything goes fine and it seems that problem is
> related to TAnaManager in some ways...
>
> Regards,
> Gennaro |
15 Apr 2021, Gennaro Tortone, Forum, rootana and TAnaManager
|
Hi,
thanks for your support,
I realized that this issue is related to GCC/G++ version...
it seems that GCC 8.3 has this "segmentation violation" problem;
I have replaced default Debian GCC (8.3) with testing GCC 10 and
everything works !
Now I'm using a Xubuntu 20.04 LTS (GCC 9) and also here the problem
is not present...
Regards,
Gennaro
> Hi,
>
> Hmm, unfortunately I cannot produce your seg fault. I run the command
>
> ./root_server.exe
>
> and it runs without a seg-fault. I can run it with the following combinations:
>
> 1) Centos-7.7 with ROOT 6.18
> 2) Ubuntu 20.04.2 with ROOT 6.22/02
>
> Note that I don't think 'root_server.exe -v' is a valid option.
>
> I will try to make a ROOT 6.22/06 version sometime, but it seems surprising that that is the problem. This ROOT
> application stuff is annoying and I will try to remove it soon.
>
> I do get the same annoying Cling errors as you. They are annoying, but seem to be benign.
>
> Cheers,
> Thomas
>
>
>
> > Hi,
> >
> > I'm facing with a strange problem with rootana:
> > I fetched and built rootana (master branch) as usual (make / make install);
> >
> > If I build 'examples' and launch:
> >
> > ./root_server.exe -v
> >
> > I got a lot of this messages:
> >
> > Info in <TCling::LoadPCM>: In-memory ROOT PCM candidate /opt/root/lib/.....
> >
> > and at the end:
> >
> >
> > *** Break *** segmentation violation
> > Generating stack trace...
> > 0x00007f9a876a7df1 in ROOT::AddClassAlternate(char const*, char const*) + 0x31
> > from /opt/root/lib/root/libCore.so
> > 0x0000557debfea956 in <unknown> from ./root_server.exe
> > 0x0000557debfead72 in <unknown> from ./root_server.exe
> > 0x0000557debfead9b in <unknown> from ./root_server.exe
> > 0x0000557dec034605 in __libc_csu_init + 0x45 from ./root_server.exe
> > 0x00007f9a856e802a in __libc_start_main + 0x7a from /lib/x86_64-linux-
> > gnu/libc.so.6
> > 0x0000557debf759fa in _start + 0x2a from ./root_server.exe
> >
> >
> > I'm using ROOT 6.22/06 compiled from source files on Debian 10 on a virtual
> > machine...
> >
> > The problem seems to be less critical if I connect with SSH with -XC option
> > or if I set DISPLAY variable. In these case I got only TCling messages with
> > this warning:
> >
> > Error in <TGClient::TGClient>: can't open display "0:0", switching to batch
> > mode...
> > In case you run from a remote ssh session, reconnect with ssh -Y
> >
> > If I build manalyzer everything goes fine and it seems that problem is
> > related to TAnaManager in some ways...
> >
> > Regards,
> > Gennaro |
20 Apr 2021, Thomas Lindner, Forum, rootana and TAnaManager
|
Hi Gennaro,
Thanks for the update. Good that you got it working, but not so good that it doesn't work on some compilers.
I will still try to remove the TApplication stuff which isn't needed for this particular program.
Cheers,
Thomas
> Hi,
>
> thanks for your support,
>
> I realized that this issue is related to GCC/G++ version...
> it seems that GCC 8.3 has this "segmentation violation" problem;
>
> I have replaced default Debian GCC (8.3) with testing GCC 10 and
> everything works !
>
> Now I'm using a Xubuntu 20.04 LTS (GCC 9) and also here the problem
> is not present...
>
> Regards,
> Gennaro
>
> > Hi,
> >
> > Hmm, unfortunately I cannot produce your seg fault. I run the command
> >
> > ./root_server.exe
> >
> > and it runs without a seg-fault. I can run it with the following combinations:
> >
> > 1) Centos-7.7 with ROOT 6.18
> > 2) Ubuntu 20.04.2 with ROOT 6.22/02
> >
> > Note that I don't think 'root_server.exe -v' is a valid option.
> >
> > I will try to make a ROOT 6.22/06 version sometime, but it seems surprising that that is the problem. This ROOT
> > application stuff is annoying and I will try to remove it soon.
> >
> > I do get the same annoying Cling errors as you. They are annoying, but seem to be benign.
> >
> > Cheers,
> > Thomas
> >
> >
> >
> > > Hi,
> > >
> > > I'm facing with a strange problem with rootana:
> > > I fetched and built rootana (master branch) as usual (make / make install);
> > >
> > > If I build 'examples' and launch:
> > >
> > > ./root_server.exe -v
> > >
> > > I got a lot of this messages:
> > >
> > > Info in <TCling::LoadPCM>: In-memory ROOT PCM candidate /opt/root/lib/.....
> > >
> > > and at the end:
> > >
> > >
> > > *** Break *** segmentation violation
> > > Generating stack trace...
> > > 0x00007f9a876a7df1 in ROOT::AddClassAlternate(char const*, char const*) + 0x31
> > > from /opt/root/lib/root/libCore.so
> > > 0x0000557debfea956 in <unknown> from ./root_server.exe
> > > 0x0000557debfead72 in <unknown> from ./root_server.exe
> > > 0x0000557debfead9b in <unknown> from ./root_server.exe
> > > 0x0000557dec034605 in __libc_csu_init + 0x45 from ./root_server.exe
> > > 0x00007f9a856e802a in __libc_start_main + 0x7a from /lib/x86_64-linux-
> > > gnu/libc.so.6
> > > 0x0000557debf759fa in _start + 0x2a from ./root_server.exe
> > >
> > >
> > > I'm using ROOT 6.22/06 compiled from source files on Debian 10 on a virtual
> > > machine...
> > >
> > > The problem seems to be less critical if I connect with SSH with -XC option
> > > or if I set DISPLAY variable. In these case I got only TCling messages with
> > > this warning:
> > >
> > > Error in <TGClient::TGClient>: can't open display "0:0", switching to batch
> > > mode...
> > > In case you run from a remote ssh session, reconnect with ssh -Y
> > >
> > > If I build manalyzer everything goes fine and it seems that problem is
> > > related to TAnaManager in some ways...
> > >
> > > Regards,
> > > Gennaro |
04 Apr 2021, Konstantin Olchanski, Info, drop support for ROOT v5?
|
There is problem report about failing builds against ROOT v5. https://bitbucket.org/tmidas/rootana/issues/19/make-error-rtypesimph-should-only-be
At TRIUMF, do we even still have anybody who uses ROOT v5 with ROOTANA?
My newest copy of ROOT v5 is from 2016 and I am not sure it would run on any computer we still have.
So is ROOT v5 still relevant, should we officially say ROOT v5 is not supported?
K.O. |
22 Mar 2021, Isaac Labrie Boulay, Forum, Manalyzer - Preventing BeginRun() from getting called when I stop the run.
|
Hi all,
I am running an analyzer using an manalyzer templates and the analysis seems to
lag behind the events getting stored in the buffer by my frontend. This is because
the live histogram (-g) is very slow to update and draw. The slight delay causes a
run object to be created after I 'stop' the acquisition. I'm guessing that this is
because there are still MIDAS events in the ring buffer. This causes the
BeginRun() methods of all my modules to get called again.
What is the best way to prevent this? From what I understand, PreEndRun() methods
should only be used to clear buffered flow events. Is there maybe a way to speed
up the histogram drawing so that I don't get this lag in the analysis?
Any help will be greatly appreciated.
Thanks so much for your time.
Isaac |
05 Feb 2021, Frederik Wauters, Forum, ana or manalyzer?
|
reworking our old (MuCap inherited) mana.cpp
To have a good start, what is advised:
a) following the Rootana Analyzer Framework as advertised in https://midas.triumf.ca/MidasWiki/index.php/Rootana_Analyzer_Framework with the TRootanaEventLoop
b) The manalyzer advertised in https://bitbucket.org/tmidas/rootana/src/master/manalyzer/
Option b) with it's module support? |
05 Feb 2021, Konstantin Olchanski, Forum, ana or manalyzer?
|
> reworking our old (MuCap inherited) mana.cpp
> To have a good start, what is advised:
> a) following the Rootana Analyzer Framework as advertised in https://midas.triumf.ca/MidasWiki/index.php/Rootana_Analyzer_Framework with the TRootanaEventLoop
> b) The manalyzer advertised in https://bitbucket.org/tmidas/rootana/src/master/manalyzer/
> Option b) with it's module support?
It depends on your experiment and your data. If your data is just a few numbers,
either analyzer would do (even the old midas mana.c analyzer would do).
But if you have complicated data, especially streaming data, where midas events
and physics events do not have a 1-to-1 connection, the old analyzers will
not cut the mustard. I have done this kind of processing in the old analyzers,
came up with a generalized structure, the "m" analyzer is the result.
Historical note: I developed rootana maybe 15 years ago to process data
from the ALPHA experiment at CERN (anti-hydrogen trap), more recently, I developed
manalyzer to process more complicated data from the ALPHA-g experiment at CERN (vertical
anti-hydrogen trap, to study gravity effects). Joseph McKenna from CERN contributed
the automatic by-module multithreading and benchmarking.
To compare:
- both rootana and manalyzer use the same TMidasOnline class for connecting to live MIDAS data
- both use the same midasio classes to read and write MIDAS files
- rootana uses the older TMidasEvent class to access MIDAS banks
- manalyzer uses the newer TMEvent class. the main improvement is that TMEvent is
a well-behaved C++ class with a usable assignment and copy-constructor operators.
- graphics and web interface uses the same ROOT graphics, ROOT web server (a derivative
of mongoose web server library) and the same JS-ROOT.
- the manalyzer has better defined control flow and C++ object lifetime rules
wrt run start and run end (this corrects problems with life time of C++ objects
in the old rootana).
- manalyzer has automatic per-module multithreading "for free" (thanks, Joseph!),
I typically see the alphag analyzer use 8-10 CPU threads without having to use
any threading or mutex gunk in the analysis code.
The current plan is to include manalyzer into MIDAS as a git submodule, with luck
it will happen for the next midas release, the hold up is with the midasio class that needs
to be updated, git-submoduled and added to midas. Also the old TMidasOnline class needs
updating.
To conclude, we use manalyzer for ALPHA-2 and ALPHA-g, people who use it seem to be
generally happy (especially with the automatic per-module multithreading), we use
it for a couple of simpler experiments at TRIUMF.
I hope this answers your questions?
K.O. |
05 Feb 2021, Frederik Wauters, Forum, ana or manalyzer?
|
yes, thanks!
" manalyzer has automatic per-module multithreading "for free" "
does that mean that if one needs modules to run sequentially (think first clustering, then making higher level physics objects), the user needs to enforce that?
> > reworking our old (MuCap inherited) mana.cpp
> > To have a good start, what is advised:
> > a) following the Rootana Analyzer Framework as advertised in https://midas.triumf.ca/MidasWiki/index.php/Rootana_Analyzer_Framework with the TRootanaEventLoop
> > b) The manalyzer advertised in https://bitbucket.org/tmidas/rootana/src/master/manalyzer/
> > Option b) with it's module support?
>
> It depends on your experiment and your data. If your data is just a few numbers,
> either analyzer would do (even the old midas mana.c analyzer would do).
>
> But if you have complicated data, especially streaming data, where midas events
> and physics events do not have a 1-to-1 connection, the old analyzers will
> not cut the mustard. I have done this kind of processing in the old analyzers,
> came up with a generalized structure, the "m" analyzer is the result.
>
> Historical note: I developed rootana maybe 15 years ago to process data
> from the ALPHA experiment at CERN (anti-hydrogen trap), more recently, I developed
> manalyzer to process more complicated data from the ALPHA-g experiment at CERN (vertical
> anti-hydrogen trap, to study gravity effects). Joseph McKenna from CERN contributed
> the automatic by-module multithreading and benchmarking.
>
> To compare:
>
> - both rootana and manalyzer use the same TMidasOnline class for connecting to live MIDAS data
> - both use the same midasio classes to read and write MIDAS files
> - rootana uses the older TMidasEvent class to access MIDAS banks
> - manalyzer uses the newer TMEvent class. the main improvement is that TMEvent is
> a well-behaved C++ class with a usable assignment and copy-constructor operators.
> - graphics and web interface uses the same ROOT graphics, ROOT web server (a derivative
> of mongoose web server library) and the same JS-ROOT.
> - the manalyzer has better defined control flow and C++ object lifetime rules
> wrt run start and run end (this corrects problems with life time of C++ objects
> in the old rootana).
> - manalyzer has automatic per-module multithreading "for free" (thanks, Joseph!),
> I typically see the alphag analyzer use 8-10 CPU threads without having to use
> any threading or mutex gunk in the analysis code.
>
> The current plan is to include manalyzer into MIDAS as a git submodule, with luck
> it will happen for the next midas release, the hold up is with the midasio class that needs
> to be updated, git-submoduled and added to midas. Also the old TMidasOnline class needs
> updating.
>
> To conclude, we use manalyzer for ALPHA-2 and ALPHA-g, people who use it seem to be
> generally happy (especially with the automatic per-module multithreading), we use
> it for a couple of simpler experiments at TRIUMF.
>
> I hope this answers your questions?
>
> K.O. |
06 Feb 2021, Frederik Wauters, Forum, ana or manalyzer?
|
ok, nevermind, it's in the help
" -mt: Enable multithreaded mode. Extra multithread config settings: " |
18 Jan 2021, Isaac Labrie Boulay, Forum, Warning: the time for this bank is more than 10 sec older than current time.
|
Hi all,
I get this warning when I run anaDisplay.exe (analyzer display mode) of the old
Rootana analyzer. It seems to be because the analyzer cannot keep up with the data
gathered by my frontend. The same issue seems to happen when I run the newer
"manalyzer_example_root_graphic.exe" in graphical mode (-g). Is my computer cpu
just not powerful enough to run both the data acquisition and the graphical
analyzer simultaneously? Both the frontend and analyzer run on the same PC.
As always, thanks for the help!
Isaac the intern |
21 Jan 2021, Thomas Lindner, Forum, Warning: the time for this bank is more than 10 sec older than current time.
|
> Hi all,
>
> I get this warning when I run anaDisplay.exe (analyzer display mode) of the old
> Rootana analyzer. It seems to be because the analyzer cannot keep up with the data
> gathered by my frontend. The same issue seems to happen when I run the newer
> "manalyzer_example_root_graphic.exe" in graphical mode (-g). Is my computer cpu
> just not powerful enough to run both the data acquisition and the graphical
> analyzer simultaneously? Both the frontend and analyzer run on the same PC.
>
> As always, thanks for the help!
>
> Isaac the intern
Hi Isaac,
It is certainly possible that your analyzer cannot keep up with the data taking. It will depend (at least partly) on what you are trying to do in your analyzer. Suppose you are taking 1000Hz of events from some waveform digitizer. If you are trying to do something simple (like count how many bytes are in each data packet) then your analyzer will probably be able to keep up with the data taking. But if you are trying to do some very complicated maximum likelihood fit to each waveform, then it is possible that your computer (or any computer) would not be able to keep up with the data taking. In that case maybe your analyzer is only able to process 100Hz of data or 10% of the events (for example).
But it is not always a problem if your analyzer can't keep up. The goal of the online analyzer is to allow you to check data in real time. If you wanted to calculate the pulse height distribution of hits in your waveforms, then it is probably fine that you are only able to process 10% of the events online. It might take you a little longer to accumulate your statistics for your online plots, but your online analyzer data is still useful.
On the other hand, there is other types of online analysis where it is important to process every event. For instance, suppose you are trying to calculate online the rate of a certain type of event that involves making cuts in your online analysig. In that case you will want to be analyzing every event; missing 10% or 90% of events will bias your online analysis.
So that message is a warning; if you are doing an online analysis where it is critical that you process every event, then you have a problem if you see that message. In that case you need to figure out how to speed up your online analysis. You will need to use a profiler or some other tool to optimize your code.
It should be noted that the display itself can often be a limiting part of the online analyzer. You might be able to process 1000Hz of waveform data, but you certainly can't update your plots at 1000Hz; so you need to take care with the updating and display of your plots if you really care about speed. |
21 Jan 2021, Isaac Labrie Boulay, Forum, Warning: the time for this bank is more than 10 sec older than current time.
|
> > Hi all,
> >
> > I get this warning when I run anaDisplay.exe (analyzer display mode) of the old
> > Rootana analyzer. It seems to be because the analyzer cannot keep up with the data
> > gathered by my frontend. The same issue seems to happen when I run the newer
> > "manalyzer_example_root_graphic.exe" in graphical mode (-g). Is my computer cpu
> > just not powerful enough to run both the data acquisition and the graphical
> > analyzer simultaneously? Both the frontend and analyzer run on the same PC.
> >
> > As always, thanks for the help!
> >
> > Isaac the intern
>
> Hi Isaac,
>
> It is certainly possible that your analyzer cannot keep up with the data taking. It will depend (at least partly) on what you are trying to do in your analyzer. Suppose you are taking 1000Hz of events from some waveform digitizer. If you are trying to do something simple (like count how many bytes are in each data packet) then your analyzer will probably be able to keep up with the data taking. But if you are trying to do some very complicated maximum likelihood fit to each waveform, then it is possible that your computer (or any computer) would not be able to keep up with the data taking. In that case maybe your analyzer is only able to process 100Hz of data or 10% of the events (for example).
>
> But it is not always a problem if your analyzer can't keep up. The goal of the online analyzer is to allow you to check data in real time. If you wanted to calculate the pulse height distribution of hits in your waveforms, then it is probably fine that you are only able to process 10% of the events online. It might take you a little longer to accumulate your statistics for your online plots, but your online analyzer data is still useful.
>
> On the other hand, there is other types of online analysis where it is important to process every event. For instance, suppose you are trying to calculate online the rate of a certain type of event that involves making cuts in your online analysig. In that case you will want to be analyzing every event; missing 10% or 90% of events will bias your online analysis.
>
> So that message is a warning; if you are doing an online analysis where it is critical that you process every event, then you have a problem if you see that message. In that case you need to figure out how to speed up your online analysis. You will need to use a profiler or some other tool to optimize your code.
>
> It should be noted that the display itself can often be a limiting part of the online analyzer. You might be able to process 1000Hz of waveform data, but you certainly can't update your plots at 1000Hz; so you need to take care with the updating and display of your plots if you really care about speed.
Hi Thomas,
Thank you for the thorough answer. I can now see how this feature is important. Also, I was getting turtle speeds for my analysis rate.
I found out that it was because I was 'drawing/updating' my histograms for every event. I'm new to ROOT and I didn't realize how badly these
functions slow down your system.
Cheers.
Isaac |
07 Dec 2020, Isaac Labrie Boulay, Forum, The FIXED format.
|
Hi folks,
I am thinking of using the FIXED format event to avoid the overhead of the bank
structure. The Wiki says under "FIXED Format Event" that the standard MIDAS
analyzer cannot work with this format. What exactly is meant by this? Is it saying
that the specific ROOTANA analyzer template will not work with the event format?
Thanks for helping me out!
Isaac |
16 Dec 2020, Konstantin Olchanski, Forum, The FIXED format.
|
> I am thinking of using the FIXED format event to avoid the overhead of the bank
> structure. The Wiki says under "FIXED Format Event" that the standard MIDAS
> analyzer cannot work with this format. What exactly is meant by this? Is it saying
> that the specific ROOTANA analyzer template will not work with the event format?
I am not sure if current code can deal with anything other than MIDAS data that uses
the bank format. (even bk_init32a() support is incomplete in ROOTANA!).
I am curious why you have a problem with the bank format.
For bank overhead, there are several solutions:
a) if you have 1000 banks, 1 data word in each bank, you can create 1 MIDAS bank, store
your data inside using your own optimized data format. (MIDAS overhead reduces from
4000 words to 4 words, overhead from your custom data format goes from 0 to ???, so you
may not gain much).
b) if you have 1000 data events, 1 data word in each event. Overhead is crazy: many
words of event header, many words of bank header, etc. I would solve this storing
all your events inside one single midas event (say, 1000 data events per 1 midas
event). Each data event can be stored in a midas bank (it is okey to have 1000 banks
named "AAAA"), or you use solution (a). The m-analyzer is especially suitable for
working with such "super events". In the unpacking module, AnalyzeEvent() would unpack
each data event into a FlowEvent, in all the other modules, your FlowEvent-encapsulated
data events will show up in the AnalyzeFlowEvent() method.
Next time I work on the midasio library and the TMEvent class I should check that it
works with and that is usable with non-midas-bank data.
K.O. |
16 Dec 2020, Isaac Labrie Boulay, Forum, The FIXED format.
|
> > I am thinking of using the FIXED format event to avoid the overhead of the bank
> > structure. The Wiki says under "FIXED Format Event" that the standard MIDAS
> > analyzer cannot work with this format. What exactly is meant by this? Is it saying
> > that the specific ROOTANA analyzer template will not work with the event format?
>
> I am not sure if current code can deal with anything other than MIDAS data that uses
> the bank format. (even bk_init32a() support is incomplete in ROOTANA!).
>
> I am curious why you have a problem with the bank format.
>
> For bank overhead, there are several solutions:
>
> a) if you have 1000 banks, 1 data word in each bank, you can create 1 MIDAS bank, store
> your data inside using your own optimized data format. (MIDAS overhead reduces from
> 4000 words to 4 words, overhead from your custom data format goes from 0 to ???, so you
> may not gain much).
>
> b) if you have 1000 data events, 1 data word in each event. Overhead is crazy: many
> words of event header, many words of bank header, etc. I would solve this storing
> all your events inside one single midas event (say, 1000 data events per 1 midas
> event). Each data event can be stored in a midas bank (it is okey to have 1000 banks
> named "AAAA"), or you use solution (a). The m-analyzer is especially suitable for
> working with such "super events". In the unpacking module, AnalyzeEvent() would unpack
> each data event into a FlowEvent, in all the other modules, your FlowEvent-encapsulated
> data events will show up in the AnalyzeFlowEvent() method.
>
> Next time I work on the midasio library and the TMEvent class I should check that it
> works with and that is usable with non-midas-bank data.
>
> K.O.
Hey,
Yeah I had not yet really dove into the Event Structure documentation at the time that I
wrote this email. The BANK format and I get along now. No problem there anymore.
Thanks for getting back to me sir.
Isaac |
10 Dec 2020, Isaac Labrie Boulay, Forum, ROOTANA MidasWiki
|
Hi folks,
I'm currently looking at the ROOTANA wiki. I will be building an online MIDAS
analyzer and I'm wondering if the wiki still contains useful information if I want
to use the more recent 'manalyzer' template.
Thanks!
Isaac |
16 Dec 2020, Konstantin Olchanski, Forum, ROOTANA MidasWiki
|
> I'm currently looking at the ROOTANA wiki. I will be building an online MIDAS
> analyzer and I'm wondering if the wiki still contains useful information if I want
> to use the more recent 'manalyzer' template.
All the documentation for manalyzer is in it's README.md file. I am not sure if the ROOTANA wiki makes
correct reference to this.
The big idea is to make manalyzer part of midas, as replacement to the old mana.c analyzer.
For now, I plan to make manalyzer into a git submodule in midas and rootana (same as mjson, mvodb and
midasio).
K.O. |
06 Nov 2020, Alexandr Kozlinskiy, Suggestion, cmake build
|
hi,
In mu3e we use cmake to build our software,
and as rootana does not use cmake build system it is
very difficult to integrate it in our software.
I have posted pull request
'https://bitbucket.org/tmidas/rootana/pull-requests/25'
that implements cmake build for rootana.
It is tested standalone on several systems
and also as part of mutrigana-base repo
(which is also used in online repo of mu3e).
Tests and comments are welcome. |
16 Dec 2020, Konstantin Olchanski, Suggestion, cmake build
|
> hi,
>
> In mu3e we use cmake to build our software,
> and as rootana does not use cmake build system it is
> very difficult to integrate it in our software.
>
> I have posted pull request
> 'https://bitbucket.org/tmidas/rootana/pull-requests/25'
> that implements cmake build for rootana.
> It is tested standalone on several systems
> and also as part of mutrigana-base repo
> (which is also used in online repo of mu3e).
>
> Tests and comments are welcome.
Thank you for contributing this. I will be working on MIDAS and ROOTANA soon and I
hope to add cmake support. The main issue it to finish the split or mvodb, midasio
and manalyzer into separate git submodules.
K.O. |
12 Jul 2020, Thomas Lindner, Bug Report, Compiling rootana on Macos 10.15.4
|
I had some trouble building rootana on my new laptop, running MacOS 10.15.4 (Xcode 11.5).
Most of rootana compiled fine, but the steps with rootcint fail. For instance:
rootcint -f obj/TMainDisplayWindowDict.cxx -DHAVE_ROOT -DOS_LINUX -DOS_DARWIN -I./include
include/TMainDisplayWindow.hxx include/TMainDisplayWindow_LinkDef.h
In file included from input_line_12:12:
In file included from ./include/TMainDisplayWindow.hxx:4:
In file included from /Applications/root_v6.18.99/include/TGClient.h:27:
In file included from /Applications/root_v6.18.99/include/TString.h:26:
In file included from /Applications/root_v6.18.99/include/TMathBase.h:32:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/cmath:317:9: error: no member named
'signbit' in the global namespace
using ::signbit;
~~^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/cmath:318:9: error: no member named
'fpclassify' in the global namespace
using ::fpclassify;
~~^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/cmath:319:9: error: no member named
'isfinite' in the global namespace
using ::isfinite;
~~^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/cmath:320:9: error: no member named 'isinf'
in the global namespace
using ::isinf;
~~^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/cmath:321:9: error: no member named 'isnan'
in the global namespace
This is probably a problem with my Xcode installation. But I found a work-around, which was explicitly
defining CPATH before the rootcint command in the Makefile:
obj/TMainDisplayWindowDict.cxx obj/TRootanaDisplayDict.cxx obj/TFancyHistogramCanvasDict.cxx:
obj/%Dict.cxx:
CPATH=/usr/local/include rootcint -f $@ $(CXXFLAGS_ROOTCINT) -I./include include/$*.hxx
include/$*_LinkDef.h
obj/TNetDirectoryDict.cxx: obj/%Dict.cxx:
CPATH=/usr/local/include rootcint -f $@ $(CXXFLAGS_ROOTCINT) -I./include include/$*.h
include/$*_LinkDef.h
As I say, this is probably a problem with my installation; but I include the work-around in case it is helpful.
In the medium term we will try to remove the dependence on the old, ugly rootcint, since it often has
problems. |
22 May 2020, Konstantin Olchanski, Info, rootana updates
|
I am updating the rootana code to include all the latest developments in midas and
elsewhere:
- mxml, mjson (and soon mvodb, midasio and manalyzer) are moving into git submodules
(shared with midas and usable as standalone code)
- VirtualOdb is gone, use MVOdb instead
- TMidasFile is gone, use TMReader and TMWriter in midasio.h
- TMidasEvent remains, I will update it with Stefan's to the midas bank format.
- TMEvent in midasio.h will also be updated for this
- TMEvent has incomplete implementation for creating new events and adding data banks, I
hope to fix this. This should make midasio classes useful for writing MIDAS frontends.
- I am still thinking about what to do with roody and the XmlServer, MidasServer and
NetDirectory code. Most likely remove it all and concentrate in supporting JSROOT and the
associated ROOT-built-in web server. Maybe update roody to use the JSROOT interface to
get data from the analyzer.
If you do not want to see all these changes, please use the rootana-2020-03 release
branch.
After all changes are implemented and tested, I will cut a release branch and post an
announcement.
K.O. |
22 May 2020, Konstantin Olchanski, Release, rootana-2020-03
|
I cut a release branch and tag for rootana-2020-03. This release is meant to be used with
midas release 2020-03.
More recent versions of midas have several incompatibilities with ROOTANA, and I will
be working on resolving them:
- new incompatible data bank format in midas .mid files. (to fix the 64-bit misalignment bug)
- renaming of MIDAS TID_xxx types
- renaming of MIDAS data types in XML ODB dump files.
When we tag the next midas release, we will tag the compatible ROOTANA release and going
forward hope to have MIDAS and ROOTANA releases done in lock-step.
K.O. |
10 Mar 2016, Thomas Lindner, Info, web display of MIDAS data using rootana+THttpServer
|
I have finished a test implementation of a web display for MIDAS online
monitoring. I have a test version of this display running here:
https://midastestdaq.triumf.ca/CS/webdisplay
(username/pwd: testdaq/testdaq)
The main features of this way of display MIDAS data are:
- An online rootana program that produces ROOT TH1 and TH2 histogram.
- A web server provided by ROOT (THttpServer) which serves up the histogram
information in JSON format.
- A bunch of crude html/javascript that grabs the JSON and plots it using a
couple of third-party javascript plotting packages.
I have written a more detailed description of this procedure (including some
known deficiencies) which is available here
https://midas.triumf.ca/MidasWiki/index.php/Rootana_javascript_displays
The html/javascript for plotting is available in rootana/examples/html. It
should be noted that this procedure is only weakly coupled to rootana; you could
pretty easily take any program that makes ROOT histograms, add this THttpServer
and re-work my html/javascript to plot it. Most of the hard-work is already
provided by THttpServer (which incidentally is available in newer versions of
both ROOT5 and ROOT6).
I am imagining the following scenario for using these web tools:
- we use this web-based display of online MIDAS data for a sub-set of key plots
for shift-takers and for remote experts to provide quick feed-back (when you are
on the bus, at the bar, on the ski hill).
- we continue to use some rootana GUI that provides a complete set of all the
online MIDAS plots, as well as the ability to play-back data in MIDAS files.
I can imagine a situation where we might only use the web tools, though I
haven't yet thought seriously about how to allow a play-back of MIDAS files
through web display.
Hopefully people find these tools useful. I'm interested in all feed-back. |
25 Jan 2017, Thomas Lindner, Info, web display of MIDAS data using rootana+THttpServer
|
I have added some additional features to the example webdisplay that we have for
ROOTANA data (where we are displaying rootana data through ROOT THttpServer).
The main improvement to the display is that I added the ability to plot the data
using the JSROOT package [1]. Previously I had used different packages (dygraphs
and plot-ly) for plotting. The JSROOT plots are not obviously superior, though they
do present data in a more familiar way (at least for me). The rootana webdisplay
currently allows you to switch between the two different styles.
You can see a working example of the webdisplay here:
https://midastestdaq.triumf.ca/CS/webdisplay
(username/pwd: testdaq/testdaq)
All details on setting up that example are here:
https://midas.triumf.ca/MidasWiki/index.php/Rootana_javascript_displays#Custom_web_display
I'm interested in any feedback on which plotting style people prefer (or any other
aspects of the rootana webdisplay).
[1] https://root.cern/js/ |
26 Jan 2017, Pierre Gorel, Info, web display of MIDAS data using rootana+THttpServer
|
> I'm interested in any feedback on which plotting style people prefer (or any other
> aspects of the rootana webdisplay).
I personally prefer the ROOT style. It seems that they are equivalent, but it is possible to
change to log scale in X, Y (and Z for 2D) by simple click right on the plot. I cannot find
this feature in plot-ly. Unfortunately, it comes back to linear at the next refresh it seems...
Also, I prefer the 1D histograms as colums, not a segments. |
03 May 2017, Alberto Remoto, Info, web display of MIDAS data using rootana+THttpServer
|
Hi Thomas,
> All details on setting up that example are here:
>
> https://midas.triumf.ca/MidasWiki/index.php/Rootana_javascript_displays#Custom_web_display
I am trying to test the webdisplay but I am not sure which would be the path:
I start the THttpServer with:
$ ana.exe -r9091
But on the url:
http://localhost:9091/
I find just the default browser provided by JSROOT, while nothing is found on:
http://localhost:9091/CS/webdisplay
Where am I supposed to find the custom webdisplay provided by you?
Thank you, Alberto. |
03 May 2017, Thomas Lindner, Info, web display of MIDAS data using rootana+THttpServer
|
>
> Hi Thomas,
>
> > All details on setting up that example are here:
> >
> > https://midas.triumf.ca/MidasWiki/index.php/Rootana_javascript_displays#Custom_web_display
>
> I am trying to test the webdisplay but I am not sure which would be the path:
>
> I start the THttpServer with:
>
> $ ana.exe -r9091
>
> But on the url:
>
> http://localhost:9091/
>
> I find just the default browser provided by JSROOT, while nothing is found on:
>
> http://localhost:9091/CS/webdisplay
>
> Where am I supposed to find the custom webdisplay provided by you?
Hi Alberto,
I have added some additional details to the MediaWiki page that you referenced above. The main point is as follows:
1) You need to setup a custom MIDAS webpage to point towards the example code in
rootana/examples/html/generic_webdisplay.html
This means you need to add new entries to the ODB directory /Custom
2) The 'same-origin policy' means that you need to setup some sort of proxying so that the custom web page can access the
ROOT webpage. So, let's suppose in your case that you had the following ports for web servers:
ROOT webserver: localhost:9091
MIDAS webserver: localhost:8081
so in that case you would want to setup an APACHE proxy so that
localhost -> localhost:8081 (for the MIDAS server)
localhost/rootana -> localhost:9091 (for the ROOT server)
then the custom page would be available at
localhost/CS/webdisplay
Please read my updated documentation and see if this makes any more sense.
[1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS |
09 May 2017, Konstantin Olchanski, Info, web display of MIDAS data using rootana+THttpServer
|
>
> 2) The 'same-origin policy' means that you need to setup some sort of proxying so that the custom web page can access the
> ROOT webpage. So, let's suppose in your case that you had the following ports for web servers:
> [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
>
The MIDAS web server mhttpd already implements CORS, so you can access mhttpd AJAX and JSON-RPC from external web pages, no need to proxy.
Does the ROOT web server NOT implement CORS? We should file a bug report with ROOT if it does not.
K.O. |
10 Mar 2020, Konstantin Olchanski, Info, web display of MIDAS data using rootana+THttpServer
|
> >
> > 2) The 'same-origin policy' means ...
> > https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
> >
>
> The MIDAS web server mhttpd already implements CORS, so you can access mhttpd AJAX and JSON-RPC from external web pages, no need to proxy.
> Does the ROOT web server NOT implement CORS? We should file a bug report with ROOT if it does not.
For the record, the web server in ROOT 6.20 does implement CORS via the "cors=" option, see
https://github.com/root-project/jsroot/blob/master/docs/HttpServer.md
K.O. |
22 Oct 2019, Lukas Gerritzen, Bug Report,
|
|
24 Jul 2019, Paolo Baesso, Bug Report, ROOTANA installation fails (ss_suspend_set_dispatch_ipc(NULL); not declared)
|
Good afternoon, I am following the instructions provided here to install ROOTANA (and MIDAS, more in general). When I try to make I get the following error
libMidasInterface/TMidasOnline.cxx: In member function ‘bool TMidasOnline::sleep(int)’: libMidasInterface/TMidasOnline.cxx:194:3: error: ‘ss_suspend_set_dispatch_ipc’ was not declared in this scope
ss_suspend_set_dispatch_ipc(NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
libMidasInterface/TMidasOnline.cxx:194:3: note: suggested alternative: ‘ss_suspend_set_rpc_thread’
ss_suspend_set_dispatch_ipc(NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
ss_suspend_set_rpc_thread
Makefile:339: recipe for target 'obj/TMidasOnline.o' failed make: *** [obj/TMidasOnline.o] Error 1
And the compilation stops. Is this a known issue?
My system is Ubuntu 18 and I am running ROOT 6.18.00 |
08 Aug 2019, Lauren Manton, Bug Report, ROOTANA installation fails (ss_suspend_set_dispatch_ipc(NULL); not declared)
|
Hi,
Thank you, commenting out the line worked and we can now compile the code. However, when we try to run ana.exe or anaDisplay.exe, we get the following errors:
Error in <TCling::RegisterModule>: cannot find dictionary module TMainDisplayWindowDict_rdict.pcm
Error in <TCling::RegisterModule>: cannot find dictionary module TRootanaDisplayDict_rdict.pcm
Error in <TCling::RegisterModule>: cannot find dictionary module TFancyHistogramCanvasDict_rdict.pcm
We see that the files are in /rootana/obj but we cannot find a way to point the compiler to them.
Could you please advise how to proceed,
Many thanks
Paolo Baesso wrote: |
Good afternoon, I am following the instructions provided here to install ROOTANA (and MIDAS, more in general). When I try to make I get the following error
libMidasInterface/TMidasOnline.cxx: In member function ‘bool TMidasOnline::sleep(int)’: libMidasInterface/TMidasOnline.cxx:194:3: error: ‘ss_suspend_set_dispatch_ipc’ was not declared in this scope
ss_suspend_set_dispatch_ipc(NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
libMidasInterface/TMidasOnline.cxx:194:3: note: suggested alternative: ‘ss_suspend_set_rpc_thread’
ss_suspend_set_dispatch_ipc(NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
ss_suspend_set_rpc_thread
Makefile:339: recipe for target 'obj/TMidasOnline.o' failed make: *** [obj/TMidasOnline.o] Error 1
And the compilation stops. Is this a known issue?
My system is Ubuntu 18 and I am running ROOT 6.18.00
|
|
08 Aug 2019, Thomas Lindner, Bug Report, ROOTANA installation fails (ss_suspend_set_dispatch_ipc(NULL); not declared)
|
Hi Lauren,
Do you see an actual problem that results from those error messages? As I mentioned before [1] I get that error message, but it doesn't seem to actually cause a problem.
Thomas
[1] https://midas.triumf.ca/elog/Rootana/12
Lauren Manton wrote: |
Hi,
Thank you, commenting out the line worked and we can now compile the code. However, when we try to run ana.exe or anaDisplay.exe, we get the following errors:
Error in <TCling::RegisterModule>: cannot find dictionary module TMainDisplayWindowDict_rdict.pcm
Error in <TCling::RegisterModule>: cannot find dictionary module TRootanaDisplayDict_rdict.pcm
Error in <TCling::RegisterModule>: cannot find dictionary module TFancyHistogramCanvasDict_rdict.pcm
We see that the files are in /rootana/obj but we cannot find a way to point the compiler to them.
Could you please advise how to proceed,
Many thanks
Paolo Baesso wrote: |
Good afternoon, I am following the instructions provided here to install ROOTANA (and MIDAS, more in general). When I try to make I get the following error
libMidasInterface/TMidasOnline.cxx: In member function ‘bool TMidasOnline::sleep(int)’: libMidasInterface/TMidasOnline.cxx:194:3: error: ‘ss_suspend_set_dispatch_ipc’ was not declared in this scope
ss_suspend_set_dispatch_ipc(NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
libMidasInterface/TMidasOnline.cxx:194:3: note: suggested alternative: ‘ss_suspend_set_rpc_thread’
ss_suspend_set_dispatch_ipc(NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
ss_suspend_set_rpc_thread
Makefile:339: recipe for target 'obj/TMidasOnline.o' failed make: *** [obj/TMidasOnline.o] Error 1
And the compilation stops. Is this a known issue?
My system is Ubuntu 18 and I am running ROOT 6.18.00
|
|
|
14 Aug 2019, Konstantin Olchanski, Bug Report, cannot find dictionary module TMainDisplayWindowDict_rdict.pcm
|
> cannot find dictionary module TMainDisplayWindowDict_rdict.pcm
this problem is not unique to ROOTANA and ROODY, take a search for this problem (and solutions) on the ROOT forum...
K.O. |
14 Aug 2019, Konstantin Olchanski, Bug Report, ROOTANA installation fails (ss_suspend_set_dispatch_ipc(NULL); not declared)
|
(please send elog messages in "plain text" mode, otherwise I cannot quote your text)
The problem with missing ss_suspend_set_dispatch_ipc() is now fixed, rootana commit
https://bitbucket.org/tmidas/rootana/commits/52fdedb5745fa9b6739a16a6faab8b9d40108045
If you run rootana online in graphical mode (or call TMidasOnline::sleep() yourself), you may re-encounter
the problem of recursive calls to the event handler, depending on which version of MIDAS you use. The
probability of this problem happening is probably reduced to zero in all 2019 MIDAS releases and it is
definitely fixed in the most recent commits to MIDAS (this will be the midas-2019-09 release, most likely).
Read more here:
https://midas.triumf.ca/elog/Midas/1663
K.O. |
|