ID |
Date |
Author |
Topic |
Subject |
1647
|
07 Aug 2019 |
Pintaudi Giorgio | Suggestion | ROOT and multi-threading | Hello!
I am creating this thread to comment on an issue raised today during the MIDAS
workshop.
It was said that ROOT doesn't play well with multithreading ... and it is
definitely true. But since last year, many improvements have been done in ROOT
multi-threading support and now even the ROOT fitter can be made thread-safe.
I know this because recently I had to completely rewrite the calibration
software for the WAGASCI experiment and I wanted to use many ROOT analyzers in
parallel.
Getting ROOT to work in a multi-thread environment is not painless. It took me
many weeks to get to the end of it. But if using the latest ROOT version (from
about ROOT 6.12.00 onwards), it should be possible. Basically, you have to
compile ROOT with the Minuit2 minimizer support and then select it.
This is the thread on the ROOT forum where I have asked about and solved my
issues (I am LastStarDust): https://root-forum.cern.ch/t/root-crashes-in-multi-
threaded-environment/35407
You can also refer to this bug report: https://sft.its.cern.ch/jira/browse/ROOT-
7173
and this documentation page: https://root.cern.ch/how/how-express-parallelism-
many-cores
Hope it may help.
Giorgio |
1646
|
07 Aug 2019 |
Thomas Lindner | Bug Report | ROOTANA bug? | Hi Paolo,
Sorry for the slow response. We were discussing this with Konstantin yesterday. He is aware of the problem now and will be working on a solution soon.
In the short term I found that it works if you just comment out the offending line:
indnerlt:rootana lindner$ git diff libMidasInterface/TMidasOnline.cxx
diff --git a/libMidasInterface/TMidasOnline.cxx b/libMidasInterface/TMidasOnline.cxx
index 92eb3e9..67da613 100644
--- a/libMidasInterface/TMidasOnline.cxx
+++ b/libMidasInterface/TMidasOnline.cxx
@@ -191,7 +191,7 @@ bool TMidasOnline::sleep(int mdelay)
#ifdef CH_IPC
ss_suspend_set_dispatch(CH_IPC, 0, NULL);
#else
- ss_suspend_set_dispatch_ipc(NULL);
+ // ss_suspend_set_dispatch_ipc(NULL);
#endif
int status = ss_suspend(mdelay, 0);
if (status == SS_SUCCESS)
This compiles and at least runs for me; so maybe that is helpful for you. But Konstantin will provide a longer term solution.
> Hi,
>
> I posted on the ROOTANA elog but there seems to be little activity there...
>
> Could someone confirm if this is a bug?
> https://midas.triumf.ca/elog/Rootana/14
>
> Another user replied that they are encountering the same issue, so I think it is unlikely it is just our installation.
>
> While ROOTANA is unusable for us, I tried to use the example Frontend and Analyzer (under the Experiment source folder). The analyzer does not seem to do much though. A root file is produced but nothing is placed into it. Is that normal?
>
> Any help would be welcome. |
1645
|
07 Aug 2019 |
Paolo Baesso | Bug Report | ROOTANA bug? | Hi,
I posted on the ROOTANA elog but there seems to be little activity there...
Could someone confirm if this is a bug?
https://midas.triumf.ca/elog/Rootana/14
Another user replied that they are encountering the same issue, so I think it is unlikely it is just our installation.
While ROOTANA is unusable for us, I tried to use the example Frontend and Analyzer (under the Experiment source folder). The analyzer does not seem to do much though. A root file is produced but nothing is placed into it. Is that normal?
Any help would be welcome. |
1644
|
06 Aug 2019 |
Stefan Ritt | Info | Precedence of equipment/common structure | After some internal discussion, I decided to undo my previous change again, in order not to break existing habits. Instead, I created a new function
set_odb_equipment_common(equipment, name);
which should be called from frontend_init() which explicitly copies all data from the equipment structure in the front-end into the ODB.
Stefan |
1643
|
06 Aug 2019 |
Stefan Ritt | Info | Precedence of equipment/common structure | Hi Thomas,
the change only affects Eqipment/<name>/common not the Equipment/<name>/Settings.
The Common subtree is still hot-linked into the frontend, so when running things can be changed if needed. This mainly concerns the readout period of periodic events.
Sometimes you want to change this quickly without restarting the frontend. Changing the other settings are kind of dangerous. If you change the ID of an event on the fly
you won't be able to analyze your data. So having this read-only in the ODB might be a good idea (you still need it in the ODB for the status page), except for the values
you want to change (like the readout period).
Let's see what other people have to say.
Stefan
> Hi Stefan,
>
> This change does not sound like a good idea to me. I think that this change will cause just as much confusion as before; probably more since you are changing established behaviour.
>
> It is common that MIDAS frontends usually have a Settings directory in the ODB where details about the frontend behaviour are set. The Settings directory might get initialized from strings in the frontend code, but after initialization the Settings in the ODB have precedence and define how the frontend will behave. Indeed, most of my custom webpages are designed to control my frontend programs through their Settings ODB tree.
>
> So you have created a situation where Frontend/Settings in the ODB has precedence and is the main place for changing frontend behaviour; but Frontend/Common in the ODB is essentially meaningless and will get overwritten the next time the frontend restarts. That seems likely to confuse people.
>
> If you really want to make this change I suggest that you delete the Frontend/Common directory entirely; or make it read-only so that people aren't fooled into changing it.
>
> Thomas
>
>
>
> > Today I fixed a long-annoying problem. We have in each front-end an equipment structure
> > which defined the event id, event type, readout frequency etc. This is mapped to the ODB
> > subtree
> >
> > /Equipment/<name>/Common
> >
> > In the past, the ODB setting took precedence over the frontend structure. We defined this
> > like 25 years ago and I forgot what the exact reason was. It causes however many people
> > (including myself) to fall into this trap: You change something in the front-end EQUIPMENT
> > structure, you restart the front-end, but the new setting does not take effect since the
> > (old) ODB value took precedence. After some debugging you find out that you have to both
> > change the EQUIPMENT structure (which defines the default value for a fresh ODB) and the
> > ODB value itself.
> >
> > So I changed it in the current develop tree that the front-end structure takes precedence.
> > You still have a hot-link, so if you want to change anything while the front-end is running
> > (like the readout period), you can do that in the ODB and it takes effect immediately. But
> > when you start the front-end the next time, the value from the EQUIPMENT structure is
> > taken again. So please be aware of this new feature.
> >
> > Happy BC day,
> > Stefan |
1642
|
06 Aug 2019 |
Thomas Lindner | Info | Precedence of equipment/common structure | Hi Stefan,
This change does not sound like a good idea to me. I think that this change will cause just as much confusion as before; probably more since you are changing established behaviour.
It is common that MIDAS frontends usually have a Settings directory in the ODB where details about the frontend behaviour are set. The Settings directory might get initialized from strings in the frontend code, but after initialization the Settings in the ODB have precedence and define how the frontend will behave. Indeed, most of my custom webpages are designed to control my frontend programs through their Settings ODB tree.
So you have created a situation where Frontend/Settings in the ODB has precedence and is the main place for changing frontend behaviour; but Frontend/Common in the ODB is essentially meaningless and will get overwritten the next time the frontend restarts. That seems likely to confuse people.
If you really want to make this change I suggest that you delete the Frontend/Common directory entirely; or make it read-only so that people aren't fooled into changing it.
Thomas
> Today I fixed a long-annoying problem. We have in each front-end an equipment structure
> which defined the event id, event type, readout frequency etc. This is mapped to the ODB
> subtree
>
> /Equipment/<name>/Common
>
> In the past, the ODB setting took precedence over the frontend structure. We defined this
> like 25 years ago and I forgot what the exact reason was. It causes however many people
> (including myself) to fall into this trap: You change something in the front-end EQUIPMENT
> structure, you restart the front-end, but the new setting does not take effect since the
> (old) ODB value took precedence. After some debugging you find out that you have to both
> change the EQUIPMENT structure (which defines the default value for a fresh ODB) and the
> ODB value itself.
>
> So I changed it in the current develop tree that the front-end structure takes precedence.
> You still have a hot-link, so if you want to change anything while the front-end is running
> (like the readout period), you can do that in the ODB and it takes effect immediately. But
> when you start the front-end the next time, the value from the EQUIPMENT structure is
> taken again. So please be aware of this new feature.
>
> Happy BC day,
> Stefan |
1641
|
06 Aug 2019 |
Thomas Lindner | Forum | MIDAS Workshop on Aug 7 | Dear MIDAS users,
A final reminder about the MIDAS workshop tomorrow. A couple reminders/notes:
1) Workshop will take place from 1PM-5:30PM (Vancouver time) on Aug 7.
2) A finalized agenda for the workshop is posted here:
https://indico.triumf.ca/conferenceDisplay.py?confId=2438
Speakers should email me their talks beforehand and I will post them.
3) For those who want to participate remotely, we will be using bluejeans. The webpage for the bluejeans meeting is here:
https://bluejeans.com/462865444
I will start the connection ~20min before the start of the session; people calling in remotely might want to call early, so we can test the sound quality.
4) For those at TRIUMF, the meeting will be in the ISAC-II conference room.
Thomas
> Dear MIDAS users,
>
> Here's further information on the third MIDAS workshop:
>
> 1) Workshop will take place from 1PM-5PM (Vancouver time) on Aug 7.
>
> 2) A mostly finalized agenda for the workshop is posted here:
>
> https://indico.triumf.ca/conferenceDisplay.py?confId=2438
>
> People are still welcome to email me if they want to present something. We should be able to add it to the schedule.
>
> 3) For those who want to participate remotely, we will be using bluejeans. The webpage for the bluejeans meeting is here:
>
> https://bluejeans.com/462865444
>
> 4) For those at TRIUMF I will confirm the meeting room closer to the date.
>
> Thomas
>
>
> > Dear MIDAS users,
> >
> > We would like to announce a third MIDAS workshop at TRIUMF on Aug 7, 2019.
> > Stefan Ritt will again be visiting TRIUMF at this time.
> >
> > The overall goal of the workshop is to present new features in MIDAS, to discuss
> > future changes and to hear experiences from different experiments.
> >
> > We expect that some participants will connect remotely to the workshop; we will
> > setup a video-conferencing option. The exact time of the workshop will be
> > decided later and will be optimized based on the geographic distribution of
> > remote attendees. So please let us know if you want to attend remotely. We are
> > also happy for people to come in person to TRIUMF.
> >
> > A (very) preliminary agenda includes
> >
> > - New default mhttpd pages and new APIs for custom pages
> > - Conversion of MIDAS to C++
> > - new C++ based frontend framework (tmfe and mvodb from ALPHA-g)
> > - MySQL/Postgres database for storing ODB configurations
> > - Plans for updating history plotting
> > - Using MIDAS with an online trigger farm
> > - new C++ multithreaded flow analyzer (manalyzer from ALPHA-g)
> >
> > But please suggest other topics; we also hope to hear reports from particular
> > experiments.
> >
> > Sincerely,
> > Thomas (on behalf of MIDAS developers) |
1640
|
05 Aug 2019 |
Stefan Ritt | Info | Precedence of equipment/common structure | Today I fixed a long-annoying problem. We have in each front-end an equipment structure
which defined the event id, event type, readout frequency etc. This is mapped to the ODB
subtree
/Equipment/<name>/Common
In the past, the ODB setting took precedence over the frontend structure. We defined this
like 25 years ago and I forgot what the exact reason was. It causes however many people
(including myself) to fall into this trap: You change something in the front-end EQUIPMENT
structure, you restart the front-end, but the new setting does not take effect since the
(old) ODB value took precedence. After some debugging you find out that you have to both
change the EQUIPMENT structure (which defines the default value for a fresh ODB) and the
ODB value itself.
So I changed it in the current develop tree that the front-end structure takes precedence.
You still have a hot-link, so if you want to change anything while the front-end is running
(like the readout period), you can do that in the ODB and it takes effect immediately. But
when you start the front-end the next time, the value from the EQUIPMENT structure is
taken again. So please be aware of this new feature.
Happy BC day,
Stefan |
1639
|
01 Aug 2019 |
Stefan Ritt | Forum | How to convert C midas frontends to C++ (my problem solved) | >
> Ok, so the detail that I missed was that the dummy functions
>
> INT poll_event(INT source[], INT count, BOOL test)
> {
> return 1;
> };
>
> as shown in some of the older examples, work when you set
>
> INT poll_event(INT source, INT count, BOOL test)
> {
> return 1;
> };
If you would have read elog:1526 more carefully (point a4) you would have saved yourself a lot of time.
Stefan |
1638
|
30 Jul 2019 |
Stefan Ritt | Info | Limitations of MSL | > Would it be possible to add something like the following?
> 343 if (!isdigit(value1_var[i]) && value1_var[i] != '.')
> 344 break;
Actually isdigit() is completely wrong here, because it also fails the minus sign and the 'E' exponent, like in -1.2E-3
So I changed it to strchr("0123456789.+-Ee", var[i]) which should cover this case. If you put 1.2.3, it takes it as 1.2.
Stefan |
1637
|
30 Jul 2019 |
Stefan Ritt | Forum | How to convert C midas frontends to C++ (my problem solved) | > as a side comment, not all drivers are c++ compatible yet (e.g. mscbvr), so changes needed are small
Right. We recently switched the whole midas to c++, but we could not cover all drivers. Most of them just need some type
casting to compile under c++. I got already patches from several people which I'm happy to merge in. If you got mscbhvr
or any other driver compile under c++, please send me the diff.
Stefan |
1636
|
26 Jul 2019 |
Hassan | Bug Report | Fetest History Plot | Hi, our logger was running. I have tried restarting mlogger (even though we haven't
changed variable names). We ran the following commands one after another and still no
luck with history plot. Is there anything else that could be causing these problems?
Kind regards,
Hassan
==================================================================================
[lm17773@it038146 ~]$ cd /opt/midas_software/midas/bin/
[lm17773@it038146 bin]$ mhttpd
[mhttpd,ERROR] [odb.cxx:1646:db_open_database,ERROR] Removed ODB client 'mhttpd',
index 0 because process pid 20094 does not exists
[mhttpd,ERROR] [odb.cxx:1646:db_open_database,ERROR] Removed ODB client 'Logger',
index 1 because process pid 20214 does not exists
[mhttpd,INFO] Removed open record flag from "/Experiment/Security/RPC hosts/Allowed hosts"
[mhttpd,INFO] Removed exclusive access mode from "/Experiment/Security/RPC
hosts/Allowed hosts"
[mhttpd,INFO] Removed open record flag from "/Experiment/Security/mhttpd hosts/Allowed
hosts"
[mhttpd,INFO] Removed exclusive access mode from "/Experiment/Security/mhttpd
hosts/Allowed hosts"
[mhttpd,INFO] Removed open record flag from "/Logger/History"
[mhttpd,INFO] Removed exclusive access mode from "/Logger/History"
[mhttpd,INFO] Removed open record flag from "/Sequencer/State"
[mhttpd,INFO] Removed exclusive access mode from "/Sequencer/State"
[mhttpd,INFO] Removed open record flag from "/History/LoggerHistoryChannel"
[mhttpd,INFO] Removed exclusive access mode from "/History/LoggerHistoryChannel"
[mhttpd,INFO] Removed open record flag from "/Equipment/slow/Variables"
[mhttpd,INFO] Removed exclusive access mode from "/Equipment/slow/Variables"
[mhttpd,INFO] Removed open record flag from "/Equipment/Trigger/Statistics/Events per
sec."
[mhttpd,INFO] Removed exclusive access mode from "/Equipment/Trigger/Statistics/Events
per sec."
[mhttpd,INFO] Removed open record flag from "/Equipment/Trigger/Statistics/kBytes per
sec."
[mhttpd,INFO] Removed exclusive access mode from "/Equipment/Trigger/Statistics/kBytes
per sec."
[mhttpd,INFO] Removed open record flag from "/Equipment/Periodic/Variables"
[mhttpd,INFO] Removed exclusive access mode from "/Equipment/Periodic/Variables"
[mhttpd,INFO] Removed open record flag from "/Equipment/Scaler/Variables"
[mhttpd,INFO] Removed exclusive access mode from "/Equipment/Scaler/Variables"
[mhttpd,INFO] Corrected 10 ODB entries
[mhttpd,INFO] Deleted entry '/System/Clients/20094' for client 'mhttpd' because it is
not connected to ODB
Mongoose web server will use SSL certificate file "/home/lm17773/online/ssl_cert.pem"
Mongoose web server will use authentication realm "sampleexpt", password file
"/home/lm17773/online/htpasswd.txt"
mongoose web server is redirecting HTTP port 8080 to
https://it038146.users.bris.ac.uk:8443
mongoose web server is listening on the HTTP port 8080
mongoose web server is listening on the HTTPS port 8443
====================================================================================
[lm17773@it038146 bin]$ mlogger
[Logger,INFO] Deleted entry '/System/Clients/20214' for client 'Logger' because it is
not connected to ODB
Log directory is /home/lm17773/online/
Data directory is same as Log unless specified in /Logger/channels/
History directory is same as Log unless specified in /Logger/history/
ELog directory is same as Log
SQL database is localhost/sampleexpt/Runlog
MIDAS logger started. Stop with "!"
====================================================================================
[lm17773@it038146 bin]$ fetest
Frontend name : fetest
Event buffer size : 10485760
User max event size : 4194304
User max frag. size : 4194304
# of events per buffer : 2
Connect to experiment sampleexpt...
OK
Init hardware...frontend_init!
Event size set to 10240 bytes
Ring buffer wait sleep 1 ms
OK
time 1564131394, data 97.814758
time 1564131395, data 96.592583
time 1564131396, data 95.105652
time 1564131397, data 93.358040
time 1564131398, data 91.354546
time 1564131399, data 89.100655
time 1564131400, data 86.602539
time 1564131401, data 83.867058
time 1564131402, data 80.901703
time 1564131403, data 77.714592
Warning: bank RND4 has zero size
time 1564131404, data 74.314484
time 1564131405, data 70.710678
time 1564131406, data 66.913063
time 1564131407, data 62.932041
====================================================================================
> > Hi,
> >
> > We've been trying to run Fetest in the attempt of plotting the sine wave data on
> > the history page on the web server. However each time we've tried running a new
> > plot we have come across the error of 'no data' from the variables. In the
> > status page we are clearly obtaining data from the frontend and it is updating
> > the variable as expected in SLOW.
> >
> > When setting up MIDAS we managed to produce a history plot from Fetest but are
> > unable to do so any longer. We did have a go at modifying the Fetest code but
> > created a backup before doing so and are now running the original backup.
> >
> > What could be causing the Fetest data not to be showing in the history plot?
>
> Is the logger running? (this application is handling the history data).
> If yes: Did you change the variable names? If yes: restart the logger. |
Draft
|
26 Jul 2019 |
Hassan | Bug Report | Fetest History Plot |
===================================================================================
[lm17773@it038146 ~]$ cd /opt/midas_software/midas/bin/
[lm17773@it038146 bin]$ fetest
Frontend name : fetest
Event buffer size : 10485760
User max event size : 4194304
User max frag. size : 4194304
# of events per buffer : 2
Connect to experiment sampleexpt...
[fetest,ERROR] [odb.cxx:1646:db_open_database,ERROR] Removed ODB client 'Logger', index 1 because process pid 22659 does not exists
[fetest,ERROR] [odb.cxx:1646:db_open_database,ERROR] Removed ODB client 'mhttpd', index 2 because process pid 20257 does not exists
[fetest,INFO] Removed open record flag from "/Experiment/Security/RPC hosts/Allowed hosts"
[fetest,INFO] Removed exclusive access mode from "/Experiment/Security/RPC hosts/Allowed hosts"
[fetest,INFO] Removed open record flag from "/Experiment/Security/mhttpd hosts/Allowed hosts"
[fetest,INFO] Removed exclusive access mode from "/Experiment/Security/mhttpd hosts/Allowed hosts"
[fetest,INFO] Removed open record flag from "/Logger/Channels/0/Settings"
[fetest,INFO] Removed exclusive access mode from "/Logger/Channels/0/Settings"
[fetest,INFO] Removed open record flag from "/Logger/Channels/0/Statistics"
[fetest,INFO] Removed exclusive access mode from "/Logger/Channels/0/Statistics"
[fetest,INFO] Removed open record flag from "/Logger/History"
[fetest,INFO] Removed exclusive access mode from "/Logger/History"
[fetest,INFO] Removed open record flag from "/Sequencer/State"
[fetest,INFO] Removed exclusive access mode from "/Sequencer/State"
[fetest,INFO] Removed open record flag from "/History/LoggerHistoryChannel"
[fetest,INFO] Removed exclusive access mode from "/History/LoggerHistoryChannel"
[fetest,INFO] Removed open record flag from "/Equipment/slow/Variables"
[fetest,INFO] Removed exclusive access mode from "/Equipment/slow/Variables"
[fetest,INFO] Removed open record flag from "/Equipment/Trigger/Statistics/Events per sec."
[fetest,INFO] Removed exclusive access mode from "/Equipment/Trigger/Statistics/Events per sec."
[fetest,INFO] Removed open record flag from "/Equipment/Trigger/Statistics/kBytes per sec."
[fetest,INFO] Removed exclusive access mode from "/Equipment/Trigger/Statistics/kBytes per sec."
[fetest,INFO] Removed open record flag from "/Equipment/Periodic/Variables"
[fetest,INFO] Removed exclusive access mode from "/Equipment/Periodic/Variables"
[fetest,INFO] Removed open record flag from "/Equipment/Scaler/Variables"
[fetest,INFO] Removed exclusive access mode from "/Equipment/Scaler/Variables"
[fetest,INFO] Corrected 12 ODB entries
[fetest,INFO] Deleted entry '/System/Clients/20257' for client 'mhttpd' because it is not connected to ODB
OK
Init hardware...frontend_init!
Event size set to 10240 bytes
Ring buffer wait sleep 1 ms
OK
time 1564130782, data 91.354546
time 1564130783, data 93.358040
time 1564130784, data 95.105652
time 1564130785, data 96.592583
time 1564130786, data 97.814758
time 1564130787, data 98.768837
time 1564130788, data 99.452187
time 1564130789, data 99.862953
time 1564130790, data 100.000000
time 1564130791, data 99.862953
Warning: bank RND4 has zero size
time 1564130792, data 99.452187
time 1564130793, data 98.768837
time 1564130794, data 97.814758
time 1564130795, data 96.592583
Received break. Aborting...
frontend_exit!
Frontend shut down.
[lm17773@it038146 bin]$
=================================================================================
> > Hi,
> >
> > We've been trying to run Fetest in the attempt of plotting the sine wave data on
> > the history page on the web server. However each time we've tried running a new
> > plot we have come across the error of 'no data' from the variables. In the
> > status page we are clearly obtaining data from the frontend and it is updating
> > the variable as expected in SLOW.
> >
> > When setting up MIDAS we managed to produce a history plot from Fetest but are
> > unable to do so any longer. We did have a go at modifying the Fetest code but
> > created a backup before doing so and are now running the original backup.
> >
> > What could be causing the Fetest data not to be showing in the history plot?
>
> Is the logger running? (this application is handling the history data).
> If yes: Did you change the variable names? If yes: restart the logger. |
1634
|
26 Jul 2019 |
Nik Berger | Bug Report | History/Endianness | Hi,
I have a bank of floats with slow control values that I store to the history and
ODB. When reading the history, both in the webbrowser and with mhist, the floats
get read with the wrong endianness; under /equipment/variables in the ODB they
however display correctly. System is a an intel OpenSuse linux box. Any ideas?
Thanks
Nik |
1633
|
25 Jul 2019 |
Frederik Wauters | Forum | How to convert C midas frontends to C++ (my problem solved) |
Ok, so the detail that I missed was that the dummy functions
INT poll_event(INT source[], INT count, BOOL test)
{
return 1;
};
as shown in some of the older examples, work when you set
INT poll_event(INT source, INT count, BOOL test)
{
return 1;
};
as a side comment, not all drivers are c++ compatible yet (e.g. mscbvr), so changes needed are small |
Draft
|
25 Jul 2019 |
Hassan | Bug Report | Fetest History Plot |
=================================================================
[lm17773@it038146 bin]$ fetest
Frontend name : fetest
Event buffer size : 10485760
User max event size : 4194304
User max frag. size : 4194304
# of events per buffer : 2
Connect to experiment sampleexpt...
OK
Init hardware...frontend_init!
Event size set to 10240 bytes
Ring buffer wait sleep 1 ms
OK
time 1564044856, data 74.314484
time 1564044857, data 77.714600
time 1564044858, data 80.901703
time 1564044859, data 83.867058
time 1564044860, data 86.602539
time 1564044861, data 89.100655
time 1564044862, data 91.354546
time 1564044863, data 93.358040
time 1564044864, data 95.105652
time 1564044865, data 96.592583
Warning: bank RND4 has zero size
time 1564044866, data 97.814758
time 1564044867, data 98.768837
time 1564044868, data 99.452187
time 1564044869, data 99.862953
time 1564044870, data 100.000000
time 1564044872, data 99.452187
time 1564044873, data 98.768837
Warning: bank RND6 has zero size
time 1564044874, data 97.814758
Received break. Aborting...
frontend_exit!
Frontend shut down.
[lm17773@it038146 bin]$
===========================================================================
10:00:56.999 2019/07/25 [fetest,INFO] Program fetest on host localhost stopped
10:00:32.483 2019/07/25 [mhttpd,INFO] Run #29 stopped
09:59:10.666 2019/07/25 [fetest,INFO] Program fetest on host localhost started
09:59:07.731 2019/07/25 [fetest,INFO] Program fetest on host localhost stopped
09:58:13.700 2019/07/25 [Logger,INFO] Program Logger on host localhost started
09:58:12.707 2019/07/25 [Logger,INFO] Program Logger on host localhost stopped
09:57:19.136 2019/07/25 [mhttpd,INFO] Run #29 started
09:57:18.954 2019/07/25 [Logger,ERROR] [mlogger.cxx:3801:log_create_writer,ERROR] channel requested GZIP/ZLIB compression, but ZLIB is not available
09:57:15.305 2019/07/25 [mhttpd,INFO] Run #28 stopped
09:55:30.694 2019/07/25 [fetest,INFO] Program fetest on host localhost started
09:54:34.519 2019/07/25 [fetest,INFO] Program fetest on host localhost stopped
09:54:16.852 2019/07/25 [fetest,INFO] Program fetest on host localhost started
09:53:59.554 2019/07/25 [fetest,INFO] Program fetest on host localhost stopped
09:47:25.932 2019/07/25 [mhttpd,INFO] Program mhttpd on host localhost started
09:47:19.863 2019/07/25 [Logger,INFO] Program Logger on host localhost started
09:47:04.116 2019/07/25 [fetest,ERROR] [midas.cxx:6690:cm_shutdown,ERROR] Killing and Deleting client 'fetest' pid 1921
09:47:04.116 2019/07/25 [fetest,ERROR] [midas.cxx:6687:cm_shutdown,ERROR] Cannot connect to client 'fetest' on host 'localhost', port 38595
09:47:04.116 2019/07/25 [fetest,ERROR] [midas.cxx:10497:rpc_client_connect,ERROR] cannot connect to host "localhost", port 38595: connect() returned -1, errno 111 (Connection refused)
09:47:04.116 2019/07/25 [fetest,INFO] Program fetest on host localhost started
09:47:04.116 2019/07/25 [fetest,INFO] Deleted entry '/System/Clients/1613' for client 'mhttpd' because it is not connected to ODB
09:47:04.116 2019/07/25 [fetest,INFO] Corrected 9 ODB entries
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Equipment/random/Statistics"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Equipment/random/Statistics"
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Equipment/random/Common"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Equipment/random/Common"
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Equipment/slow/Statistics"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Equipment/slow/Statistics"
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Equipment/slow/Common"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Equipment/slow/Common"
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Equipment/test/Statistics"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Equipment/test/Statistics"
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Equipment/test/Common"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Equipment/test/Common"
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Sequencer/State"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Sequencer/State"
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Experiment/Security/mhttpd hosts/Allowed hosts"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Experiment/Security/mhttpd hosts/Allowed hosts"
09:47:04.116 2019/07/25 [fetest,INFO] Removed exclusive access mode from "/Experiment/Security/RPC hosts/Allowed hosts"
09:47:04.116 2019/07/25 [fetest,INFO] Removed open record flag from "/Experiment/Security/RPC hosts/Allowed hosts"
09:47:04.115 2019/07/25 [fetest,ERROR] [odb.cxx:1646:db_open_database,ERROR] Removed ODB client 'fetest', index 2 because process pid 1921 does not exists
09:47:04.115 2019/07/25 [fetest,ERROR] [odb.cxx:1646:db_open_database,ERROR] Removed ODB client 'mhttpd', index 0 because process pid 1613 does not exists
===========================================================================
> > Hi,
> >
> > We've been trying to run Fetest in the attempt of plotting the sine wave data on
> > the history page on the web server. However each time we've tried running a new
> > plot we have come across the error of 'no data' from the variables. In the
> > status page we are clearly obtaining data from the frontend and it is updating
> > the variable as expected in SLOW.
> >
> > When setting up MIDAS we managed to produce a history plot from Fetest but are
> > unable to do so any longer. We did have a go at modifying the Fetest code but
> > created a backup before doing so and are now running the original backup.
> >
> > What could be causing the Fetest data not to be showing in the history plot?
>
> Is the logger running? (this application is handling the history data).
> If yes: Did you change the variable names? If yes: restart the logger. |
1631
|
24 Jul 2019 |
Pierre-Andre Amaudruz | Bug Report | Fetest History Plot | > Hi,
>
> We've been trying to run Fetest in the attempt of plotting the sine wave data on
> the history page on the web server. However each time we've tried running a new
> plot we have come across the error of 'no data' from the variables. In the
> status page we are clearly obtaining data from the frontend and it is updating
> the variable as expected in SLOW.
>
> When setting up MIDAS we managed to produce a history plot from Fetest but are
> unable to do so any longer. We did have a go at modifying the Fetest code but
> created a backup before doing so and are now running the original backup.
>
> What could be causing the Fetest data not to be showing in the history plot?
Is the logger running? (this application is handling the history data).
If yes: Did you change the variable names? If yes: restart the logger. |
1630
|
23 Jul 2019 |
Lukas Gerritzen | Forum | How to convert C midas frontends to C++ | Can you post the exact command that cmake executes to link sc_fe_mini (with make VERBOSE=1)?
I have noticed similar linking problems that depended on the order when linking. In my case, it
compiled when "-lpthread -lutil -lrt" were at the end of the command, but not before mfe.o and
libmidas.a. Unfortunately I haven't found a way to tell cmake the "correct" order of the link
libraries.
Maybe this can be fixed by adding midas as a subdirectory in your cmake project and just linking
against the "mfe" target instead of libmfe.a. |
1629
|
23 Jul 2019 |
Stefan Ritt | Forum | How to convert C midas frontends to C++ | Have you left any "extern C" in your frontend program or in any of the used header file. Seems
like the linker cannot find the poll_event in your frontend code. If it's there, but it's compiled
with C calling (instead of C++), the name mangling causes it to be invisible to the linker. That
usually happens if there is somewhere
extern C {
INT poll_event();
...
}
while it is NOT defined as "extern C" in mfe.h which is used by mfe.cxx.
Stefan
> > Did you include mfe.h as written in elog:1526 ?
> >
> > Stefan
>
>
> Yes I did
>
> this is my include
>
> #include <stdio.h>
> #include <string.h>
> #include <assert.h>
> #include <math.h>
> #include <pthread.h>
>
>
> #include "midas.h"
> #include "mscb.h"
> #include "multi.h"
> #include "mscbdev.h"
> #include "mfe.h"
>
> (I attach my dummy fe)
>
> What confuses me is that I can compile examples/experiment/ if I copy that to a
> fresh dir.
>
> I also copied the CMakeLists from the example:
>
> #
> # cmake for the muX software
> #
> cmake_minimum_required(VERSION 3.3)
>
> project(muX)
>
> #
> # find midas installation, from CMakeLists in examples/experiment
> #
> set(MIDAS_DIR $ENV{MIDASSYS})
> message("MIDAS dir: " ${MIDAS_DIR})
> if (NOT EXISTS $ENV{MIDASSYS})
> message(FATAL_ERROR "Environment variable $MIDASSYS not defined, aborting.")
> endif()
>
> set(INC_PATH ${MIDAS_DIR}/include ${MIDAS_DIR}/mxml ${MIDAS_DIR}/mscb/include
> ${MIDAS_DIR}/drivers/class ${MIDAS_DIR}/drivers/device)
> link_directories($ENV{MIDASSYS}/lib)
>
> # enable certain compile warnings
> add_compile_options(-Wall -Wformat=2 -Wno-format-nonliteral -Wno-strict-
> aliasing -Wuninitialized -Wno-unused-function)
>
> set(LIBS -lpthread -lutil -lrt)
>
>
> add_executable(sc_fe_mini sc_fe_mini.cpp)
> target_include_directories(sc_fe_mini PRIVATE ${INC_PATH})
> target_link_libraries(sc_fe_mini mfe midas ${LIBS}) |
1628
|
23 Jul 2019 |
Frederik Wauters | Forum | How to convert C midas frontends to C++ | > Did you include mfe.h as written in elog:1526 ?
>
> Stefan
Yes I did
this is my include
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <pthread.h>
#include "midas.h"
#include "mscb.h"
#include "multi.h"
#include "mscbdev.h"
#include "mfe.h"
(I attach my dummy fe)
What confuses me is that I can compile examples/experiment/ if I copy that to a
fresh dir.
I also copied the CMakeLists from the example:
#
# cmake for the muX software
#
cmake_minimum_required(VERSION 3.3)
project(muX)
#
# find midas installation, from CMakeLists in examples/experiment
#
set(MIDAS_DIR $ENV{MIDASSYS})
message("MIDAS dir: " ${MIDAS_DIR})
if (NOT EXISTS $ENV{MIDASSYS})
message(FATAL_ERROR "Environment variable $MIDASSYS not defined, aborting.")
endif()
set(INC_PATH ${MIDAS_DIR}/include ${MIDAS_DIR}/mxml ${MIDAS_DIR}/mscb/include
${MIDAS_DIR}/drivers/class ${MIDAS_DIR}/drivers/device)
link_directories($ENV{MIDASSYS}/lib)
# enable certain compile warnings
add_compile_options(-Wall -Wformat=2 -Wno-format-nonliteral -Wno-strict-
aliasing -Wuninitialized -Wno-unused-function)
set(LIBS -lpthread -lutil -lrt)
add_executable(sc_fe_mini sc_fe_mini.cpp)
target_include_directories(sc_fe_mini PRIVATE ${INC_PATH})
target_link_libraries(sc_fe_mini mfe midas ${LIBS}) |
Attachment 1: sc_fe_mini.cpp
|
/********************************************************************\
Name: sc_fe.c
Created by: Stefan Ritt
Frederik Wauters
Andreas Knecht
Contents: Slow control frontend for the muX experiment
$Id: sc_fe.c 21520 2014-11-03 12:03:56Z ritt $
\********************************************************************/
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <pthread.h>
#include "midas.h"
#include "mscb.h"
#include "multi.h"
#include "mscbdev.h"
#include "mfe.h"
/*-- Globals -------------------------------------------------------*/
/* The frontend name (client name) as seen by other MIDAS clients */
const char *frontend_name = "SC Frontend";
/* The frontend file name, don't change it */
const char *frontend_file_name = __FILE__;
/* frontend_loop is called periodically if this variable is TRUE */
BOOL frontend_call_loop = TRUE;
/* a frontend status page is displayed with this frequency in ms */
INT display_period = 0;//1000;
/* maximum event size produced by this frontend */
INT max_event_size = 5*100000;
/* maximum event size for fragmented events (EQ_FRAGMENTED) */
INT max_event_size_frag = 5 * 1024 * 1024;
/* buffer size to hold events */
INT event_buffer_size = 2 *5* 100000;
/*-- Equipment list ------------------------------------------------*/
/* device driver list */
// New HV power supply with "many" channels
DEVICE_DRIVER hv_driver[] = {
{"64xHV-PSI", mscbdev, 0, NULL, DF_MULTITHREAD},
{""}
};
/*DEVICE_DRIVER cfd_driver[] = {
{"CFD-950", mscbdev, 0, NULL, DF_INPUT | DF_MULTITHREAD},
{""}
};
DEVICE_DRIVER pressure_driver[] = {
{"PFEIFFER", mscbdev, 0, NULL, DF_INPUT | DF_MULTITHREAD},
{""}
};
DEVICE_DRIVER multi_driver[] = {
{"ADC", mscbdev, 0, NULL, DF_INPUT | DF_MULTITHREAD},
{""}
};
DEVICE_DRIVER autofill_A_driver[] = {
{"Input", mscbdev, 0, NULL, DF_INPUT | DF_MULTITHREAD},
{"Output", mscbdev, 0, NULL, DF_OUTPUT | DF_MULTITHREAD},
{""}
};
DEVICE_DRIVER autofill_B_driver[] = {
{"Input", mscbdev, 0, NULL, DF_INPUT | DF_MULTITHREAD},
{"Output", mscbdev, 0, NULL, DF_OUTPUT | DF_MULTITHREAD},
{""}
};
// HV device with hardware ramp and 1 channel per node
DEVICE_DRIVER poshv_driver[] = {
{"PMT", mscbhvr, 0, NULL, DF_HW_RAMP | DF_PRIO_DEVICE | DF_MULTITHREAD},
{""}
};*/
EQUIPMENT equipment[] = {
{"SiPM_HV", /* equipment name */
{10, 0, /* event ID, trigger mask */
"SYSTEM", /* event buffer */
EQ_SLOW, /* equipment type */
0, /* event source */
"MIDAS", /* format */
TRUE, /* enabled */
RO_ALWAYS,
60000, /* produce event every 60 sec */
1000, /* read one event every second */
0, /* number of sub events */
1, /* log history every 10 seconds event */
"", "", ""} ,
cd_multi_read, /* readout routine */
cd_multi, /* class driver main routine */
hv_driver, /* device driver list */
NULL, /* init string */
},
// {"CFD", /* equipment name */
// {11, 0, /* event ID, trigger mask */
// "SYSTEM", /* event buffer */
// EQ_SLOW, /* equipment type */
// 0, /* event source */
// "MIDAS", /* format */
// TRUE, /* enabled */
// RO_ALWAYS,
// 60000, /* read every 60 sec */
// 1000, /* read one event every second */
// 0, /* number of sub events */
// 1, /* log history every second */
// "", "", ""} ,
// cd_multi_read, /* readout routine */
// cd_multi, /* class driver main routine */
// cfd_driver, /* device driver list */
// NULL, /* init string */
// },
// {"Pressures", /* equipment name */
// {12, 0, /* event ID, trigger mask */
// "SYSTEM", /* event buffer */
// EQ_SLOW, /* equipment type */
// 0, /* event source */
// "MIDAS", /* format */
// TRUE, /* enabled */
// RO_ALWAYS,
// 60000, /* read every 60 sec */
// 1000, /* read one event every second */
// 0, /* number of sub events */
// 1, /* log history every second */
// "", "", ""} ,
// cd_multi_read, /* readout routine */
// cd_multi, /* class driver main routine */
// pressure_driver, /* device driver list */
// NULL,
{""}
};
/*-- Dummy routines ------------------------------------------------*/
INT poll_event(INT source[], INT count, BOOL test)
{
return 1;
};
INT interrupt_configure(INT cmd, INT source[], PTYPE adr)
{
return 1;
};
/*-- Function to define MSCB variables in a convenient way ---------*/
void mscb_define(const char *submaster, const char *equipment, const char *devname, DEVICE_DRIVER *driver,
int address, unsigned char var_index, const char *name, double threshold)
{
int i, dev_index, chn_index, chn_total;
char str[256];
float f_threshold;
HNDLE hDB;
cm_get_experiment_database(&hDB, NULL);
if (submaster && submaster[0]) {
sprintf(str, "/Equipment/%s/Settings/Devices/%s/Device", equipment, devname);
db_set_value(hDB, 0, str, submaster, 32, 1, TID_STRING);
sprintf(str, "/Equipment/%s/Settings/Devices/%s/Pwd", equipment, devname);
db_set_value(hDB, 0, str, "meg", 32, 1, TID_STRING);
}
/* find device in device driver */
for (dev_index=0 ; driver[dev_index].name[0] ; dev_index++)
if (equal_ustring(driver[dev_index].name, devname))
break;
if (!driver[dev_index].name[0]) {
cm_msg(MERROR, "mscb_define", "Device \"%s\" not present in device driver list", devname);
return;
}
/* count total number of channels */
for (i=chn_total=0 ; i<=dev_index ; i++)
chn_total += driver[i].channels;
chn_index = driver[dev_index].channels;
sprintf(str, "/Equipment/%s/Settings/Devices/%s/MSCB Address", equipment, devname);
db_set_value_index(hDB, 0, str, &address, sizeof(int), chn_index, TID_INT, TRUE);
sprintf(str, "/Equipment/%s/Settings/Devices/%s/MSCB Index", equipment, devname);
db_set_value_index(hDB, 0, str, &var_index, sizeof(char), chn_index, TID_BYTE, TRUE);
if (threshold != -1) {
sprintf(str, "/Equipment/%s/Settings/Update Threshold", equipment);
f_threshold = (float) threshold;
db_set_value_index(hDB, 0, str, &f_threshold, sizeof(float), chn_total, TID_FLOAT, TRUE);
}
if (name && name[0]) {
sprintf(str, "/Equipment/%s/Settings/Names Input", equipment);
db_set_value_index(hDB, 0, str, name, 32, chn_total, TID_STRING, TRUE);
}
/* increment number of channels for this driver */
driver[dev_index].channels++;
}
void scfe_error(const char *error)
{
char str[256];
strlcpy(str, error, sizeof(str));
cm_msg(MERROR, "scfe_error", "%s", str);
al_trigger_alarm("MSCB", str, "MSCB Alarm", "Communication Problem", AT_INTERNAL);
}
/*-- Frontend Init -------------------------------------------------*/
INT frontend_init()
{
HNDLE hDB;
//int i, im, iv;
//char str[80];
cm_get_experiment_database(&hDB, NULL);
/* set error dispatcher for alarm functionality */
mfe_set_error(scfe_error);
/* set maximal retry count */
mscb_set_max_retry(100);
/* HV */
// New SiPM power supply with many channels
mscb_define("mscb267.psi.ch", "SiPM_HV", "64xHV-PSI", hv_driver, 1, 0, "Temperature 1", 0.1);
return CM_SUCCESS;
}
/*-- Frontend Exit -------------------------------------------------*/
INT frontend_exit()
{
return CM_SUCCESS;
}
/*-- Begin of Run --------------------------------------------------*/
INT begin_of_run(INT run_number, char *error)
{
return CM_SUCCESS;
}
/*-- End of Run ----------------------------------------------------*/
INT end_of_run(INT run_number, char *error)
{
return CM_SUCCESS;
}
/*-- Pause Run -----------------------------------------------------*/
INT pause_run(INT run_number, char *error)
{
return CM_SUCCESS;
}
/*-- Resuem Run ----------------------------------------------------*/
INT resume_run(INT run_number, char *error)
{
return CM_SUCCESS;
}
/*-- Frontend Loop -------------------------------------------------*/
INT frontend_loop()
{
... 6 more lines ...
|
|