#include "AliMpDataProcessor.h"
#include "AliMpDataMap.h"
#include "AliMpFiles.h"
#include "AliLog.h"
#include <TSystem.h>
#include <TObjString.h>
#include <TFile.h>
#include <Riostream.h>
#include <fstream>
#include <sstream>
#include <map>
const TString& AliMpDataProcessor::GetHeaderFileName()
{
static const TString kHeaderFileName = "add.h";
return kHeaderFileName;
}
const TString& AliMpDataProcessor::GetImplFileName()
{
static const TString kImplFileName = "add.cxx";
return kImplFileName;
}
AliMpDataProcessor::AliMpDataProcessor()
: TObject(),
fCounter(0),
fHeaderFile(),
fImplFile()
{
fHeaderFile.open(GetHeaderFileName().Data(), std::ios::out);
fImplFile.open(GetImplFileName().Data(), std::ios::out);
}
AliMpDataProcessor:: ~AliMpDataProcessor()
{
}
void AliMpDataProcessor::ProcessDirectory(const TString& path,
AliMpDataMap* dataMap)
{
AliDebugStream(2) << "ProcessDirectory " << path.Data() << endl;
gSystem->cd(path);
gSystem->Exec("ls > /tmp/mpfiles.txt");
ifstream mpfiles("/tmp/mpfiles.txt");
TString mpfilesStr;
TString fileName;
while ( mpfiles >> fileName ) {
mpfilesStr += fileName.Data();
mpfilesStr += " ";
}
istringstream mpFilesStream(mpfilesStr.Data());
while ( mpFilesStream >> fileName ) {
TString filePath = path + "/" + fileName;
if ( gSystem->OpenDirectory(filePath.Data()) )
ProcessDirectory(filePath, dataMap);
else
ProcessFile(filePath, dataMap);
}
AliDebugStream(2) << "ProcessDirectory done " << path.Data() << endl;
}
void AliMpDataProcessor::ProcessFile(const TString& path, AliMpDataMap* dataMap)
{
string top = AliMpFiles::GetTop().Data();
string fullDataPath = path.Data();
string dataPath = fullDataPath;
if ( dataPath.find(top) != string::npos ) dataPath.erase(0, top.size()+1);
dataPath.erase(0,dataPath.find('/')+1);
AliDebugStream(2) << "Processing file " << dataPath << endl;
if ( dataPath.find(".C") != std::string::npos ||
dataPath.find(".h") != std::string::npos ) return;
ifstream input(path.Data(), ios::in);
if ( ! input.is_open() ) {
cerr << "Cannot open input file " << path.Data() << endl;
return;
}
string fileString;
string line;
do {
getline(input, line);
if ( ! input.eof() ) {
fileString += line;
fileString += '\n';
}
}
while ( ! input.eof() );
dataMap->Add(dataPath, fileString);
}
void AliMpDataProcessor::GenerateFunction(const TString& path,
const TString& data)
{
AliDebugStream(2) << "Processing path " << path.Data() << endl;
fHeaderFile << " void AddData" << ++fCounter << "();" << endl;
fImplFile
<< "//_____________________________________________________________________________" << endl
<< "void AliMpDataMap::AddData" << fCounter << "()" << endl
<< "{" << endl
<< "/// Automatically generated function for data file: " << endl
<< "/// " << path << endl
<< endl
<< " string path = \"" << path << "\";" << endl << endl;
GenerateFileCode(data);
fImplFile
<< endl
<< " fMap[path] = data;" << endl
<< "}" << endl
<< endl;
}
void AliMpDataProcessor::GenerateFileCode(const TString& data)
{
istringstream in(data.Data());
string line;
getline(in, line);
fImplFile << " string data = \"";
fImplFile << line << " \\n\";";
if ( in.eof() ) return;
do {
getline(in, line);
if ( ! in.eof() ) {
fImplFile << endl << " data = data + \"";
fImplFile << line << " \\n\";";
}
}
while ( ! in.eof() );
fImplFile << endl;
}
void AliMpDataProcessor::GenerateFill()
{
fHeaderFile << endl << " void Fill();" << endl;
fImplFile
<< "//_____________________________________________________________________________" << endl
<< "void AliMpDataMap::Fill()" << endl
<< "{" << endl
<< "/// Automatically generated function for calling all generated functions " << endl
<< endl;
for ( Int_t i=1; i<=fCounter; ++i )
fImplFile << " AddData" << i << "();" << endl;
fImplFile << "}" << endl;
}
AliMpDataMap* AliMpDataProcessor::CreateDataMap(const TString& dataDir)
{
TString curDir = gSystem->pwd();
AliMpDataMap* dataMap = new AliMpDataMap();
TString dataPath = AliMpFiles::GetTop() + "/" + dataDir;
ProcessDirectory(dataPath, dataMap);
gSystem->cd(curDir);
return dataMap;
}
Bool_t AliMpDataProcessor::GenerateData(AliMpDataMap* dataMap,
const TString& outputDataDir)
{
TString curDir = gSystem->pwd();
TString outputDataPath = AliMpFiles::GetTop() + "/" + outputDataDir;
if ( gSystem->OpenDirectory(outputDataPath.Data()) ) {
AliErrorStream()
<< "Directory " << outputDataPath.Data() << " already exists" << endl;
return kFALSE;
}
else {
AliDebugStream(2) << "Making directory " << outputDataPath.Data() << endl;
gSystem->mkdir(outputDataPath.Data());
}
const TMap& kMap = dataMap->GetMap();
TMapIter it(&kMap);
TObject* keyObj;
while ( ( keyObj = it.Next() ) ) {
TString tpath = ((TObjString*)keyObj)->String();
TObject* dataObj = kMap.GetValue(keyObj);
if ( ! dataObj ) {
AliErrorStream()
<< "Cannot find value when iterating over map." << endl;
return kFALSE;
}
TString tdata = ((TObjString*)dataObj)->String();
string path = tpath.Data();
string data = tdata.Data();
string::size_type slashPos = path.find_last_of("/");
if ( slashPos != string::npos ) {
string dataDir(path, 0, slashPos);
TString dataDirPath
= outputDataPath + "/" + dataDir.c_str();
if ( ! gSystem->OpenDirectory(dataDirPath.Data()) ) {
AliDebugStream(2) << "Making directory " << dataDirPath.Data() << endl;
gSystem->mkdir(dataDirPath.Data(), kTRUE);
}
}
TString dataPath
= outputDataPath + "/" + path.c_str();
ofstream out(dataPath.Data(), ios::out);
if ( ! out.good() ) {
AliErrorStream()
<< "Cannot open output file " << outputDataPath.Data() << endl;
return kFALSE;
}
out << data;
out.close();
}
delete dataMap;
return kTRUE;
}
Bool_t AliMpDataProcessor::GenerateCode(AliMpDataMap* dataMap)
{
const TMap& kMap = dataMap->GetMap();
TMapIter it(&kMap);
TObject* keyObj;
while ( ( keyObj = it.Next() ) ) {
TString tpath = ((TObjString*)keyObj)->String();
TObject* dataObj = kMap.GetValue(keyObj);
if ( ! dataObj ) {
AliErrorStream()
<< "Cannot find value when iterating over map." << endl;
return kFALSE;
}
TString tdata = ((TObjString*)dataObj)->String();
GenerateFunction(tpath, tdata);
}
GenerateFill();
return kTRUE;
}
AliMpDataProcessor.cxx:10 AliMpDataProcessor.cxx:11 AliMpDataProcessor.cxx:12 AliMpDataProcessor.cxx:13 AliMpDataProcessor.cxx:14 AliMpDataProcessor.cxx:15 AliMpDataProcessor.cxx:16 AliMpDataProcessor.cxx:17 AliMpDataProcessor.cxx:18 AliMpDataProcessor.cxx:19 AliMpDataProcessor.cxx:20 AliMpDataProcessor.cxx:21 AliMpDataProcessor.cxx:22 AliMpDataProcessor.cxx:23 AliMpDataProcessor.cxx:24 AliMpDataProcessor.cxx:25 AliMpDataProcessor.cxx:26 AliMpDataProcessor.cxx:27 AliMpDataProcessor.cxx:28 AliMpDataProcessor.cxx:29 AliMpDataProcessor.cxx:30 AliMpDataProcessor.cxx:31 AliMpDataProcessor.cxx:32 AliMpDataProcessor.cxx:33 AliMpDataProcessor.cxx:34 AliMpDataProcessor.cxx:35 AliMpDataProcessor.cxx:36 AliMpDataProcessor.cxx:37 AliMpDataProcessor.cxx:38 AliMpDataProcessor.cxx:39 AliMpDataProcessor.cxx:40 AliMpDataProcessor.cxx:41 AliMpDataProcessor.cxx:42 AliMpDataProcessor.cxx:43 AliMpDataProcessor.cxx:44 AliMpDataProcessor.cxx:45 AliMpDataProcessor.cxx:46 AliMpDataProcessor.cxx:47 AliMpDataProcessor.cxx:48 AliMpDataProcessor.cxx:49 AliMpDataProcessor.cxx:50 AliMpDataProcessor.cxx:51 AliMpDataProcessor.cxx:52 AliMpDataProcessor.cxx:53 AliMpDataProcessor.cxx:54 AliMpDataProcessor.cxx:55 AliMpDataProcessor.cxx:56 AliMpDataProcessor.cxx:57 AliMpDataProcessor.cxx:58 AliMpDataProcessor.cxx:59 AliMpDataProcessor.cxx:60 AliMpDataProcessor.cxx:61 AliMpDataProcessor.cxx:62 AliMpDataProcessor.cxx:63 AliMpDataProcessor.cxx:64 AliMpDataProcessor.cxx:65 AliMpDataProcessor.cxx:66 AliMpDataProcessor.cxx:67 AliMpDataProcessor.cxx:68 AliMpDataProcessor.cxx:69 AliMpDataProcessor.cxx:70 AliMpDataProcessor.cxx:71 AliMpDataProcessor.cxx:72 AliMpDataProcessor.cxx:73 AliMpDataProcessor.cxx:74 AliMpDataProcessor.cxx:75 AliMpDataProcessor.cxx:76 AliMpDataProcessor.cxx:77 AliMpDataProcessor.cxx:78 AliMpDataProcessor.cxx:79 AliMpDataProcessor.cxx:80 AliMpDataProcessor.cxx:81 AliMpDataProcessor.cxx:82 AliMpDataProcessor.cxx:83 AliMpDataProcessor.cxx:84 AliMpDataProcessor.cxx:85 AliMpDataProcessor.cxx:86 AliMpDataProcessor.cxx:87 AliMpDataProcessor.cxx:88 AliMpDataProcessor.cxx:89 AliMpDataProcessor.cxx:90 AliMpDataProcessor.cxx:91 AliMpDataProcessor.cxx:92 AliMpDataProcessor.cxx:93 AliMpDataProcessor.cxx:94 AliMpDataProcessor.cxx:95 AliMpDataProcessor.cxx:96 AliMpDataProcessor.cxx:97 AliMpDataProcessor.cxx:98 AliMpDataProcessor.cxx:99 AliMpDataProcessor.cxx:100 AliMpDataProcessor.cxx:101 AliMpDataProcessor.cxx:102 AliMpDataProcessor.cxx:103 AliMpDataProcessor.cxx:104 AliMpDataProcessor.cxx:105 AliMpDataProcessor.cxx:106 AliMpDataProcessor.cxx:107 AliMpDataProcessor.cxx:108 AliMpDataProcessor.cxx:109 AliMpDataProcessor.cxx:110 AliMpDataProcessor.cxx:111 AliMpDataProcessor.cxx:112 AliMpDataProcessor.cxx:113 AliMpDataProcessor.cxx:114 AliMpDataProcessor.cxx:115 AliMpDataProcessor.cxx:116 AliMpDataProcessor.cxx:117 AliMpDataProcessor.cxx:118 AliMpDataProcessor.cxx:119 AliMpDataProcessor.cxx:120 AliMpDataProcessor.cxx:121 AliMpDataProcessor.cxx:122 AliMpDataProcessor.cxx:123 AliMpDataProcessor.cxx:124 AliMpDataProcessor.cxx:125 AliMpDataProcessor.cxx:126 AliMpDataProcessor.cxx:127 AliMpDataProcessor.cxx:128 AliMpDataProcessor.cxx:129 AliMpDataProcessor.cxx:130 AliMpDataProcessor.cxx:131 AliMpDataProcessor.cxx:132 AliMpDataProcessor.cxx:133 AliMpDataProcessor.cxx:134 AliMpDataProcessor.cxx:135 AliMpDataProcessor.cxx:136 AliMpDataProcessor.cxx:137 AliMpDataProcessor.cxx:138 AliMpDataProcessor.cxx:139 AliMpDataProcessor.cxx:140 AliMpDataProcessor.cxx:141 AliMpDataProcessor.cxx:142 AliMpDataProcessor.cxx:143 AliMpDataProcessor.cxx:144 AliMpDataProcessor.cxx:145 AliMpDataProcessor.cxx:146 AliMpDataProcessor.cxx:147 AliMpDataProcessor.cxx:148 AliMpDataProcessor.cxx:149 AliMpDataProcessor.cxx:150 AliMpDataProcessor.cxx:151 AliMpDataProcessor.cxx:152 AliMpDataProcessor.cxx:153 AliMpDataProcessor.cxx:154 AliMpDataProcessor.cxx:155 AliMpDataProcessor.cxx:156 AliMpDataProcessor.cxx:157 AliMpDataProcessor.cxx:158 AliMpDataProcessor.cxx:159 AliMpDataProcessor.cxx:160 AliMpDataProcessor.cxx:161 AliMpDataProcessor.cxx:162 AliMpDataProcessor.cxx:163 AliMpDataProcessor.cxx:164 AliMpDataProcessor.cxx:165 AliMpDataProcessor.cxx:166 AliMpDataProcessor.cxx:167 AliMpDataProcessor.cxx:168 AliMpDataProcessor.cxx:169 AliMpDataProcessor.cxx:170 AliMpDataProcessor.cxx:171 AliMpDataProcessor.cxx:172 AliMpDataProcessor.cxx:173 AliMpDataProcessor.cxx:174 AliMpDataProcessor.cxx:175 AliMpDataProcessor.cxx:176 AliMpDataProcessor.cxx:177 AliMpDataProcessor.cxx:178 AliMpDataProcessor.cxx:179 AliMpDataProcessor.cxx:180 AliMpDataProcessor.cxx:181 AliMpDataProcessor.cxx:182 AliMpDataProcessor.cxx:183 AliMpDataProcessor.cxx:184 AliMpDataProcessor.cxx:185 AliMpDataProcessor.cxx:186 AliMpDataProcessor.cxx:187 AliMpDataProcessor.cxx:188 AliMpDataProcessor.cxx:189 AliMpDataProcessor.cxx:190 AliMpDataProcessor.cxx:191 AliMpDataProcessor.cxx:192 AliMpDataProcessor.cxx:193 AliMpDataProcessor.cxx:194 AliMpDataProcessor.cxx:195 AliMpDataProcessor.cxx:196 AliMpDataProcessor.cxx:197 AliMpDataProcessor.cxx:198 AliMpDataProcessor.cxx:199 AliMpDataProcessor.cxx:200 AliMpDataProcessor.cxx:201 AliMpDataProcessor.cxx:202 AliMpDataProcessor.cxx:203 AliMpDataProcessor.cxx:204 AliMpDataProcessor.cxx:205 AliMpDataProcessor.cxx:206 AliMpDataProcessor.cxx:207 AliMpDataProcessor.cxx:208 AliMpDataProcessor.cxx:209 AliMpDataProcessor.cxx:210 AliMpDataProcessor.cxx:211 AliMpDataProcessor.cxx:212 AliMpDataProcessor.cxx:213 AliMpDataProcessor.cxx:214 AliMpDataProcessor.cxx:215 AliMpDataProcessor.cxx:216 AliMpDataProcessor.cxx:217 AliMpDataProcessor.cxx:218 AliMpDataProcessor.cxx:219 AliMpDataProcessor.cxx:220 AliMpDataProcessor.cxx:221 AliMpDataProcessor.cxx:222 AliMpDataProcessor.cxx:223 AliMpDataProcessor.cxx:224 AliMpDataProcessor.cxx:225 AliMpDataProcessor.cxx:226 AliMpDataProcessor.cxx:227 AliMpDataProcessor.cxx:228 AliMpDataProcessor.cxx:229 AliMpDataProcessor.cxx:230 AliMpDataProcessor.cxx:231 AliMpDataProcessor.cxx:232 AliMpDataProcessor.cxx:233 AliMpDataProcessor.cxx:234 AliMpDataProcessor.cxx:235 AliMpDataProcessor.cxx:236 AliMpDataProcessor.cxx:237 AliMpDataProcessor.cxx:238 AliMpDataProcessor.cxx:239 AliMpDataProcessor.cxx:240 AliMpDataProcessor.cxx:241 AliMpDataProcessor.cxx:242 AliMpDataProcessor.cxx:243 AliMpDataProcessor.cxx:244 AliMpDataProcessor.cxx:245 AliMpDataProcessor.cxx:246 AliMpDataProcessor.cxx:247 AliMpDataProcessor.cxx:248 AliMpDataProcessor.cxx:249 AliMpDataProcessor.cxx:250 AliMpDataProcessor.cxx:251 AliMpDataProcessor.cxx:252 AliMpDataProcessor.cxx:253 AliMpDataProcessor.cxx:254 AliMpDataProcessor.cxx:255 AliMpDataProcessor.cxx:256 AliMpDataProcessor.cxx:257 AliMpDataProcessor.cxx:258 AliMpDataProcessor.cxx:259 AliMpDataProcessor.cxx:260 AliMpDataProcessor.cxx:261 AliMpDataProcessor.cxx:262 AliMpDataProcessor.cxx:263 AliMpDataProcessor.cxx:264 AliMpDataProcessor.cxx:265 AliMpDataProcessor.cxx:266 AliMpDataProcessor.cxx:267 AliMpDataProcessor.cxx:268 AliMpDataProcessor.cxx:269 AliMpDataProcessor.cxx:270 AliMpDataProcessor.cxx:271 AliMpDataProcessor.cxx:272 AliMpDataProcessor.cxx:273 AliMpDataProcessor.cxx:274 AliMpDataProcessor.cxx:275 AliMpDataProcessor.cxx:276 AliMpDataProcessor.cxx:277 AliMpDataProcessor.cxx:278 AliMpDataProcessor.cxx:279 AliMpDataProcessor.cxx:280 AliMpDataProcessor.cxx:281 AliMpDataProcessor.cxx:282 AliMpDataProcessor.cxx:283 AliMpDataProcessor.cxx:284 AliMpDataProcessor.cxx:285 AliMpDataProcessor.cxx:286 AliMpDataProcessor.cxx:287 AliMpDataProcessor.cxx:288 AliMpDataProcessor.cxx:289 AliMpDataProcessor.cxx:290 AliMpDataProcessor.cxx:291 AliMpDataProcessor.cxx:292 AliMpDataProcessor.cxx:293 AliMpDataProcessor.cxx:294 AliMpDataProcessor.cxx:295 AliMpDataProcessor.cxx:296 AliMpDataProcessor.cxx:297 AliMpDataProcessor.cxx:298 AliMpDataProcessor.cxx:299 AliMpDataProcessor.cxx:300 AliMpDataProcessor.cxx:301 AliMpDataProcessor.cxx:302 AliMpDataProcessor.cxx:303 AliMpDataProcessor.cxx:304 AliMpDataProcessor.cxx:305 AliMpDataProcessor.cxx:306 AliMpDataProcessor.cxx:307 AliMpDataProcessor.cxx:308 AliMpDataProcessor.cxx:309 AliMpDataProcessor.cxx:310 AliMpDataProcessor.cxx:311 AliMpDataProcessor.cxx:312 AliMpDataProcessor.cxx:313 AliMpDataProcessor.cxx:314 AliMpDataProcessor.cxx:315 AliMpDataProcessor.cxx:316 AliMpDataProcessor.cxx:317 AliMpDataProcessor.cxx:318 AliMpDataProcessor.cxx:319 AliMpDataProcessor.cxx:320 AliMpDataProcessor.cxx:321 AliMpDataProcessor.cxx:322 AliMpDataProcessor.cxx:323 AliMpDataProcessor.cxx:324 AliMpDataProcessor.cxx:325 AliMpDataProcessor.cxx:326 AliMpDataProcessor.cxx:327 AliMpDataProcessor.cxx:328 AliMpDataProcessor.cxx:329 AliMpDataProcessor.cxx:330 AliMpDataProcessor.cxx:331 AliMpDataProcessor.cxx:332 AliMpDataProcessor.cxx:333 AliMpDataProcessor.cxx:334 AliMpDataProcessor.cxx:335 AliMpDataProcessor.cxx:336 AliMpDataProcessor.cxx:337 AliMpDataProcessor.cxx:338 AliMpDataProcessor.cxx:339 AliMpDataProcessor.cxx:340 AliMpDataProcessor.cxx:341 AliMpDataProcessor.cxx:342 AliMpDataProcessor.cxx:343 AliMpDataProcessor.cxx:344 AliMpDataProcessor.cxx:345 AliMpDataProcessor.cxx:346 AliMpDataProcessor.cxx:347 AliMpDataProcessor.cxx:348 AliMpDataProcessor.cxx:349 AliMpDataProcessor.cxx:350 AliMpDataProcessor.cxx:351 AliMpDataProcessor.cxx:352 AliMpDataProcessor.cxx:353 AliMpDataProcessor.cxx:354 AliMpDataProcessor.cxx:355 AliMpDataProcessor.cxx:356 AliMpDataProcessor.cxx:357 AliMpDataProcessor.cxx:358 AliMpDataProcessor.cxx:359 AliMpDataProcessor.cxx:360 AliMpDataProcessor.cxx:361 AliMpDataProcessor.cxx:362 AliMpDataProcessor.cxx:363 AliMpDataProcessor.cxx:364 AliMpDataProcessor.cxx:365 AliMpDataProcessor.cxx:366 AliMpDataProcessor.cxx:367 AliMpDataProcessor.cxx:368 AliMpDataProcessor.cxx:369 AliMpDataProcessor.cxx:370 AliMpDataProcessor.cxx:371 AliMpDataProcessor.cxx:372 AliMpDataProcessor.cxx:373 AliMpDataProcessor.cxx:374 AliMpDataProcessor.cxx:375 AliMpDataProcessor.cxx:376 AliMpDataProcessor.cxx:377 AliMpDataProcessor.cxx:378 AliMpDataProcessor.cxx:379 AliMpDataProcessor.cxx:380 AliMpDataProcessor.cxx:381 AliMpDataProcessor.cxx:382 AliMpDataProcessor.cxx:383 AliMpDataProcessor.cxx:384 AliMpDataProcessor.cxx:385 AliMpDataProcessor.cxx:386 AliMpDataProcessor.cxx:387 AliMpDataProcessor.cxx:388 AliMpDataProcessor.cxx:389 AliMpDataProcessor.cxx:390 AliMpDataProcessor.cxx:391 AliMpDataProcessor.cxx:392 AliMpDataProcessor.cxx:393 AliMpDataProcessor.cxx:394 AliMpDataProcessor.cxx:395 AliMpDataProcessor.cxx:396 AliMpDataProcessor.cxx:397 AliMpDataProcessor.cxx:398 AliMpDataProcessor.cxx:399 AliMpDataProcessor.cxx:400 AliMpDataProcessor.cxx:401 AliMpDataProcessor.cxx:402