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