20 Nov 2006, Matthias Schneebeli, Info, *** Important *** : Format of configuration file changed
|
The format of the configuration file has changed starting with rev. 1545. The
configuration files produced by an older version of rome are not anymore
compatible with the new versions of rome.
Please convert your configuration files with the converter program added under
/rome/tools/ConvertConfig/
Matthias |
18 Apr 2007, Ryu Sawada, Info, I/O system change
|
I changed default type of dictionaries. By this change we use new I/O system introduced at ROOT version 3.
A newly generated program can not read old files created by old programs by default. Error messages like following will be shown.Error in <TBuffer::CheckByteCount>: object of class PMTData read too few bytes: 21 instead of 169
There is one flag to avoid this problem. When <DictionaryType> in <Experiment> is 0, romebuilder will
generate a program with old dictionary type.
<Experiment>
<ExperimentName>MEG Analysis and monitor.</ExperimentName>
<ExperimentShortCut>MEG</ExperimentShortCut>
<ProgramName>Analyzer</ProgramName>
<ProgramDefinitionVersion>3</ProgramDefinitionVersion>
<FrameworkDescription>MEGAnalyzer is an analysis framework for MEG. It works as monitor as well.</FrameworkDescription>
<DictionaryType>0</DictionaryType> <!-- Add this line -->
</Experiment>
During development stage of version 2.9, we will check if there are problems in the new I/O system.
If we don't find any problems, The new I/O system will be the default of ROME version 2.9.
Even if we change the default, users can continue using the old I/O by using the flag. |
09 Jun 2015, Farrukh Azfar, Info, ROME examples : histoGUI
|
Dear Colleagues,
I have succesfully written a ROME application for monitoring MIDAS events and
understand that the appearance of a new MIDAS event record triggers the calling
of the event method in the Fill Histogram task.
My two questions are however about the example in $ROMESYS/example/histoGUI -
1) In this example there is no MIDAS event nor event record - what then is
triggering the calling of the event method
2) Is it possible to regulate the frequency that the event method is called in
this example ?
best wishes
Farrukh Azfar |
11 Jun 2015, Ryu Sawada, Info, ROME examples : histoGUI
|
Dear Farrukh
The 'histoGUI' example was prepared as an example for displaying histograms.
And the data are generated randomly in FillHisto task instead of reading from an input file.
So the example is using 'none' DAQ as written in romeConfig.xml in the example; the DAQ class is
implemented in include/ROMENoDAQSystem.h, and it actually does nothing.
With 'none' DAQ, the program simply call Event method continuously without any control of the frequency.
When you run the example, the frequency is not so fast because the CPU is used for updating the display.
If you change <UpdateFrequency>, for example, to 10000, you will find the frequency of events through
the task is increased because you update the display with a less frequency (thus lower CPU power is
needed).
If you are going to use ROME for non-event based application, there are two ways to call some functions
defined in tabs.
1) With GUI parts, like buttons, menus, sliders and so on
2) With calling a function periodically.
1) is suitable if you want to actively control the GUI; a user needs to, for example, click a button for
operate the tab.
2) is suitable if you want to update the display without any operations.
You can see examples/argus/timer/ and examples/argus/thread as examples.
Best regards,
Ryu
> Dear Colleagues,
>
> I have succesfully written a ROME application for monitoring MIDAS events and
> understand that the appearance of a new MIDAS event record triggers the calling
> of the event method in the Fill Histogram task.
>
> My two questions are however about the example in $ROMESYS/example/histoGUI -
>
> 1) In this example there is no MIDAS event nor event record - what then is
> triggering the calling of the event method
>
> 2) Is it possible to regulate the frequency that the event method is called in
> this example ?
>
> best wishes
> Farrukh Azfar |
11 Jun 2015, Konstantin Olchanski, Info, ROME examples : histoGUI
|
> I have succesfully written a ROME application ...
For the record, at TRIUMF we have moved away from ROME towards the ROOTANA ROOT-based analyzer
package which has some simple C++ classes for reading midas raw data, some simple classes and examples for
working with midas data in ROOT, and some fairly advanced graphical example applications.
https://bitbucket.org/tmidas/rootana
K.O. |
11 Jun 2015, Ryu Sawada, Info, ROME examples : histoGUI
|
Dear Farrukh
If you want to control the frequency of update of all tabs, maybe, you could use the same method (namely using 'none' DAQ') for calling event methods of tasks and tabs also for non-event based
application.
You may add a task in which you only call 'sleep' function for controlling the frequency.
For allowing you to use GUI buttons also during the sleep, you need to call the sleep function like following.
ProcessEvents function allows you to use GUI parts also during the sleep.
Int_t sec = GetSP()->GetSleepTime();
if (sec > 0) {
struct timespec req, rem;
req.tv_sec = 0;
req.tv_nsec = 100000000; // sleep time in loop
struct timeval endTime, currentTime;
gettimeofday(¤tTime, 0);
endTime.tv_sec = currentTime.tv_sec + sec;
endTime.tv_usec = currentTime.tv_usec;
int ret;
while(1) {
memset(&rem, 0, sizeof(rem));
ret = nanosleep(&req, &rem);
gettimeofday(¤tTime, 0);
if (currentTime.tv_sec > endTime.tv_sec ||
(currentTime.tv_sec == endTime.tv_sec && currentTime.tv_usec > endTime.tv_usec)) {
break;
}
gSystem->ProcessEvents();
}
}
gettimeofday is defined in sys/time.h header file in UNIX-like OS.
gSystem is in TSystem.h
For controlling the frequency, in this example, I added a new steering parameter for the task, which is defined like,
<Task>
... other definition of tasks ...
<SteeringParameters>
<SteeringParameterField>
<SPFieldName>SleepTime</SPFieldName>
<SPFieldType>Int_t</SPFieldType>
<SPFieldInitialization>10</SPFieldInitialization>
<SPFieldComment>Sleep time in sec</SPFieldComment>
</SteeringParameterField>
</SteeringParameters>
</Task>
Best regards,
Ryu
> Dear Farrukh
>
> The 'histoGUI' example was prepared as an example for displaying histograms.
> And the data are generated randomly in FillHisto task instead of reading from an input file.
> So the example is using 'none' DAQ as written in romeConfig.xml in the example; the DAQ class is
> implemented in include/ROMENoDAQSystem.h, and it actually does nothing.
>
> With 'none' DAQ, the program simply call Event method continuously without any control of the frequency.
>
> When you run the example, the frequency is not so fast because the CPU is used for updating the display.
> If you change <UpdateFrequency>, for example, to 10000, you will find the frequency of events through
> the task is increased because you update the display with a less frequency (thus lower CPU power is
> needed).
>
> If you are going to use ROME for non-event based application, there are two ways to call some functions
> defined in tabs.
> 1) With GUI parts, like buttons, menus, sliders and so on
> 2) With calling a function periodically.
>
> 1) is suitable if you want to actively control the GUI; a user needs to, for example, click a button for
> operate the tab.
>
> 2) is suitable if you want to update the display without any operations.
> You can see examples/argus/timer/ and examples/argus/thread as examples.
>
> Best regards,
>
> Ryu
>
> > Dear Colleagues,
> >
> > I have succesfully written a ROME application for monitoring MIDAS events and
> > understand that the appearance of a new MIDAS event record triggers the calling
> > of the event method in the Fill Histogram task.
> >
> > My two questions are however about the example in $ROMESYS/example/histoGUI -
> >
> > 1) In this example there is no MIDAS event nor event record - what then is
> > triggering the calling of the event method
> >
> > 2) Is it possible to regulate the frequency that the event method is called in
> > this example ?
> >
> > best wishes
> > Farrukh Azfar |
13 Jun 2015, Farrukh Azfar, Info, ROME examples : histoGUI
|
Dear Ryu,
many thanks for your reply that's very useful.
For my knowledge and for the sake of understanding the basics.
1) Its the line : gSystem->ProcessEvents(); that calls all the event methods in the Fill classes and the Tabs classes yes ?
2) This way I am controlling the filling of the tabs at an interval regulated by "sleep" then what has happened to the program itself calling ProcessEvents ? Have I overriden that call by calling ProcessEvents or will it continue to be called - perhaps I just set the <UpdateFrequency> 0</UpdateFrequency> to disable the programs own calling and only use mine ?
I hope I've been clear. Thanks very much for your continued help.
-Farrukh
Ryu Sawada wrote: | Dear Farrukh
If you want to control the frequency of update of all tabs, maybe, you could use the same method (namely using 'none' DAQ') for calling event methods of tasks and tabs also for non-event based
application.
You may add a task in which you only call 'sleep' function for controlling the frequency.
For allowing you to use GUI buttons also during the sleep, you need to call the sleep function like following.
ProcessEvents function allows you to use GUI parts also during the sleep.
Int_t sec = GetSP()->GetSleepTime();
if (sec > 0) {
struct timespec req, rem;
req.tv_sec = 0;
req.tv_nsec = 100000000; // sleep time in loop
struct timeval endTime, currentTime;
gettimeofday(¤tTime, 0);
endTime.tv_sec = currentTime.tv_sec + sec;
endTime.tv_usec = currentTime.tv_usec;
int ret;
while(1) {
memset(&rem, 0, sizeof(rem));
ret = nanosleep(&req, &rem);
gettimeofday(¤tTime, 0);
if (currentTime.tv_sec > endTime.tv_sec ||
(currentTime.tv_sec == endTime.tv_sec && currentTime.tv_usec > endTime.tv_usec)) {
break;
}
gSystem->ProcessEvents();
}
}
gettimeofday is defined in sys/time.h header file in UNIX-like OS.
gSystem is in TSystem.h
For controlling the frequency, in this example, I added a new steering parameter for the task, which is defined like,
<Task>
... other definition of tasks ...
<SteeringParameters>
<SteeringParameterField>
<SPFieldName>SleepTime</SPFieldName>
<SPFieldType>Int_t</SPFieldType>
<SPFieldInitialization>10</SPFieldInitialization>
<SPFieldComment>Sleep time in sec</SPFieldComment>
</SteeringParameterField>
</SteeringParameters>
</Task>
Best regards,
Ryu
> Dear Farrukh
>
> The 'histoGUI' example was prepared as an example for displaying histograms.
> And the data are generated randomly in FillHisto task instead of reading from an input file.
> So the example is using 'none' DAQ as written in romeConfig.xml in the example; the DAQ class is
> implemented in include/ROMENoDAQSystem.h, and it actually does nothing.
>
> With 'none' DAQ, the program simply call Event method continuously without any control of the frequency.
>
> When you run the example, the frequency is not so fast because the CPU is used for updating the display.
> If you change <UpdateFrequency>, for example, to 10000, you will find the frequency of events through
> the task is increased because you update the display with a less frequency (thus lower CPU power is
> needed).
>
> If you are going to use ROME for non-event based application, there are two ways to call some functions
> defined in tabs.
> 1) With GUI parts, like buttons, menus, sliders and so on
> 2) With calling a function periodically.
>
> 1) is suitable if you want to actively control the GUI; a user needs to, for example, click a button for
> operate the tab.
>
> 2) is suitable if you want to update the display without any operations.
> You can see examples/argus/timer/ and examples/argus/thread as examples.
>
> Best regards,
>
> Ryu
>
> > Dear Colleagues,
> >
> > I have succesfully written a ROME application for monitoring MIDAS events and
> > understand that the appearance of a new MIDAS event record triggers the calling
> > of the event method in the Fill Histogram task.
> >
> > My two questions are however about the example in $ROMESYS/example/histoGUI -
> >
> > 1) In this example there is no MIDAS event nor event record - what then is
> > triggering the calling of the event method
> >
> > 2) Is it possible to regulate the frequency that the event method is called in
> > this example ?
> >
> > best wishes
> > Farrukh Azfar |
|
15 Jun 2015, Ryu Sawada, Info, ROME examples : histoGUI
|
Dear Farrukh
ProcessEvents is nothing to do with ROME.
It is a ROOT function to process events called by timer, click, sockets etc.
"event" is not MIDAS event, but for example, an event where someone clicked a button.
For example, if you click an "update" button, ROOT needs to call a function connected to the button; ProcessEvents does the job.
So if you want to use the GUI during the sleep of a task, you need to call ProcessEvents sometimes.
https://root.cern.ch/root/html604/TSystem.html#TSystem:ProcessEvents
You need not to overwrite ProcessEvents.
Best regards,
Ryu
Farrukh Azfar wrote: | Dear Ryu,
many thanks for your reply that's very useful.
For my knowledge and for the sake of understanding the basics.
1) Its the line : gSystem->ProcessEvents(); that calls all the event methods in the Fill classes and the Tabs classes yes ?
2) This way I am controlling the filling of the tabs at an interval regulated by "sleep" then what has happened to the program itself calling ProcessEvents ? Have I overriden that call by calling ProcessEvents or will it continue to be called - perhaps I just set the <UpdateFrequency> 0</UpdateFrequency> to disable the programs own calling and only use mine ?
I hope I've been clear. Thanks very much for your continued help.
-Farrukh
Ryu Sawada wrote: | Dear Farrukh
If you want to control the frequency of update of all tabs, maybe, you could use the same method (namely using 'none' DAQ') for calling event methods of tasks and tabs also for non-event based
application.
You may add a task in which you only call 'sleep' function for controlling the frequency.
For allowing you to use GUI buttons also during the sleep, you need to call the sleep function like following.
ProcessEvents function allows you to use GUI parts also during the sleep.
Int_t sec = GetSP()->GetSleepTime();
if (sec > 0) {
struct timespec req, rem;
req.tv_sec = 0;
req.tv_nsec = 100000000; // sleep time in loop
struct timeval endTime, currentTime;
gettimeofday(¤tTime, 0);
endTime.tv_sec = currentTime.tv_sec + sec;
endTime.tv_usec = currentTime.tv_usec;
int ret;
while(1) {
memset(&rem, 0, sizeof(rem));
ret = nanosleep(&req, &rem);
gettimeofday(¤tTime, 0);
if (currentTime.tv_sec > endTime.tv_sec ||
(currentTime.tv_sec == endTime.tv_sec && currentTime.tv_usec > endTime.tv_usec)) {
break;
}
gSystem->ProcessEvents();
}
}
gettimeofday is defined in sys/time.h header file in UNIX-like OS.
gSystem is in TSystem.h
For controlling the frequency, in this example, I added a new steering parameter for the task, which is defined like,
<Task>
... other definition of tasks ...
<SteeringParameters>
<SteeringParameterField>
<SPFieldName>SleepTime</SPFieldName>
<SPFieldType>Int_t</SPFieldType>
<SPFieldInitialization>10</SPFieldInitialization>
<SPFieldComment>Sleep time in sec</SPFieldComment>
</SteeringParameterField>
</SteeringParameters>
</Task>
Best regards,
Ryu
> Dear Farrukh
>
> The 'histoGUI' example was prepared as an example for displaying histograms.
> And the data are generated randomly in FillHisto task instead of reading from an input file.
> So the example is using 'none' DAQ as written in romeConfig.xml in the example; the DAQ class is
> implemented in include/ROMENoDAQSystem.h, and it actually does nothing.
>
> With 'none' DAQ, the program simply call Event method continuously without any control of the frequency.
>
> When you run the example, the frequency is not so fast because the CPU is used for updating the display.
> If you change <UpdateFrequency>, for example, to 10000, you will find the frequency of events through
> the task is increased because you update the display with a less frequency (thus lower CPU power is
> needed).
>
> If you are going to use ROME for non-event based application, there are two ways to call some functions
> defined in tabs.
> 1) With GUI parts, like buttons, menus, sliders and so on
> 2) With calling a function periodically.
>
> 1) is suitable if you want to actively control the GUI; a user needs to, for example, click a button for
> operate the tab.
>
> 2) is suitable if you want to update the display without any operations.
> You can see examples/argus/timer/ and examples/argus/thread as examples.
>
> Best regards,
>
> Ryu
>
> > Dear Colleagues,
> >
> > I have succesfully written a ROME application for monitoring MIDAS events and
> > understand that the appearance of a new MIDAS event record triggers the calling
> > of the event method in the Fill Histogram task.
> >
> > My two questions are however about the example in $ROMESYS/example/histoGUI -
> >
> > 1) In this example there is no MIDAS event nor event record - what then is
> > triggering the calling of the event method
> >
> > 2) Is it possible to regulate the frequency that the event method is called in
> > this example ?
> >
> > best wishes
> > Farrukh Azfar |
|
|
21 Oct 2015, SUDESHNA GANGULY, Info, Adding Trees and Branches in ROME
|
Hi,
I need to add a tree, the tree will have n branches. Each branch will refer to
one event. Now Each branch will have 5 leaves. Each leaf will have data from one
WFD channel. There are data from total 5 WFD channels per event in our midas bank.
I have seen some examples of trees and branches in ROME, but I don't know how I
can loop over one channel to another channel and save those data into each leaf.
Any help will be appreciated greatly.
Sudeshna Ganguly |
22 Oct 2015, Ryu Sawada, Info, Adding Trees and Branches in ROME
|
Dear Sudeshna Ganguly
It might be my misunderstanding, but do you mean that you want to add a new branch every time when you take one
event ? (namely, the number of branches n equals to the number of events ?)
In ROME, ( and I guess in most of user applications), each entry in the tree (instead of each branch) refers to one
event. Namely, the number of branches n is independent of the number of events; and the number of entries
increases as you take more events.
In the ROME applications, there is a one to one relation between,
- ROME Folder and Branch in Tree
- ROME Field in Folder and Leave in Tree
ROME folder and field are supposed to be defined in an XML file and the implementation (i.e. conversion to C++ code)
is done by ROMEBuilder.
Folders and fileds can be arrays.
I think, in your case, ROME folder could be like one of the followings depending on your data structure and preference,
Since I guess WFD stands for Wave Form Digitizer and guess has many numbers (instead of one), I expect you may use the 2nd or 3rd example,
1) A single variable 'WFD' is in five 'Data' folder instances
<FolderName>Data</FolderName>
<ArraySize>5</ArraySize>
<Field>
<FieldName>WFD</FieldName>
<FieldType>Double_t</FieldType>
<FieldComment>WFD Values</FieldComment>
</Field>
2) A variable-length array 'WFD' is in five 'Data' folder instances <FolderName>Data</FolderName>
<ArraySize>5</ArraySize>
<Field>
<FieldName>WFD</FieldName>
<FieldType>Double_t</FieldType>
<ArraySize>vector</ArraySize>
<FieldComment>WFD Values</FieldComment>
</Field>
3) A fixed-length array 'WFD' is in five 'Data' folder instances <FolderName>Data</FolderName>
<ArraySize>5</ArraySize>
<Field>
<FieldName>WFD</FieldName>
<FieldType>Double_t</FieldType>
<ArraySize>1024</ArraySize>
<FieldComment>WFD Values</FieldComment>
</Field>
4) An array 'WFD' is in one 'Data' folder instance, and the array size of 'WFD' is five. <FolderName>Data</FolderName>
<Field>
<FieldName>WFD</FieldName>
<FieldType>Double_t</FieldType>
<ArraySize>5</ArraySize>
<FieldComment>WFD Values</FieldComment>
</Field>
Once you add a relation between the 'Data' folder and a branch in a tree (as shown <Tree> section of $ROMESYS/examples/midas/midas.xml),
The generated application,
- reads the tree and copies data in to the folder before every event (if the <DAQSystem> in config XML is rome)
- fills the tree with copying data from the folder
So you don't need to write code to read/write tees.
Instead you need to access the folders.
The access method depends on the folder structure. For the example above,
1) Int_t nCh = 5;
for (Int_t iCh = 0; iCh < nCh; iCh++) {
gAnalyzer->GetDataAt(iCh)->SetWFD(some_number);
}
2) Int_t nCh = 5;
for (Int_t iCh = 0; iCh < nCh; iCh++) {
gAnalyzer->GetDataAt(iCh)->SetWFDSize(1024);
Int_t wfdSize = gAnalyzer->GetDataAt(iCh)->GetWFDSize();
for (Int_t i = 0; i < wfdSize; i++) {
gAnalyzer->GetDataAt(iCh)->SetWFDAt(i, some_number);
}
}
3) Int_t nCh = 5;
for (Int_t iCh = 0; iCh < nCh; iCh++) {
for (Int_t i = 0; i < 1024; i++) {
gAnalyzer->GetDataAt(iCh)->SetWFDAt(i, some_number);
}
}
4) Int_t nCh = 5;
for (Int_t iCh = 0; iCh < nCh; iCh++) {
gAnalyzer->GetData()->SetWFDAt(iCh, some_number);
}
You can read the variables by using GetWFD (or GetWFDAt if WFD is an array) function.
You can find more example of the folder structure in $ROMESYS/examples/argus/folders/folderEntries.xml.
Ryu
> Hi,
>
> I need to add a tree, the tree will have n branches. Each branch will refer to
> one event. Now Each branch will have 5 leaves. Each leaf will have data from one
> WFD channel. There are data from total 5 WFD channels per event in our midas bank.
>
> I have seen some examples of trees and branches in ROME, but I don't know how I
> can loop over one channel to another channel and save those data into each leaf.
>
> Any help will be appreciated greatly.
>
> Sudeshna Ganguly |
01 Mar 2016, SUDESHNA GANGULY, Info, Adding different tabs under a single parent tab
|
Hi Everyone,
Is there any way I can put different tabs under a single click-able menu in ROME?
Suppose I have tabs A, B, C, D. Each one of these tabs contains histograms. Can
I now, put A, B, C, D under another click-able menu called "calorimeters" ?
So that when I click on "calorimeters", I will see A, B, C, D. And then when I
click on A/B/C/D I will see the histograms.
Can that be done?
Is there any example available?
Thanks for any help!
Sudeshna |
02 Mar 2016, Ryu Sawada, Info, Adding different tabs under a single parent tab
|
Yes, it can be done easily by nesting the tab definition in your definition XML file.
An example is $ROMESYS/examples/argus/tabs
Ryu
> Hi Everyone,
>
> Is there any way I can put different tabs under a single click-able menu in ROME?
> Suppose I have tabs A, B, C, D. Each one of these tabs contains histograms. Can
> I now, put A, B, C, D under another click-able menu called "calorimeters" ?
>
> So that when I click on "calorimeters", I will see A, B, C, D. And then when I
> click on A/B/C/D I will see the histograms.
>
> Can that be done?
> Is there any example available?
>
> Thanks for any help!
> Sudeshna |
21 Mar 2016, Farrukh Azfar, Info, speeding up ROME
|
|
23 Mar 2016, Farrukh Azfar, Info, ROME in online mode using an intermediary machine
|
Dear Folks
Complete newby on online mode - hence this easy question :
I have three machines, A, B, and C.
A is where a MIDAS EventBuilder is running
B is a gateway machine
C is my local machine on which I want to run ROME analyser (in online mode)
A is not accessible from C. B is accesible from both A and C -
I want to utilize the fact that I have a gateway to run ROME analyser in online
mode reading data from A via B -
If someone could explain how to do this in detail - but in simple terms - I'd be
grateful
Thank you !
Farrukh |
27 Mar 2016, Ryu Sawada, Info, ROME in online mode using an intermediary machine
|
Hello,
I think you need to use SSH port forwarding,
On C, you open a terminal and type a command like, ssh -L 21175:A:1175 B 1175 is the MIDAS server port number.
For avoiding the connection being terminated, you may better to type a command to keep the communication, for
example, top
Then, on C, you configure ROME to connect to localhost and port number is 21175, and start the ROME analyzer.
Ryu
> Dear Folks
>
> Complete newby on online mode - hence this easy question :
>
> I have three machines, A, B, and C.
>
> A is where a MIDAS EventBuilder is running
> B is a gateway machine
> C is my local machine on which I want to run ROME analyser (in online mode)
>
> A is not accessible from C. B is accesible from both A and C -
>
> I want to utilize the fact that I have a gateway to run ROME analyser in online
> mode reading data from A via B -
>
> If someone could explain how to do this in detail - but in simple terms - I'd be
> grateful
>
> Thank you !
>
> Farrukh |
30 Mar 2016, Farrukh Azfar, Info, ROME in online mode using an intermediary machine
|
Hi Ryu
Thanks for your reply
so we did do that - it seems that the path to MIDASYS needs to be defined on the localhost too ? Anyhow the program does not run complaining that it is unable to read from the online database -
[HGUIExample,ERROR] [ROMEPrint.cpp:177:ROMEPrint::Error,ERROR] Can not read run status from the online database
So the ODB cannot be read through this port ? Do you have an example of running ROME through an ssh tunnel via an intermediary (gateway) machine ?
many thanks
Farrukh
Ryu Sawada wrote: | Hello,
I think you need to use SSH port forwarding,
On C, you open a terminal and type a command like, ssh -L 21175:A:1175 B 1175 is the MIDAS server port number.
For avoiding the connection being terminated, you may better to type a command to keep the communication, for
example, top
Then, on C, you configure ROME to connect to localhost and port number is 21175, and start the ROME analyzer.
Ryu
> Dear Folks
>
> Complete newby on online mode - hence this easy question :
>
> I have three machines, A, B, and C.
>
> A is where a MIDAS EventBuilder is running
> B is a gateway machine
> C is my local machine on which I want to run ROME analyser (in online mode)
>
> A is not accessible from C. B is accesible from both A and C -
>
> I want to utilize the fact that I have a gateway to run ROME analyser in online
> mode reading data from A via B -
>
> If someone could explain how to do this in detail - but in simple terms - I'd be
> grateful
>
> Thank you !
>
> Farrukh |
|
31 Mar 2016, Ryu Sawada, Info, ROME in online mode using an intermediary machine
|
The local port 21175 may be too large, please replace 21175 by, for example, 8175.
You can specify the host name and the port number in your config XML for your ROME program like, <Online>
<Host>localhost:8175</Host>
</Online>
Can you connect the MIDAS experiment from the host B with using other midas applications, e.g odbedit ?
Can you try odbedit -h A -e EXP (replace EXP with your experiment name)
If you can not connect, I think there is a problem which is not related to ROME.
Can you also check if you can connect the MIDAS experiment from the host C with using other midas applications, e.g odbedit, after establishing the SSH tunnel ?
Can you try odbedit -h localhost:8175 -e EXP (replace EXP with your experiment name)
Ryu
Farrukh Azfar wrote: | Hi Ryu
Thanks for your reply
so we did do that - it seems that the path to MIDASYS needs to be defined on the localhost too ? Anyhow the program does not run complaining that it is unable to read from the online database -
[HGUIExample,ERROR] [ROMEPrint.cpp:177:ROMEPrint::Error,ERROR] Can not read run status from the online database
So the ODB cannot be read through this port ? Do you have an example of running ROME through an ssh tunnel via an intermediary (gateway) machine ?
many thanks
Farrukh
Ryu Sawada wrote: | Hello,
I think you need to use SSH port forwarding,
On C, you open a terminal and type a command like, ssh -L 21175:A:1175 B 1175 is the MIDAS server port number.
For avoiding the connection being terminated, you may better to type a command to keep the communication, for
example, top
Then, on C, you configure ROME to connect to localhost and port number is 21175, and start the ROME analyzer.
Ryu
> Dear Folks
>
> Complete newby on online mode - hence this easy question :
>
> I have three machines, A, B, and C.
>
> A is where a MIDAS EventBuilder is running
> B is a gateway machine
> C is my local machine on which I want to run ROME analyser (in online mode)
>
> A is not accessible from C. B is accesible from both A and C -
>
> I want to utilize the fact that I have a gateway to run ROME analyser in online
> mode reading data from A via B -
>
> If someone could explain how to do this in detail - but in simple terms - I'd be
> grateful
>
> Thank you !
>
> Farrukh |
|
|
04 Apr 2016, Wes Gohn, Info, ROME in online mode using an intermediary machine
|
Hi Ryu, here is the method we've followed. I tried to simplify things by connecting to the server directly, so we can skip the port tunnelling. On the server side, in the romeConfig.xml, I set
<SocketServer>
<Active>true</Active>
<PortNumber>9091</PortNumber>
</SocketServer>
I then started rome in batch mode
./midanalyzer.exe -i romeConfig.xml -b
It connects to a running experiment as expected, and is processing data.
On the client machine, I set in romeConfig.xml:
<SocketClient>
<Host>myhost</Host>
<Port>9091</Port>
</SocketClient>
I then start rome using the -R option:
./midanalyzer.exe -R myhost:9091
*****************************************
* *
* MIDAnalyzer *
* *
* generated by the ROME Environment *
* Version 3.2.6 *
* *
*****************************************
Remote session to myhost:9091
midanalyzer [0]
At which point it does establish the socket connection to the server side, but it just sits there (I can establish this because if I run commands at the prompt, I see some errors pop up on my server terminal). How do I open my Argus browser on the client side to see the plots?
Or is there something we're doing that is fundamentally wrong?
Thanks,
Wes |
05 Apr 2016, Ryu Sawada, Info, ROME in online mode using an intermediary machine
|
Dear Wes,
-R is used for starting an interactive session connected to a server.
If you want to see Argus windows, please change <ProgramMode> to 3 (or use "-p 3" comman-line option).
Ryu
Wes Gohn wrote: |
Hi Ryu, here is the method we've followed. I tried to simplify things by connecting to the server directly, so we can skip the port tunnelling. On the server side, in the romeConfig.xml, I set
<SocketServer>
<Active>true</Active>
<PortNumber>9091</PortNumber>
</SocketServer>
I then started rome in batch mode
./midanalyzer.exe -i romeConfig.xml -b
It connects to a running experiment as expected, and is processing data.
On the client machine, I set in romeConfig.xml:
<SocketClient>
<Host>myhost</Host>
<Port>9091</Port>
</SocketClient>
I then start rome using the -R option:
./midanalyzer.exe -R myhost:9091
*****************************************
* *
* MIDAnalyzer *
* *
* generated by the ROME Environment *
* Version 3.2.6 *
* *
*****************************************
Remote session to myhost:9091
midanalyzer [0]
At which point it does establish the socket connection to the server side, but it just sits there (I can establish this because if I run commands at the prompt, I see some errors pop up on my server terminal). How do I open my Argus browser on the client side to see the plots?
Or is there something we're doing that is fundamentally wrong?
Thanks,
Wes |
|
11 Apr 2016, SUDESHNA GANGULY, Info, Getting an error while compiling a code with <ARGUS> tabs for 2-D histograms
|
Hi Ryu,
I am trying to display a 2-D histogram with the <Argus> tab in the user xml file.
Here is what I have in the xml:
<Histogram>
<HistName>h2_Exy</HistName>
<HistFolderName>CT</HistFolderName>
<HistArraySize>2</HistArraySize>
<HistType>TH2F</HistType>
<HistXLabel>xseg</HistXLabel>
<HistYLabel>yseg</HistYLabel>
<HistXNbins>9</HistXNbins>
<HistXmin>0.5</HistXmin>
<HistXmax>9.5</HistXmax>
<HistYNbins>6</HistYNbins>
<HistYmin>0.5</HistYmin>
<HistYmax>6.5</HistYmax>
<Argus>
<Tab>
<TabName>Summary</TabName>
<ObjectArrayIndex>0</ObjectArrayIndex>
<Index>0</Index>
</Tab>
</Argus>
</Histogram>
But when I compile the code it throws the following error message:
src/generated/HGUITSummary_Base.cpp:87: error: cannot convert ‘TH1F*’ to ‘TH2F*’
in assignment
I am getting this error when ever I am trying to display 2-D histograms with
<Argus> tabs.
Any help will be much appreciated.
Sudeshna |
|