Changeset 51f9853 in flex_extract.git for python/FlexpartTools.py


Ignore:
Timestamp:
Oct 5, 2018, 3:19:05 PM (6 years ago)
Author:
anphi <anne.philipp@…>
Branches:
master, ctbto, dev
Children:
ceea034
Parents:
aa1af8c
Message:

added request parameter for writing mars requests into csv file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • python/FlexpartTools.py

    r68f5e1c r51f9853  
    9898                        help="Public mode - retrieves the public datasets")
    9999
     100    parser.add_argument("--request", dest="request", default=0,
     101                        help="list all mars request in file mars_requests.dat \
     102                        and skip submission to mars")
    100103
    101104    args = parser.parse_args()
     
    188191    if args.flexpart_root_scripts!=None:
    189192        c.flexpart_root_scripts=args.flexpart_root_scripts
     193
     194    # set request attribute to control file
     195    if args.request != '0':
     196        c.request=args.request
     197
     198    if c.request != '0':
     199        marsfile = os.path.join(c.inputdir, 'mars_request.csv')
     200        if os.path.isfile(marsfile):
     201            os.remove(marsfile)
    190202
    191203    return args,c
     
    564576                    self.type[i] = 0
    565577
    566 
     578            if not hasattr(self,'request'):
     579                self.request='0'
    567580
    568581        return
     
    642655        return
    643656
     657    def print_infodata_csv(self, inputdir, request_number):
     658        '''
     659        @Description:
     660            Write all request parameter in alpabetical order into a "csv" file.
     661
     662        @Input:
     663            self: instance of MarsRetrieval
     664                For description see class documentation.
     665
     666            inputdir: string
     667                The path where all data from the retrievals are stored.
     668
     669            request_number: integer
     670                Number of mars requests for flux and non-flux data.
     671
     672        @Return:
     673            <nothing>
     674        '''
     675
     676        # Get all class attributes and their values as a dictionary
     677        attrs = vars(self)
     678        del attrs['server']
     679
     680        # open a file to store all requests to
     681        with open(os.path.join(inputdir, 'mars_request.csv'), 'a') as f:
     682            f.write(str(request_number) + ', ')
     683            f.write(', '.join(str(attrs[key])
     684                        for key in sorted(attrs.iterkeys())))
     685            f.write('\n')
     686
     687        return
     688
    644689    def dataRetrieve(self):
    645690        attrs=vars(self).copy()
     
    709754
    710755    def __init__(self,c,fluxes=False):
    711 # different mars types for retrieving reanalysis data for flexpart
    712 
     756        # different mars types for retrieving reanalysis data for flexpart
     757
     758        # set a counter for the number of mars requests generated
     759        self.mreq_count = 0
    713760        self.types=dict()
    714761        try:
     
    912959
    913960
    914     def retrieve(self, server, public, dates,times, inputdir=''):
     961    def retrieve(self, server, public, dates, request, times, inputdir=''):
    915962        self.dates=dates
    916963        self.server=server
     
    9711018
    9721019                if self.basetime==None:
     1020                    # increase number of mars requests
     1021                    self.mreq_count += 1
    9731022                    MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=mfstream,
    9741023                                      type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian,
     
    9761025                                  date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0])
    9771026
    978                     MR.displayInfo()
    979                     MR.dataRetrieve()
     1027                    if request == "0":
     1028                        MR.display_info()
     1029                        MR.data_retrieve()
     1030                    elif request == "1":
     1031                        MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1032                    elif request == "2":
     1033                        MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1034                        MR.display_info()
     1035                        MR.data_retrieve()
    9801036# The whole else section is only necessary for operational scripts. It could be removed
    9811037                else: # check if mars job requests fields beyond basetime. If yes eliminate those fields since they may not
     
    10011057                            maxtime=elimit-datetime.timedelta(hours=24)
    10021058                            mfdate='/'.join(('/'.join(mfdate.split('/')[:-1]),datetime.datetime.strftime(maxtime,'%Y%m%d')))
    1003 
     1059                            # increase number of mars requests
     1060                            self.mreq_count += 1
    10041061                            MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream,
    10051062                                              type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian,
     
    10071064                                                date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0])
    10081065
    1009                             MR.displayInfo()
    1010                             MR.dataRetrieve()
     1066                            if request == "0":
     1067                                MR.display_info()
     1068                                MR.data_retrieve()
     1069                            elif request == "1":
     1070                                MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1071                            elif request == "2":
     1072                                MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1073                                MR.display_info()
     1074                                MR.data_retrieve()
    10111075
    10121076                            maxtime=elimit-datetime.timedelta(hours=12)
     
    10141078                            mftime='00'
    10151079                            mftarget=self.inputdir+"/"+ftype+pk+'.'+mfdate+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb"
    1016 
     1080                            # increase number of mars requests
     1081                            self.mreq_count += 1
    10171082                            MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream,
    10181083                                              type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian,
    10191084                                                accuracy=self.accuracy,grid=pv[3],target=mftarget,area=area,
    10201085                                                date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0])
    1021 
    1022                             MR.displayInfo()
    1023                             MR.dataRetrieve()
     1086                            if request == "0":
     1087                                MR.display_info()
     1088                                MR.data_retrieve()
     1089                            elif request == "1":
     1090                                MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1091                            elif request == "2":
     1092                                MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1093                                MR.display_info()
     1094                                MR.data_retrieve()
    10241095                        else:
     1096                            # increase number of mars requests
     1097                            self.mreq_count += 1
    10251098                            MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream,
    10261099                                              type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian,
     
    10281101                                                date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0])
    10291102
    1030                             MR.displayInfo()
    1031                             MR.dataRetrieve()
     1103                            if request == "0":
     1104                                MR.display_info()
     1105                                MR.data_retrieve()
     1106                            elif request == "1":
     1107                                MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1108                            elif request == "2":
     1109                                MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1110                                MR.display_info()
     1111                                MR.data_retrieve()
    10321112                    else:
    10331113                        maxtime=elimit-datetime.timedelta(hours=24)
     
    10441124                                else:
    10451125                                    mftime=times[0]
    1046 
     1126                        # increase number of mars requests
     1127                        self.mreq_count += 1
    10471128                        MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream,
    10481129                                          type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian,
     
    10501131                                      date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0])
    10511132
    1052                         MR.displayInfo()
    1053                         MR.dataRetrieve()
     1133                        if request == "0":
     1134                            MR.display_info()
     1135                            MR.data_retrieve()
     1136                        elif request == "1":
     1137                            MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1138                        elif request == "2":
     1139                            MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1140                            MR.display_info()
     1141                            MR.data_retrieve()
    10541142
    10551143                        if int(mftimesave.split('/')[0])==0 and int(mfstep.split('/')[0])==0 and pk!='OG_OROLSM__SL':
     
    10581146                            mfstep='000'
    10591147                            mftarget=self.inputdir+"/"+ftype+pk+'.'+mfdate+'.'+str(os.getppid())+'.'+str(os.getpid())+".grb"
    1060 
     1148                            # increase number of mars requests
     1149                            self.mreq_count += 1
    10611150                            MR= MARSretrieval(self.server, self.public, dataset=self.dataset, marsclass=self.marsclass, stream=self.stream,
    10621151                                              type=mftype, levtype=pv[1], levelist=pv[2],resol=self.resol, gaussian=gaussian,
     
    10641153                                          date=mfdate, time=mftime,number=self.number,step=mfstep, expver=self.expver, param=pv[0])
    10651154
    1066                             MR.displayInfo()
    1067                             MR.dataRetrieve()
    1068 
    1069 
    1070 
    1071         print "MARS retrieve done... "
     1155                            if request == "0":
     1156                                MR.display_info()
     1157                                MR.data_retrieve()
     1158                            elif request == "1":
     1159                                MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1160                            elif request == "2":
     1161                                MR.print_infodata_csv(self.inputdir, self.mreq_count)
     1162                                MR.display_info()
     1163                                MR.data_retrieve()
     1164
     1165
     1166        if request == "0" or request == "2":
     1167            print('MARS retrieve done ... ')
     1168        elif request == "1":
     1169            print('MARS request printed ...')
    10721170
    10731171    def getFlexpartTime(self, type,step, time):
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG