//////////////////////////////////// // KRATTA analysis assistant // for the Asy-Eos experiment // TKratAnalysisAssistant DEFINITION // Sep 2013 // revison 09/2013 // E.d.F ver 1.0 // sebastian.kupny@uj.edu.pl // Changes: //////////////////////////////////// #include "TKratAnalysisAssistant.h" using namespace std; //______________________________________________________________________ TKratAnalysisAssistant::TKratAnalysisAssistant () : fNoOfFilesInLastRunlist(0),fNameOfLastRunlist(""),fDebugLevel(1) { } //______________________________________________________________________ TKratAnalysisAssistant::TKratAnalysisAssistant( TString pathToLmdFile ) : fPathToLmdFile(pathToLmdFile), fNameOfLastRunlist(""), fNoOfFilesInLastRunlist(0), fDebugLevel(1) { Config(pathToLmdFile); } //______________________________________________________________________ void TKratAnalysisAssistant::Config( TString pathToLmdFile ) { string dir = gSystem->Getenv("VMCWORKDIR"); fFileWithListOfLmdFile = dir + "/calfiles/KRATTA/LmdFiles_v1.list"; fPathToLmdFile = pathToLmdFile; fNoOfFilesInLastRunlist = 0; LoadLmdFilesV1(); } //______________________________________________________________________ vector TKratAnalysisAssistant::SplitString( string lineToSplit) { string buf; // Have a buffer string stringstream ss( lineToSplit ); // Insert the string into a stream vector tokens; // Create vector to hold our words while (ss >> buf) tokens.push_back(buf); return tokens; } //______________________________________________________________________ Int_t TKratAnalysisAssistant::GetRunNumberFromFileName( TString A_string ) { /// This function extract the run number from the file name. /// The file name pattern is like the follow: /PATH/PREFIX_XXXX.lmd /// And we want extract the XXXX number int runNumber = 0; if ( A_string == NULL){ return runNumber; ///Throw exception or print warning } if ( A_string.Length() == 0){ return runNumber; ///Throw exception or print warning } string stlString( A_string.Data() ); string fileExtension = ".lmd"; int PositionOfTheFileExtensionInFileName = stlString.find( fileExtension ); if (PositionOfTheFileExtensionInFileName < 4 ){ return runNumber; } /// (pos -4, 4) because the run number should consist four digits. string strRunNumber = stlString.substr(PositionOfTheFileExtensionInFileName - 4, 4 ); if (strRunNumber != NULL ) { runNumber = atoi( strRunNumber.c_str() ); if( fDebugLevel > 2) cout << "[TKratAnalysisAssistant:] Extracted from file name " << A_string << " the run number: " << runNumber << endl; }else{ /// cout << " Warning: Couldn't extract run number from the file name" << endl; /// Throw exception or print warning } return runNumber; } //______________________________________________________________________ Int_t TKratAnalysisAssistant::LoadLmdFilesV1() { string line; ifstream fileWithListOfLmdFile ( fFileWithListOfLmdFile.Data() ); if (fileWithListOfLmdFile.is_open() ) { vector tokensInLine; while ( getline (fileWithListOfLmdFile,line) ) { if( fDebugLevel > 2) cout << line << endl; TKratLmdFileInfo newFile; tokensInLine = SplitString( line ); newFile.SetName( tokensInLine[9] ); newFile.SetRunNumber( GetRunNumberFromFileName( line )); fListOfFiles.push_back(newFile); } fileWithListOfLmdFile.close(); } } //______________________________________________________________________ void TKratAnalysisAssistant::PrintLoadedLmdFiles() { for(int i = 0; i < fListOfFiles.size() ;i++) { cout << i << " " << GetFullPathToFile(fListOfFiles[i].GetName()) << " " << fListOfFiles[i].GetRunNumber() << endl; } } //______________________________________________________________________ TString TKratAnalysisAssistant::GetFullPathToFile( TString lmdFileName) { TString fulLmdFileName = fPathToLmdFile + "/" + lmdFileName; return fulLmdFileName; } //______________________________________________________________________ void TKratAnalysisAssistant::PrintLoadedLmdFilesSorted() { std::vector sortedListOfFiles = fListOfFiles; std::sort (sortedListOfFiles.begin(), sortedListOfFiles.end(), TKratLmdFileInfo::Compare ); for(int i = 0; i < sortedListOfFiles.size() ;i++) { cout << i << " " << GetFullPathToFile(sortedListOfFiles[i].GetName()) << " " << sortedListOfFiles[i].GetRunNumber() << endl; } } //______________________________________________________________________ std::vector TKratAnalysisAssistant::GetLmdFilesForRuns( Int_t first, Int_t last ) { std::vector selectedRuns; std::vector sortedListOfFiles = fListOfFiles; std::sort (sortedListOfFiles.begin(), sortedListOfFiles.end(), TKratLmdFileInfo::Compare ); for(int i = 0; i < sortedListOfFiles.size() ;i++) { if ( first <= sortedListOfFiles[i].GetRunNumber() && sortedListOfFiles[i].GetRunNumber() <= last){ string lmdFileWithPath = GetFullPathToFile(sortedListOfFiles[i].GetName()).Data(); selectedRuns.push_back(lmdFileWithPath); if( fDebugLevel > 2) cout << i << " " << GetFullPathToFile(sortedListOfFiles[i].GetName()) << " " << sortedListOfFiles[i].GetRunNumber() << endl; } } return selectedRuns; } //______________________________________________________________________ TString TKratAnalysisAssistant::CreateRunlistForRuns( Int_t first, Int_t last, TString runlistName ) { /// Wybierz pliki z danymi runami - uzyj GetFilesForRuns std::vector files = GetLmdFilesForRuns( first, last ); if ( files.size() > 0 ){ if ( runlistName.Length() == 0) { runlistName = CreateDefaultRunlistFileName(first, last); } /// Utworz plik z runami o nazwie: runlist-user-timestamp.lml jesli nazwa nie jest podana jako argument ofstream rlfile ( runlistName.Data() ); if (rlfile.is_open()) { rlfile << files.size() << endl; for(int i = 0; i < files.size() ;i++) { rlfile << files[i] << endl; } rlfile.close(); fNoOfFilesInLastRunlist = files.size(); fNameOfLastRunlist = runlistName; } else{ if( fDebugLevel > 0) cout << "[TKratAnalysisAssistant:] Warning: Unable to open file" << runlistName << endl; } } else{ if( fDebugLevel > 0) cout << "[TKratAnalysisAssistant:] Warning: No runs in range range: (" << first <<" " << last << ")" << endl; } return runlistName; } //______________________________________________________________________ TString TKratAnalysisAssistant::CreateDefaultRunlistFileName ( Int_t firstRun, Int_t lastRun) { TString defaultRunlistFileName; std::string username = getenv("USER") ; defaultRunlistFileName = Form("runlist-%s_%4d-%4d.dat",username.c_str(), firstRun, lastRun); defaultRunlistFileName.ReplaceAll(" ", "0"); return defaultRunlistFileName; } //______________________________________________________________________ Int_t TKratAnalysisAssistant::RemoveLastRunlist () const { Int_t result = 0; result = remove( fNameOfLastRunlist.Data() ); if( fDebugLevel > 0){ if( result != 0 ) cout << "[TKratAnalysisAssistant:] Warning: Unable to remove file " << fNameOfLastRunlist << endl; else cout << "[TKratAnalysisAssistant:] File "<< fNameOfLastRunlist << " successfully deleted" << endl; } return result; } ClassImp( TKratAnalysisAssistant )