#include <Riostream.h>
#include <TSystem.h>
#include <TSystemFile.h>
#include <TFile.h>
#include <TList.h>
#include <TLeaf.h>
#include <TMath.h>
#include <TNtuple.h>
#include <TString.h>
#include "AliStarEventReader.h"
#include "AliStarEvent.h"
#include "AliStarTrack.h"
using std::cout;
using std::endl;
using std::ifstream;
ClassImp(AliStarEventReader)
AliStarEventReader::AliStarEventReader():
TObject(),
fFileList(NULL),
fEvent(NULL)
{
}
AliStarEventReader::AliStarEventReader( const char* inputFileDirectory ):
TObject(),
fFileList(NULL),
fEvent(new AliStarEvent(1024))
{
MakeFileList ( inputFileDirectory ) ;
}
AliStarEventReader::~AliStarEventReader()
{
delete fFileList;
delete fEvent;
}
Bool_t AliStarEventReader::GetNextEvent( )
{
static TFile* nextFile = NULL ;
static TNtuple* ntData = NULL ;
static Int_t doOnce = 0 ;
static Long64_t nextEntry = 0 ;
static Long64_t entries = 0 ;
static Long64_t fileCounter = 0 ;
if ( doOnce == 0 )
{
doOnce = 1 ;
nextFile = (TFile*) fFileList->First() ;
if ( nextFile == 0 ) return false ;
ntData = (TNtuple*) ( nextFile->Get("NTtracks") ) ;
entries = ntData->GetEntriesFast() ;
Int_t columns = ntData->GetNvar() ;
if ( columns != 15 )
{
cout << "Error in reading Ntuple file: no. columns != 15" << endl ;
return false ;
}
fileCounter++ ;
cout << "Start New File " << fileCounter << endl ;
}
while ( nextFile )
{
while ( nextEntry < entries )
{
Float_t* header = NULL;
Int_t numberOfParticles = 0 ;
Long64_t headerEntry = 0 ;
Long64_t skipEvent = 0 ;
fEvent->Reset();
for ( Long64_t j = nextEntry ; j < entries ; j++ )
{
Long64_t BytesRead = ntData->GetEntry(j) ;
if ( BytesRead < 60 )
{
cout << "Warning: error in file or EOF " << endl ;
headerEntry = -1 ;
break ;
}
header = ntData->GetArgs() ;
if ( (int) header[10] == -1 && (int) header[11] == -1 && (int) header[12] == -1 &&
(int) header[13] == -1 && (int) header[14] == -1 )
{
fEvent->SetParams(header);
numberOfParticles = (int) header[9] ;
headerEntry = j ;
break ;
}
cout << "Warning: no header entries found in this file" << endl ;
headerEntry = -1 ;
}
if ( headerEntry == -1 ) break ;
for ( Long64_t j = headerEntry + 1 ; j < headerEntry + 1 + numberOfParticles ; j++ )
{
Long64_t BytesRead = ntData->GetEntry(j) ;
if ( BytesRead < 60 )
{
cout << "Warning: error in file sequence or EOF" << endl ;
nextEntry = -1 ;
break ;
}
header = ntData->GetArgs() ;
if ( TMath::IsNaN(header[10]) == 1 )
{
cout << "IsNan ... dEdx will be zeroed out" << endl ;
header[10] = 0 ;
header[11] = 999 ;
header[12] = 999 ;
header[13] = 999 ;
header[14] = 999 ;
cout << header[0] << " " << header[1] << " " << header[2] << " " << header[3] << " "
<< header[4] << " " << header[5] << " " << header[6] << " " << header[7] << " "
<< header[8] << " " << header[9] << " " << header[10] << " " << header[11] << " "
<< header[12] << " " << header[13] << " " << header[14] << endl ;
}
if ( (int) header[10] == -1 && (int) header[11] == -1 && (int) header[12] == -1 &&
(int) header[13] == -1 && (int) header[14] == -1 )
{
cout << "Warning: Header in the wrong place, skipping event" << endl ;
skipEvent = 1 ;
nextEntry = j ;
break ;
}
fEvent->AddTrack( new AliStarTrack(header) );
nextEntry = j+1 ;
}
if ( nextEntry == -1 ) break ;
if ( skipEvent == 1 ) continue ;
return true ;
}
nextEntry = 0 ;
nextFile = (TFile*) fFileList->After(nextFile) ;
if ( nextFile == 0 ) break ;
if (ntData) delete ntData;
ntData = (TNtuple*) ( nextFile->Get("NTtracks") ) ;
entries = ntData->GetEntriesFast() ;
Int_t columns = ntData->GetNvar() ;
if ( columns != 15 )
{
cout << "Error in reading Ntuple file: no. columns != 15" << endl ;
break ;
}
fileCounter++ ;
cout << "Start New File " << fileCounter << endl ;
}
return false ;
}
Bool_t AliStarEventReader::MakeFileList ( const char* input )
{
TString inputstring(input);
inputstring = inputstring.Strip(TString::kBoth);
TSystemFile inputfile(inputstring.Data(),"");
if (inputfile.IsDirectory())
return MakeFileListFromDir(inputstring.Data());
else
return MakeFileListFromFile(inputstring.Data());
}
Bool_t AliStarEventReader::MakeFileListFromDir ( const char* inputFileDirectory )
{
Int_t Count = 0 ;
static Int_t doOnce = 0 ;
fFileList = new TList() ;
void* directory = gSystem->OpenDirectory(inputFileDirectory) ;
const char* entry = gSystem->GetDirEntry(directory) ;
if ( entry == 0 )
{
cout << endl << "Error: \"" << inputFileDirectory << "\" does not exist" << endl << endl ;
return false ;
}
else cout << endl ;
while(entry != 0)
{
int len = strlen(entry);
if( len >= 5 && strcmp( &entry[len - 5], ".root" ) == 0 )
{
TString fileName ;
fileName = inputFileDirectory ;
if( !fileName.EndsWith("/") ) fileName += "/" ;
fileName += entry;
fFileList->Add ( TFile::Open(fileName) ) ;
if ( doOnce == 0 )
{
cout << "Add: " << fileName << endl ;
doOnce = 1 ;
}
Count ++ ;
}
entry = gSystem->GetDirEntry(directory) ;
}
cout << "Add: " << Count-1 << " more file(s) from this directory for a total of " << Count << " files." << endl ;
cout << "Finished creating file list ... preparing to open first file." << endl << endl ;
return true ;
}
Bool_t AliStarEventReader::MakeFileListFromFile ( const char* inputFile )
{
if (!fFileList) fFileList=new TList();
ifstream filein;
filein.open(inputFile);
if (!filein.good())
{
printf("problem reading the file list \"%s\"\n",inputFile);
return kFALSE;
}
TString line;
while (filein.good())
{
printf("opening file: ");
line.ReadLine(filein);
if (line.Length() == 0) continue;
TFile* file = TFile::Open(line.Data());
if (!file)
{
printf("problem opening file \"%s\"\n",line.Data());
continue;
}
fFileList->Add(file);
printf("%s\n",line.Data());
}
if (fFileList->GetEntries()>0) return kTRUE;
return kFALSE;
}
AliStarEventReader.cxx:10 AliStarEventReader.cxx:11 AliStarEventReader.cxx:12 AliStarEventReader.cxx:13 AliStarEventReader.cxx:14 AliStarEventReader.cxx:15 AliStarEventReader.cxx:16 AliStarEventReader.cxx:17 AliStarEventReader.cxx:18 AliStarEventReader.cxx:19 AliStarEventReader.cxx:20 AliStarEventReader.cxx:21 AliStarEventReader.cxx:22 AliStarEventReader.cxx:23 AliStarEventReader.cxx:24 AliStarEventReader.cxx:25 AliStarEventReader.cxx:26 AliStarEventReader.cxx:27 AliStarEventReader.cxx:28 AliStarEventReader.cxx:29 AliStarEventReader.cxx:30 AliStarEventReader.cxx:31 AliStarEventReader.cxx:32 AliStarEventReader.cxx:33 AliStarEventReader.cxx:34 AliStarEventReader.cxx:35 AliStarEventReader.cxx:36 AliStarEventReader.cxx:37 AliStarEventReader.cxx:38 AliStarEventReader.cxx:39 AliStarEventReader.cxx:40 AliStarEventReader.cxx:41 AliStarEventReader.cxx:42 AliStarEventReader.cxx:43 AliStarEventReader.cxx:44 AliStarEventReader.cxx:45 AliStarEventReader.cxx:46 AliStarEventReader.cxx:47 AliStarEventReader.cxx:48 AliStarEventReader.cxx:49 AliStarEventReader.cxx:50 AliStarEventReader.cxx:51 AliStarEventReader.cxx:52 AliStarEventReader.cxx:53 AliStarEventReader.cxx:54 AliStarEventReader.cxx:55 AliStarEventReader.cxx:56 AliStarEventReader.cxx:57 AliStarEventReader.cxx:58 AliStarEventReader.cxx:59 AliStarEventReader.cxx:60 AliStarEventReader.cxx:61 AliStarEventReader.cxx:62 AliStarEventReader.cxx:63 AliStarEventReader.cxx:64 AliStarEventReader.cxx:65 AliStarEventReader.cxx:66 AliStarEventReader.cxx:67 AliStarEventReader.cxx:68 AliStarEventReader.cxx:69 AliStarEventReader.cxx:70 AliStarEventReader.cxx:71 AliStarEventReader.cxx:72 AliStarEventReader.cxx:73 AliStarEventReader.cxx:74 AliStarEventReader.cxx:75 AliStarEventReader.cxx:76 AliStarEventReader.cxx:77 AliStarEventReader.cxx:78 AliStarEventReader.cxx:79 AliStarEventReader.cxx:80 AliStarEventReader.cxx:81 AliStarEventReader.cxx:82 AliStarEventReader.cxx:83 AliStarEventReader.cxx:84 AliStarEventReader.cxx:85 AliStarEventReader.cxx:86 AliStarEventReader.cxx:87 AliStarEventReader.cxx:88 AliStarEventReader.cxx:89 AliStarEventReader.cxx:90 AliStarEventReader.cxx:91 AliStarEventReader.cxx:92 AliStarEventReader.cxx:93 AliStarEventReader.cxx:94 AliStarEventReader.cxx:95 AliStarEventReader.cxx:96 AliStarEventReader.cxx:97 AliStarEventReader.cxx:98 AliStarEventReader.cxx:99 AliStarEventReader.cxx:100 AliStarEventReader.cxx:101 AliStarEventReader.cxx:102 AliStarEventReader.cxx:103 AliStarEventReader.cxx:104 AliStarEventReader.cxx:105 AliStarEventReader.cxx:106 AliStarEventReader.cxx:107 AliStarEventReader.cxx:108 AliStarEventReader.cxx:109 AliStarEventReader.cxx:110 AliStarEventReader.cxx:111 AliStarEventReader.cxx:112 AliStarEventReader.cxx:113 AliStarEventReader.cxx:114 AliStarEventReader.cxx:115 AliStarEventReader.cxx:116 AliStarEventReader.cxx:117 AliStarEventReader.cxx:118 AliStarEventReader.cxx:119 AliStarEventReader.cxx:120 AliStarEventReader.cxx:121 AliStarEventReader.cxx:122 AliStarEventReader.cxx:123 AliStarEventReader.cxx:124 AliStarEventReader.cxx:125 AliStarEventReader.cxx:126 AliStarEventReader.cxx:127 AliStarEventReader.cxx:128 AliStarEventReader.cxx:129 AliStarEventReader.cxx:130 AliStarEventReader.cxx:131 AliStarEventReader.cxx:132 AliStarEventReader.cxx:133 AliStarEventReader.cxx:134 AliStarEventReader.cxx:135 AliStarEventReader.cxx:136 AliStarEventReader.cxx:137 AliStarEventReader.cxx:138 AliStarEventReader.cxx:139 AliStarEventReader.cxx:140 AliStarEventReader.cxx:141 AliStarEventReader.cxx:142 AliStarEventReader.cxx:143 AliStarEventReader.cxx:144 AliStarEventReader.cxx:145 AliStarEventReader.cxx:146 AliStarEventReader.cxx:147 AliStarEventReader.cxx:148 AliStarEventReader.cxx:149 AliStarEventReader.cxx:150 AliStarEventReader.cxx:151 AliStarEventReader.cxx:152 AliStarEventReader.cxx:153 AliStarEventReader.cxx:154 AliStarEventReader.cxx:155 AliStarEventReader.cxx:156 AliStarEventReader.cxx:157 AliStarEventReader.cxx:158 AliStarEventReader.cxx:159 AliStarEventReader.cxx:160 AliStarEventReader.cxx:161 AliStarEventReader.cxx:162 AliStarEventReader.cxx:163 AliStarEventReader.cxx:164 AliStarEventReader.cxx:165 AliStarEventReader.cxx:166 AliStarEventReader.cxx:167 AliStarEventReader.cxx:168 AliStarEventReader.cxx:169 AliStarEventReader.cxx:170 AliStarEventReader.cxx:171 AliStarEventReader.cxx:172 AliStarEventReader.cxx:173 AliStarEventReader.cxx:174 AliStarEventReader.cxx:175 AliStarEventReader.cxx:176 AliStarEventReader.cxx:177 AliStarEventReader.cxx:178 AliStarEventReader.cxx:179 AliStarEventReader.cxx:180 AliStarEventReader.cxx:181 AliStarEventReader.cxx:182 AliStarEventReader.cxx:183 AliStarEventReader.cxx:184 AliStarEventReader.cxx:185 AliStarEventReader.cxx:186 AliStarEventReader.cxx:187 AliStarEventReader.cxx:188 AliStarEventReader.cxx:189 AliStarEventReader.cxx:190 AliStarEventReader.cxx:191 AliStarEventReader.cxx:192 AliStarEventReader.cxx:193 AliStarEventReader.cxx:194 AliStarEventReader.cxx:195 AliStarEventReader.cxx:196 AliStarEventReader.cxx:197 AliStarEventReader.cxx:198 AliStarEventReader.cxx:199 AliStarEventReader.cxx:200 AliStarEventReader.cxx:201 AliStarEventReader.cxx:202 AliStarEventReader.cxx:203 AliStarEventReader.cxx:204 AliStarEventReader.cxx:205 AliStarEventReader.cxx:206 AliStarEventReader.cxx:207 AliStarEventReader.cxx:208 AliStarEventReader.cxx:209 AliStarEventReader.cxx:210 AliStarEventReader.cxx:211 AliStarEventReader.cxx:212 AliStarEventReader.cxx:213 AliStarEventReader.cxx:214 AliStarEventReader.cxx:215 AliStarEventReader.cxx:216 AliStarEventReader.cxx:217 AliStarEventReader.cxx:218 AliStarEventReader.cxx:219 AliStarEventReader.cxx:220 AliStarEventReader.cxx:221 AliStarEventReader.cxx:222 AliStarEventReader.cxx:223 AliStarEventReader.cxx:224 AliStarEventReader.cxx:225 AliStarEventReader.cxx:226 AliStarEventReader.cxx:227 AliStarEventReader.cxx:228 AliStarEventReader.cxx:229 AliStarEventReader.cxx:230 AliStarEventReader.cxx:231 AliStarEventReader.cxx:232 AliStarEventReader.cxx:233 AliStarEventReader.cxx:234 AliStarEventReader.cxx:235 AliStarEventReader.cxx:236 AliStarEventReader.cxx:237 AliStarEventReader.cxx:238 AliStarEventReader.cxx:239 AliStarEventReader.cxx:240 AliStarEventReader.cxx:241 AliStarEventReader.cxx:242 AliStarEventReader.cxx:243 AliStarEventReader.cxx:244 AliStarEventReader.cxx:245 AliStarEventReader.cxx:246 AliStarEventReader.cxx:247 AliStarEventReader.cxx:248 AliStarEventReader.cxx:249 AliStarEventReader.cxx:250 AliStarEventReader.cxx:251 AliStarEventReader.cxx:252 AliStarEventReader.cxx:253 AliStarEventReader.cxx:254 AliStarEventReader.cxx:255 AliStarEventReader.cxx:256 AliStarEventReader.cxx:257 AliStarEventReader.cxx:258 AliStarEventReader.cxx:259 AliStarEventReader.cxx:260 AliStarEventReader.cxx:261 AliStarEventReader.cxx:262 AliStarEventReader.cxx:263 AliStarEventReader.cxx:264 AliStarEventReader.cxx:265 AliStarEventReader.cxx:266 AliStarEventReader.cxx:267 AliStarEventReader.cxx:268 AliStarEventReader.cxx:269 AliStarEventReader.cxx:270 AliStarEventReader.cxx:271 AliStarEventReader.cxx:272 AliStarEventReader.cxx:273 AliStarEventReader.cxx:274 AliStarEventReader.cxx:275 AliStarEventReader.cxx:276 AliStarEventReader.cxx:277 AliStarEventReader.cxx:278 AliStarEventReader.cxx:279 AliStarEventReader.cxx:280 AliStarEventReader.cxx:281 AliStarEventReader.cxx:282