- Using 'get' method of a dictionary to select case. Why does it keep selecting the wrong thing?
- di_eqns = {"PSME": Pred_PSME(liLn), "ABAM":Pred_ABAM(liLn),
- "ABCO":Pred_Abies(liLn), "ABGR":Pred_Abies(liLn),
- "ABLA":Pred_Abies(liLn), "ABMA":Pred_Abies(liLn),
- "ABSH":Pred_Abies(liLn), "ABPR":Pred_ABPR(liLn),
- "CADE27":Pred_Cedar(liLn), "CHLA":Pred_Cedar(liLn),
- "CHNO":Pred_Cedar(liLn), "THPL":Pred_Cedar(liLn),
- "LALY":Pred_LALY(liLn), "LAOC":Pred_LAOC(liLn),
- "PIEN":Pred_PIEN(liLn), "PISI":Pred_PISI(liLn),
- "PIAL":Pred_Pinus(liLn), "PIJE":Pred_Pinus(liLn),
- "PIMO3":Pred_Pinus(liLn), "PICO":Pred_PICO(liLn),
- "PILA":Pred_PILA(liLn), "PIPO":Pred_PIPO(liLn),
- "TSHE":Pred_TSHE(liLn), "TSME":Pred_TSME(liLn),
- "JUOC":Pred_JUOC(liLn), "TABR":Pred_TSHE(liLn),
- "ALRU2":Pred_ALRU2(liLn), "ACCI":Pred_SMBGr(liLn),
- "ACGL":Pred_SMBGr(liLn), "ACMA3":Pred_ACMA3(liLn),
- "CONU4":Pred_ACMA3(liLn), "ALRH2":Pred_AACWGr(liLn),
- "SASC":Pred_AACWGr(liLn), "SALIX":Pred_AACWGr(liLn),
- "ARME":Pred_ARME(liLn), "BEPA":Pred_BEPA(liLn),
- "BEPAC":Pred_BEPA(liLn), "CHCH7":Pred_CHCH7(liLn),
- "FRLA":Pred_MHGr(liLn), "PREM":Pred_MHGr(liLn),
- "PRVI":Pred_MHGr(liLn), "PRUNU":Pred_MHGr(liLn),
- "LIDE3":Pred_LIDE3(liLn), "POBAT":Pred_POBAT(liLn),
- "POTR5":Pred_POTR5(liLn), "QUCH2":Pred_QUCH2(liLn),
- "QUGA4":Pred_QUGA4(liLn), "QUKE":Pred_QUKE(liLn),
- "UMCA":Pred_UMCA(liLn)}
- try: li_pred = di_eqns.get(liLn[2])
- ['1347189', '20571', 'PIEN', 'Picea engelmannii', 'Y', 'Y', '66.294',
- '0.3452', '35.7418', '', '5.0996', '0', '1', '1.1324', '3.2803', '2.3057',
- '16.7282', '5520.306', '127.30', '70.73', '92.10', '0.00', '5.68', '2.37',
- '7.25', '79.16', '76.79', '290.15', '219.41', '135.37', '0.00', '0.00',
- '951.78', '719.74', '259.68', '251.89', '444.05', '0.00', '0.00', '',
- '12.70', '10.16', '15.24', '0.02', '0.04', '0.19', '0.19', '0.00', '0.00',
- '0.42', '0.32', '0.11', '0.11rn']
- def Main():
- srcf = open(bkp, 'r')
- old_fcid = 0
- li_fBQI = []
- i = 0
- for line in srcf:
- liLn = line.split(',')
- liLn = stripquotes(liLn)
- #Check if it's the first line, if so, jump to next line.
- if len(liLn) < 2: continue
- if HdrLine(liLn[:2]): continue
- fcid = liLn[1]
- #Check line fcid against last fcid
- if old_fcid != 0 and fcid != old_fcid:
- #Write the FCID BQI tallies to file
- Write_fBQIs(old_fcid, li_fBQI)
- #Reset FCID BQI tallies
- li_fBQI = []
- old_fcid = fcid
- #Calc BQI's for the tree
- li_tBQI = BQI_Calc(liLn)
- #Add tree BQI's to the FCID tallies
- li_fBQI = AddBQI(li_tBQI, li_fBQI)
- if i % 1000 == 0: print 'Finished line #' + str(i)
- i += 1
- #ADD: Write last FCID's BQI's to file
- Write_fBQIs(old_fcid, li_fBQI)
- srcf.close()
- def BQI_Calc(liLn):
- di_eqns = {"PSME": Pred_PSME(liLn), "ABAM":Pred_ABAM(liLn),
- "ABCO":Pred_Abies(liLn), "ABGR":Pred_Abies(liLn),
- "ABLA":Pred_Abies(liLn), "ABMA":Pred_Abies(liLn),
- "ABSH":Pred_Abies(liLn), "ABPR":Pred_ABPR(liLn),
- "CADE27":Pred_Cedar(liLn), "CHLA":Pred_Cedar(liLn),
- "CHNO":Pred_Cedar(liLn), "THPL":Pred_Cedar(liLn),
- "LALY":Pred_LALY(liLn), "LAOC":Pred_LAOC(liLn),
- "PIEN":Pred_PIEN(liLn), "PISI":Pred_PISI(liLn),
- "PIAL":Pred_Pinus(liLn), "PIJE":Pred_Pinus(liLn),
- "PIMO3":Pred_Pinus(liLn), "PICO":Pred_PICO(liLn),
- "PILA":Pred_PILA(liLn), "PIPO":Pred_PIPO(liLn),
- "TSHE":Pred_TSHE(liLn), "TSME":Pred_TSME(liLn),
- "JUOC":Pred_JUOC(liLn), "TABR":Pred_TSHE(liLn),
- "ALRU2":Pred_ALRU2(liLn), "ACCI":Pred_SMBGr(liLn),
- "ACGL":Pred_SMBGr(liLn), "ACMA3":Pred_ACMA3(liLn),
- "CONU4":Pred_ACMA3(liLn), "ALRH2":Pred_AACWGr(liLn),
- "SASC":Pred_AACWGr(liLn), "SALIX":Pred_AACWGr(liLn),
- "ARME":Pred_ARME(liLn), "BEPA":Pred_BEPA(liLn),
- "BEPAC":Pred_BEPA(liLn), "CHCH7":Pred_CHCH7(liLn),
- "FRLA":Pred_MHGr(liLn), "PREM":Pred_MHGr(liLn),
- "PRVI":Pred_MHGr(liLn), "PRUNU":Pred_MHGr(liLn),
- "LIDE3":Pred_LIDE3(liLn), "POBAT":Pred_POBAT(liLn),
- "POTR5":Pred_POTR5(liLn), "QUCH2":Pred_QUCH2(liLn),
- "QUGA4":Pred_QUGA4(liLn), "QUKE":Pred_QUKE(liLn),
- "UMCA":Pred_UMCA(liLn)}
- try:
- li_pred = di_eqns.get(liLn[2])
- except:
- print 'nn', 50*'-', 'ERROR: Couldn't find equations for the spp',
- 'code:', liLn[2]
- #Calc derivative quantities
- .....and the function continues from there
- def Pred_PSME(liLn):
- dbh = float(liLn[6])
- fol = exp(log(float(liLn[19])) + pqty(.0627, 123))
- lbr = exp((-3.6941 + 2.1382*log(dbh)) + pqty(.057, 123))
- dbr = exp((-3.529 + 1.7503*log(dbh)) + pqty(.079, 85))
- sw = exp(log(float(liLn[20])) + pqty(.0311, 99))
- try:
- sb = exp(log(float(liLn[21])) + pqty(.0324, 99))
- except:
- Badtree(liLn)
- print dbh, liLn
- ts = exp(-3.0396 + 2.5951*log(0.865 * mtd) + pqty(.0311, 99)) +
- exp(-4.3103 + 2.4300*log(0.865 * mtd) + pqty(.0324, 99))
- br = lbr +dbr
- agb_nf = br + sw + sb
- agb = agb_nf + fol
- return [fol, br, sw, sb, agb, agb_nf, ts]
- def Pred_ARME(liLn):
- dbh = float(liLn[6])
- agb_nf = float(liLn[27]) + tvariate(57) * 1.23 * (1 + 1/60)**(1/2)
- agb = agb_nf / (1 - folpct)
- fol = agb - agb_nf
- br = sw = sb = ts = 0
- return [fol, br, sw, sb, agb, agb_nf, ts]
- di_eqns = {"PSME":Pred_PSME, "ABAM":Pred_ABAM,
- "ABCO":Pred_Abies, "ABGR":Pred_Abies,
- "ABLA":Pred_Abies, "ABMA":Pred_Abies,
- "ABSH":Pred_Abies, "ABPR":Pred_ABPR,
- "CADE27":Pred_Cedar, "CHLA":Pred_Cedar,
- "CHNO":Pred_Cedar, "THPL":Pred_Cedar,
- "LALY":Pred_LALY, "LAOC":Pred_LAOC,
- "PIEN":Pred_PIEN, "PISI":Pred_PISI,
- "PIAL":Pred_Pinus, "PIJE":Pred_Pinus,
- "PIMO3":Pred_Pinus, "PICO":Pred_PICO,
- "PILA":Pred_PILA, "PIPO":Pred_PIPO,
- "TSHE":Pred_TSHE, "TSME":Pred_TSME,
- "JUOC":Pred_JUOC, "TABR":Pred_TSHE,
- "ALRU2":Pred_ALRU2, "ACCI":Pred_SMBGr,
- "ACGL":Pred_SMBGr, "ACMA3":Pred_ACMA3,
- "CONU4":Pred_ACMA3, "ALRH2":Pred_AACWGr,
- "SASC":Pred_AACWGr, "SALIX":Pred_AACWGr,
- "ARME":Pred_ARME, "BEPA":Pred_BEPA,
- "BEPAC":Pred_BEPA, "CHCH7":Pred_CHCH7,
- "FRLA":Pred_MHGr, "PREM":Pred_MHGr,
- "PRVI":Pred_MHGr, "PRUNU":Pred_MHGr,
- "LIDE3":Pred_LIDE3, "POBAT":Pred_POBAT,
- "POTR5":Pred_POTR5, "QUCH2":Pred_QUCH2,
- "QUGA4":Pred_QUGA4, "QUKE":Pred_QUKE,
- "UMCA":Pred_UMCA}
- try: li_pred = di_eqns.get(liLn[2])(liLn)
- di_eqns = {
- # for better legibility, arrange the following lines in alphabetical key order;
- # then a duplicate key entry is easier to see.
- "PSME": Pred_PSME,
- "ABAM": Pred_ABAM,
- "ABCO": Pred_Abies,
- "ABGR": Pred_Abies,
- # et cetera
- }
- if debug: print "liLn", liLn
- handler_func = di_eqns[liLn[2]] # be prepared for KeyError here
- if debug: print "handler", repr(handler_func)
- li_pred = handler_func(liLn)
- if debug: print "li_pred", repr(li_pred)
- for guff in f:
- liLn = guff.split(',')