/* $Id$ */
// This class runs the test preprocessor
// It uses AliTestShuttle to simulate a full Shuttle process
// The input data is created in the functions
// CreateDCSAliasMap() creates input that would in the same way come from DCS
// ReadDCSAliasMap() reads from a file
// CreateInputFilesMap() creates a list of local files, that can be accessed by the shuttle
void TestPMDPreprocessor()
{
// load library
gSystem->Load("libTestShuttle.so");
// TODO if needed, change location of OCDB and Reference test folders
// by default they are set to $ALICE_ROOT/SHUTTLE/TestShuttle/TestCDB and TestReference
AliTestShuttle::SetOCDBStorage("local://TestCDB");
// AliTestShuttle::SetReferenceStorage("local://$ALICE_ROOT/OCDB/SHUTTLE/TestShuttle/TestCDB");
printf("Test OCDB storage Uri: %s\n", AliTestShuttle::GetOCDBStorage().Data());
// create AliTestShuttle instance
// The parameters are run, startTime, endTime
AliTestShuttle* shuttle = new AliTestShuttle(7, 0, 1);
// TODO(1)
//
// The shuttle can read DCS data, if the preprocessor should be tested to process DCS data,
// some fake data has to be created.
//
// The "fake" input data can be taken using either (a) or (b):
// (a) data from a file: Use ReadDCSAliasMap()
// the format of the file is explained in ReadDCSAliasMap()
// To use it uncomment the following line:
//
//TMap* dcsAliasMap = ReadDCSAliasMap();
//
// (b) generated in this macro: Use CreateDCSAliasMap() and its documentation
// To use it uncomment the following line:
//
TMap* dcsAliasMap = CreateDCSAliasMap();
// now give the alias map to the shuttle
shuttle->SetDCSInput(dcsAliasMap);
// TODO(2)
//
// The shuttle can also process files that originate from DCS, DAQ and HLT.
// To test it, we provide some local files and locations where these would be found when
// the online machinery would be there.
// In real life this functions would be produces by the sub-detectors
// calibration programs in DCS, DAQ or HLT. These files can then be retrieved using the Shuttle.
//
// Files are added with the function AliTestShuttle::AddInputFile. The syntax is:
// AddInputFile(<system>, <detector>, <id>, <source>, <local-file>)
// In this example we add a file originating from the GDC with the id PEDESTALS
// Three files originating from different LDCs but with the same id are also added
shuttle->AddInputFile(AliShuttleInterface::kDAQ, "PMD", "PMDGAINS", "LDC1", "xy.root");
// TODO(4)
// Create the preprocessor that should be tested, it registers itself automatically to the shuttle
AliPreprocessor* test = new AliPMDPreprocessor("PMD", shuttle);
printf("Starting SHUTTLE!\n");
// Test the preprocessor
shuttle->Process();
printf("SHUTTLE done!\n");
delete shuttle;
// TODO(5)
// In the preprocessor AliShuttleInterface::Store should be called to put the final
// data to the CDB.
//
// Check the file which should have been created
AliCDBEntry* entry = AliCDBManager::Instance()->GetStorage(AliTestShuttle::GetOCDBStorage())
->Get("PMD/Calib/Data", 7);
if (!entry)
{
printf("The file is not there. Something went wrong.\n");
return;
}
AliPMDCalibData* output = dynamic_cast<AliPMDCalibData*> (entry->GetObject());
// If everything went fine, print the result
if (output)
printf("Gain of det=1, smn=2, row=3, col=4: %f\n", output->GetGainFact(1,2,3,4));
AliCDBManager::Instance()->Destroy();
printf("DONE!\n");
}
TMap* CreateDCSAliasMap()
{
// Creates a DCS structure
// The structure is the following:
// TMap (key --> value)
// <DCSAlias> --> <valueList>
// <DCSAlias> is a string
// <valueList> is a TObjArray of AliDCSValue
// An AliDCSValue consists of timestamp and a value in form of a AliSimpleValue
// In this example 6 aliases exists: DCSAlias1 ... DCSAlias6
// Each contains 1000 values randomly generated by TRandom::Gaus + 5*nAlias
TMap* aliasMap = new TMap;
aliasMap->SetOwner(1);
TRandom random;
for(int nAlias=0;nAlias<6;nAlias++)
{
TObjArray* valueSet = new TObjArray;
valueSet->SetOwner(1);
TString aliasName="DCSAlias";
aliasName += nAlias;
//printf("\n\n alias: %s\n\n",aliasName.Data());
for (int timeStamp=0;timeStamp<1000;timeStamp+=10)
{
AliDCSValue* dcsVal = new AliDCSValue((Float_t) (random.Gaus()+5*nAlias), timeStamp);
//printf("%s\n",dcsVal->ToString().Data());
valueSet->Add(dcsVal);
}
aliasMap->Add(new TObjString(aliasName), valueSet);
}
return aliasMap;
}
TestPMDPreprocessor.C:100 TestPMDPreprocessor.C:101 TestPMDPreprocessor.C:102 TestPMDPreprocessor.C:103 TestPMDPreprocessor.C:104 TestPMDPreprocessor.C:105 TestPMDPreprocessor.C:106 TestPMDPreprocessor.C:107 TestPMDPreprocessor.C:108 TestPMDPreprocessor.C:109 TestPMDPreprocessor.C:110 TestPMDPreprocessor.C:111 TestPMDPreprocessor.C:112 TestPMDPreprocessor.C:113 TestPMDPreprocessor.C:114 TestPMDPreprocessor.C:115 TestPMDPreprocessor.C:116 TestPMDPreprocessor.C:117 TestPMDPreprocessor.C:118 TestPMDPreprocessor.C:119 TestPMDPreprocessor.C:120 TestPMDPreprocessor.C:121 TestPMDPreprocessor.C:122 TestPMDPreprocessor.C:123 TestPMDPreprocessor.C:124 TestPMDPreprocessor.C:125 TestPMDPreprocessor.C:126 TestPMDPreprocessor.C:127 TestPMDPreprocessor.C:128 TestPMDPreprocessor.C:129 TestPMDPreprocessor.C:130 TestPMDPreprocessor.C:131 TestPMDPreprocessor.C:132 TestPMDPreprocessor.C:133 TestPMDPreprocessor.C:134 TestPMDPreprocessor.C:135 TestPMDPreprocessor.C:136 TestPMDPreprocessor.C:137 TestPMDPreprocessor.C:138 TestPMDPreprocessor.C:139 TestPMDPreprocessor.C:140 TestPMDPreprocessor.C:141