// $Id$
/**
* @file AddCalibStreamerInfo.C
* @brief Extraction of data blocks from HLTOUT
*
* <pre>
* Usage: aliroot -b -q AddCalibStreamerInfo.C'(classname, uri, version, firstRun, lastRun)'
* classname name of the class to add the streamer info
* uri optional URI of the OCDB, default local://$ALICE_ROOT/OCDB
* version version number of the entry (optional)
* firstRun first run (optional)
* lastRun last run (optional)
* </pre>
*
* The macro checks whether the streamer info of the current version
* of the class 'classname' is available in the
* HLT/Calib/StreamerInfo entry, and adds it if not.
*
* Streamer infos are needed in order to extract TObjects from the HLT raw data
* payload.
*
* @author Matthias.Richter@ift.uib.no
* @ingroup alihlt_rec
*/
void AddCalibStreamerInfo(
const char* className,
const char* cdbPath = "local://$ALICE_ROOT/OCDB",
Int_t version = 0,
Int_t firstRun = 0,
Int_t lastRun = AliCDBRunRange::Infinity()
)
{
const char* gkCalibStreamerInfoEntry="HLT/Calib/StreamerInfo";
// Setup the CDB default storage and run number.
AliCDBManager* cdbManager = AliCDBManager::Instance();
if (cdbManager == NULL) {
cerr << "ERROR: Global CDB manager object does not exist." << endl;
return;
}
AliCDBStorage* storage = cdbManager->GetStorage(cdbPath);
if (storage == NULL) {
cerr << "ERROR: Could not get storage for: " << cdbPath << endl;
return;
}
TClass* pClass=TClass::GetClass(className);
if (!pClass) {
cerr << "ERROR: Can not find TClass object: " << className << endl;
return;
}
Int_t classVersion=pClass->GetClassVersion();
TObjArray* pInfos=NULL;
AliCDBRunRange runRange(firstRun, lastRun);
AliCDBEntry* pExistingEntry=storage->Get(gkCalibStreamerInfoEntry, runRange);
if (pExistingEntry) pInfos=(TObjArray*)pExistingEntry->GetObject();
else pInfos=new TObjArray;
TStreamerInfo* pInfo=NULL;
for (int i=0; i<pInfos->GetEntriesFast(); i++) {
if (pInfos->At(i)==NULL) continue;
if (pInfos->At(i)->IsA()!=TStreamerInfo::Class()) {
cout << "skipping object " << pInfos->At(i)->GetName() << " class " << pInfos->At(i)->Class()->GetName() << endl;
continue;
}
pInfo=(TStreamerInfo*)pInfos->At(i);
TString infoname=pInfo->GetName();
if (infoname.CompareTo(className)!=0) continue;
if (pInfo->GetClassVersion()==classVersion) {
cout << "nothing to be done, class " << className << " version " << classVersion << " already in the object" << endl;
return;
}
}
pInfo=new TStreamerInfo(pClass);
pInfo->Build();
pInfos->AddAtFree(pInfo);
///////////////////////////////////////////////////////////////////////////////////////////
// Write the updated object to OCDB
AliCDBId id(gkCalibStreamerInfoEntry, firstRun, lastRun, version);
AliCDBMetaData* metaData = new AliCDBMetaData();
metaData->SetResponsible("HLT");
metaData->SetComment("Streamer info for streamed objects in the HLT raw data payload.");
storage->Put(pInfos, id, metaData);
}
AddCalibStreamerInfo.C:10 AddCalibStreamerInfo.C:11 AddCalibStreamerInfo.C:12 AddCalibStreamerInfo.C:13 AddCalibStreamerInfo.C:14 AddCalibStreamerInfo.C:15 AddCalibStreamerInfo.C:16 AddCalibStreamerInfo.C:17 AddCalibStreamerInfo.C:18 AddCalibStreamerInfo.C:19 AddCalibStreamerInfo.C:20 AddCalibStreamerInfo.C:21 AddCalibStreamerInfo.C:22 AddCalibStreamerInfo.C:23 AddCalibStreamerInfo.C:24 AddCalibStreamerInfo.C:25 AddCalibStreamerInfo.C:26 AddCalibStreamerInfo.C:27 AddCalibStreamerInfo.C:28 AddCalibStreamerInfo.C:29 AddCalibStreamerInfo.C:30 AddCalibStreamerInfo.C:31 AddCalibStreamerInfo.C:32 AddCalibStreamerInfo.C:33 AddCalibStreamerInfo.C:34 AddCalibStreamerInfo.C:35 AddCalibStreamerInfo.C:36 AddCalibStreamerInfo.C:37 AddCalibStreamerInfo.C:38 AddCalibStreamerInfo.C:39 AddCalibStreamerInfo.C:40 AddCalibStreamerInfo.C:41 AddCalibStreamerInfo.C:42 AddCalibStreamerInfo.C:43 AddCalibStreamerInfo.C:44 AddCalibStreamerInfo.C:45 AddCalibStreamerInfo.C:46 AddCalibStreamerInfo.C:47 AddCalibStreamerInfo.C:48 AddCalibStreamerInfo.C:49 AddCalibStreamerInfo.C:50 AddCalibStreamerInfo.C:51 AddCalibStreamerInfo.C:52 AddCalibStreamerInfo.C:53 AddCalibStreamerInfo.C:54 AddCalibStreamerInfo.C:55 AddCalibStreamerInfo.C:56 AddCalibStreamerInfo.C:57 AddCalibStreamerInfo.C:58 AddCalibStreamerInfo.C:59 AddCalibStreamerInfo.C:60 AddCalibStreamerInfo.C:61 AddCalibStreamerInfo.C:62 AddCalibStreamerInfo.C:63 AddCalibStreamerInfo.C:64 AddCalibStreamerInfo.C:65 AddCalibStreamerInfo.C:66 AddCalibStreamerInfo.C:67 AddCalibStreamerInfo.C:68 AddCalibStreamerInfo.C:69 AddCalibStreamerInfo.C:70 AddCalibStreamerInfo.C:71 AddCalibStreamerInfo.C:72 AddCalibStreamerInfo.C:73 AddCalibStreamerInfo.C:74 AddCalibStreamerInfo.C:75 AddCalibStreamerInfo.C:76 AddCalibStreamerInfo.C:77 AddCalibStreamerInfo.C:78 AddCalibStreamerInfo.C:79 AddCalibStreamerInfo.C:80 AddCalibStreamerInfo.C:81 AddCalibStreamerInfo.C:82 AddCalibStreamerInfo.C:83 AddCalibStreamerInfo.C:84 AddCalibStreamerInfo.C:85 AddCalibStreamerInfo.C:86 AddCalibStreamerInfo.C:87 AddCalibStreamerInfo.C:88 AddCalibStreamerInfo.C:89 AddCalibStreamerInfo.C:90