Overview | Releases | Download | Docs | Links | Help | RecentChanges

IS

IS is short for Information Service. It is part of the Atlas OnlineSoftware, and is used for sharing small(ish) amounts of data between different processes and machines.

Various IS servers are used for different types of data. Processes can subscribe to the IS servers, and are then notified of addition, removal or change in the data objects matching a regexp on the name.

One can view objects in IS in various ways, e.g. from the the IS browser in the SctGui, or by using the command is_ls -p SCT

The method of reading to and writing objects in our DataModel, is via the appropriate .

The IS server seems to be implimented as an OnlineSoftware IPC server.

Example of extracting information from IS (eg from the PMG is server) via the command line:

[sctswinstaller@pc-sct-mon-09] sct > is_ls -p SCT_0107 --server PMG -r SCT_Barrels_TTC_RCD --print-name --print-value
  Server "PMG" contains 1 object(s):
          PMG.SCT_Barrels_TTC_RCD <1/6/07 15:09:16.499413> <PMGPublishedProcessData>
      35 attribute(s):
      user_name                      sctswinstaller
      handle                         pmg://sbc-sct-tcc-01.cern.ch/SCT_0107/SCT_Barrels_TTC_RCD/9
      pid                            24860
      partition                      SCT_0107
      host                           sbc-sct-tcc-01.cern.ch
      app_name                       SCT_Barrels_TTC_RCD
 

To see an example of putting something complicated in IS, grep through the code for ScanErrorData?. You should find that an xml file SctApi/IS/SctApi.schema.xml serves as a definition. Then some code is autogenerated from it which lands in SctApi/SctApiIS?/ScanErrorData?.h which can then be included and used in other programs like this:

          // (From SctApi/SctApiHisto.cxx)


          // Publish something in IS
	  ScanErrorData errorData;
	  errorData.partition = rodLabel.partition;
	  errorData.crate = rodLabel.crate;
	  errorData.rod = rodLabel.rod;
	  errorData.slaveDsp = slaveNumber;
	  errorData.link = l;
	  errorData.sn = sn;
	  errorData.nErrors = info.nErrors;
	  errorData.nErrEvents = info.nErrEvents;
	  errorData.chip = info.theChip;
	  errorData.channel = info.theChannel;
	  errorData.linkMasked = info.maskedAtThisBin;
	  errorData.errorNumber = info.theError; // Maybe the error type for flagged errors

          int side = l % 1;
          int run = scanEx->runNumber;
          int scanNum = scanEx->scanNumber;

ISInfoDictionary &isDict(Sct::SctNames::getISDictionary());
           isDict.checkin(api.idiosyncrasy().infoServiceName((boost::format("ScanError_%d_%d_%s_%d") % run % scanNum % sn % side).str()), errorData);

Note that should should not always do "checkin". SOmetimes you should update or remove etc.