1function [QNclass_t, UNclass_t, TNclass_t] = getTranAvg(self,Qt,Ut,Tt)
2% [QNCLASS_T, UNCLASS_T, TNCLASS_T] = GETTRANAVG(SELF,QT,UT,TT)
4% Return transient average station metrics
6% Copyright (c) 2012-2026, Imperial College London
10 [Qt,Ut,Tt] = self.getTranHandles;
25options = self.options;
27sn = self.model.getStruct;
28minrate = min(sn.rates(isfinite(sn.rates)));
29if ~hasTranResults(self)
30 if length(options.timespan)<2
31 line_error(mfilename,
'Timespan option requires to specify a two-dimensional vector, e.g., [0,1e3].\n');
33 if isinf(options.timespan(1)) && isinf(options.timespan(2))
34 options.timespan = [0,30/minrate];
35 line_warning(mfilename,'Timespan of transient analysis unspecified, setting the timespan option to [0, %d]. Use %s(model,''timespan'',[0,T]) to customize.\n',options.timespan(2),class(self));
37 if isinf(options.timespan(1))
38 line_warning(mfilename,'Start time of transient analysis unspecified, setting the timespan option to [0,%d].\n',options.timespan(2));
39 options.timespan(1) = 0;
41 if isinf(options.timespan(2))
42 options.timespan(2) = 30/minrate;
43 line_warning(mfilename,'End time of transient analysis unspecified, setting the timespan option to [%d,%d]. Use %s(model,''timespan'',[0,T]) to customize.\n',options.timespan(1),options.timespan(2),class(self));
45 runAnalyzer(self, options);
51% Check if transient results exist
52hasTran = isfield(self.result, 'Tran') && isfield(self.result.Tran, 'Avg');
53hasQ = hasTran && isfield(self.result.Tran.Avg, 'Q') && ~isempty(self.result.Tran.Avg.Q);
54hasU = hasTran && isfield(self.result.Tran.Avg, 'U') && ~isempty(self.result.Tran.Avg.U);
55hasT = hasTran && isfield(self.result.Tran.Avg, 'T') && ~isempty(self.result.Tran.Avg.T);
58 QNclass_t = cell(M,K);
59 UNclass_t = cell(M,K);
60 %RNclass_t = cell(M,K);
61 TNclass_t = cell(M,K);
65 if ~Qt{ist,k}.disabled && hasQ
66 ret = self.result.Tran.Avg.Q{ist,k};
67 if ~isempty(ret) && size(ret,2) >= 2
69 metricVal.handle = {self.model.stations{ist}, self.model.classes{k}};
70 metricVal.t = ret(:,2);
71 metricVal.metric = ret(:,1);
72 metricVal.isaggregate =
true;
73 QNclass_t{ist,k} = metricVal;
75 QNclass_t{ist,k} = NaN;
78 QNclass_t{ist,k} = NaN;
82 if ~Ut{ist,k}.disabled && hasU
83 ret = self.result.Tran.Avg.U{ist,k};
84 if ~isempty(ret) && size(ret,2) >= 2
86 metricVal.handle = {self.model.stations{ist}, self.model.classes{k}};
87 metricVal.t = ret(:,2);
88 metricVal.metric = ret(:,1);
89 metricVal.isaggregate =
true;
90 UNclass_t{ist,k} = metricVal;
92 UNclass_t{ist,k} = NaN;
95 UNclass_t{ist,k} = NaN;
99 if ~Tt{ist,k}.disabled && hasT
100 ret = self.result.Tran.Avg.T{ist,k};
101 if ~isempty(ret) && size(ret,2) >= 2
102 metricVal =
struct();
103 metricVal.handle = {self.model.stations{ist}, self.model.classes{k}};
104 metricVal.t = ret(:,2);
105 metricVal.metric = ret(:,1);
106 metricVal.isaggregate =
true;
107 TNclass_t{ist,k} = metricVal;
109 TNclass_t{ist,k} = NaN;
112 TNclass_t{ist,k} = NaN;