From 51f985321699a54b8e5acd7d1975955e45948717 Mon Sep 17 00:00:00 2001 From: anphi <anne.philipp@univie.ac.at> Date: Fri, 5 Oct 2018 17:19:05 +0200 Subject: [PATCH] added request parameter for writing mars requests into csv file --- python/FlexpartTools.py | 146 +++++++++++++++++++++++++++++++++------- python/getMARSdata.py | Bin 5393 -> 5755 bytes python/submit.py | 7 +- 3 files changed, 127 insertions(+), 26 deletions(-) diff --git a/python/FlexpartTools.py b/python/FlexpartTools.py index e45808e..67e8a74 100644 --- a/python/FlexpartTools.py +++ b/python/FlexpartTools.py @@ -97,6 +97,9 @@ def interpret_args_and_control(*args,**kwargs): parser.add_argument("--public", dest="public", default=0, help="Public mode - retrieves the public datasets") + parser.add_argument("--request", dest="request", default=0, + help="list all mars request in file mars_requests.dat \ + and skip submission to mars") args = parser.parse_args() @@ -188,6 +191,15 @@ def interpret_args_and_control(*args,**kwargs): if args.flexpart_root_scripts!=None: c.flexpart_root_scripts=args.flexpart_root_scripts + # set request attribute to control file + if args.request != '0': + c.request=args.request + + if c.request != '0': + marsfile = os.path.join(c.inputdir, 'mars_request.csv') + if os.path.isfile(marsfile): + os.remove(marsfile) + return args,c def install_args_and_control(): @@ -563,7 +575,8 @@ class Control: print('Analysis retrievals must have STEP = 0 (setting to 0)') self.type[i] = 0 - + if not hasattr(self,'request'): + self.request='0' return def __str__(self): @@ -641,6 +654,38 @@ class MARSretrieval: return + def print_infodata_csv(self, inputdir, request_number): + ''' + @Description: + Write all request parameter in alpabetical order into a "csv" file. + + @Input: + self: instance of MarsRetrieval + For description see class documentation. + + inputdir: string + The path where all data from the retrievals are stored. + + request_number: integer + Number of mars requests for flux and non-flux data. + + @Return: + <nothing> + ''' + + # Get all class attributes and their values as a dictionary + attrs = vars(self) + del attrs['server'] + + # open a file to store all requests to + with open(os.path.join(inputdir, 'mars_request.csv'), 'a') as f: + f.write(str(request_number) + ', ') + f.write(', '.join(str(attrs[key]) + for key in sorted(attrs.iterkeys()))) + f.write('\n') + + return + def dataRetrieve(self): attrs=vars(self).copy() @@ -708,8 +753,10 @@ class EIFlexpart: ############################################################## def __init__(self,c,fluxes=False): -# different mars types for retrieving reanalysis data for flexpart + # different mars types for retrieving reanalysis data for flexpart + # set a counter for the number of mars requests generated + self.mreq_count = 0 self.types=dict() try: if c.maxstep>len(c.type): # Pure forecast mode @@ -911,7 +958,7 @@ class EIFlexpart: return - def retrieve(self, server, public, dates,times, inputdir=''): + def retrieve(self, server, public, dates, request, times, inputdir=''): self.dates=dates self.server=server self.public=public @@ -970,13 +1017,22 @@ class EIFlexpart: gaussian=self.gaussian if self.basetime==None: + # increase number of mars requests + self.mreq_count += 1 MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=mfstream, type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - MR.displayInfo() - MR.dataRetrieve() + if request == "0": + MR.display_info() + MR.data_retrieve() + elif request == "1": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + elif request == "2": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + MR.display_info() + MR.data_retrieve() # The whole else section is only necessary for operational scripts. It could be removed else: # check if mars job requests fields beyond basetime. If yes eliminate those fields since they may not # be accessible with user's credentials @@ -1000,35 +1056,59 @@ class EIFlexpart: # A split of the MARS job into 2 is likely necessary. maxtime=elimit-datetime.timedelta(hours=24) mfdate='/'.join(('/'.join(mfdate.split('/')[:-1]),datetime.datetime.strftime(maxtime,'%Y%m%d'))) - + # increase number of mars requests + self.mreq_count += 1 MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - MR.displayInfo() - MR.dataRetrieve() + if request == "0": + MR.display_info() + MR.data_retrieve() + elif request == "1": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + elif request == "2": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + MR.display_info() + MR.data_retrieve() maxtime=elimit-datetime.timedelta(hours=12) mfdate=datetime.datetime.strftime(maxtime,'%Y%m%d') mftime='00' mftarget=self.inputdir+"/"+ftype+pk+'.'+mfdate+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb" - + # increase number of mars requests + self.mreq_count += 1 MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - - MR.displayInfo() - MR.dataRetrieve() + if request == "0": + MR.display_info() + MR.data_retrieve() + elif request == "1": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + elif request == "2": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + MR.display_info() + MR.data_retrieve() else: + # increase number of mars requests + self.mreq_count += 1 MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - MR.displayInfo() - MR.dataRetrieve() + if request == "0": + MR.display_info() + MR.data_retrieve() + elif request == "1": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + elif request == "2": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + MR.display_info() + MR.data_retrieve() else: maxtime=elimit-datetime.timedelta(hours=24) mfdate=datetime.datetime.strftime(maxtime,'%Y%m%d') @@ -1043,32 +1123,50 @@ class EIFlexpart: mftime='/'.join(times) else: mftime=times[0] - + # increase number of mars requests + self.mreq_count += 1 MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - MR.displayInfo() - MR.dataRetrieve() + if request == "0": + MR.display_info() + MR.data_retrieve() + elif request == "1": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + elif request == "2": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + MR.display_info() + MR.data_retrieve() if int(mftimesave.split('/')[0])==0 and int(mfstep.split('/')[0])==0 and pk!='OG_OROLSM__SL': mfdate=datetime.datetime.strftime(elimit,'%Y%m%d') mftime='00' mfstep='000' mftarget=self.inputdir+"/"+ftype+pk+'.'+mfdate+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb" - + # increase number of mars requests + self.mreq_count += 1 MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream, type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian, accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area, date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0]) - MR.displayInfo() - MR.dataRetrieve() - - - - print "MARS retrieve done... " + if request == "0": + MR.display_info() + MR.data_retrieve() + elif request == "1": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + elif request == "2": + MR.print_infodata_csv(self.inputdir, self.mreq_count) + MR.display_info() + MR.data_retrieve() + + + if request == "0" or request == "2": + print('MARS retrieve done ... ') + elif request == "1": + print('MARS request printed ...') def getFlexpartTime(self, type,step, time): cstep='{:0>3}'.format(step) diff --git a/python/getMARSdata.py b/python/getMARSdata.py index e09f9b157c7cf46534eece4da7f89d5cf10ebdbe..4aedb838451bc7407d2d2d6273e1eb27a95939f9 100755 GIT binary patch delta 379 zcmbQJ^;>6y2S>evf`S4Uh{#M+NY*P#Ei6qfE>W<xRZurjSI93y6Ejk`0xJe-C@9Lz zE74F2N-ZhMOfAdIOIL7pR!B)KNmNwQ1S?9-!7$ShUB8TmQUJ&tkoMffqGAQ83yKw$ zG#NI#b4+B`!!QJg!x+GpPQJozFo`E{vc8bg=4_rWCQi7gHh<<jh{T=znNM-@WkEqh zkY9+k17?Lb8^pFrJergFgj7MciGj??FV-tc&CM@M)kxFi;sl9ojunzZwzX7b4gh(J BZCwBW delta 75 zcmeyZGf``U2gl|o921x)a|)|7a!oc9)|~vCM`Ln_u-s-(-ZrMm4@IRnf8}2SW=!5M WBnnpJ2a=!c$;-QWudpOYY8C+MBpL7k diff --git a/python/submit.py b/python/submit.py index b211a97..0906a09 100755 --- a/python/submit.py +++ b/python/submit.py @@ -55,8 +55,11 @@ def main(): if c.outputdir[0]!='/': c.outputdir=os.path.join(calledfromdir,c.outputdir) getMARSdata(args,c) - prepareFLEXPART(args,c) - normalexit(c) + if c.request == '0' or c.request == '2': + prepareFLEXPART(args,c) + normalexit(c) + else: + normalexit(c) else: submit(args.job_template,c,args.queue) -- GitLab