CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/CalibCalorimetry/EcalCorrelatedNoiseAnalysisAlgos/src/TEcnaParPaths.cc

Go to the documentation of this file.
00001 //----------Author's Name: B.Fabbro DSM/IRFU/SPP CEA-Saclay
00002 //----------Copyright: Those valid for CEA sofware
00003 //----------Modified: 24/03/2011
00004 
00005 #include "CalibCalorimetry/EcalCorrelatedNoiseAnalysisAlgos/interface/TEcnaParPaths.h"
00006 #include <cstdlib>
00007 
00008 //--------------------------------------
00009 //  TEcnaParPaths.cc
00010 //  Class creation: 19 May 2005
00011 //  Documentation: see TEcnaParPaths.h
00012 //--------------------------------------
00013 
00014 ClassImp(TEcnaParPaths)
00015 //______________________________________________________________________________
00016 //
00017 
00018   TEcnaParPaths::~TEcnaParPaths()
00019 {
00020 //destructor
00021 
00022  // cout << "[Info Management] CLASS: TEcnaParPaths.      DESTROY OBJECT: this = " << this << endl;
00023 }
00024 
00025 //===================================================================
00026 //
00027 //                   Constructors
00028 //
00029 //===================================================================
00030 TEcnaParPaths::TEcnaParPaths()
00031 {
00032 // Constructor without argument
00033  // cout << "[Info Management] CLASS: TEcnaParPaths.      CREATE OBJECT: this = " << this << endl;
00034   Init();
00035 }
00036 
00037 TEcnaParPaths::TEcnaParPaths(TEcnaObject* pObjectManager)
00038 {
00039 // Constructor without argument
00040  // cout << "[Info Management] CLASS: TEcnaParPaths.      CREATE OBJECT: this = " << this << endl;
00041   Init();
00042   Long_t i_this = (Long_t)this;
00043   pObjectManager->RegisterPointer("TEcnaParPaths", i_this);
00044 }
00045 
00046 
00047 void  TEcnaParPaths::Init()
00048 {
00049   fgMaxCar = (Int_t)512;              // max number of characters in TStrings
00050   fTTBELL = '\007';
00051 
00052   //................ Init CNA Command and error numbering
00053   fCnaCommand = 0;
00054   fCnaError   = 0;
00055 
00056 }// end of Init()
00057 
00058 Bool_t TEcnaParPaths::GetPaths()
00059 {
00060   //............................... Get user's parameters from user's directory
00061   Bool_t FileHere = kFALSE;
00062   Int_t  NbFileHere = 0;
00063   if( GetPathForResultsRootFiles()    == kTRUE ){NbFileHere++;} //  Init fCfgResultsRootFilePath
00064   if( GetPathForResultsAsciiFiles()   == kTRUE ){NbFileHere++;} //  Init fCfgResultsAsciiFilePath
00065   if( GetPathForHistoryRunListFiles() == kTRUE ){NbFileHere++;} //  Init fCfgHistoryRunListFilePath
00066 
00067   GetCMSSWParameters(); //  Init fCfgCMSSWBase, fCfgCMSSWSubsystem, fCfgSCRAMArch <== done in TEcnaGui
00068 
00069   if( NbFileHere == 3 ){FileHere = kTRUE;}
00070   return FileHere;
00071 }
00072 
00073 //=======================================================================================
00074 //
00075 //     M E T H O D S    T O    G E T    T H E    P A R A M E T E R S 
00076 //
00077 //     F R O M    T H E    U S E R ' S    D I R E C T O R Y 
00078 //
00079 //=======================================================================================
00080 Bool_t TEcnaParPaths::GetPathForResultsRootFiles()
00081 {
00082   return GetPathForResultsRootFiles("");
00083 }
00084 
00085 Bool_t TEcnaParPaths::GetPathForResultsRootFiles(const TString& argFileName)
00086 {
00087   // Init fCfgResultsRootFilePath and get it from the file named argFileName
00088   // argFileName = complete name of the file (/afs/cern.ch/...)
00089   // if string is empty, file name = "ECNA/path_results_root" (located in $HOME user's directory - default - )
00090 
00091   Bool_t FileHere = kFALSE;
00092 
00093   Int_t MaxCar = fgMaxCar;
00094   fCfgResultsRootFilePath.Resize(MaxCar);
00095   fCfgResultsRootFilePath = "?";
00096 
00097   //..... put the name of the ascii file (containing the paths for CNA treatements)
00098   //      in the string cFileNameForCnaPaths and in class attribute fFileForResultsRootFilePath
00099 
00100   if ( argFileName == "" )
00101     {
00102       string cFileNameForCnaPaths = "ECNA/path_results_root";     // config file name
00103       TString s_file_name = cFileNameForCnaPaths.c_str();
00104       const Text_t *t_file_name = (const Text_t *)s_file_name.Data();
00105       
00106       TString s_path_name = gSystem->Getenv("HOME");       // get user's home directory path
00107       
00108       fFileForResultsRootFilePath = s_path_name;
00109       fFileForResultsRootFilePath.Append('/');
00110       fFileForResultsRootFilePath.Append(t_file_name);
00111     }
00112   else
00113     {
00114       fFileForResultsRootFilePath = argFileName.Data();
00115     }
00116 
00117   //........ Reading of the paths in the file named fFileForResultsRootFilePath.Data()
00118   //
00119   fFcin_rr.open(fFileForResultsRootFilePath.Data());
00120   if(fFcin_rr.fail() == kFALSE)
00121     {
00122       fFcin_rr.clear();
00123       string xResultsFileP;
00124       fFcin_rr >> xResultsFileP;
00125       fCfgResultsRootFilePath = xResultsFileP.c_str();
00126       fFcin_rr.close();
00127       FileHere = kTRUE;
00128     }
00129   else
00130     {
00131       fFcin_rr.clear();
00132       fCnaError++;
00133       cout << fTTBELL << endl
00134            << " ***************************************************************************************** " << endl;
00135       cout << "   !CNA(TEcnaParPaths) (" << fCnaError << ") *** ERROR *** " << endl << endl
00136            << "     " << fFileForResultsRootFilePath.Data() << ": file not found. " << endl << endl
00137            << "     Please create a subdirectory named ECNA in your HOME directory (if not already done)" << endl
00138            << "     and create a file named path_results_root in the subdirectory ECNA." << endl << endl
00139            << "     The file " << fFileForResultsRootFilePath.Data() << " is a configuration file" << endl
00140            << "     for ECNA and must contain one line with the following syntax:" << endl << endl
00141            << "        PATH_FOR_THE_RESULTS_ROOT_FILE (without slash at the end of line)" << endl
00142            << "                                        ================================"
00143            << endl << endl
00144            << "     Example: $HOME/scratch0/ecna/results_root" << endl << endl
00145            << " ***************************************************************************************** "
00146            << fTTBELL << endl;
00147 
00148       fFcin_rr.close();
00149       FileHere = kFALSE;
00150     }
00151 
00152   return FileHere;
00153 
00154 } // ----------- (end of GetPathForResultsRootFiles) --------------------
00155 
00156 //================================================================================================
00157 
00158 Bool_t TEcnaParPaths::GetPathForResultsAsciiFiles()
00159 {
00160   return GetPathForResultsAsciiFiles("");
00161 }
00162 
00163 Bool_t TEcnaParPaths::GetPathForResultsAsciiFiles(const TString& argFileName)
00164 {
00165   // Init fCfgResultsAsciiFilePath and get it from the file named argFileName
00166   // argFileName = complete name of the file (/afs/cern.ch/...)
00167   // if string is empty, file name = "ECNA/path_results_ascii" (located in $HOME user's directory - default - )
00168 
00169   Bool_t FileHere = kFALSE;
00170 
00171   Int_t MaxCar = fgMaxCar;
00172   fCfgResultsAsciiFilePath.Resize(MaxCar);
00173   fCfgResultsAsciiFilePath = "?";
00174 
00175   //..... put the name of the ascii file (containing the paths for CNA treatements)
00176   //      in the string cFileNameForCnaPaths and in class attribute fFileForResultsAsciiFilePath
00177 
00178   if ( argFileName == "" )
00179     {
00180       string cFileNameForCnaPaths = "ECNA/path_results_ascii";     // config file name
00181       TString s_file_name = cFileNameForCnaPaths.c_str();
00182       const Text_t *t_file_name = (const Text_t *)s_file_name.Data();
00183       
00184       TString s_path_name = gSystem->Getenv("HOME");       // get user's home directory path
00185       
00186       fFileForResultsAsciiFilePath = s_path_name;
00187       fFileForResultsAsciiFilePath.Append('/');
00188       fFileForResultsAsciiFilePath.Append(t_file_name);
00189     }
00190   else
00191     {
00192       fFileForResultsAsciiFilePath = argFileName.Data();
00193     }
00194 
00195   //........ Reading of the paths in the file named fFileForResultsAsciiFilePath.Data()
00196   //
00197   fFcin_ra.open(fFileForResultsAsciiFilePath.Data());
00198   if(fFcin_ra.fail() == kFALSE)
00199     {
00200       fFcin_ra.clear();
00201       string xResultsFileP;
00202       fFcin_ra >> xResultsFileP;
00203       fCfgResultsAsciiFilePath = xResultsFileP.c_str();
00204       fFcin_ra.close();
00205       FileHere = kTRUE;
00206     }
00207   else
00208     {
00209       fFcin_ra.clear();
00210       fCnaError++;
00211       cout << fTTBELL << endl
00212            << " ***************************************************************************************** " << endl;
00213       cout << "   !CNA(TEcnaParPaths) (" << fCnaError << ") *** ERROR *** " << endl << endl
00214            << "     " << fFileForResultsAsciiFilePath.Data() << ": file not found. " << endl << endl
00215            << "     Please create a subdirectory named ECNA in your HOME directory (if not already done)" << endl
00216            << "     and create a file named path_results_ascii in the subdirectory ECNA." << endl << endl
00217            << "     The file " << fFileForResultsAsciiFilePath.Data() << " is a configuration file" << endl
00218            << "     for ECNA and must contain one line with the following syntax:" << endl << endl
00219            << "        PATH_FOR_THE_RESULTS_ASCII_FILE (without slash at the end of line)" << endl
00220            << "                                         ================================"
00221            << endl << endl
00222            << "     Example: $HOME/scratch0/ecna/results_ascii" << endl << endl
00223            << " ***************************************************************************************** "
00224            << fTTBELL << endl;
00225 
00226       fFcin_ra.close();
00227       FileHere = kFALSE;
00228     }
00229 
00230   return FileHere;
00231 
00232 } // ----------- (end of GetPathForResultsAsciiFiles) --------------------
00233 
00234 //================================================================================================
00235 
00236 Bool_t TEcnaParPaths::GetPathForHistoryRunListFiles()
00237 {
00238   return GetPathForHistoryRunListFiles("");
00239 }
00240 
00241 Bool_t TEcnaParPaths::GetPathForHistoryRunListFiles(const TString& argFileName)
00242 {
00243   // Init fCfgHistoryRunListFilePath and get it from the file named argFileName
00244   // argFileName = complete name of the file (/afs/cern.ch/...)
00245   // if string is empty, file name = "ECNA/path_runlist_history_plots" (located in $HOME user's directory - default - )
00246 
00247   Bool_t FileHere = kFALSE;
00248 
00249   Int_t MaxCar = fgMaxCar;
00250   fCfgHistoryRunListFilePath.Resize(MaxCar);
00251   fCfgHistoryRunListFilePath          = "?";
00252 
00253   //..... put the name of the ascii file (containing the paths for CNA treatements)
00254   //      in the string cFileNameForCnaPaths and in class attribute fFileForHistoryRunListFilePath
00255 
00256   if ( argFileName == "" )
00257     {
00258       string cFileNameForCnaPaths = "ECNA/path_runlist_history_plots";     // config file name
00259       TString s_file_name = cFileNameForCnaPaths.c_str();
00260       const Text_t *t_file_name = (const Text_t *)s_file_name.Data();
00261       
00262       TString s_path_name = gSystem->Getenv("HOME");       // get user's home directory path
00263       
00264       fFileForHistoryRunListFilePath = s_path_name;
00265       fFileForHistoryRunListFilePath.Append('/');
00266       fFileForHistoryRunListFilePath.Append(t_file_name);
00267     }
00268   else
00269     {
00270       fFileForHistoryRunListFilePath = argFileName.Data();
00271     }
00272 
00273   //........ Reading of the paths in the file named fFileForHistoryRunListFilePath.Data()
00274   //
00275   fFcin_lor.open(fFileForHistoryRunListFilePath.Data());
00276   if(fFcin_lor.fail() == kFALSE)
00277     {
00278       fFcin_lor.clear();
00279       string xHistoryRunListP;
00280       fFcin_lor >> xHistoryRunListP;
00281       fCfgHistoryRunListFilePath = xHistoryRunListP.c_str();
00282       fFcin_lor.close();
00283       FileHere = kTRUE;
00284     }
00285   else
00286     {
00287       fFcin_lor.clear();
00288       fCnaError++;
00289       cout << fTTBELL << endl
00290            << " ******************************************************************************************************** " << endl;
00291       cout << "   !CNA(TEcnaParPaths) (" << fCnaError << ") *** ERROR *** " << endl << endl
00292            << "     " << fFileForHistoryRunListFilePath.Data() << ": file not found. " << endl << endl
00293            << "     Please create a subdirectory named ECNA in your HOME directory (if not already done)" << endl
00294            << "     and create a file named path_runlist_history_plots in the subdirectory ECNA." << endl << endl
00295            << "     The file " << fFileForHistoryRunListFilePath.Data() << " is a configuration file" << endl
00296            << "     for ECNA and must contain one line with the following syntax:" << endl << endl
00297            << "        PATH_FOR_THE_LIST_OF_RUNS_FOR_HISTORY_PLOTS_FILE (without slash at the end of line)" << endl
00298            << "                                                          ================================"
00299            << endl << endl
00300            << "     Example: $HOME/scratch0/ecna/runlist_history_plots" << endl << endl
00301            << " ******************************************************************************************************** "
00302            << fTTBELL << endl;
00303 
00304       fFcin_lor.close();
00305       FileHere = kFALSE;
00306     }
00307 
00308   return FileHere;
00309 
00310 } // ----------- (end of GetPathForHistoryRunListFiles) --------------------
00311 
00312 //================================================================================================
00313 void TEcnaParPaths::GetCMSSWParameters()
00314 {
00315   // Init fCfgCMSSWBase, fCfgSCRAMArch and fCfgCMSSWSubsystem
00316 
00317   Int_t MaxCar = fgMaxCar;
00318   fCfgCMSSWBase.Resize(MaxCar);
00319   fCfgCMSSWBase = "?";
00320 
00321   fCfgSCRAMArch.Resize(MaxCar);
00322   fCfgSCRAMArch = "?";
00323 
00324   fCfgCMSSWSubsystem.Resize(MaxCar);
00325   fCfgCMSSWSubsystem = "?";
00326 
00327   //------------ CMSSW_BASE
00328 
00329   char* ch_cmssw_base = getenv("CMSSW_BASE");
00330   if( ch_cmssw_base == 0 )
00331     {
00332       cout << "*TEcnaParPaths::GetCMSSWParameters()> CMSSW_BASE not defined."
00333            << " Please, set up the environment (command: eval `scramv1 runtime -csh`)"
00334            << fTTBELL << endl; 
00335     }
00336   else
00337     {
00338       fCfgCMSSWBase = (TString)ch_cmssw_base;
00339     }
00340   
00341   //------------ SCRAM_ARCH
00342 
00343   char* ch_scram_arch = getenv("SCRAM_ARCH");
00344   if( ch_scram_arch == 0 )
00345     {
00346       cout << "*TEcnaParPaths::GetCMSSWParameters()> SCRAM_ARCH not defined."
00347            << " Please, set up the environment (command: eval `scramv1 runtime -csh`)"
00348            << fTTBELL << endl; 
00349     }
00350   else
00351     {
00352       fCfgSCRAMArch = (TString)ch_scram_arch;
00353     }
00354       
00355   //------------ SUBSYSTEM: CalibCalorimetry
00356 
00357   fCfgCMSSWSubsystem = "CalibCalorimetry";
00358 
00359 } // ----------- (end of GetCMSSWParameters) --------------------
00360 
00361 //=======================================================================================
00362 //
00363 //        M E T H O D S    T O    R E T U R N    T H E    P A R A M E T E R S 
00364 //
00365 //=======================================================================================
00366 TString TEcnaParPaths::ResultsRootFilePath()   {return fCfgResultsRootFilePath;}
00367 TString TEcnaParPaths::ResultsAsciiFilePath()  {return fCfgResultsAsciiFilePath;}
00368 TString TEcnaParPaths::HistoryRunListFilePath(){return fCfgHistoryRunListFilePath;}
00369 TString TEcnaParPaths::CMSSWBase()             {return fCfgCMSSWBase;}
00370 TString TEcnaParPaths::CMSSWSubsystem()        {return fCfgCMSSWSubsystem;}
00371 TString TEcnaParPaths::SCRAMArch()             {return fCfgSCRAMArch;}
00372 
00373 //.....................................................................................
00374 TString TEcnaParPaths::PathModulesData()
00375 {
00376   // ----- return the path of data subdirectory in package "Modules"
00377   TString ModulesdataPath = "";
00378 
00379   const Text_t *t_cmssw_base = (const Text_t *)CMSSWBase().Data();
00380   ModulesdataPath.Append(t_cmssw_base);
00381   ModulesdataPath.Append('/');               //  /afs/cern.ch/user/U/USERNAME/cmssw/CMSSW_X_Y_Z/
00382 
00383   TString s_src = "src";
00384   const Text_t *t_src = (const Text_t *)s_src.Data();
00385   ModulesdataPath.Append(t_src);
00386   ModulesdataPath.Append('/');               //  /afs/cern.ch/user/U/USERNAME/cmssw/CMSSW_X_Y_Z/src
00387       
00388   const Text_t *t_cmssw_subsystem = (const Text_t *)CMSSWSubsystem().Data();
00389   ModulesdataPath.Append(t_cmssw_subsystem);
00390   ModulesdataPath.Append('/');               //  /afs/cern.ch/user/U/USERNAME/cmssw/CMSSW_X_Y_Z/src/CalibCalorimetry/
00391 
00392   TString s_package_data_path = "EcalCorrelatedNoiseAnalysisModules/data";
00393   const Text_t *t_package_data_path = (const Text_t *)s_package_data_path.Data();
00394   ModulesdataPath.Append(t_package_data_path);
00395   ModulesdataPath.Append('/');
00396   // /afs/cern.ch/user/U/USERNAME/cmssw/CMSSW_X_Y_Z/src/CalibCalorimetry/EcalCorrelatedNoiseAnalysisModules/data/
00397 
00398   return ModulesdataPath;
00399 }
00400 //.....................................................................................
00401 TString TEcnaParPaths::PathTestScramArch()
00402 {
00403   // ----- return the path of test/slc... subdirectory in CMSSW_BASE
00404   TString TestslcPath = "";
00405       
00406   const Text_t *t_cmssw_base = (const Text_t *)CMSSWBase().Data();
00407   TestslcPath.Append(t_cmssw_base);
00408   TestslcPath.Append('/');               //  /afs/cern.ch/user/U/USERNAME/cmssw/CMSSW_X_Y_Z/
00409 
00410   TString s_test = "test";
00411   const Text_t *t_test = (const Text_t *)s_test.Data();
00412   TestslcPath.Append(t_test);
00413   TestslcPath.Append('/');               //  /afs/cern.ch/user/U/USERNAME/cmssw/CMSSW_X_Y_Z/test
00414       
00415   const Text_t *t_cmssw_arch = (const Text_t *)SCRAMArch().Data();
00416   TestslcPath.Append(t_cmssw_arch);
00417   TestslcPath.Append('/');               //  /afs/cern.ch/user/U/USERNAME/cmssw/CMSSW_X_Y_Z/test/slc4_ia32_gcc345/
00418 
00419   return TestslcPath;
00420 }
00421 
00422 //=======================================================================================
00423 //
00424 //       A N C I L L A R Y   M E T H O D S   C O N C E R N I N G   P A T H S 
00425 //
00426 //=======================================================================================
00427 void  TEcnaParPaths::SetResultsRootFilePath(const TString& ImposedPath) {fCfgResultsRootFilePath  = ImposedPath;}
00428 void  TEcnaParPaths::SetResultsAsciiFilePath(const TString& ImposedPath){fCfgResultsAsciiFilePath = ImposedPath;}
00429 void  TEcnaParPaths::SetHistoryRunListFilePath(const TString& ImposedPath){fCfgHistoryRunListFilePath = ImposedPath;}
00430 
00431 void  TEcnaParPaths::TruncateResultsRootFilePath(const Int_t& n1, const Int_t& nbcar) 
00432 {fCfgResultsRootFilePath.Remove(n1,nbcar);}
00433 
00434 void  TEcnaParPaths::TruncateResultsAsciiFilePath(const Int_t& n1, const Int_t& nbcar) 
00435 {fCfgResultsAsciiFilePath.Remove(n1,nbcar);}
00436 
00437 TString TEcnaParPaths::BeginningOfResultsRootFilePath()
00438 {TString sBegin = "?";
00439  if( fCfgResultsRootFilePath.BeginsWith("$HOME") ){sBegin = "$HOME";}
00440  return sBegin;}
00441 
00442 TString TEcnaParPaths::BeginningOfResultsAsciiFilePath()
00443 {TString sBegin = "?";
00444  if( fCfgResultsAsciiFilePath.BeginsWith("$HOME") ){sBegin = "$HOME";}
00445  return sBegin;}
00446 
00447 void TEcnaParPaths::AppendResultsRootFilePath(const Text_t * t_file_nohome)
00448 {fCfgResultsRootFilePath.Append(t_file_nohome);}
00449 
00450 void TEcnaParPaths::AppendResultsAsciiFilePath(const Text_t * t_file_nohome)
00451 {fCfgResultsAsciiFilePath.Append(t_file_nohome);}