From a78003bbc162f01333710c397046d35e5b9c3895 Mon Sep 17 00:00:00 2001 From: Nicholas Fette Date: Tue, 17 Mar 2026 14:24:30 -0700 Subject: [PATCH 1/4] Create placholder function export_wide_table_from_sqlite --- scripts/result2.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/result2.py b/scripts/result2.py index ef5abe1a..3337cbbf 100644 --- a/scripts/result2.py +++ b/scripts/result2.py @@ -891,6 +891,13 @@ def gather_sim_data_to_csv_long( # df_sim_data = pd.DataFrame.from_records(records) # df_sim_data.to_csv(f, index=False, header=(i==0)) +def export_wide_table_from_sqlite(): + """Save a CSV report in wide table format for manual review. + + Requires that data are already stored in long table format in a database.""" + + pass + def build_cli_parser(parser: argparse.ArgumentParser, study_kwargs = {}, queryfile_kwargs = {}, From 3df69221f8356bb26c5e37ba1cada47ae9eeff14 Mon Sep 17 00:00:00 2001 From: Nicholas Fette Date: Tue, 17 Mar 2026 14:32:04 -0700 Subject: [PATCH 2/4] CZ2025 peak date lookup based on CZ2025 for DEER demand output --- scripts/result2.py | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/scripts/result2.py b/scripts/result2.py index 3337cbbf..caa64dff 100644 --- a/scripts/result2.py +++ b/scripts/result2.py @@ -32,7 +32,7 @@ # Do you want to append "(units)"" in the column name, if available? APPEND_UNITS = False # Which definition of peak period dates to use? -PEAK_VERSION = 'E5152' # 'E5152', 'E5350' +PEAK_VERSION = 'E5152' # 'E5152', 'E5350', 'CZ2025' ##STEP 0: Setup (import all necessary libraries) @@ -127,6 +127,40 @@ def get_deer_peak_day_E5350(bldgloc: str): ]) return peakperspec[bldgloc] +def get_deer_peak_day_CZ2025(bldgloc: str): + """Return a for DEER peak period start day lookups. + Dates are from CPUC assessment posted to CEDARS on 2026-03-10. + See https://cedars.cpuc.ca.gov/deer-resources/tools/energy-plus/resource/29/history/ + The dates were derived using CZ2025 weather data. + + Input: + BldgLoc: str + CEC climate zone, e.g. CZ01 through CZ16. + + Returns: + PkDay: int + 1-based day number index for first day of the 3-day DEER peak period. + """ + peakperspec = dict([ + ("CZ01",266), + ("CZ02",203), + ("CZ03",266), + ("CZ04",217), + ("CZ05",266), + ("CZ06",266), + ("CZ07",271), + ("CZ08",168), + ("CZ09",168), + ("CZ10",168), + ("CZ11",187), + ("CZ12",217), + ("CZ13",187), + ("CZ14",187), + ("CZ15",238), + ("CZ16",187), + ]) + return peakperspec[bldgloc] + @cache def get_deer_peak_multipliers(BldgLoc: str, days=3, start_hr=16, end_hr=21, dst=True, version=PEAK_VERSION): @@ -161,6 +195,8 @@ def get_deer_peak_multipliers(BldgLoc: str, peak_day = get_deer_peak_day_E5152(BldgLoc) elif version == 'E5350': peak_day = get_deer_peak_day_E5350(BldgLoc) + elif version == 'CZ2025': + peak_day = get_deer_peak_day_CZ2025(BldgLoc) else: raise ValueError(f'Unrecognized peak date version: {version}') # In case start_hr and end_hr are given in daylight saving time (DST), shift back to standard time. From c5392bd2d620e417b9a3096dd2f1e58ed5f305e6 Mon Sep 17 00:00:00 2001 From: Nicholas Fette Date: Tue, 17 Mar 2026 14:35:55 -0700 Subject: [PATCH 3/4] Revise query output labels in long-to-wide conversion --- scripts/result2_helper_long2wide.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/result2_helper_long2wide.sql b/scripts/result2_helper_long2wide.sql index e979c192..35eadcf7 100644 --- a/scripts/result2_helper_long2wide.sql +++ b/scripts/result2_helper_long2wide.sql @@ -1,10 +1,10 @@ with ColumnUnits as ( -SELECT distinct "ColumnName", "Units" +SELECT distinct "ColumnName", "RowName", "Units" FROM "sim_tabular" ) SELECT st.filename, -cu."ColumnName" || " (" || cu."Units" || ")" as "ColumnUnits", +cu."ColumnName" || '/' || cu."RowName" || ' (' || cu."Units" || ")" as "user_column_name", sum(Value) as "Value" from sim_tabular st join ColumnUnits cu From 4cbd9f0c093fbd52f6307d8b25c29e3764df3e4d Mon Sep 17 00:00:00 2001 From: Nicholas Fette Date: Tue, 17 Mar 2026 14:48:21 -0700 Subject: [PATCH 4/4] Document historical versions of peak dates --- scripts/peak dates.xlsx | Bin 0 -> 11707 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 scripts/peak dates.xlsx diff --git a/scripts/peak dates.xlsx b/scripts/peak dates.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6b112ba9a13d2a5c2092b2e7439805ee39193646 GIT binary patch literal 11707 zcmeHtg;yR~^7f0n2Zx|9?k>UI2_D?x#odFuy99yJci;|u09laCoY2)mS|i4up3WA z2tO>#tYI0$8QA4kDAID((8YX~B#lw)Z$%>Pg@$Bs{&_Qtp-dn{3wvLThe}5k1UEb+ zCxS^e34;o6>ARRpS}sOb`?SZuo#h`_X!4Fp(zBg>wFm9M2SQ9h!Xe{?B4t>@N3wIOKC5-!nAp8b<|T)ZE~i zSQqxkp}2yVEesLQ4k|^$Z|~O3W*A@9>*WOkp!gS#)~Pa)UB5n&eWf76D@XMlOspIk z8GbwekDLF+g#6Rg%i`q}{=vCZQehJSJvJ|9S)M*Zn2d`pugcIt9LCAPI<6*hM}QwNEWv*+w4VinY)?0O_Pvz zr*dhFp($-F%8?mbCljB!5dDfe!Jv)@hw+6V7>h5>PqSa{!#BhG3a~k0<&*N@ss_&N z!-R=+pM~Ut10;b^ZrS7MG|WLqL$jp{uR$x4n;&?p%I4glD#J_%9#VHbW2??9(ew_C zCog*Wj6o$*HuQUz35fw<_KlBbE!)M&XZK!CxSrC%^CABTqM~oF?&{x3GN1*73xWUu zreFOU%InIwSuwiWI#?Ro+FJhR#L85yZS%NLpS`D_V0vA#)6XjkN>K&Xi(g4!(Uw4? z%D~k}qd%WYp<4IyaezGkWY1~XnNj+9k@cOo=^n1*gNd?wKWhRZ_Sh^r(-$OfIW&QW}FD0i4UTu?JWja2d* z<p0mG|R=c8{wGBGa+9zYEba2ZMQSk_3L^%>*bED z824#GZ>+=~rRjwR$=-1pdisC8g)|tY=`$9=Opg%vLw2=)D%pcRcBdBH?Dzk8)MPxV zk7Ign z6zMNb$m{<14FnA@KI2e|NmE7rv_PbLpG<8*v5EuMSr`??dE_u>P=&nU7fPOO@+(H^?3 zQ*M1NDAQL8J?4)U5c4UkNM=W;a^xN$D;sy^P6ui(SpifeXM@ciusZ&+|(6 zIK$5dFPR5pHO{Nk`FUzhh{Vf@h(92@>&E7UZX0ozJH)nTLJ!31^Ul7t%46VRAI;`K zz77pA<3}b8oC%A_Ag+DCA#26viq7lp5=z97+oocpq^L?B8Ob%r}uov%a>9Lw4` zsnst{bs;XY7VNy^TUtaidR@bFwct2G|n((Tjx zIT4IQdBXX)w>4|0-i~!^i*pAeXJQee`ycPFJGga4t}%J1xm&oW?VoQP+}-of#F|?> z#-g1wb^3>n-CmXqnIApVp4s0TJQ)d>=WKWo7+XZKa6kSnW8+~Gk0D>52)wcu4*(1H z%GiH+wmdefKu3WyQy}{GOZ$&kWO83f{lW#l*-G>a1^Mj4ZU%T*m4% z5DEfnaeqO*McpE9yHNiVe`t|m0C>-;?H9yl#SjvEz9p{WjI&sy1Iwj6enUBjgaVZ5 z33g(EnKvOyegcUN#NjzH<1dyiB^GRayiZecy9ih;=acT%51fWHFF$Rh;cep+THtAuA8u%v_#B#Ldvy_j{;)W{g1s+h%-C{eBIU z0ppZwY>{E!x7`uq?4w&8Jh?q2*8!?K9hm_#(n-BtLo#4K4v3X-3of@SMZBIDBS&>- z68p48Ztw~Q4^oL1Z8ZWbe0sTyo;+Qx0+WMRo{xiNi=@_E zR?f4PEhrLTkr-*OvBP?bvqmf|2%xBEe^y9eKM~Q#nJB@A3GuY{Gey}`oY{9J_kD&B zxXVBHWW33IhL!irg4Txw@eyPxyubE`ay=geB*CF|((nl&t^1qU@vK>PY@xn{;P~lv z`DT8gdLA!tBG2`S@O<3ZXv>^l&%3im+@jW*S64Wz3D5=9>jW6?8dI@YiK6%2S#kta*m7;K7 zEI{QiKSPIl%uL@zMM}XW0HRX^6$-lFrq1I;g`q>u!{NhbS#20Ii3Rgz_|x=prJ^yz zW)U(U&F%({C8c;=wQzZy34QWYPACnD!1_c|AY{YRF^Dc@7uK&`XapRrHmNN!BC7?34O}BxBkVd72bSZvuh0AF zU4lWn!ZDY_LlA5oFkkCsgzh{OF1`_DAD9SqG*3i`$vbe-ix6swt7>rmOSk83M*9VpBAZVdjXaUF14QHBf z>8jXbA=qggO9qiJaT5mL;`VFo1bL&71hVHd4-)Rh9CZ-+IF;$u&UsfpITaGwX?h{t zg6lYaPeimYYrpEbH=C3X9LtF{ID#gyp^tXPh?WC`N$Z=62xt?(gTlA0@9IhqG>+2K zda8rpQ}gAP8{JW6G#<>HMA?^S--=;$&MxKqRjMutZG#lAWfrwYt^SJOyYDLtZ$hbykd%1 z!ROdChL+yn48luq22I`v#6NMQI2h4(V&0+fB6Dihsj3Zj1JokDP8jU=>|Wg{(!%JOx?sD*gD1O5(buFF-7s94xVShuan2}7$qnA6@vkT&_BNEMa& zuv~rQQdc=r4~x|dwp1cg>(MFfCt?kTi`8%~Mi1pFi=n!=z~_GWg?~0EmdzCEKD8c7 zT$N;>t0?dw*VklCfSuQMpsKOX!D`a>|9rf20$ULmd0aX5rFCxUd!V>x3qbK;DqFDd#p%h^umMim^PzkrUo4$|b#i(UFG=G{<`C zkh`43oS_5mcl_50l@vCIg3LuAB#+bW1$I?R5t&P-$Sd{jff;p+D!|rEtFI^vf*ePUm@x<4q}v;6T58<}@LSW3#^Bb2$!h(W_+{i;nz#%9 zSZH<2d680M-(BZE3;KJhaZ4J-d`*)g=E|13Gt{H?Bpwz+h!{ANFup|ebc?31!82Wl zy&PY9P4lXIv4ols*(-M4jlM1}P#=%cpr;?GQ`CoA(0UBVj%%+fyJM=$Wz|^EeQvVD zFZfu4HB}+k^g=<$hKw;Bo{+KBikp8?xdxe3uJ9ka!dsG?gX zYe`JDs(NtW^0Y9+GAXCviv9Gf>&BMwqt0DXfZCUs9?? z6N3SG#h2D`CKGL1B=%kQ@ks{lnRYqu%D#5osUZ{{Ray>=#<(M_kF4C4=}b-5OmmKF zxwaIQi$K{V?W+8w(}s3jH0&!)s|;omG2NNli74#`^9)tH*WFyOgMO&T z8;4e3`1H`qU|8bD*)+nmtK9&~!2HISe8v_URimZb!8piE0_(T+8HSu=HWii4-Tn%` zQemqiN`{GjZme|KmDG!^9aGUmN6m|p)OrQ){S>zDxuH;4Nxe^rXdlY@biJG~aKUw6 zko=UGP{wN^q7}Q?NzmG_P`%;1NtPq3Kmx6<)I^N#g(_Vct*5je5wAIPiZk)gz*&JB2H2lA6Z*>Us}7zx@2l28IFU2YHl}~0hPKx z33TJXQFF!O8`_bF9bmFFwt+$9(YA92+eW<;qt<@j@*&)OHU`{9M1r~Pql!_#KwKX# zMUDP=`P*RTR=-xL5e5K2BmFHG`+G3sWNu<@!ub37_c-QQb1VkG0kZ>U@I`P`XMXg% zrvdk5A?NL>$7Yhwj-*s#upi&F%8!-6&Ss6cY(3FhdHxH_CXmelarkxmOeKNV1 z(02~vpEkq8+nxpE4P6;oXV3Va_u2*qIAa{|5=v8Z5J<^)r4|rQ@86ORMNWXKk3AG9 zwxw4@ls1i{aTO#Nv@i}nI-G6CoNhs2#-$R+D(rxrdc-Lm2-VS;F-7hYX2wH$YuTY0 zK{XhD_>ABM=V7FV^s(bZ6tmpB#0{KTeoeaXk=bEt2Wu--M9htHiL(%_6yvoPhEh1k zKi^HlHYGz)OhTFJpzNhxjleZ2y*1RJxz9QJu{TlrtwpO3rU_Nq(^$sA=qhDo7yRmK za+ErG<|O}_%4#8?+#5pQ0-Mv~=%t(=qO%6~9jO0H8LK(llS`_RO!o0~PRk6u1xI^+ zM|}_XceY1^wP{(!E?%c@-m!vpyuEX9sHv(b2EIOjN(;TRzI$A3BY-(^PdJ5SxpH+U zYv`74Nu#I;jdJk9TWR}lAmXC|s^IszC%Z>mx@Z(w1}RJ3PSI0D5WnO&q@3!4CqT0e zeP@?*z18jcCSw1^{h|+>G4ln1aLOc~MKyVqL_XQ1iRk%x;N|JY^?S$5^9qXI^H5ZZ z$r>UusmmyAC5&qR7WwRe!2$(tB>7-8~*K#x%)H$fx# zbb+++bSYU3I!_+e#}@C?as$iGpvOg$+9=jqd%F#={K17 z%O-+m04O)wKm-M~p=rJ*jU@XR=61U=zRs}SjVYR-YiS)C7__hEnJgJpt>kd;C13g{ z;Ot*Bn~9n(df_@7w5ZA&;3La z+`H%W$gDNMp+x0zI_)0F%}5sV(+hQz%h{noN~PbMW`abNnP+zxN?`96e(G)mCga%o zPFb4HwSyn+ogbunfeK{kvk8!(y;Y&H?d^hj2p5VG?_&c?he4l6HmAKo+S5_7>{PP-$A@iNW}@O~=;uWVd;) zu&;}SKOkFef=*RB4V@I-dQJCDHsFFTQMUR(i4y2eiT<9o3P+&8@-~@u8Q0c|pxqA6 z4@OlCS!+%@{)kOq5y@{k>&GBjE&WOLDN=LE)SIEuMxKH~zo|zp4pTQ&VOwuPQ$?0} zP!{2gZ3k}<4u3dGWXfs z%wy!xFdCq|Pe;L(ZJ{luFpB}9j`O@$teXpnK${+TkwkrN3~Afr?v(s^Du8LndE;DY zS1hKGZdii{k5_&ha$YA-y5ImIGo0oR{Ej~F1{*Oh!kXdI26Y{^$s$kUmhXMnZ3P#? z$O^2+eBmetVk#khjbw>PFH87ASr87}YrcAOeP!F@2c!ry-r=co@+saCZrkt%?Q|a1 zrwkbinU);iO^4Pyxgb#U%V3S`McuCi)RF7?wM^vx0Dh`Ya*HJC#VZ%|bd?7Z5J9Gu z?!OuDsZT2l?Xcuk&U`8tsURgXN*3o@R~lY=7m$u*A~UdRZLQcml7)-dY}tLFbXIlN zdeZJ)IiE~>J0SlRqzMwUO+U4I*mU`UUTTP4r(x3c=rMj`6;B9R;+XDs*VZ9go;sRa zfP1!Q@VWNtefqLz8LV`Rf@92DeR|*wx^2r%!0JuW9B*$y6`P+e^7x3^iq`{T`~a#v znmQfti7DJ_+B6FvW`Bb+zuta|tZ5j9qMO2=e9{z?!Ax!clJ(n!Sqkq zYKv-S-d+?%sP;X+`FPixA#LZ`3H3A9kr2adMvs2awUezc<|XM zPQkdki{S1Cj$D;oiMwkibhykb(M&(>5K6ePbN85`_$*8ZrDq!gl2OOABq&DVyDS7RbP_i;||-Q9JS+B*)w18KM97ZK%S@u$WPRZy)Fx@?aX?toHut`6cOa2!B&FDe>ii(b<9q+l_` zrMx$^?$9qO+R~C-S0LHR@WN1<-rev$Y02(bTZ5Xd)H2*q_LbwWU!|pT@^;~)Bzizi z0N<2GtqLab%x>}RfdvTL&GR+I&nkVqqKD*&o_rB9h3(5*Gd4*Q!A`PA5b4jNn$fN& zg==G!Q41kveR+4Il%xAu>=@4zmrEggzPVn07F6Ad--@btEAwf>pcR{~;`{9(kuyq& z)hIEX;p(jIK_x_v5S|;8q#e4DDPv+-!z|5hx-~$o9R45+Ob@3Vgt~|4jCj@IDjqg4 zc)s0`4Ri^mtO#enC2%l;M1CA0J55M=)&h#|sEvmKv4v%Fg^;Bg%DI%m_w+tA8xH^v zNLNJi$_?Rww}-M(()Ajy+Oc|qdd@$ieEAm%G&rSbyZH+u-ovxaL%xff9zbN429xHL zj=1f<5`w@ONfjVuW7RyJHVbg0vMeeP>ncUg2g6vAw%i2^?H=L-WFAaH^hEQW?-ITP zjEx}kF?qMZ_=?{k>{uA&WVOe3#kK@Zp>3am|KP5`?o{Uf>$F zektjo64Ljyk8g`zeK3)4H1#lOq)LWAdF#3MjcB@=N$oo5D>)9O^vKW%6j?OPvrLW+ z4RlthF3I56bEtj)R9~^*x#*_6aPUy9LZsvbrI&`{NzxCesqC)Bm$7tnL)0t)w;29G zV303Gvv;(jvZIuusL*qy3Z`R!vL;Z^l74XXdEer~#LFG?p)IZj=LY&C!F7MvRy8&v z16E4P=Hks-gb#j}tjDnidhuP@&yCA1tr1B68n@w=Q9OD8e9IjI?`atMTHuttO=(PDrO~*Gi z8yDWETmVMEk4ZZ(0kq)9ES(%+^*S|da8-nZ)5$ySH|OTDU1cU`y0xRra-(k zCNG6&F+x9|#1f6C){9wQAP)b&-5}sY&YszCbs6Z_wxECPgpq-jk%+kg$mTZ(Wjrfq z(Zhrawec~>m1&tXeDwvLG6Gk;_UIPS{oW{m9%dx*_Er@^YNR!)YodPdK*X))ks#!d zY`iH;$!OKWx+HZOv|cD;^i6m7uuH`q4n!18-PiBcXXUao5+R2loZLKFSW*`2VAO2F z&Ho{Ng&~@xvcO1ocj%EV#(=uvs%vkXpoia;nPFT1=;mQO+61g-t#)oTHAO=C=1V|v za8@Z_Uxm}d*h~Cnw6uj}1xb_N4puy`h|Z+y7wyq{=LvKOqkm(^|~q6uRS1Wuf;NBTO&mWTRTTaBU=ZP z-*)A-6Xbt2vR7@5jMtIrVZsSIgL)Ae`k3w=DKEU@H(ZectM=wh_|gWUUP>}|?YRxq zGB@0c>X49;K)K(VuR*v>aSv`36c3cn#epJD+Y&yNzE-O2!GEJ60W6G)SIi~Ts4c0e zgfD0swAqkhch?F13*H$q8p zJHNT>R8$ak5_aGqxhVue1I%#n%!PO&5~#WabYTkWd~|UV(`qnJi#`@AuX3l?yw6yL zp`|cdaDJbH#O(D9*cs>Pcdva_YD*zz9sf;lH1~%jyEP$JY3xcvmh|qcS~H)ODUZI!`Q(W zN&>P>R3=ePDc3rOwNanDYPxq7cZ=i9#0t;s)xD)4gAbKfwhl|?L@Ye;OZ3BFH$D6HW&v?{vyuG&b-hzLKZ*Vn7g%VS8&Xt1!13Soyi z>UV<#u0tQb9j&U3vd67E1kD9}Nkwq-akEy>y|+e%&XB&Q;Kd023cWHLS*IZRL7?wv zBt0M}-YPZNi2H8b@=lCV0s?!#pF|(rV3WXpe-Pr?f`ej)w|9j5Vvy-Vo@>R=mdA0N zQ#VcFfzp$(#rQSbrhL;AWacH=;${h}yWq~RvNCU6^aD!%h#zT|&z9wp#CYvfRmj8K zRR`0%=k4pBn@f-P-V8r<%vgcz&(+Te|59HtaQfFs;_n+>|FvEJy8cbutD?+b1^l%O z?_a>*uKBN=_)|~bufShBlm37Xy?WSR`jmbJ|Fuct4=4cO3I99zKeSBzD(BZi`5%%x z5dYst{9D=lS1G?{sQ-`>iTStr>R$!?`se$H0B6GA1^n?J{44a=0PzoK*lWK0br~Ih z4Htiv@M~c6hXf4r-zEGd%=s1lR}cIL762#$0s#N!kAH>#)qwsPPDS-6_&?35q72ll TZv58ni2!JSb@}@=zuo;GEz-X= literal 0 HcmV?d00001