00001 #!/usr/bin/env python 00002 00003 import sys 00004 import getopt 00005 import os 00006 import string 00007 00008 # ---------------------------------------------------------------------- 00009 # Default versions. They can be changed here, or (preferred) directly from 00010 # the command line, e.g.: 00011 # source configure --hepmc-version=2.06.03 00012 # ---------------------------------------------------------------------- 00013 versions = { 00014 'cascade-version': '2.0.1', 00015 'clhep-version': '1.9.4.7', 00016 'hepmc-version': '2.03.11', 00017 # 'hepmc-version': '2.06.03', 00018 'heppdt-version': '3.04.01', 00019 'fastjet-version': '2.4.2p5', 00020 'gsl-version': '1.10', 00021 'pythia8-version': '142', 00022 'pythia6-version': '423.2', 00023 'alpgen-version': '2.1.3d.2', 00024 'herwigpp-version': '2.5.0', 00025 'herwig-version': '6.520.2', 00026 'jimmy-version': '4.31.3', 00027 'thepeg-version': '1.7.0', 00028 'lhapdf-version': '5.8.2', 00029 'tauola-version': '28.121.2', 00030 'photos-version': '215.5', 00031 'prefix': '' 00032 } 00033 00034 # auxiliary stuff 00035 colours = { 'default': '', 00036 'blue': '\x1b[01;34m', 00037 'cyan': '\x1b[01;36m', 00038 'green': '\x1b[01;32m', 00039 'red': '\x1b[01;05;37;41m', 00040 'end': '\x1b[00m' } 00041 00042 # 00043 envVarsFile = open( 'setupEnvVariables.sh', 'w' ) 00044 gccSetupFile = open( 'setupGccVersion.sh', 'w' ) 00045 00046 # ---------------------------------------------------------------------- 00047 def main(): 00048 processOptions() 00049 00050 envVarsFile.write( '#!/bin/bash\n' ) 00051 gccSetupFile.write( '#!/bin/bash\n' ) 00052 00053 # location's specific setup 00054 location, curr_dir = detectLocation() 00055 envVarsFile.write( 'export MYCLASS_PATH=' + curr_dir + '\n' ) 00056 location = location.rstrip( '\n' ) 00057 00058 if location == 'desy.de': 00059 prefix, sysname = initializeDesySetup() 00060 elif location == 'naf.desy.de': 00061 prefix, sysname = initializeNafSetup() 00062 else: 00063 prefix, sysname = initializeCernSetup() 00064 00065 print "Prefix:", prefix, ", sysname:", sysname 00066 initializeStdLibs( prefix, sysname ) 00067 00068 print 'Done!' 00069 00070 # ---------------------------------------------------------------------- 00071 # Process command line options 00072 # ---------------------------------------------------------------------- 00073 def processOptions(): 00074 options = '' 00075 longOptions = [] 00076 for op in versions.keys(): 00077 longOptions.append( op + '=' ) # options which require arguments need '=' 00078 00079 # add '--help' option 00080 longOptions.append( 'help' ) 00081 00082 # parse command line options 00083 try: 00084 optlist, args = getopt.getopt( sys.argv[1:], options, longOptions ) 00085 except getopt.GetoptError, err: 00086 print str( err ) 00087 print "For help use --help" 00088 sys.exit( 2 ) 00089 00090 for op, ar in optlist: 00091 if op.startswith( '--' ): # remove '--' from the beginning 00092 op = op.strip( '-' ) 00093 if op in versions.keys(): 00094 versions[ op ] = ar 00095 print colours[ 'blue' ]+"Overwriting default option '", op, "' with value:", ar, colours['end'] 00096 if op == 'hepmc-version': 00097 print colours['blue']+"Be aware that other libraries could be compiled with different version of HepMC!", colours['end'] 00098 if op == 'help': 00099 showHelp() 00100 sys.exit( 0 ) 00101 00102 # ---------------------------------------------------------------------- 00103 # DESY specific setup 00104 # ---------------------------------------------------------------------- 00105 def initializeDesySetup(): 00106 print colours[ 'blue' ] + "[ Initialize DESY setup ]" + colours[ 'end' ] 00107 00108 #sysNameInfo = os.popen( 'source check_platform_desy' ).readlines() 00109 #sysname = sysNameInfo[0] 00110 #print 'Systsssssem:', sysname, 00111 #envVarsFile.write( 'export SYSNAME=' + sysname + '\n' ) 00112 00113 # determine system's details 00114 sysArch = 0 00115 sysDsc = '' 00116 sysName = '' 00117 sysCmd = os.popen( 'fs sysname' ).readline() 00118 # == SL4 00119 if contains( sysCmd, 'i586_rhel40' ) or contains( sysCmd, 'i386_linux26' ): 00120 sysArch = 32 00121 sysDsc = 'SL4' 00122 sysName = 'i586_rhel40' 00123 elif contains( sysCmd, 'amd64_rhel40' ) or contains( sysCmd, 'amd64_linux26' ): 00124 sysArch = 64 00125 sysDsc = 'SL4' 00126 sysName = 'amd64_rhel40' 00127 # == SL5 00128 if contains( sysCmd, 'i586_rhel50' ): 00129 sysArch = 32 00130 sysDsc = 'SL5' 00131 sysName = 'i586_rhel50' 00132 elif contains( sysCmd, 'amd64_rhel50' ): 00133 sysArch = 64 00134 sysDsc = 'SL5' 00135 sysName = 'amd64_rhel50' 00136 00137 print 'System:', sysName, '(', sysDsc, '), architecture:', sysArch 00138 envVarsFile.write( 'export SYSNAME=' + sysName + '\n' ) 00139 00140 # SL4 specific settings 00141 if sysDsc == 'SL4': 00142 print 'Initialize SL4 settings' 00143 envVarsFile.write( 'export CXX="/usr/bin/g++"\n' ) 00144 envVarsFile.write( 'export F77="/usr/bin/g77"\n' ) 00145 envVarsFile.write( 'export FLIBS="-lfrtbegin -lg2c"\n' ) 00146 # SL5 specific settings 00147 elif sysDsc == 'SL5': 00148 print 'Initialize SL5 settings' 00149 envVarsFile.write( 'export CXX="/usr/bin/g++44"\n' ) 00150 envVarsFile.write( 'export F77="/usr/bin/gfortran44"\n' ) 00151 envVarsFile.write( 'export FLIBS="-lgfortran -lgfortranbegin"\n' ) 00152 else: 00153 print 'Unknown system name:',sysname, 00154 00155 # prefix 00156 if len( versions[ 'prefix' ] ) == 0: 00157 prefix = '/afs/desy.de/group/alliance/mcg/public' 00158 else: 00159 prefix = versions[ 'prefix' ] 00160 envVarsFile.write( 'export PREFIX=' + prefix + '\n' ) 00161 00162 # clhep 00163 envVarsFile.write( 'export CLHEPversion=' + versions[ 'clhep-version' ] + '\n' ); 00164 clhepDir = prefix + '/CLHEP/' + versions[ 'clhep-version' ] + '/' + sysName 00165 print 'CLHEP directory:', clhepDir 00166 envVarsFile.write( 'export CLHEPdir=' + clhepDir + '\n' ); 00167 00168 # cernlib 00169 if sysDsc == 'SL5': 00170 envVarsFile.write( 'export CERNLIB=' + prefix + '/' + sysName + '/lib/cernlib/2006a/lib\n' ) 00171 elif sysDsc == 'SL4': 00172 envVarsFile.write( 'export CERNLIB=/opt/products/cernlib/2005/lib\n' ) 00173 00174 # Root's initialization 00175 rootVersion = '5.22.00' 00176 print 'ROOT version:', rootVersion 00177 envVarsFile.write( 'export ROOTver=' + rootVersion + '\n' ) 00178 00179 if sysName.find( 'amd64' ) != -1: 00180 rootSys = '/opt/products/root64/' + rootVersion 00181 rootLib = rootSys + '/lib64' 00182 else: 00183 rootSys = '/opt/products/root/' + rootVersion 00184 rootLib = rootSys + '/lib' 00185 envVarsFile.write( 'export ROOTSYS=' + rootSys + '\n' ) 00186 envVarsFile.write( 'export ROOTLIB=' + rootLib + '\n' ) 00187 envVarsFile.write( 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ROOTLIB\n' ) 00188 envVarsFile.write( 'export PATH=$ROOTSYS/bin:$PATH\n' ) 00189 00190 envVarsFile.write( 'export PDFPATH=' + prefix + '/MCGenerators/cascade/' + versions[ 'cascade-version' ] + '/data\n' ) 00191 00192 return prefix, sysName 00193 00194 # ---------------------------------------------------------------------- 00195 # NAF specific setup (TODO!) 00196 # ---------------------------------------------------------------------- 00197 def initializeNafSetup(): 00198 print '== Initialize NAF setup ==' 00199 00200 # determine system 00201 sysNameInfo = os.popen( 'source check_platform_desy' ).readlines() 00202 sysname = sysNameInfo[0] 00203 print 'System:', sysname, 00204 envVarsFile.write( 'export SYSNAME=' + sysname + '\n' ) 00205 00206 # prefix 00207 if len( versions[ 'prefix' ] ) == 0: 00208 prefix = '/afs/desy.de/group/alliance/mcg/public' 00209 else: 00210 prefix = versions[ 'prefix' ] 00211 envVarsFile.write( 'export PREFIX=' + prefix + '\n' ) 00212 00213 # Root's initialization 00214 rootVersion = '5.22.00' 00215 print 'ROOT version:', rootVersion 00216 envVarsFile.write( 'export ROOTver=' + rootVersion + '\n' ) 00217 00218 if sysname.find( 'amd64' ) != -1: 00219 rootSys = '/afs/naf.desy.de/products/root/' + rootVersion 00220 rootLib = rootSys + '/lib' 00221 else: 00222 print 'No 32 bit ROOT version at NAF!' 00223 sys.exit( 2 ) 00224 envVarsFile.write( 'export ROOTSYS=' + rootSys + '\n' ) 00225 envVarsFile.write( 'export ROOTLIB=' + rootLib + '\n' ) 00226 envVarsFile.write( 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ROOTLIB\n' ) 00227 envVarsFile.write( 'export PATH=$ROOTSYS/bin:$PATH\n' ) 00228 00229 # clhep... 00230 envVarsFile.write( 'export CLHEPversion=' + versions[ 'clhep-version' ] + '\n' ); 00231 clhepDir = prefix + '/CLHEP/' + versions[ 'clhep-version' ] + '/' + sysname 00232 print 'CLHEP dir:', clhepDir, 00233 envVarsFile.write( 'export CLHEPdir=' + clhepDir + '\n' ); 00234 00235 envVarsFile.write( 'export CERNLIB=/opt/products/cernlib/2005/lib\n' ) 00236 envVarsFile.write( 'export PDFPATH=' + prefix + '/MCGenerators/cascade/' + versions[ 'cascade-version' ] + '/data\n' ) 00237 00238 return prefix, sysname 00239 00240 # ---------------------------------------------------------------------- 00241 # CERN specific setup 00242 # ---------------------------------------------------------------------- 00243 def initializeCernSetup(): 00244 print colours[ 'blue' ] + "[ Initialize CERN setup ]" + colours[ 'end' ] 00245 00246 # determine system 00247 sysNameInfo = os.popen( 'source check_platform' ).readlines() 00248 sysname = sysNameInfo[1].split()[2] 00249 #sysname = sysNameInfo[0] 00250 #sysname = sysname.replace( "\n", "" ) 00251 print 'System:', sysname 00252 envVarsFile.write( 'export SYSNAME=' + sysname + '\n' ) 00253 00254 tmpTab = sysname.split( '-' ) # e.g. x86_64-slc5-gcc43-opt 00255 if len( tmpTab ) > 1: 00256 arch = tmpTab[ 0 ] # e.g. x86_64 00257 slcVer = tmpTab[ 1 ] 00258 print 'Architecture:', arch 00259 print 'SLC version:', slcVer 00260 if slcVer == 'slc5': 00261 ###gccSetup = '/afs/cern.ch/sw/lcg/external/gcc/4.3.2/' + arch + '/setup.sh\n' 00262 gccSetup = '/afs/cern.ch/sw/lcg/external/gcc/4.3.5/' + arch + '/setup.sh\n' 00263 print 'Gcc setup file:', gccSetup 00264 gccSetupFile.write( 'source %s' % gccSetup ) 00265 # envVarsFile.write( 'source /afs/cern.ch/sw/lcg/external/gcc/4.1.2/' + arch + '/setup.sh\n' ) 00266 00267 # determine GCC version 00268 gccVersion = os.popen( 'g++ --version' ).readline().split()[2] 00269 if gccVersion.startswith( '4' ): 00270 envVarsFile.write( 'export GFORTRAN=1\n' ) 00271 print 'GFORTRAN = 1' 00272 envVarsFile.write( 'export F77="/usr/bin/gfortran44"\n' ) 00273 envVarsFile.write( 'export FLIBS="-lgfortran -lgfortranbegin"\n' ) 00274 else: 00275 print 'GFORTRAN = 0' 00276 envVarsFile.write( 'export F77="/usr/bin/g77"\n' ) 00277 envVarsFile.write( 'export FLIBS="-lfrtbegin -lg2c"\n' ) 00278 print 'GCC version:', gccVersion 00279 00280 # prefix 00281 if len( versions[ 'prefix' ] ) == 0: 00282 prefix = '/afs/cern.ch/sw/lcg/external' 00283 else: 00284 prefix = versions[ 'prefix' ] 00285 envVarsFile.write( 'export PREFIX=' + prefix + '\n' ) 00286 00287 # Root's initialization 00288 # rootVersion = '5.27.04' 00289 rootVersion = '5.28.00e' 00290 print 'ROOT version:', rootVersion 00291 envVarsFile.write( 'export ROOTver=' + rootVersion + '\n' ) 00292 rootSys = '/afs/cern.ch/sw/lcg/app/releases/ROOT/' + rootVersion + '/' + sysname + '/root' 00293 print 'ROOT path:', rootSys 00294 envVarsFile.write( 'export ROOTSYS=' + rootSys + '\n' ) 00295 rootLib = rootSys + '/lib' 00296 print 'ROOT lib:', rootLib 00297 envVarsFile.write( 'export ROOTLIB=' + rootLib + '\n' ) 00298 envVarsFile.write( 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:' + rootLib + '\n' ) 00299 envVarsFile.write( 'export PATH=' + rootSys + '/bin:$PATH\n' ) 00300 00301 # clhep... 00302 # versions[ 'clhep-version' ] = '2.0.4.4' 00303 envVarsFile.write( 'export CLHEPversion=' + versions[ 'clhep-version' ] + '\n' ); 00304 clhepDir = prefix + '/clhep/' + versions[ 'clhep-version' ] + '/' + sysname 00305 print 'CLHEP dir:', clhepDir 00306 envVarsFile.write( 'export CLHEPdir=' + clhepDir + '\n' ); 00307 00308 envVarsFile.write( 'export CERNLIB=' + prefix + '/cernlib/2006b/' + sysname + '/lib' + '\n' ) 00309 envVarsFile.write( 'export PDFPATH=' + prefix + '/MCGenerators/cascade/' + versions[ 'cascade-version' ] + '/share/data\n' ) 00310 return prefix, sysname 00311 00312 # ---------------------------------------------------------------------- 00313 # Setup environment variables 00314 # ---------------------------------------------------------------------- 00315 def initializeStdLibs( prefix, sysname ): 00316 hepmc_suff = '' 00317 pythia8_hepmc_suff = '' 00318 if ( versions[ 'hepmc-version' ] == '2.06.03' ): # use generators compiled with the new version of HepMC, 00319 pythia8_hepmc_suff = '_hepmc20603' # currently (Nov/2010) available only for Pythia8 at Cern... 00320 00321 envVarsFile.write( 'export HepMCdir=' + prefix + '/HepMC/' + versions[ 'hepmc-version' ] + '/' + sysname + '\n' ) 00322 envVarsFile.write( 'export HepPDTdir=' + prefix + '/HepPDT/' + versions[ 'heppdt-version'] + '/' + sysname + '\n' ) 00323 00324 envVarsFile.write( 'export FastJetdir=' + prefix + '/fastjet/' + versions[ 'fastjet-version'] + '/' + sysname + '\n' ) 00325 envVarsFile.write( 'export GSLdir=' + prefix + '/GSL/' + versions[ 'gsl-version'] + '/' + sysname + '\n' ) 00326 00327 envVarsFile.write( 'export Pythia8dir=' + prefix + '/MCGenerators' + pythia8_hepmc_suff + '/pythia8/' + versions[ 'pythia8-version'] + '/' + sysname + '\n' ) 00328 envVarsFile.write( 'export Pythia8DATA=' + prefix + '/MCGenerators' + pythia8_hepmc_suff + '/pythia8/' + versions[ 'pythia8-version'] + '/share/xmldoc\n' ) 00329 00330 envVarsFile.write( 'export Pythia6dir=' + prefix + '/MCGenerators' + hepmc_suff + '/pythia6/' + versions[ 'pythia6-version'] + '/' + sysname + '\n' ) 00331 envVarsFile.write( 'export Alpgendir=' + prefix + '/MCGenerators' + hepmc_suff + '/alpgen/' + versions[ 'alpgen-version'] + '/' + sysname + '\n' ) 00332 00333 envVarsFile.write( 'export Herwigppdir=' + prefix + '/MCGenerators' + hepmc_suff + '/herwig++/' + versions[ 'herwigpp-version'] + '/' + sysname + '\n' ) 00334 envVarsFile.write( 'export ThePEGdir=' + prefix + '/MCGenerators' + hepmc_suff + '/thepeg/' + versions[ 'thepeg-version'] + '/' + sysname + '\n' ) 00335 envVarsFile.write( 'export Herwigdir=' + prefix + '/MCGenerators' + hepmc_suff + '/herwig/' + versions[ 'herwig-version'] + '/' + sysname + '\n' ) 00336 envVarsFile.write( 'export Jimmydir=' + prefix + '/MCGenerators' + hepmc_suff + '/jimmy/' + versions[ 'jimmy-version'] + '/' + sysname + '\n' ) 00337 envVarsFile.write( 'export LHAPDFdir=' + prefix + '/MCGenerators' + hepmc_suff + '/lhapdf/' + versions[ 'lhapdf-version'] + '/' + sysname + '\n' ) 00338 envVarsFile.write( 'export LHAPDFsets=' + prefix + '/MCGenerators' + hepmc_suff + '/lhapdf/' + versions[ 'lhapdf-version'] + '/share/PDFsets\n' ) 00339 envVarsFile.write( 'export LHAPATH=' + prefix + '/MCGenerators' + hepmc_suff + '/lhapdf/' + versions[ 'lhapdf-version'] + '/share/PDFsets\n' ) 00340 envVarsFile.write( 'export Cascadedir=' + prefix + '/MCGenerators' + hepmc_suff + '/cascade/' + versions[ 'cascade-version'] + '/' + sysname + '\n' ) 00341 envVarsFile.write( 'export Tauoladir=' + prefix + '/MCGenerators' + hepmc_suff + '/tauola/' + versions[ 'tauola-version'] + '/' + sysname + '\n' ) 00342 envVarsFile.write( 'export Photosdir=' + prefix + '/MCGenerators' + hepmc_suff + '/photos/' + versions[ 'photos-version'] + '/' + sysname + '\n' ) 00343 00344 # additional environment variables 00345 envVarsFile.write( 'export Herwigppversion=' + versions[ 'herwigpp-version'] + '\n' ) 00346 00347 # add to LD_LIBRARY_PATH 00348 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Pythia8dir/lib\n" ) 00349 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Pythia8DATA\n" ) 00350 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Pythia6dir/lib\n" ) 00351 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Alpgendir/lib\n" ) 00352 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GSLdir/lib/\n" ) 00353 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HepMCdir/lib\n" ) 00354 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HepPDTdir/lib\n" ) 00355 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CLHEPdir/lib\n" ) 00356 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FastJetdir/lib\n" ) 00357 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LHAPDFdir/lib\n" ) 00358 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Herwigppdir/lib/Herwig++\n" ) 00359 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Herwigdir/lib\n" ) 00360 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Jimmydir/lib\n" ) 00361 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ThePEGdir/lib/ThePEG\n" ) 00362 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Cascadedir/lib\n" ) 00363 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Tauoladir/lib\n" ) 00364 envVarsFile.write( "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Photosdir/lib\n" ) 00365 envVarsFile.write( "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MYCLASS_PATH/lib\n" ) 00366 00367 return 00368 00369 # ---------------------------------------------------------------------- 00370 def detectLocation(): 00371 loc = os.popen( 'hostname -d' ).read() 00372 print 'Location:', loc, 00373 curr_dir = os.popen( 'pwd' ).read() 00374 print 'Current working directory:', curr_dir, 00375 return loc, curr_dir 00376 00377 # ---------------------------------------------------------------------- 00378 def contains( theString, theQueryValue ): 00379 return theString.find( theQueryValue ) > -1 00380 00381 # ---------------------------------------------------------------------- 00382 def showHelp(): 00383 print 'configure.py - HepMCAnalysis tool configuration script (Version: 0.1)\n' 00384 print 'Usage: source configure [arguments]\n' 00385 print 'Arguments:' 00386 for arg in versions.keys(): 00387 print ' --' + arg 00388 print '\nTo specify different version of a generator use command like:' 00389 print ' source configure --pythia8-version=135\n' 00390 00391 # ---------------------------------------------------------------------- 00392 # Execution starts here 00393 # ---------------------------------------------------------------------- 00394 if __name__ == "__main__": 00395 main() 00396 envVarsFile.close() 00397 gccSetupFile.close() 00398