Back Midas Rome Roody Rootana
  Rome Analyzer Framework, Page 5 of 11  Not logged in ELOG logo
Entry  06 Jun 2008, Todd Bredeweg, Forum, Rome License 
I was wondering what type of license, if any, applies to the Rome distribution.
Midas is using GPL and Root is using LGPL.
    Reply  09 Jun 2008, Stefan Ritt, Forum, Rome License 
> I was wondering what type of license, if any, applies to the Rome distribution.
> Midas is using GPL and Root is using LGPL.

Midas uses GPL because when I started that project, the LGPL was not yet in
existence. If anybody want Midas under the LGPL, I could consider switching that.
ROME is under the LGPL.
Entry  17 Nov 2004, Ryu Sawada, Suggestion, Reverse sorting of database 
User may want to read database in inverse order.

To add new rule to specify wheather the order is normal or opposit may be useful.

For instance following path gives the latest version of pedestal in database.
"/LPPedestal(id=%d)/version;LPPedestal/version(-)",gAnalyzer->GetCurrentRunNumber()

Concerning SQL database. To sort opposite is easy. Just put keyword "DESC" after "ORDER BY" phrase.
Entry  10 Mar 2005, Ryu Sawada, Bug Report, ResetFolders 
In ROMEEventLoop.cpp::ReadEvent
this->ResetFolders is called before fActiveDAQ->ReadEvent, so data in event headers are not updated 
properly.
    Reply  21 Mar 2005, Matthias Schneebeli, Bug Report, ResetFolders 
> In ROMEEventLoop.cpp::ReadEvent
> this->ResetFolders is called before fActiveDAQ->ReadEvent, so data in event headers are not updated 
> properly.

done
    Reply  21 Mar 2005, Ryu Sawada, Bug Report, ResetFolders 
> > In ROMEEventLoop.cpp::ReadEvent
> > this->ResetFolders is called before fActiveDAQ->ReadEvent, so data in event headers are not updated 
> > properly.
> 
> done
I wonder if this is the reason why Jan couldn't read scaler events.
Event ID was shifted by two events, so when scaler event comes, ROME can always recognize it as trigger events.
    Reply  23 Mar 2005, Matthias Schneebeli, Bug Report, ResetFolders 
> > > In ROMEEventLoop.cpp::ReadEvent
> > > this->ResetFolders is called before fActiveDAQ->ReadEvent, so data in event headers are not updated 
> > > properly.
> > 
> > done
> I wonder if this is the reason why Jan couldn't read scaler events.
> Event ID was shifted by two events, so when scaler event comes, ROME can always recognize it as trigger events.

No the reason for Jan's problem was that rome never requested scaler events from the frontend. This is fixed now.
Entry  10 Jul 2005, Ryu Sawada, Suggestion, ResetFolders 
ResetFolders are called in DAQEvent for every events.

I have some folders who's information have to be kept during the run.

One possibility is to add new tag like <ResetBoforeEvents> in folder definition.
The other is give up reset in ROMEEventLoop and give users resposibility of reset.
    Reply  21 Jul 2005, Ryu Sawada, Suggestion, ResetFolders 
> ResetFolders are called in DAQEvent for every events.
> 
> I have some folders who's information have to be kept during the run.
> 
> One possibility is to add new tag like <ResetBoforeEvents> in folder definition.
> The other is give up reset in ROMEEventLoop and give users resposibility of reset.

done.

The name of the tag is <NoResetByFramework>
Entry  06 Dec 2004, Ryu Sawada, Bug Report, ReadConfiguration 
I can not change some global steering parameters.
In my LPConfig::ReadConfiguration in LPConfig.cpp which was generated by builder.

There is a line like
 xml->GetPathValue(path+"/GlobalSteeringParameters/child::SteeringParameterGroup[child::
SPGroupName='Switch']/child::SteeringParameterGroup[child::SPGroupName='RunMode']/child::
SteeringParameterField[child::SPName='Pedestal']/SPValue",fConfigData[index]->fGlobalSteering-
>fRunMode->fPedestal,"");

but it should be
 xml->GetPathValue(path+"/GlobalSteeringParameters/child::SteeringParameterGroup[child::
SPGroupName='RunMode']/child::SteeringParameterField[child::SPName='Pedestal']/
SPValue",fConfigData[index]->fGlobalSteering->fRunMode->fPedestal,"");


****
one small other bug.
when I start my framework with -h option, rome shows
  -i       Configuration file (default ROMEConfig.xml)
but default is romeConfig.xml
***

        <GlobalSteeringParameters>
                <SteeringParameterGroup>
                        <SPGroupName>Switch</SPGroupName>
                             <SteeringParameterField>
                                <SPFieldName>ADC1</SPFieldName>
                                <SPFieldType>Bool_t</SPFieldType>
                                <SPFieldInitialization>1</SPFieldInitialization>                                
                        </SteeringParameterField>
                        <SteeringParameterField>
                                <SPFieldName>WriteDataBase</SPFieldName>
                                <SPFieldType>Bool_t</SPFieldType>
                                <SPFieldInitialization>0</SPFieldInitialization>                                
                        </SteeringParameterField>
                </SteeringParameterGroup>
                <SteeringParameterGroup>
                        <SPGroupName>RunMode</SPGroupName>
                        <SteeringParameterField>
                                <SPFieldName>Pedestal</SPFieldName>
                                <SPFieldType>Short_t</SPFieldType>
                                <SPFieldInitialization>0</SPFieldInitialization>                                
                        </SteeringParameterField>
                        <SteeringParameterField>
                                <SPFieldName>Normal</SPFieldName>
                                <SPFieldType>Short_t</SPFieldType>
                                <SPFieldInitialization>1</SPFieldInitialization>                                
                        </SteeringParameterField>
                </SteeringParameterGroup>
        </GlobalSteeringParameters>
    Reply  21 Dec 2004, Matthias Schneebeli, Bug Report, ReadConfiguration 
> I can not change some global steering parameters.
> In my LPConfig::ReadConfiguration in LPConfig.cpp which was generated by builder.
> 
> There is a line like
>  xml->GetPathValue(path+"/GlobalSteeringParameters/child::SteeringParameterGroup[child::
> SPGroupName='Switch']/child::SteeringParameterGroup[child::SPGroupName='RunMode']/child::
> SteeringParameterField[child::SPName='Pedestal']/SPValue",fConfigData[index]->fGlobalSteering-
> >fRunMode->fPedestal,"");
> 
> but it should be
>  xml->GetPathValue(path+"/GlobalSteeringParameters/child::SteeringParameterGroup[child::
> SPGroupName='RunMode']/child::SteeringParameterField[child::SPName='Pedestal']/
> SPValue",fConfigData[index]->fGlobalSteering->fRunMode->fPedestal,"");
> 
> 
> ****
> one small other bug.
> when I start my framework with -h option, rome shows
>   -i       Configuration file (default ROMEConfig.xml)
> but default is romeConfig.xml
> ***
> 
>         <GlobalSteeringParameters>
>                 <SteeringParameterGroup>
>                         <SPGroupName>Switch</SPGroupName>
>                              <SteeringParameterField>
>                                 <SPFieldName>ADC1</SPFieldName>
>                                 <SPFieldType>Bool_t</SPFieldType>
>                                 <SPFieldInitialization>1</SPFieldInitialization>                                
>                         </SteeringParameterField>
>                         <SteeringParameterField>
>                                 <SPFieldName>WriteDataBase</SPFieldName>
>                                 <SPFieldType>Bool_t</SPFieldType>
>                                 <SPFieldInitialization>0</SPFieldInitialization>                                
>                         </SteeringParameterField>
>                 </SteeringParameterGroup>
>                 <SteeringParameterGroup>
>                         <SPGroupName>RunMode</SPGroupName>
>                         <SteeringParameterField>
>                                 <SPFieldName>Pedestal</SPFieldName>
>                                 <SPFieldType>Short_t</SPFieldType>
>                                 <SPFieldInitialization>0</SPFieldInitialization>                                
>                         </SteeringParameterField>
>                         <SteeringParameterField>
>                                 <SPFieldName>Normal</SPFieldName>
>                                 <SPFieldType>Short_t</SPFieldType>
>                                 <SPFieldInitialization>1</SPFieldInitialization>                                
>                         </SteeringParameterField>
>                 </SteeringParameterGroup>
>         </GlobalSteeringParameters>

done
Entry  18 Dec 2005, Ryu Sawada, Info, Re-organization of directory structure 
I and Matthias discussed about directory structure. In previous structure, files which can be overwritten and others were placed in the same directory.

We thought it would be better to separate two kinds of files clearly. So I modified directory structure like following.
|-- include
|   |-- daqs       : include files of user defined DAQs.
|   |-- databases  : include files of user defined databases.
|   |-- folders    : include files of folders come when 'ChangeableClassFile" is true.
|   |-- generated  : include files which can be overwritten by builder.
|   `-- tasks      : include files of tasks come when 'ChangeableClassFile" is true.
`-- src
    |-- daqs       : source files of user defined DAQs.
    |-- databases  : source files of user defined databases.
    |-- folders    : source files of folders come when 'ChangeableClassFile" is true.
    |-- generated  : source files which can be overwritten by builder.
    `-- tasks      : source files of tasks.         

All ROME user need to modify the place of files and also #include statement.
Entry  18 Apr 2005, Pierre-Andre Amaudruz, Suggestion, ROOTCINT path 
As ROOTSYS is required for the ROME build, I would suggest to
include the code below in the builder for the application Makefile.
This will make Rome less dependent on the ROOT path.

Replace in ROMEBuilder.cpp:

buffer.AppendFormatted("rootcint -f %sDict.cpp -c -p ",shortCut.Data());

by

buffer.AppendFormatted("LD_LIBRARY_PATH=$(ROOTSYS)/lib $(ROOTSYS)/bin/rootcint
-f %sDict.cpp -c -p ",shortCut.Data());
    Reply  18 Apr 2005, Matthias Schneebeli, Suggestion, ROOTCINT path 
> As ROOTSYS is required for the ROME build, I would suggest to
> include the code below in the builder for the application Makefile.
> This will make Rome less dependent on the ROOT path.
> 
> Replace in ROMEBuilder.cpp:
> 
> buffer.AppendFormatted("rootcint -f %sDict.cpp -c -p ",shortCut.Data());
> 
> by
> 
> buffer.AppendFormatted("LD_LIBRARY_PATH=$(ROOTSYS)/lib $(ROOTSYS)/bin/rootcint
> -f %sDict.cpp -c -p ",shortCut.Data());

That's in the cvs now, thanks.
    Reply  03 May 2005, Ryu Sawada, Suggestion, ROOTCINT path 
> > As ROOTSYS is required for the ROME build, I would suggest to
> > include the code below in the builder for the application Makefile.
> > This will make Rome less dependent on the ROOT path.
> > 
> > Replace in ROMEBuilder.cpp:
> > 
> > buffer.AppendFormatted("rootcint -f %sDict.cpp -c -p ",shortCut.Data());
> > 
> > by
> > 
> > buffer.AppendFormatted("LD_LIBRARY_PATH=$(ROOTSYS)/lib $(ROOTSYS)/bin/rootcint
> > -f %sDict.cpp -c -p ",shortCut.Data());
> 
> That's in the cvs now, thanks.

LD_LIBRARY_PATH is not dedecated for ROOT. One can already have it, and overwriting it may cause error.
For instance, if he installed libstdc++ in non-standard place, he will set LD_LIBRARY_PATH there.

In case of GNU Makefile, we can use "if" statemente like,
ifdef LD_LIBRARY_PATH
LD_LIBRARY_PATH += $(ROOTSYS)/lib
else
LD_LIBRARY_PATH := $(ROOTSYS)/lib
endif
Entry  08 Feb 2006, Ryu Sawada, Bug Report, ROMENetFolderServer 
When I run ROME analyzer in online MIDAS mode.
It stopps with making core (segmentation fault).

It seems it makes core after "return" in main.cpp, namely finishing all code.

When I comment out following line in ROMEAnalyzer.cpp, it works propery.
tnet->StartServer(gROME->GetApplication(),gROME->GetPortNumber());

Probably it is relating to ROMENetServer or thread for this.
    Reply  09 Feb 2006, Ryu Sawada, Bug Report, ROMENetFolderServer 
I investigated the problem.

On my machine (Scientific Linux 4.2, gcc3.3.2, glibc2.3.2, ROOT5.08.00), following simple program reproduced the problem.
There was no probelm with ROOT version4.
Is it bug of ROOT ?

When I put -lpthread at the last. This problem stopped.
Actually without this option, my analyzer workes.
I guess -lpthread is not necessary.

I will check more and if not necessary, I will remove -lpthread.

--- Makefile ---
rootlibs := $(shell $(ROOTSYS)/bin/root-config --libs)
rootcflags := $(shell  $(ROOTSYS)/bin/root-config --cflags)

test: main.cpp
	g++ $(rootcflags) -o $@ $< -lpthread $(rootlibs) -lThread
------
--- main.cpp ---
#include <Riostream.h>
#include <TThread.h>

void* TestLoop(void *arg)
{
   return NULL;
}

int main(int argc, char *argv[])
{
   TThread *thread = new TThread("TestLoop", TestLoop);

   cout<<"OK"<<endl;
   return 0;
}  
------
Entry  08 Feb 2006, Ryu Sawada, Bug Report, ROMEEventLoop:Update 
Recently the place to call ROMEEventLoop:Update was moved.
Probably because of this, in MIDAS online mode, event number is always incremented even when DAQ is not running.
Entry  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
    Reply  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
ELOG V3.1.4-2e1708b5