Back Midas Rome Roody Rootana
  Rome Analyzer Framework, Page 5 of 11  Not logged in ELOG logo
ID Date Authorup Topic Subject
  29   01 Jan 2005 Ryu SawadaBug ReportMultiple TTree writing
When I make two TTree's write flag true. Both TTrees is written in one file. And the other file is empty.

I added some lines to fix it in ROMEEventLoop.cpp

-------
This is other topic.
Probably, to close TFile after each run is good. 
Because, when program runs for several run, 
 even if program aborts after some runs, files of former runs are safe.



-------
  941    // Write non accumulative output tree files
    942    ROMEString filename;
    943    ROMETree *romeTree;
    944    TTree *tree;
    945    TFile *fTreeFile;
    946    ROMEString runNumberString;
    947    gROME->GetCurrentRunNumberString(runNumberString);
    948    for (int j=0;j<gROME->GetTreeObjectEntries();j++) {
    949       romeTree = gROME->GetTreeObjectAt(j);
    950       fTreeFile = fTreeFiles[j];
    951       if (romeTree->isWrite() && !gROME->isTreeAccumulation()) {
    952          tree = romeTree->GetTree();
    953          cout << "Writing Root-File " << tree->GetName() << runNumberString.Data() << ".root" 
<< endl;
    954          fTreeFile->cd();
    955          tree->Write("",TObject::kOverwrite);
    956       }
    957    }
    958    cout << endl;
  31   06 Jan 2005 Ryu SawadaSuggestionuser defined link in html file
I was asked to put change log of my rome application(LPframewok). I think the best place to put it is the 
html file which builder created.  But of course to modify it is not good, because it will be overwritten by 
builder again.

So, I want to propose to allow user to add links in the html file with the way like followings.

(i) User defines links.
------   in LPframewok.xml   ------
<DocumentLinks>
	<DocumentLink>
		<Href>html/changelog.html</Href>
		<Text>Change log</Text>
	</DocumentLink>
</DocumentLinks>
-----------------------------------

(ii)And html files looks like
-----------------------------------
Table of Contents

  • Introduction
  • Objects in the LPframework
      ? Tasks
      ? Folders
      ? Trees
      ? Midas Banks
  • Access Methods to Objects in the LPframework
      ? Folders
      ? Data Base
      ? Steering Parameters
      ? Histograms
      ? Midas Banks
      ? General
  • Class Overview
  • Links
      ? Change log
-----------------------------------

(iii)Users must write the target(html/changelog.html).
  32   09 Jan 2005 Ryu SawadaBug Reportlong task description
When I made task description longer than about 80 characters. The description was not written in html 
file propery. It was shorten.

I guess following lines in ROMEBuilder.cpp are relating to this.


-----------
      pos = (char*)taskDescription[iTask].Data();
      lenTot = taskDescription[iTask].Length();
      while (pos-taskDescription[iTask].Data() < lenTot) {
         if (lenTot+(taskDescription[iTask].Data()-pos)<74) 
            i=TMath::Min(75,lenTot);
         else for (i=74;pos[i]!=32&&i>0;i--) {}
         if (i<=0)
            i=TMath::Min(75,lenTot);
         pos[i] = 0;
         buffer.AppendFormatted("// %-74.74s   \n",pos);
         pos = pos+i+1;
      }
  36   12 Jan 2005 Ryu SawadaBug Reportinvalid header
When I built my application with romebuilder.
It complained like,
Error : File './/src/tasks/LPTXEGainCalib.cpp' has an invalid header !!!
Error : File './/src/tasks/LPTXETimeCalib.cpp' has an invalid header !!!
Error : File './/src/tasks/LPTUTTask.cpp' has an invalid header !!!

Headers looks like,
//// Author: Ryu Sawada
/////////////^@//////////////////////////////////////////////////////////////////
//                                                                            //

Thre first time to build Just after I removed ^@, builder stopped warning. 
But after that  ^@ appeared again and builder starts warning.

I have several task files, but builder adds ^@ always these three files.

My source files are here.
cvs -d :ext:pc4466.psi.ch:/usr/local/cvsroot co lpframework
  37   16 Jan 2005 Ryu SawadaBug Reportuser input
After change of ROMEEventLoop.cpp 1.39, Program steerings don't work on Linux.
  39   19 Jan 2005 Ryu SawadaSuggestionheaders of midas,xml2 and mysql
This is not so strong suggestion. I am just wondering.

Currently ROME include headers of midas, xml2 and mysql.
There are libraries for windows but no libraries for linux.

I am afraid that there can be inconsequence between headers and libraries in futrue updates of these 
libraries, if compiler reads headers from rome/include instead of correct one.

So, my suggestion is that move midas.h,libxml2 and mysql outside of header files search path for linux.

for instance
  Make new directory rome/include/win.
  Put midas.h,libxml2 and mysql into it.
  Add $ROMESYS/include/win into header files search path in case of Windows.


P.S.
If midas.h is already very different from midas.h in MIDAS. This may be difficult.
  40   19 Jan 2005 Ryu SawadaSuggestionmessaging system
About warnings,errors and informations output in online mode.

Probably we lauch ROME from web interface of MIDAS. And we don't see console of ROME.
But we need to hear what ROME is saying.

Normally midas analyzer and other applications use cm_msg function. This function shows messages 
proper place like web interface or ODBEdit windows and so on.

I do not have much knowledge about it. Stefan may know better way.
  41   20 Jan 2005 Ryu SawadaSuggestionheaders of midas,xml2 and mysql
> This is not so strong suggestion. I am just wondering.
> 
> Currently ROME include headers of midas, xml2 and mysql.
> There are libraries for windows but no libraries for linux.
> 
> I am afraid that there can be inconsequence between headers and libraries in futrue updates of these 
> libraries, if compiler reads headers from rome/include instead of correct one.
> 
> So, my suggestion is that move midas.h,libxml2 and mysql outside of header files search path for linux.
> 
> for instance
>   Make new directory rome/include/win.
>   Put midas.h,libxml2 and mysql into it.
>   Add $ROMESYS/include/win into header files search path in case of Windows.
> 
> 
> P.S.
> If midas.h is already very different from midas.h in MIDAS. This may be difficult.

I looked into gcc, then I found the header file which is found first is supposed to be used.
In ROME's case $(shell xml2-config --cflags) and $(shell mysql_config --cflags) are located before -I$(ROMESYS)/include/, so in principle 
it is safe.

But about midas.h there still can be inconsequence, because -I$(ROMESYS)/include/ is located before -I$(MIDASSYS)/include/.
It this done on purpose to enable special features for ROME ?


---
One more thing. about libpaths.
If libpaths will be used only for specify the place where midas libraries were put. Followings can also work and more simple.
And I added midascflags, because to use same way as root,xml2 and mysql seems more beautiful. 
And I moved -DHAVE_SQL and -DHAVE_MIDAS to sqlcflags and midascflags.

rootlibs := $(shell root-config --libs)
rootglibs := $(shell root-config --glibs)
rootcflags := $(shell root-config --cflags)
rootthreadlibs := -lThread
xmllibs :=  $(shell xml2-config --libs)
xmlcflags :=  $(shell xml2-config --cflags)
sqllibs := $(shell mysql_config --libs)
sqlcflags := $(shell mysql_config --cflags) -DHAVE_SQL
midaslibs := -L$(MIDASSYS)/lib -lmidas
midascflags := -I$(MIDASSYS)/include -DHAVE_MIDAS
clibs :=-lpthread -lHtml $(SYSLIBS)
clibs += -lutil

Libraries := $(libpaths) $(rootlibs) $(rootglibs) $(rootthreadlibs) $(xmllibs) $(clibs) $(sqllibs) $(midaslibs)
Flags := $(lpuserflags) $(rootcflags) $(xmlcflags) $(sqlcflags) $(midascflags)
Includes := -I$(ROMESYS)/include/ -I. -Iinclude/ -Iinclude/tasks/ -Iinclude/framework/
  42   24 Jan 2005 Ryu SawadaInfosmall problems
These are not critical, but someone may complain some day.

1. ROMEBuilder.cpp:2315
 I wonder if maxNumberOfTasks should be maxNumberOfSteering.
 // count steering parameters
   2316    numOfSteering[iTask]++;
   2317    currentNumberOfSteerings = numOfSteering[iTask];
   2318    if (numOfSteering[iTask]>=maxNumberOfTasks+1) {
   2319       cout << "Maximal number of steering parameters reached : " << (max   2319 
NumberOfTasks+1) << " !" << endl;
   2320       cout << "Terminating program." << endl;
   2321       return false;
   2322    }

2. ROMEBuilder.cpp:2437
 I wonder if maxNumberOfSteering should be maxNumberOfSteeringField.
    if (numOfSteerFields[iTask][actualSteerIndex]>=maxNumberOfSteer   
   2437 ing) {
   2438             cout << "Maximal number of steering parameter fields in task   2438  '" << 
taskName[iTask].Data() << "' reached : " << maxNumberOfSteering <   2438 < " !" << endl;
   2439             cout << "Terminating program." << endl;
   2440             return false;
   2441          }


3. ROMEBuilder.cpp:6327
 I wonder if ROOTSYS should be ROOTSYS/include.
 6327 #if defined( _MSC_VER )
   6328    buffer.AppendFormatted("-I%%ROMESYS%%/include ");
   6329    buffer.AppendFormatted("-I%%ROOTSYS%% ");
   6330 #endif
   6331 #if defined ( __linux__ ) || defined ( __APPLE__ )
   6332    buffer.AppendFormatted("-I$ROMESYS/include ");
   6333    buffer.AppendFormatted("-I$ROOTSYS ");
   6334 #endif

4. ROMEBuilder.cpp:6806
in ROMEBuilder::isNumber, there are some missing number types such as.
Double32_t,Long64_t,ULong64_t

5. ROMEBuilder.cpp:6821
in ROMEBuilder::isFloatingType, there are some missing floating types such as.
Double32_t
  47   05 Feb 2005 Ryu SawadaBug Reportsmall problem of XML definition file
About <EventHeader> in xml definition file.

In description page in ROME homepage, It is wirtten that <EventId> specifies the field.
But It seems that 'd' shoud be capital.
  48   28 Feb 2005 Ryu SawadaInfoRun number in online mode
We usually use ROME framework without specifying run number in romeConfig.xml and command line 
in online mode.

Then it warns that "Error in <TArrayI::At>: index 0 out of bounds" when gROME-
>GetRunNumberStringAt(runNumberString,0) is called in ROMEEventLoop::Initialize.
  49   06 Mar 2005 Ryu SawadaSuggestionCint mode on online
We sometimes want to use trees in ROME.

One way is to read it by TSocket connection. But treees are larger than histograms in general, and it 
takes time to download. 
 And I need to make shared library when I changed the structure of folders.

So, I want to propose is to prepare Cint mode with continueing analysis in background.

Currently, when user press "i", ROME stops analysis and goes into cint mode. This is good for offline 
mode, but this is not good for online mode. So I propose that when user press "I", ROME goes cint 
mode, and continue analysis in background.

Then we can see Trees at run time.

In addition, If you are going to implement this feature, please prepare short way to call trees in cint mode.
If I understand correctly, the way to call a tree is like,
gAnalyzer->GetTreeObjectAt(0)->GetTree()->Draw("");
but it is too long to use in interactively and we need to remeber the number of trees.
gAnalyzer->GetTree("trigger")->Draw();  is better.
  50   09 Mar 2005 Ryu SawadaBug ReportUnanalyzed events
In online mode, ROME often stops before finishing to analyze all events of runs. 
 When it happens, gAnalyzer->GetCurrentEventNumber() starts not from 1 but from analyzed event 
number at previous run. And unanalyzed events at the previous run are mixed with the new run.

In mana.c of MIDAS, I found a part to wait until all events in buffers are analyzed when analyzer gets 
TR_STOP signal, while ROME does not have.

I personaly don't need that all events are analyzed, but it is really problem that data of two runs are 
mixed.

One way is to take similar way as midas analyzer, and the another way is just discard unanalyzed 
events.
  51   09 Mar 2005 Ryu SawadaBug Reportdefault values in romeConfig.xml
Recently, default values of steering parameters in romeConfig.xml are always 0. They are not as same 
as values in SPFieldInitialization of definition XML file.
  52   10 Mar 2005 Ryu SawadaBug ReportResetFolders
In ROMEEventLoop.cpp::ReadEvent
this->ResetFolders is called before fActiveDAQ->ReadEvent, so data in event headers are not updated 
properly.
  53   11 Mar 2005 Ryu SawadaInfomake build
I added new make target "build" in ARGUS. It may be useful also for ROME users.

in WriteMakefile(char* xmlFile)
.
.
.
  int pdnameend = 0;
   int pbnamestart = 0;
   ROMEString xmlfile = xmlFile;
   while((pdnameend = xmlfile.Index("/",1,pbnamestart,TString::kExact))!=-1)
      pbnamestart = pdnameend+1;
   ROMEString xmlbasename = xmlfile(pbnamestart,xmlfile.Length());
   buffer.AppendFormatted("build::\n");
   buffer.AppendFormatted("     $(ROMESYS)/bin/romebuilder.exe -i %s -o .",xmlbasename.Data());
   if (makeOutput)
      buffer.AppendFormatted(" -v");
   if(noLink)
      buffer.AppendFormatted(" -nl");
   if(midas)
      buffer.AppendFormatted(" -midas");
   if(!sql)
      buffer.AppendFormatted(" -nosql");
   buffer.AppendFormatted("\n");
.
.
.
  54   13 Mar 2005 Ryu SawadaInfoWarning message from compiler (These are just warnings, not problems)
I will summarize some points which g++ warned.  
  
(1) I fixed following points.  
*Made destructor of ROMEConfig and ROMEDataBase virtual.  
  
*Removed or comment out unused variables.  
    int i                            in ROMEPATH::~ROMEPath()  
    char* defaultRow                 in ROMESQL::ReadField  
    char* c                          in ROMEString::SetFormatted  
     int istart,iend,iValue,jValue   in ROMEXMLDataBase::Read  
    int istep,iValue,jValue          in ROMEXMLDataBase::Write  
    ROMEStrArray *array              in ROMEXMLDataBase::Write  
  
(2) Following points are not fixed yet.  
* There can be unused "int i" in several codes which builder generates. (ex. XXAnalyzer::InitMidasBanks  
)  
  This is not a problem, but a little bit annoying. If it is very easy, please fix it. 
  
* Please make sure this is not a problem.  
   in ROMEAnalyzer:: ResponseFunction  
      while (obj = iterFolders->Next()) {  
            ROMEString str;  
            str.SetFormatted("%s",obj->GetName());  
            names->Add(new TObjString(str.Data()));  
      }  
  
*ROMEString.cpp:74: warning: `int numberOfDigits' might be used uninitialized in this function  
*ROMEXMLDataBase.cpp:80: warning: `ROMEXML*xml' might be  used uninitialized in this function  
  
  
(3) This is not warning from g++, but request from me.  
  If it is very easy, please make ROMEString::SetFormatted,AppendFormatted to check that number of  
arguments is correct.  
  55   18 Mar 2005 Ryu SawadaInfoxmlwriter.h
I realized that some unix system distribution does not provide xmlwriter.h in standard libxml2-devel 
package.

For instance, scientific linux (also PSI linux) does not.
I installed it from source.

Macintosh has xmlreader.h by default, and does not xmlwriter.h.
I installed it by using FINK.
(FINK is a unix package porter like CYGWIN.)

Someone may ask about it someday. 
A problem is that compiler will find xmlwriter.h even if the system does not have it, because ROME has.
This may make it hard that users find out the problem.


How to install libxml2.
----  UNIX OS ----
In most cases, to use standard way of the system is good. But some system does not provide xmlwriter.h. In this case you may need to 
install it from source.
1. download source from http://xmlsoft.org/.
2. decompress it and go to created directory.
3. % ./configure [options as you like];
4. % make;
5. become super user, if you are going to install it in system.
6. % make install

---- MacOSX ----
By default, Macintosh does not have xmlwriter.h. You can follow the same way as other UNIX OS. And other way is to use FINK. (I hope 
many users already installed it.)
1. install FINK (http://fink.sourceforge.net)
2. become super user.
3. apt-get update;
4. apt-get install libxml2 libxml2-shlibs libxml2-bin
If you are goint to use also MySQL.
5. apt-get install mysql12-dev mysql12-shlibs
(* package name can be changed in future, you may find it with "apt-cache search libxml2" or "apt-cache search mysql")
  60   21 Mar 2005 Ryu SawadaBug ReportResetFolders
> > 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.
  63   24 Mar 2005 Ryu SawadaInfoCVS_RSH
I recommended to my friend trying ROME, but he couldn't download it, because he didn't set CVS_RSH.
There is no instruction for setting CVS_RSH in ROME download page.

You had better to write about it.
ELOG V3.1.4-2e1708b5