// $Id$
/**************************************************************************
* This file is property of and copyright by the ALICE HLT Project *
* ALICE Experiment at CERN, All rights reserved. *
* *
* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
* for The ALICE HLT Project. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
* appear in the supporting documentation. The authors make no claims *
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
/** @file testAliHLTEsdManager.C
@author Matthias Richter
@date
@brief Test macro/program for the AliHLTEsdManager class
*/
#ifndef __CINT__
#include "TFile.h"
#include "TDatime.h"
#include "TRandom.h"
#include "TArrayI.h"
#include "TSystem.h"
#include "TTree.h"
#include "TFile.h"
#include "AliESDEvent.h"
#include "AliHLTDataTypes.h"
#include "AliHLTComponent.h"
#include "AliHLTEsdManager.h"
#include "AliHLTMessage.h"
#include "AliHLTSystem.h"
#include <ostream>
#endif //__CINT__
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
//
// configuration of the test program
//
// printouts or not
const bool bVerbose=false;
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
//
// forward declarations
//
class AliHLTEsdManager;
int GetRandom(int min, int max);
int CreateAndWriteESD(AliHLTEsdManager* manager, int eventno, AliHLTComponentDataType dt, AliESDEvent* pTgt);
int CheckFields(const char* file, TArrayI* fields);
int CheckFields(TTree* pTree, TArrayI* fields, const char* file);
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
//
// compiled version and root macro are not equivalent for this unit test
// The macro just tests with one data type
// This is mainly due to some restrictions in CINT which can not handle
// the array of data types correctly
int testAliHLTEsdManager()
{
cout << "macro still not working with CINT, sorry!" << endl;
return 0;
int iResult=0;
#ifdef __CINT__
if (gSystem->Load("libHLTrec.so")<0) {
cerr << "error: error loading libHLTrec.so library" << endl;
return -1;
}
#endif
AliHLTEsdManager* pManager=AliHLTEsdManager::New();
if (!pManager) {
cerr << "error: can not create manager instance" << endl;
return -1;
}
pManager->SetDirectory(gSystem->TempDirectory());
int nofEvents=10;
AliHLTComponentDataType tpcesd;
AliHLTComponent::SetDataType(tpcesd, "ESD_TREE", "TPC ");
cout << AliHLTComponent::DataType2Text(tpcesd).c_str() << endl;
for (int event=0; event<nofEvents && iResult>=0; event++) {
cout << AliHLTComponent::DataType2Text(tpcesd).c_str() << endl;
CreateAndWriteESD(pManager, event, tpcesd, NULL);
}
AliHLTEsdManager::Delete(pManager);
return iResult;
}
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
//
int main(int /*argc*/, const char** /*argv*/)
{
int iResult=0;
int nofEvents=10;
AliHLTSystem gHLT;
gHLT.SetGlobalLoggingLevel(kHLTLogDefault);
AliHLTEsdManager* pManager=AliHLTEsdManager::New();
if (!pManager) {
cerr << "error: can not create manager instance" << endl;
return -1;
}
pManager->SetDirectory(gSystem->TempDirectory());
AliHLTComponentDataType types[] = {
// first entry is special, ESD is written to the global target ESD
//kAliHLTDataTypeESDTree|kAliHLTDataOriginTPC,
kAliHLTDataTypeESDTree|kAliHLTDataOriginTPC,
kAliHLTDataTypeESDTree|kAliHLTDataOriginPHOS,
kAliHLTDataTypeESDTree|kAliHLTDataOriginTRD,
kAliHLTDataTypeDDLRaw|kAliHLTDataOriginTRD,
kAliHLTVoidDataType
};
TTree* pMasterTree=new TTree("esdTree", "Tree with HLT ESD objects");
pMasterTree->SetDirectory(0);
AliESDEvent* pMasterESD=new AliESDEvent;
pMasterESD->CreateStdContent();
pMasterESD->WriteToTree(pMasterTree);
vector<TArrayI*> randomFields;
for (int event=0; event<nofEvents && iResult>=0; event++) {
pMasterESD->ResetStdContent();
for (unsigned int type=0; types[type]!=kAliHLTVoidDataType && iResult>=0; type++) {
if (randomFields.size()<=type) {
randomFields.push_back(new TArrayI(nofEvents));
}
AliESDEvent* pTgt=NULL;
//if (type==0) pTgt=pMasterESD;
int field=CreateAndWriteESD(pManager, event, types[type], pTgt);
if (field>=0) {
(*randomFields[type])[event]=field;
} else {
iResult=-1;
break;
}
}
pMasterTree->Fill();
}
if (iResult>=0) {
pManager->PadESDs(nofEvents);
}
vector<TString> filenames;
for (int type=0; types[type]!=kAliHLTVoidDataType; type++) {
TString filename=pManager->GetFileNames(types[type]);
filenames.push_back(filename);
}
// delete the manager instance to make sure the files are closed
AliHLTEsdManager::Delete(pManager);
pManager=NULL;
for (int type=0; types[type]!=kAliHLTVoidDataType; type++) {
if (iResult>=0) {
iResult=CheckFields(filenames[type], dynamic_cast<TArrayI*>(randomFields[type]));
}
TString shellcmd="rm -f ";
shellcmd+=filenames[type];
gSystem->Exec(shellcmd);
}
vector<TArrayI*>::iterator element;
while ((element=randomFields.end())!=randomFields.begin()) {
element--;
if (*element) delete *element;
randomFields.pop_back();
}
delete pMasterESD;
return iResult;
}
Bool_t seedSet=kFALSE;
/**
* Get a random number in the given range.
*/
int GetRandom(int min, int max)
{
if (max-min<2) return min;
static TRandom rand;
if (!seedSet) {
TDatime dt;
rand.SetSeed(dt.Get());
seedSet=kTRUE;
}
return rand.Integer(max-min);
}
/**
* Creates a dummy ESD object and sets the magnetic field to a random number.
* The ESD is streamed via AliHLTMessage and processed by the AliHLTEsdmanager.
* @return 0 no ESD created, >0 random number of the magnetic field,
* neg error if failed
*/
int CreateAndWriteESD(AliHLTEsdManager* pManager, int eventno, AliHLTComponentDataType dt, AliESDEvent* pTgt)
{
int iResult=0;
int magField=0;
if (!pManager) {
cerr << "error: missing manager instance" << endl;
return -1;
}
const char* message="";
if ((GetRandom(0,10)%3)==0) {
message=": adding ESD for block ";
TTree* pTree=new TTree;
AliESDEvent* pESD=new AliESDEvent;
pESD->CreateStdContent();
magField=GetRandom(1, 1000);
pESD->SetMagneticField(magField);
pESD->WriteToTree(pTree);
pTree->Fill();
pTree->GetUserInfo()->Add(pESD);
AliHLTMessage msg(kMESS_OBJECT);
msg.WriteObject(pTree);
Int_t iMsgLength=msg.Length();
if (iMsgLength>0) {
msg.SetLength(); // sets the length to the first (reserved) word
iResult=pManager->WriteESD((AliHLTUInt8_t*)msg.Buffer(), iMsgLength, dt, pTgt, eventno);
}
pTree->GetUserInfo()->Clear();
delete pTree;
delete pESD;
} else {
message=": omitting block ";
}
if (iResult>=0) iResult=magField;
if (bVerbose) cout << "event " << eventno << message << AliHLTComponent::DataType2Text(dt).c_str() << ": " << iResult << endl;
return iResult;
}
/**
* Read the ESD from the file and compare with the
* random field values previously set to the ESDs
*/
int CheckFields(const char* file, TArrayI* fields)
{
if (!file || !fields) {
cerr << "error: invalid parameters" << endl;
return 0;
}
TFile esdfile(file);
if (!esdfile.IsZombie()) {
TTree* pTree=NULL;
esdfile.GetObject("esdTree", pTree);
if (pTree) {
int res=CheckFields(pTree, fields, file);
if (res<0) return res;
} else {
cerr << "error: can not find esdTree in file " << file << endl;
}
} else {
cerr << "error: can not open file " << file << endl;
return -1;
}
cout << "checking: " << file << " ok" << endl;
return 0;
}
/**
* Compare ESD from tree with the
* random field values previously set to the ESDs
*/
int CheckFields(TTree* pTree, TArrayI* fields, const char* file)
{
if (fields->GetSize()!=pTree->GetEntries()) {
cerr << "error: event number mismatch in file " << file << " : expected " << fields->GetSize() << " found " << pTree->GetEntries() << endl;
return -1;
}
AliESDEvent* pESD=new AliESDEvent;
pESD->ReadFromTree(pTree);
for (int event=0; event<pTree->GetEntries(); event++) {
pTree->GetEvent(event);
if (fields->At(event)!=pESD->GetMagneticField()) {
cerr << "error: magnetic field mismatch in file " << file << " event " << event << ": expected " << fields->At(event) << " found " << pESD->GetMagneticField() << endl;
return -1;
}
}
delete pESD;
return 0;
}
testAliHLTEsdManager.C:10 testAliHLTEsdManager.C:11 testAliHLTEsdManager.C:12 testAliHLTEsdManager.C:13 testAliHLTEsdManager.C:14 testAliHLTEsdManager.C:15 testAliHLTEsdManager.C:16 testAliHLTEsdManager.C:17 testAliHLTEsdManager.C:18 testAliHLTEsdManager.C:19 testAliHLTEsdManager.C:20 testAliHLTEsdManager.C:21 testAliHLTEsdManager.C:22 testAliHLTEsdManager.C:23 testAliHLTEsdManager.C:24 testAliHLTEsdManager.C:25 testAliHLTEsdManager.C:26 testAliHLTEsdManager.C:27 testAliHLTEsdManager.C:28 testAliHLTEsdManager.C:29 testAliHLTEsdManager.C:30 testAliHLTEsdManager.C:31 testAliHLTEsdManager.C:32 testAliHLTEsdManager.C:33 testAliHLTEsdManager.C:34 testAliHLTEsdManager.C:35 testAliHLTEsdManager.C:36 testAliHLTEsdManager.C:37 testAliHLTEsdManager.C:38 testAliHLTEsdManager.C:39 testAliHLTEsdManager.C:40 testAliHLTEsdManager.C:41 testAliHLTEsdManager.C:42 testAliHLTEsdManager.C:43 testAliHLTEsdManager.C:44 testAliHLTEsdManager.C:45 testAliHLTEsdManager.C:46 testAliHLTEsdManager.C:47 testAliHLTEsdManager.C:48 testAliHLTEsdManager.C:49 testAliHLTEsdManager.C:50 testAliHLTEsdManager.C:51 testAliHLTEsdManager.C:52 testAliHLTEsdManager.C:53 testAliHLTEsdManager.C:54 testAliHLTEsdManager.C:55 testAliHLTEsdManager.C:56 testAliHLTEsdManager.C:57 testAliHLTEsdManager.C:58 testAliHLTEsdManager.C:59 testAliHLTEsdManager.C:60 testAliHLTEsdManager.C:61 testAliHLTEsdManager.C:62 testAliHLTEsdManager.C:63 testAliHLTEsdManager.C:64 testAliHLTEsdManager.C:65 testAliHLTEsdManager.C:66 testAliHLTEsdManager.C:67 testAliHLTEsdManager.C:68 testAliHLTEsdManager.C:69 testAliHLTEsdManager.C:70 testAliHLTEsdManager.C:71 testAliHLTEsdManager.C:72 testAliHLTEsdManager.C:73 testAliHLTEsdManager.C:74 testAliHLTEsdManager.C:75 testAliHLTEsdManager.C:76 testAliHLTEsdManager.C:77 testAliHLTEsdManager.C:78 testAliHLTEsdManager.C:79 testAliHLTEsdManager.C:80 testAliHLTEsdManager.C:81 testAliHLTEsdManager.C:82 testAliHLTEsdManager.C:83 testAliHLTEsdManager.C:84 testAliHLTEsdManager.C:85 testAliHLTEsdManager.C:86 testAliHLTEsdManager.C:87 testAliHLTEsdManager.C:88 testAliHLTEsdManager.C:89 testAliHLTEsdManager.C:90 testAliHLTEsdManager.C:91 testAliHLTEsdManager.C:92 testAliHLTEsdManager.C:93 testAliHLTEsdManager.C:94 testAliHLTEsdManager.C:95 testAliHLTEsdManager.C:96 testAliHLTEsdManager.C:97 testAliHLTEsdManager.C:98 testAliHLTEsdManager.C:99 testAliHLTEsdManager.C:100 testAliHLTEsdManager.C:101 testAliHLTEsdManager.C:102 testAliHLTEsdManager.C:103 testAliHLTEsdManager.C:104 testAliHLTEsdManager.C:105 testAliHLTEsdManager.C:106 testAliHLTEsdManager.C:107 testAliHLTEsdManager.C:108 testAliHLTEsdManager.C:109 testAliHLTEsdManager.C:110 testAliHLTEsdManager.C:111 testAliHLTEsdManager.C:112 testAliHLTEsdManager.C:113 testAliHLTEsdManager.C:114 testAliHLTEsdManager.C:115 testAliHLTEsdManager.C:116 testAliHLTEsdManager.C:117 testAliHLTEsdManager.C:118 testAliHLTEsdManager.C:119 testAliHLTEsdManager.C:120 testAliHLTEsdManager.C:121 testAliHLTEsdManager.C:122 testAliHLTEsdManager.C:123 testAliHLTEsdManager.C:124 testAliHLTEsdManager.C:125 testAliHLTEsdManager.C:126 testAliHLTEsdManager.C:127 testAliHLTEsdManager.C:128 testAliHLTEsdManager.C:129 testAliHLTEsdManager.C:130 testAliHLTEsdManager.C:131 testAliHLTEsdManager.C:132 testAliHLTEsdManager.C:133 testAliHLTEsdManager.C:134 testAliHLTEsdManager.C:135 testAliHLTEsdManager.C:136 testAliHLTEsdManager.C:137 testAliHLTEsdManager.C:138 testAliHLTEsdManager.C:139 testAliHLTEsdManager.C:140 testAliHLTEsdManager.C:141 testAliHLTEsdManager.C:142 testAliHLTEsdManager.C:143 testAliHLTEsdManager.C:144 testAliHLTEsdManager.C:145 testAliHLTEsdManager.C:146 testAliHLTEsdManager.C:147 testAliHLTEsdManager.C:148 testAliHLTEsdManager.C:149 testAliHLTEsdManager.C:150 testAliHLTEsdManager.C:151 testAliHLTEsdManager.C:152 testAliHLTEsdManager.C:153 testAliHLTEsdManager.C:154 testAliHLTEsdManager.C:155 testAliHLTEsdManager.C:156 testAliHLTEsdManager.C:157 testAliHLTEsdManager.C:158 testAliHLTEsdManager.C:159 testAliHLTEsdManager.C:160 testAliHLTEsdManager.C:161 testAliHLTEsdManager.C:162 testAliHLTEsdManager.C:163 testAliHLTEsdManager.C:164 testAliHLTEsdManager.C:165 testAliHLTEsdManager.C:166 testAliHLTEsdManager.C:167 testAliHLTEsdManager.C:168 testAliHLTEsdManager.C:169 testAliHLTEsdManager.C:170 testAliHLTEsdManager.C:171 testAliHLTEsdManager.C:172 testAliHLTEsdManager.C:173 testAliHLTEsdManager.C:174 testAliHLTEsdManager.C:175 testAliHLTEsdManager.C:176 testAliHLTEsdManager.C:177 testAliHLTEsdManager.C:178 testAliHLTEsdManager.C:179 testAliHLTEsdManager.C:180 testAliHLTEsdManager.C:181 testAliHLTEsdManager.C:182 testAliHLTEsdManager.C:183 testAliHLTEsdManager.C:184 testAliHLTEsdManager.C:185 testAliHLTEsdManager.C:186 testAliHLTEsdManager.C:187 testAliHLTEsdManager.C:188 testAliHLTEsdManager.C:189 testAliHLTEsdManager.C:190 testAliHLTEsdManager.C:191 testAliHLTEsdManager.C:192 testAliHLTEsdManager.C:193 testAliHLTEsdManager.C:194 testAliHLTEsdManager.C:195 testAliHLTEsdManager.C:196 testAliHLTEsdManager.C:197 testAliHLTEsdManager.C:198 testAliHLTEsdManager.C:199 testAliHLTEsdManager.C:200 testAliHLTEsdManager.C:201 testAliHLTEsdManager.C:202 testAliHLTEsdManager.C:203 testAliHLTEsdManager.C:204 testAliHLTEsdManager.C:205 testAliHLTEsdManager.C:206 testAliHLTEsdManager.C:207 testAliHLTEsdManager.C:208 testAliHLTEsdManager.C:209 testAliHLTEsdManager.C:210 testAliHLTEsdManager.C:211 testAliHLTEsdManager.C:212 testAliHLTEsdManager.C:213 testAliHLTEsdManager.C:214 testAliHLTEsdManager.C:215 testAliHLTEsdManager.C:216 testAliHLTEsdManager.C:217 testAliHLTEsdManager.C:218 testAliHLTEsdManager.C:219 testAliHLTEsdManager.C:220 testAliHLTEsdManager.C:221 testAliHLTEsdManager.C:222 testAliHLTEsdManager.C:223 testAliHLTEsdManager.C:224 testAliHLTEsdManager.C:225 testAliHLTEsdManager.C:226 testAliHLTEsdManager.C:227 testAliHLTEsdManager.C:228 testAliHLTEsdManager.C:229 testAliHLTEsdManager.C:230 testAliHLTEsdManager.C:231 testAliHLTEsdManager.C:232 testAliHLTEsdManager.C:233 testAliHLTEsdManager.C:234 testAliHLTEsdManager.C:235 testAliHLTEsdManager.C:236 testAliHLTEsdManager.C:237 testAliHLTEsdManager.C:238 testAliHLTEsdManager.C:239 testAliHLTEsdManager.C:240 testAliHLTEsdManager.C:241 testAliHLTEsdManager.C:242 testAliHLTEsdManager.C:243 testAliHLTEsdManager.C:244 testAliHLTEsdManager.C:245 testAliHLTEsdManager.C:246 testAliHLTEsdManager.C:247 testAliHLTEsdManager.C:248 testAliHLTEsdManager.C:249 testAliHLTEsdManager.C:250 testAliHLTEsdManager.C:251 testAliHLTEsdManager.C:252 testAliHLTEsdManager.C:253 testAliHLTEsdManager.C:254 testAliHLTEsdManager.C:255 testAliHLTEsdManager.C:256 testAliHLTEsdManager.C:257 testAliHLTEsdManager.C:258 testAliHLTEsdManager.C:259 testAliHLTEsdManager.C:260 testAliHLTEsdManager.C:261 testAliHLTEsdManager.C:262 testAliHLTEsdManager.C:263 testAliHLTEsdManager.C:264 testAliHLTEsdManager.C:265 testAliHLTEsdManager.C:266 testAliHLTEsdManager.C:267 testAliHLTEsdManager.C:268 testAliHLTEsdManager.C:269 testAliHLTEsdManager.C:270 testAliHLTEsdManager.C:271 testAliHLTEsdManager.C:272 testAliHLTEsdManager.C:273 testAliHLTEsdManager.C:274 testAliHLTEsdManager.C:275 testAliHLTEsdManager.C:276 testAliHLTEsdManager.C:277 testAliHLTEsdManager.C:278 testAliHLTEsdManager.C:279 testAliHLTEsdManager.C:280 testAliHLTEsdManager.C:281 testAliHLTEsdManager.C:282 testAliHLTEsdManager.C:283 testAliHLTEsdManager.C:284 testAliHLTEsdManager.C:285 testAliHLTEsdManager.C:286 testAliHLTEsdManager.C:287 testAliHLTEsdManager.C:288 testAliHLTEsdManager.C:289 testAliHLTEsdManager.C:290 testAliHLTEsdManager.C:291 testAliHLTEsdManager.C:292 testAliHLTEsdManager.C:293 testAliHLTEsdManager.C:294 testAliHLTEsdManager.C:295 testAliHLTEsdManager.C:296 testAliHLTEsdManager.C:297 testAliHLTEsdManager.C:298 testAliHLTEsdManager.C:299 testAliHLTEsdManager.C:300 testAliHLTEsdManager.C:301 testAliHLTEsdManager.C:302 testAliHLTEsdManager.C:303 testAliHLTEsdManager.C:304