화면을 열고 동일한 파일을 컴파일하는 Bash 스크립트

화면을 열고 동일한 파일을 컴파일하는 Bash 스크립트

별도의 스크린 세션을 시작하고 각 세션에서 명령을 실행하여 (객체 지향 데이터 분석 프레임워크) C++에서 동일한 소스 파일을 컴파일하는 bash 스크립트를 작성했습니다.ROOThttp://root.cern.ch/drupal/content/about) 각 화면 세션에서. 처음에는 훌륭하게 작동했지만 (관찰에 따르면) 컴파일 시간이 늘어나면서 컴파일에 실패하고 많은 오류가 발생했습니다. 텍스트 파일 내의 오류 메시지는 다음과 같습니다.

Info in <TUnixSystem::ACLiC>: creating shared library /DIRECTORY/./readerSummerStd_C.so
ACLiC:0: RuntimeWarning: Failed to generate the dependency file for /DIRECTORY/./readerSummerStd_C.so
Note: Link requested for already precompiled class map<string,int,less<string>,allocator<pair<const string,int> > > (ignore this message) :0:
g++: /DIRECTORY/readerSummerStd_C_ACLiC_dict.o: No such file or directory
Error in <ACLiC>: Compilation failed!
Traceback (most recent call last):
  File "./NEWrunReader.py", line 87, in <module>
    from ROOT import readerSummerStd as reader
ImportError: cannot import name readerSummerStd

프로파일링 zsh 스크립트는 참조용으로 아래에 제공됩니다. 한 코드가 컴파일될 때까지 기다린 다음 다른 코드를 실행하면 문제가 없습니다. 이 문제를 어떻게 피할 수 있습니까?

    #! /bin/zsh
    ### Script for running everything in screens ###
    echo You have the following screens running:
    screen -ls
    echo Press any key to proceed. NOTE THAT YOUR OTHER SCREENS WILL GET KILLED!
    read
    pkill -15 -U arisevon screen ## We make sure that no screens are running for now
    bkgarr=(TopJets BosonJets DiBoson TTbar)
    sigarr=(NM1 NM2 NM3 Scenario4 Scenario6)
    puarr=(50PU 140PU)
    lumarr=(30 300 3000)

    echo Please type 1 for 50PU samples and 2 for 140PU samples
    read PU
    if [[ $PU -ne 1 && $PU -ne 2 ]] ; then
        echo You have to enter 1 or 2
        return 1
    fi

    echo Please type 1 for 300fb-1 and 2 for 3000fb-1
    read lum

    if [[ $lum -ne 1 && $lum -ne 2 ]] ; then
        echo You have to enter 1 or 2
        return 1
    fi

    if [ $PU = 1 ]; then
        let "lum = $lum + 1"
        #echo $lum
    fi

    ex NEWrunReader.py  <<EOEX
      :43s/Lumi.*/Lumi=$lumarr[lum]/
      :x
    EOEX

    echo Press any key to proceed or Ctrl+C to abort!
    read
    for index in $bkgarr
    do
        screen -dmS $index
        screen -S $index -p 0 -X stuff "$(typeset -p bkgarr)"$'\r'
        screen -S $index -p 0 -X stuff "./NEWrunReader.py SummerStd $puarr[PU]_$index >& $index.txt &"$'\r'
    done
    for sigind in $sigarr
    do
        screen -dmS $sigind
        screen -S $sigind -p 0 -X stuff "$(typeset -p bkgarr)"$'\r'
        screen -S $sigind -p 0 -X stuff "./NEWrunReader.py SummerStd $puarr[PU]_$sigind >& $sigind.txt &"$'\r'
    done
    return 0

이 코드는 고에너지 물리학 분석을 수행하는 데 사용되며 이전에는 이 스크립트가 완벽하게 작동했기 때문에 정말 궁금합니다. 유일한 차이점은 C++ 소스 코드가 이전보다 더 복잡하다는 것입니다. 파이썬 코드는 다음과 같습니다:

#!/usr/bin/python


import sys
from ROOT import gROOT

# scenarios and samples
scenarios = ['NoPU','50PU','140PU']
#scenarios = ['140PU']
########################################################
# FOR THE PAPER (SNOWMASS)
#samples   = ['DiBoson','BosonJets','TopJets','TTbar','TDR4','TDR5','TDR6','TDR8','naturalSUSY']
########################################################
#samples   = ['TTbar']
# by historic reason we have as dir names: bjets  diboson  tdr tdrNew tjets  ttbar for snowmass
# by historic reason we have as dir names: bjets  diboson  tdr        tjets  ttbar for snowmass2
#for (ecfa) PhaseII_C3 / C4v2
########################################################
#samples w.o weight (snowmass)
#noWeight  = ['TDR4','TDR5','TDR6','TDR8','naturalSUSY']

# nTuple input path
#########################################################
# for susyhit
samples   = ['DiBoson','BosonJets','TopJets','TTbar','NM1','NM2','NM3','Scenario6','Scenario4','Scenario1']
noWeight  = ['NM1','NM2','NM3','Scenario6','Scenario4','Scenario1']
base = '/nfs/dust/cms/user/safarzad/Output/EOSforFutureStudies/14TeV/PhaseII/Configuration4v2/140PileUp'
#########################################################
# for naturalSUSY
#base = 'nTuples/ECFA/PhaseII_C3'
#base = 'nTuples/ECFA/PhaseII_C4'
#########################################################
# FOR THE PAPER (SNOWMASS)
#base = 'nTuples/snowmass2'
#########################################################
# for PhaseII_C3 & PhaseII_C4v2 (ecfa) #################  !!!!!!!!! #####################
#base = 'Output/ECFA/PhaseII_C3' #### noch per Hand aendern, besser in scenarios C3, C4 beruecksichtigen! ####
#base = 'Output/ECFA/PhaseII_C4v2'
#base = 'Output/14TeV/'
#
#
# lumi in fb^-1
Lumi=30


def help():
    print 'First argument analysis:'
    print '   SingleS'
    print ' then a list of inputs - read the code'
    sys.exit(0)

from operator import mul
def scale(fac,list):
    return map(mul,len(list)*[fac],list)

# choose the analysis and a sample
if len(sys.argv)>1:
    if sys.argv[1]=='SingleS':       # single lepton  stop - CMS
        gROOT.LoadMacro('readerSingleS.C+')
        from ROOT import readerSingleS as reader
    if sys.argv[1]=='Claudia_task':       # single lepton  stop - CMS
        gROOT.LoadMacro('readerClaudia_task.C+')
        from ROOT import readerClaudia_task as reader
    elif sys.argv[1]=='Skeleton':  # SKELETON
        gROOT.LoadMacro('readerSkeleton.C+')
        from ROOT import readerSkeleton as reader
    elif sys.argv[1]=='SingleSOld':  # single lepton testing version 
        gROOT.LoadMacro('readerSingleSOld.C+')
        from ROOT import readerSingleSOld as reader
    elif sys.argv[1]=='SingleS_P':  # single lepton testing version 
        gROOT.LoadMacro('readerSingleS_P.C+')
        from ROOT import readerSingleS_P as reader
    elif sys.argv[1]=='SingleSDelphMET':  # single lepton testing version 
        gROOT.LoadMacro('readerSingleSDelphMET.C+')
        from ROOT import readerSingleSDelphMET as reader
    elif sys.argv[1]=='EWKino':  # EWKino
        gROOT.LoadMacro('readerEWKino.C+') # used to be EWKinoNew
        from ROOT import readerEWKino as reader
    elif sys.argv[1]=='AtlasH_Sb':  # Exc
        gROOT.LoadMacro('readerAtlasH_Sb.C+') # used to be EXc
        from ROOT import readerAtlasH_Sb as reader
    elif sys.argv[1]=='AtlasH':  # Atlas hadronic
        gROOT.LoadMacro('readerAtlasH.C+') # used to be ?????
        from ROOT import readerAtlasH as reader
    elif sys.argv[1]=='SummerStd':  #
        gROOT.LoadMacro('readerSummerStd.C+') # used to be ?????
        from ROOT import readerSummerStd as reader
    else: 
        help()
else: 
    help()


#prepare empty dictionaries
do={}
for scene in scenarios:
    do[scene]={}
    for samp in samples:
        do[scene][samp] = 0
# read input line and set flags what to process
flag=False
for e in sys.argv:
    for scene in scenarios:
        for samp in samples:
            if e==scene+'_'+samp: 
                do[scene][samp] = 1
                if scene=='140PU': Lumi=Lumi*10  # lumi*10 for 140PU
                flag=True
if not flag: help()


# prepare empty dictionaries
dirsHT={}
inDir={}
weights={}
for scene in scenarios:
    inDir[scene]={}
#   weights[scene]={}


### for PhaseII_C3 / C4v2 ((from ecfa)) ONLY TTbar



#--------------------------------------------- sample properties for processing <<<<<<<<<<<<<<<<<<<<<<<<<<<
#                                               I:  HT dirs, xsecs --> 33TeV
#                                              II:  HT dirs, xsecs --> 14TeV
#------------------------------------------------ diboson
# HT dirs 
#I:dirsHT['DiBoson']  = ['0-400/','400-1000/','1000-2000/','2000-3400/','3400-100000/']
dirsHT['DiBoson']  = ['0-300/','300-700/','700-1300/','1300-2100/','2100-100000/']
#    xsec
#I:weights['DiBoson'] = [776.00399, 106.85023, 10.16835, 0.86136, 0.09507]
weights['DiBoson'] = [249.97710, 35.23062, 4.13743, 0.41702, 0.04770]
#    multiply all by lumi
weights['DiBoson'] = scale(Lumi,weights['DiBoson'])
#
# NoPU
inDir['NoPU']['DiBoson']  = base+'/NoPU/diboson/'
# 50PU
inDir['50PU']['DiBoson']  = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseI_50PU_ProdAug6/diboson/' 
# 140PU
#inDir['140PU']['DiBoson'] = base+'/diboson/'

inDir['140PU']['DiBoson'] = '/nfs/dust/cms/user/trippk/dust/AN_PAS_TP/DELPHES/nTUPLER/batch/1st_Output/PhaseII_140PU_ProdJul28/diboson/'
#'/140PU/diboson/'
#
#------------------------------------------------ boson+jets
# HT dirs 
#I:dirsHT['BosonJets']  = ['0-400/','400-1000/','1000-1800/','1800-3000/','3000-4600/','4600-6600/','6600-100000/']
dirsHT['BosonJets']  = ['0-300/','300-600/','600-1100/','1100-1800/','1800-2700/','2700-3700/','3700-100000/']
#    xsec
#I:weights['BosonJets'] = [129824.79383, 6598.37529, 325.55814, 32.45249, 3.16778, 0.32737, 0.04045]
weights['BosonJets'] = [34409.92339, 2642.85309, 294.12311, 25.95000, 2.42111, 0.22690, 0.02767]
#    multiply all by lumi
weights['BosonJets'] = scale(Lumi,weights['BosonJets'])
#
# NoPU
inDir['NoPU']['BosonJets']  = base+'/NoPU/bjets/'
# 50PU
inDir['50PU']['BosonJets']  = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseI_50PU_ProdAug6/bjets/' 
# 140PU
inDir['140PU']['BosonJets'] = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseII_140PU_ProdJul28/bjets/'
#inDir['140PU']['BosonJets'] ='/nfs/dust/cms/user/safarzad/Output/EOSforFutureStudies/14TeV/PhaseII/Configuration4v2/140PileUp/bjets/'
#inDir['140PU']['BosonJets'] = '/nfs/dust/cms/user/safarzad/Delphes/nTupler_topness/Batch/Output/delphes/ProdJun14/bjets/'
#base+'/bjets/'
#'/140PU/bjets/'
#
#---------------------------------------------- ttbar
# HT dirs 
#I:dirsHT['TTbar']  = ['0-600/','600-1200/','1200-2000/','2000-3200/','3200-4800/','4800-100000/']
dirsHT['TTbar']  = ['0-600/','600-1100/','1100-1700/','1700-2500/','2500-100000/']
#    xsec
#I:weights['TTbar'] = [3438.70635, 505.82210, 61.81892, 7.65752, 0.72643, 0.07147]
weights['TTbar'] = [530.89358, 42.55351, 4.48209, 0.52795, 0.05449]
#    multiply all by lumi
weights['TTbar'] = scale(Lumi,weights['TTbar'])
#
# NoPU
inDir['NoPU']['TTbar']  = base+'/NoPU/ttbar/'
# 50PU
inDir['50PU']['TTbar']  = '/nfs/dust/cms/user/clseitz/Delphes/FILES/PhaseI_50PU_ProdAug6/ttbar/' 
# 140PU
inDir['140PU']['TTbar'] = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseII_140PU_ProdJul28/ttbar/'
#inDir['140PU']['TTbar'] = '/nfs/dust/cms/user/safarzad/Delphes/nTupler_topness/Batch/Output/delphes/ProdJun14/ttbar/'
#inDir['140PU']['TTbar'] = base+'/ttbar/'
#'/140PU/ttbar/'
#
#--------------------------------------------- tjets
# HT dirs 
#I:dirsHT['TopJets']  = ['0-600/','600-1200/','1200-2200/','2200-3600/','3600-100000/']
dirsHT['TopJets']  = ['0-500/','500-1000/','1000-1600/','1600-2400/','2400-100000/']
#    xsec
#I:weights['TopJets'] = [493.50469, 23.51848, 1.97369, 0.13199, 0.01099]
weights['TopJets'] = [109.73602, 5.99325, 0.37680, 0.03462, 0.00312]
#    multiply all by lumi
weights['TopJets'] = scale(Lumi,weights['TopJets'])
#
# NoPU
inDir['NoPU']['TopJets']  = base+'/NoPU/tjets/'
# 50PU
inDir['50PU']['TopJets']  = '/nfs/dust/cms/user/clseitz/Delphes/FILES/PhaseI_50PU_ProdAug6/tjets/' 
# 140PU
inDir['140PU']['TopJets'] = '/afs/desy.de/user/t/trippk/dust/AN_PAS_TP/DELPHES/nTUPLER/batch/Output/PhaseII_140PU_ProdJul28/tjets/'
#inDir['140PU']['TopJets'] = base+'/tjets/'
#'/140PU/tjets/'
#---------------------------------------------STCs
# HT dirs - none for STC samples
#dirsHT['TDR4'] = ['/']
#dirsHT['TDR5'] = ['/']
#dirsHT['TDR6'] = ['/']
#dirsHT['TDR8'] = ['/']
# naturalSUSY
#dirsHT['naturalSUSY'] = ['/']
# susyhit
dirsHT['Scenario1'] = ['/']
dirsHT['Scenario4'] = ['/']
dirsHT['Scenario6'] = ['/']
dirsHT['NM1'] = ['/']
dirsHT['NM2'] = ['/']
dirsHT['NM3'] = ['/']

# xsec - we multiply by lumi   xsec*k-factor*Lumi calculated with parse.py: values for 33 TeV with 140 Pile Up
# 33TeV 
#weights['TDR4'] = [68.31*1.3626*Lumi]    # values for ? 14 TeV      #12.80 
#weights['TDR5'] = [19.08*1.4105*Lumi]                               # 3.82
#weights['TDR6'] = [10.87*1.4438*Lumi]                               # 2.53
#weights['TDR8'] = [ 7.777*1.4917*Lumi]                              # 2.19
# 14TeV ####### wrong ##########
#weights['TDR4'] = [9.060*1.3626*Lumi]      # values for ? 14 TeV     #12.80 
#weights['TDR5'] = [4.299*1.4105*Lumi]                                # 3.82
#weights['TDR6'] = [2.039*1.4438*Lumi]                                # 2.53
#weights['TDR8'] = [1.788*1.4917*Lumi]                                # 2.19
# 14TeV
weights['TDR4'] = [12.80*Lumi] 
weights['TDR5'] = [3.82*Lumi]  
weights['TDR6'] = [2.53*Lumi]  
weights['TDR8'] = [2.19*Lumi]
weights['naturalSUSY'] = [1.211*Lumi]
# susyhit
weights['Scenario1'] = [2.52*Lumi]
weights['Scenario4'] = [0.009635*Lumi] 
weights['Scenario6'] = [2.52*Lumi] 
#weights['Scenario6'] = [2.19*Lumi] 
weights['NM1'] = [0.15*Lumi] 
weights['NM2'] = [0.07*Lumi] 
weights['NM3'] = [1.1*Lumi] 
#
bit=''
if base=='nTuples/snowmass/':bit='New' 
# NoPU
#inDir['NoPU']['TDR4'] = base+'/NoPU/tdr/'+bit+'/4/'
#inDir['NoPU']['TDR5'] = base+'/NoPU/tdr/'+bit+'/5/'
#inDir['NoPU']['TDR6'] = base+'/NoPU/tdr/'+bit+'/6/'
#inDir['NoPU']['TDR8'] = base+'/NoPU/tdr/'+bit+'/8/'
# 50PU
#inDir['50PU']['TDR4'] = base+'/50PU/tdr/'+bit+'/4/'
#inDir['50PU']['TDR5'] = base+'/50PU/tdr/'+bit+'/5/'
#inDir['50PU']['TDR6'] = base+'/50PU/tdr/'+bit+'/6/'
#inDir['50PU']['TDR8'] = base+'/50PU/tdr/'+bit+'/8/'
# 140PU
#inDir['140PU']['TDR4'] = base+'/140PU/tdr/'+bit+'/4/'
#inDir['140PU']['TDR5'] = base+'/140PU/tdr/'+bit+'/5/'
#inDir['140PU']['TDR6'] = base+'/140PU/tdr/'+bit+'/6/'
#inDir['140PU']['TDR8'] = base+'/140PU/tdr/'+bit+'/8/'
#
############## susyhit ############################
#inDir['140PU']['Scenario1'] = '/nfs/dust/cms/user/safarzad/Delphes/nTupler_topness/Batch/Ntuple/STC_Third/'
inDir['140PU']['Scenario4'] = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseII_140PU_ProdJul28/Ntuple/STOC'
inDir['140PU']['Scenario6'] = '/nfs/dust/cms/user/trippk/dust/AN_PAS_TP/DELPHES/nTUPLER/batch/Output/stc/READY/'
inDir['140PU']['NM1'] = '/nfs/dust/cms/user/trippk/dust/AN_PAS_TP/DELPHES/nTUPLER/batch/Output/naturalModel/1/READY/'
inDir['140PU']['NM2'] = '/nfs/dust/cms/user/trippk/dust/AN_PAS_TP/DELPHES/nTUPLER/batch/Output/naturalModel/2/READY/'
inDir['140PU']['NM3'] = '/nfs/dust/cms/user/trippk/dust/AN_PAS_TP/DELPHES/nTUPLER/batch/Output/naturalModel/3/READY/'

inDir['50PU']['NM1'] = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseI_50PU_ProdAug6/NM1/'
inDir['50PU']['NM2'] = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseI_50PU_ProdAug6/NM2/'
inDir['50PU']['NM3'] = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseI_50PU_ProdAug6/NM3/'
inDir['50PU']['Scenario4'] = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseI_50PU_ProdAug6/STOC/' 
inDir['50PU']['Scenario6'] = '/afs/desy.de/user/s/safarzad/dust/Output/delphes/PhaseI_50PU_ProdAug6/STC/'
#inDir['140PU']['Scenario6'] = '/afs/desy.de/user/t/trippk/dust/snowmass/NewTupler_topness/Batch/Output/14TeV/140PU/tdr_delphes3.0.9.1_card3.0.9.1/8'
#inDir['140PU']['NM1'] = '/nfs/dust/cms/user/safarzad/Delphes/nTupler_topness/Batch/Ntuple/NM1/'
#inDir['140PU']['NM2'] = '/nfs/dust/cms/user/safarzad/Delphes/nTupler_topness/Batch/Ntuple/NM2/'
#inDir['140PU']['NM3'] = '/nfs/dust/cms/user/safarzad/Delphes/nTupler_topness/Batch/Ntuple/NM3/'
####################################################
################# naturalSUSY ######################
####################################################
# 140PU
#inDir['140PU']['naturalSUSY'] = 'Output/naturalSUSY/14TeV/140PU/PhaseII_conf3/'
#inDir['140PU']['naturalSUSY'] = 'Output/naturalSUSY/14TeV/140PU/PhaseII_conf4/'
#
# NoPU 3.0.10
#inDir['NoPU']['TDR4'] = base+'/NoPU/tdr_delphes3.0.10_card3.0.10'+bit+'/4/'
#inDir['NoPU']['TDR5'] = base+'/NoPU/tdr_delphes3.0.10_card3.0.10'+bit+'/5/'
#inDir['NoPU']['TDR6'] = base+'/NoPU/tdr_delphes3.0.10_card3.0.10'+bit+'/6/'
#inDir['NoPU']['TDR8'] = base+'/NoPU/tdr_delphes3.0.10_card3.0.10'+bit+'/8/'
#3.0.10 - 3.0.9.1
#inDir['NoPU']['TDR4'] = base+'/NoPU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/4/'
#inDir['NoPU']['TDR5'] = base+'/NoPU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/5/'
#inDir['NoPU']['TDR6'] = base+'/NoPU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/6/'
#inDir['NoPU']['TDR8'] = base+'/NoPU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/8/'
#3.0.9.1 
#inDir['NoPU']['TDR4'] = base+'/NoPU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/4/'
#inDir['NoPU']['TDR5'] = base+'/NoPU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/5/'
#inDir['NoPU']['TDR6'] = base+'/NoPU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/6/'
#inDir['NoPU']['TDR8'] = base+'/NoPU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/8/'
#
#
# 50PU 3.0.10
#inDir['50PU']['TDR4'] = base+'/50PU/tdr_delphes3.0.10_card3.0.10'+bit+'/4/'
#inDir['50PU']['TDR5'] = base+'/50PU/tdr_delphes3.0.10_card3.0.10'+bit+'/5/'
#inDir['50PU']['TDR6'] = base+'/50PU/tdr_delphes3.0.10_card3.0.10'+bit+'/6/'
#inDir['50PU']['TDR8'] = base+'/50PU/tdr_delphes3.0.10_card3.0.10'+bit+'/8/'
# 50PU 3.0.10 - 3.0.9.1
#inDir['50PU']['TDR4'] = base+'/50PU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/4/'
#inDir['50PU']['TDR5'] = base+'/50PU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/5/'
#inDir['50PU']['TDR6'] = base+'/50PU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/6/'
#inDir['50PU']['TDR8'] = base+'/50PU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/8/'
# 50PU 3.0.9.1
#inDir['50PU']['TDR4'] = base+'/50PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/4/'
#inDir['50PU']['TDR5'] = base+'/50PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/5/'
#inDir['50PU']['TDR6'] = base+'/50PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/6/'
#inDir['50PU']['TDR8'] = base+'/50PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/8/'
#
#
# 140PU 3.0.10
#inDir['140PU']['TDR4'] = base+'/140PU/tdr_delphes3.0.10_card3.0.10'+bit+'/4/'
#inDir['140PU']['TDR5'] = base+'/140PU/tdr_delphes3.0.10_card3.0.10'+bit+'/5/'
#inDir['140PU']['TDR6'] = base+'/140PU/tdr_delphes3.0.10_card3.0.10'+bit+'/6/'
#inDir['140PU']['TDR8'] = base+'/140PU/tdr_delphes3.0.10_card3.0.10'+bit+'/8/'
# 140PU 3.0.10 - 3.0.9.1
#inDir['140PU']['TDR4'] = base+'/140PU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/4/'
#inDir['140PU']['TDR5'] = base+'/140PU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/5/'
#inDir['140PU']['TDR6'] = base+'/140PU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/6/'
#inDir['140PU']['TDR8'] = base+'/140PU/tdr_delphes3.0.10_card3.0.9.1'+bit+'/8/'
# 140PU 3.0.9.1
#print  base+'/140PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/4/'
#inDir['140PU']['TDR4'] = base+'/140PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/4/'
#inDir['140PU']['TDR5'] = base+'/140PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/5/'
#inDir['140PU']['TDR6'] = base+'/140PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/6/'
#inDir['140PU']['TDR8'] = base+'/140PU/tdr_delphes3.0.9.1_card3.0.9.1'+bit+'/8/'
#--------------------------------------------- end of sample properties

from ROOT import TFile
from glob import glob
from sys import exit
def GetEntries(dirname):
    files = glob(dirname+'/*nTuple.root')
    if len(files)>1:
        print 'GetEntries: there is more than 1 root file in '+dirname
        exit(0)
    print dirname,files
    file=TFile(files[0])
    tree = file.Get("delphTree")
    return tree.GetEntries()

# do it
for scene in scenarios:
    for samp in samples:
        if do[scene][samp]: 
            f=''
            print dirsHT, samp
            for i in range(len(dirsHT[samp])):
                entries = GetEntries(inDir[scene][samp]+dirsHT[samp][i])
                f=f+inDir[scene][samp]+dirsHT[samp][i]+' '+str(weights[samp][i]/entries)+' '
            print f,samp,scene
            if samp in noWeight:
                reader(f,scene+'_'+samp,False)
            else:   
                reader(f,scene+'_'+samp)

관련 정보