Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:55

0001 #!/usr/bin/env python3
0002 
0003 import sys, os, re
0004 
0005 from optparse import OptionParser # Command line parsing
0006 usage = "usage: %prog summary files"
0007 version = "%prog."
0008 parser = OptionParser(usage=usage,version=version)
0009 parser.add_option("-p", "--printDataSets", action="store_true", dest="printDS", default=False, help="Print datasets without attempting to download.")
0010 parser.add_option("-M", "--MC", action="store_true", dest="getMC", default=False, help="Get DQM files for MC campaign.")
0011 parser.add_option("-D", "--DATA", action="store_true", dest="getDATA", default=False, help="Get DQM files for DATA campaign.")
0012 parser.add_option("-2", "--2023", action="store_true", dest="get2023", default=False, help="Get DQM files for 2023 campaign.")
0013 (options, args) = parser.parse_args()
0014 
0015 ##Begin declaration of Functions
0016 
0017 #getDataSets if used to discover and download the datasets. It is seperated as a function so that we can easily switch between
0018 #MC and DATA datasets
0019 
0020 def getDataSets( dsFlags = {'RelValZTT_14TeV__':'ZTT'},
0021                  curl = "/usr/bin/curl -O -L --capath %(CERT_DIR)s --key %(USER_PROXY)s --cert %(USER_PROXY)s https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/%(relValDIR)s",
0022                  ofnBlank = "HcalRecHitValidationRelVal_%(sample)s_%(label)s_%(info)s.root",
0023                  label = "CMSSW_X_Y_Z",
0024                  slabel = "XYZ",
0025                  X509_CERT_DIR = os.getenv('X509_CERT_DIR', "/etc/grid-security/certificates"),
0026                  X509_USER_PROXY = os.getenv('X509_USER_PROXY'),
0027                  relValDIR = "CMSSW_?_?_x",
0028                  printDS = False,
0029                  camType = "MC"):
0030                
0031     print("Taking filenames from directory ",relValDIR)
0032 
0033     # retrieve the list of datasets
0034     if not os.path.isfile(relValDIR):
0035         curlCommand = curl%{"CERT_DIR":X509_CERT_DIR, "USER_PROXY":X509_USER_PROXY, "relValDIR":relValDIR}
0036         print(curlCommand)
0037         os.system(curlCommand)
0038 
0039     # open raw input file 
0040     fin = open(relValDIR, "r")
0041 
0042     # loop over file and pull out lines of interest
0043     for line in fin:
0044         # limit to one entry per dataset
0045         if label in line:
0046             # select datasets of interest
0047             for str in dsFlags.keys():
0048                 if str in line:
0049                     # extract dataset path
0050                     path = line.split('\'')[1].strip()
0051                     #print("Getting DQM output from dataset: %s"%path)
0052                  #   if (path.find("Ideal") > 0 or path.find("design") > 0  or path.find("DQM") < 0 or path.find("Pixel") > 0 or path.find("2021") > 0 or path.find("FastSim") > 0 or path.find("asymptotic") > 0):  #skip for unnecessary samples
0053                     if (path.find("2026") < 0):
0054                         continue    
0055                         print(path.split("/")[-1]) #path
0056                         if printDS:
0057                            continue
0058 
0059                     # construct file name
0060                     fname = path.split("/")[-1]
0061 
0062                     # create file name for use with hcal scripts
0063                     info = fname.split("__")[2].replace(label, "").strip("-")
0064 
0065                     #The Data sample have an additional piece put in. We strip it out so that the MC and DATA code can be common
0066 
0067                     # if camType == "DATA":
0068                     #     iparts = info.split("_")
0069             #     info = ""
0070             #     skip = False
0071             #     for fragment in iparts:
0072                     #         if skip:
0073                     #             info = info.strip("_")
0074                     #             skip = False
0075                     #             continue
0076                     #         if fragment == "RelVal":
0077                     #             skip = True
0078                     #             continue
0079                     #         info += fragment
0080                     #         info += "_"
0081                     #     info = info.strip("_")
0082 
0083                     ofn = ofnBlank%{"sample":dsFlags[str],"label":slabel,"info":info}
0084                     if camType == "DATA":
0085                         ofn = ofn.replace("zb","")
0086                         ofn = ofn.replace("jetHT","")
0087                     print("ofn = ",ofn)
0088                     #Check if file exists already
0089                     if not os.path.isfile(ofn):
0090                         # copy file with curl
0091                         curlCommand = curl%{"CERT_DIR":X509_CERT_DIR,"USER_PROXY":X509_USER_PROXY, "relValDIR":relValDIR} + "/" + fname
0092                         print(curlCommand)
0093                         os.system(curlCommand)
0094 
0095                         # Rename file for use with HCAL scripts
0096                         mvCommand = "mv %(fn)s %(ofn)s"%{"fn":fname,"ofn":ofn}
0097                         print(mvCommand)
0098                         os.system(mvCommand)
0099                         print("")
0100                         # sys.exit();
0101                         
0102 
0103     fin.close();
0104     rmCommand = "rm %(ofn)s"%{"ofn":relValDIR}
0105     print(rmCommand)
0106     os.system(rmCommand)
0107 
0108     if printDS:
0109         return
0110 
0111     # Copy the single pion scan part from Salavat's directory
0112     #    spFileName = "pi50scan%s_fullGeom_ECALHCAL_CaloTowers.root"%slabel #->original line
0113     #spFileName = "pi50scan%s_ECALHCAL_CaloTowers.root"%slabel 
0114     #cpCommand = "cp /afs/cern.ch/user/a/abdullin/public/pi50_scan/%s ."%spFileName
0115     #if not os.path.isfile(spFileName):
0116     #    print(cpCommand)
0117     #    os.system(cpCommand)
0118     #    print("")
0119 
0120 ##End Functions
0121 
0122 
0123 
0124 # This is a dictionary of flags to pull out the datasets of interest mapped to the desired name from the hcal script
0125 dsMCFlags = {'RelValTTbar_14TeV__':'TTbar', 'RelValZTT_14TeV__':'ZTT'}
0126 #ds2023Flags = {'RelValTTbar_14TeV__':'TTbar', 'RelValMinBias_14TeV__':'MinBias'}
0127 
0128 dsDATAFlags = {'297557__JetHT__':'JetHT','297557__ZeroBias__':'ZeroBias', #2017B
0129                '315489__JetHT__':'JetHT','315489__ZeroBias__':'ZeroBias', #2018A
0130                '317435__JetHT__':'JetHT','317435__ZeroBias__':'ZeroBias', #2018B
0131                '319450__JetHT__':'JetHT','319450__ZeroBias__':'ZeroBias', #2018C
0132                '320822__JetHT__':'JetHT','320822__ZeroBias__':'ZeroBias'} # 2018D
0133 
0134 
0135 # blank curl command 
0136 curlMC = "/usr/bin/curl -O -L --capath %(CERT_DIR)s --key %(USER_PROXY)s --cert %(USER_PROXY)s https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/%(relValDIR)s"
0137 curlDATA = "/usr/bin/curl -O -L --capath %(CERT_DIR)s --key %(USER_PROXY)s --cert %(USER_PROXY)s https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelValData/%(relValDIR)s"
0138 # output file name blank
0139 ofnBlank = "HcalRecHitValidationRelVal_%(sample)s_%(label)s_%(info)s.root"
0140 
0141 # default release file for MC stub
0142 #dfTextFile = "%s_%s.txt"
0143 dfTextFile = "%s"
0144 
0145 # ensure all required parameters are included
0146 if len(args) < 1:
0147     print("Usage: ./RelValHarvest.py -M (or -D) fullReleaseName")
0148     print("fullReleaseName : CMSSW_7_4_0_pre8")
0149     exit(0)
0150 
0151 #Make sure a Dataset is specified
0152 if not options.getMC and not options.getDATA and not options.get2023:
0153     print("You must specify a dataset:")
0154     print("    -M : Monte Carlo")
0155     print("    -D : Data")
0156     print("    -2 : 2023")
0157     exit(0)
0158 
0159 # gather input parameter
0160 label     = args[0]
0161 
0162 #Now we check if the release provided works
0163 pattern = re.compile(r'CMSSW_\d{1,2}_\d{1,2}_\d{1,2}.*') #We are checking if the string begins with CMSSW_?_?_?, posibly with two digits in each position
0164 match = pattern.match(label)
0165 if match:
0166     slabel = match.group().replace('CMSSW','').replace("_","")
0167 else:
0168     print(label, " is an invalid CMMSW release name.")
0169     print("Please provide a release name in the form: CMSSW_X_Y_Z")
0170     exit(0)
0171 
0172 # gather necessary proxy info for curl
0173 X509_CERT_DIR = os.getenv('X509_CERT_DIR', "/etc/grid-security/certificates")
0174 X509_USER_PROXY = os.getenv('X509_USER_PROXY')
0175 
0176 # modify label to shortened format (remove CMSSW and '_')
0177 #slabel = label.replace('CMSSW','').replace("_","")
0178 
0179 # get relval dir from label
0180 clabel = label.split("_")
0181 relValDIR = "%s_%s_%s_x"%(clabel[0], clabel[1], clabel[2])
0182 
0183 if options.getMC:
0184     getDataSets( dsFlags = dsMCFlags,
0185                  curl = curlMC,
0186                  label = label,
0187                  slabel = slabel,
0188                  relValDIR = relValDIR,
0189                  printDS = options.printDS,
0190                  camType = "MC")
0191 
0192 if options.get2023:
0193     getDataSets( dsFlags = ds2023Flags,
0194                  curl = curlMC,
0195                  label = label,
0196                  slabel = slabel,
0197                  relValDIR = relValDIR,
0198                  printDS = options.printDS,
0199                  camType = "2023")
0200 
0201 if options.getDATA:
0202     getDataSets( dsFlags = dsDATAFlags,
0203                  curl = curlDATA,
0204                  label = label,
0205                  slabel = slabel,
0206                  relValDIR = relValDIR,
0207                  printDS = options.printDS,
0208                  camType = "DATA")
0209