int startService(){ if (login() == -1) return -1; printf("IN COMMNAND SESSION\n"); char buf[BUFFER_SIZE]; while (1) { memset(buf, 0, sizeof(buf)); if (recv(recvfd, buf, BUFFER_SIZE, 0) <= 0){ printf("Receive erro:%s(errno:%d)\n", strerror(errno), errno); return -1; } printf("COMMAND[%s]\n",buf); if (strcmp(buf, "get") == 0){ recv(recvfd, buf, BUFFER_SIZE, 0); execGet(buf); continue; } if (strcmp(buf, "put") == 0) { recv(recvfd, buf, BUFFER_SIZE, 0); execPut(buf); continue; } if (strcmp(buf, "quit") == 0) { execQuit(); printf("COMMAND SESSION OVER!\n"); return 0; } if (strcmp(buf, "dir") == 0) { execDir(); continue; } if (strcmp(buf, "cd") == 0) { recv(recvfd, buf, BUFFER_SIZE, 0); execCd(buf); continue; } if (strcmp(buf, "pwd") == 0) { execPwd(); continue; } printf("Command Error!\n"); } return 0; }
TChain* CreateESDChain(const char* aDataDir = "ESDfiles.txt", Int_t aRuns = 20, Int_t offset = 0, Bool_t addFileName = kFALSE, Bool_t addFriend = kFALSE, const char* check = 0) { // creates chain of files in a given directory or file containing a list. // In case of directory the structure is expected as: // <aDataDir>/<dir0>/AliESDs.root // <aDataDir>/<dir1>/AliESDs.root // ... // // if addFileName is true the list only needs to contain the directories that contain the AliESDs.root files // if addFriend is true a file AliESDfriends.root is expected in the same directory and added to the chain as friend // if check is != 0 the files that work are written back into the textfile with the name check if (!aDataDir) return 0; Long_t id, size, flags, modtime; if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime)) { printf("%s not found.\n", aDataDir); return 0; } TChain* chain = new TChain("esdTree"); TChain* chainFriend = 0; if (addFriend) chainFriend = new TChain("esdFriendTree"); if (flags & 2) { TString execDir(gSystem->pwd()); TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir); TList* dirList = baseDir->GetListOfFiles(); Int_t nDirs = dirList->GetEntries(); gSystem->cd(execDir); Int_t count = 0; for (Int_t iDir=0; iDir<nDirs; ++iDir) { TSystemFile* presentDir = (TSystemFile*) dirList->At(iDir); if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0) continue; if (offset > 0) { --offset; continue; } if (count++ == aRuns) break; TString presentDirName(aDataDir); presentDirName += "/"; presentDirName += presentDir->GetName(); chain->Add(presentDirName + "/AliESDs.root/esdTree"); } } else { // Open the input stream ifstream in; in.open(aDataDir); ofstream outfile; if (check) outfile.open(check); Int_t count = 0; // Read the input list of files and add them to the chain TString line; while (in.good()) { in >> line; if (line.Length() == 0) continue; if (offset > 0) { offset--; continue; } if (count++ == aRuns) break; TString esdFile(line); if (addFileName) esdFile += "/AliESDs.root"; TString esdFileFriend(esdFile); esdFileFriend.ReplaceAll("AliESDs.root", "AliESDfriends.root"); if (check) { TFile* file = TFile::Open(esdFile); if (!file) continue; file->Close(); if (chainFriend) { TFile* file = TFile::Open(esdFileFriend); if (!file) continue; file->Close(); } outfile << line.Data() << endl; printf("%s\n", line.Data()); } // add esd file chain->Add(esdFile); // add file if (chainFriend) chainFriend->Add(esdFileFriend); } in.close(); if (check) outfile.close(); } if (chainFriend) chain->AddFriend(chainFriend); return chain; }
TChain* CreateAODChain(const char* aDataDir, Int_t aRuns, Int_t offset) { // creates chain of files in a given directory or file containing a list. // In case of directory the structure is expected as: // <aDataDir>/<dir0>/AliAOD.root // <aDataDir>/<dir1>/AliAOD.root // ... if (!aDataDir) return 0; Long_t id, size, flags, modtime; if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime)) { printf("%s not found.\n", aDataDir); return 0; } TChain* chain = new TChain("aodTree"); TChain* chaingAlice = 0; if (flags & 2) { TString execDir(gSystem->pwd()); TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir); TList* dirList = baseDir->GetListOfFiles(); Int_t nDirs = dirList->GetEntries(); gSystem->cd(execDir); Int_t count = 0; for (Int_t iDir=0; iDir<nDirs; ++iDir) { TSystemFile* presentDir = (TSystemFile*) dirList->At(iDir); if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0) continue; if (offset > 0) { --offset; continue; } if (count++ == aRuns) break; TString presentDirName(aDataDir); presentDirName += "/"; presentDirName += presentDir->GetName(); chain->Add(presentDirName + "/AliAOD.root/aodTree"); // cerr<<presentDirName<<endl; } } else { // Open the input stream ifstream in; in.open(aDataDir); Int_t count = 0; // Read the input list of files and add them to the chain TString aodfile; while(in.good()) { in >> aodfile; if (!aodfile.Contains("root")) continue; // protection if (offset > 0) { --offset; continue; } if (count++ == aRuns) break; // add aod file chain->Add(aodfile); } in.close(); } return chain; } // end of TChain* CreateAODChain(const char* aDataDir, Int_t aRuns, Int_t offset)