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.