Skip to content

Commit b2156fc

Browse files
committed
Signal positivity constraint, rebase
1 parent d8193b7 commit b2156fc

3 files changed

Lines changed: 17 additions & 2 deletions

File tree

data/signals.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ def fetch_nstx_data(signal_path,shot_num,c):
169169

170170
li = Signal("internal inductance",["jpf/gs/bl-li<s","d3d/efsli"],[jet,d3d])
171171
lm = Signal("Locked mode amplitude",['jpf/da/c2-loca','d3d/dusbradial'],[jet,d3d])
172-
dens = Signal("Plasma density",['jpf/df/g1r-lid:003','d3d/dssdenest'],[jet,d3d])
172+
dens = Signal("Plasma density",['jpf/df/g1r-lid:003','d3d/dssdenest'],[jet,d3d],is_strictly_positive=True)
173173
energy = Signal("stored energy",['jpf/gs/bl-wmhd<s','d3d/efswmhd'],[jet,d3d])
174174
pin = Signal("Input Power (beam for d3d)",['jpf/gs/bl-ptot<s','d3d/bmspinj'],[jet,d3d]) #Total Beam Power
175175

plasma/preprocessor/normalize.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ def incorporate_stats(self,stats):
235235

236236

237237
def apply(self,shot):
238+
apply_positivity(shot)
238239
m = shot.machine
239240
assert self.means[m] is not None and self.stds[m] is not None, "self.means or self.stds not initialized"
240241
means = np.median(self.means[m],axis=0)
@@ -277,6 +278,7 @@ def load_stats(self):
277278

278279
class VarNormalizer(MeanVarNormalizer):
279280
def apply(self,shot):
281+
apply_positivity(shot)
280282
assert self.means is not None and self.stds is not None, "self.means or self.stds not initialized"
281283
m = shot.machine
282284
stds = np.median(self.stds[m],axis=0)
@@ -301,6 +303,7 @@ def __str__(self):
301303
class AveragingVarNormalizer(VarNormalizer):
302304

303305
def apply(self,shot):
306+
apply_positivity(shot)
304307
super(AveragingVarNormalizer,self).apply(shot)
305308
window_decay = self.conf['data']['window_decay']
306309
window_size = self.conf['data']['window_size']
@@ -366,6 +369,7 @@ def incorporate_stats(self,stats):
366369

367370

368371
def apply(self,shot):
372+
apply_positivity(shot)
369373
assert(self.minimums is not None and self.maximums is not None)
370374
m = shot.machine
371375
curr_range = (self.maximums[m] - self.minimums[m])
@@ -403,3 +407,10 @@ def load_stats(self):
403407

404408
def get_individual_shot_file(prepath,shot_num,ext='.txt'):
405409
return prepath + str(shot_num) + ext
410+
411+
412+
def apply_positivity(shot):
413+
for (i,sig) in enumerate(shot.signals):
414+
if sig.is_strictly_positive:
415+
print ('Applying positivity constraint to {} signal'.format(sig.description))
416+
shot.signals_dict[sig]=np.clip(shot.signals_dict[sig],0,np.inf)

plasma/primitives/data.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# self.signals.append(Signal(signal_descriptions[i],signal_paths[i]))
1616

1717
class Signal(object):
18-
def __init__(self,description,paths,machines,tex_label=None,causal_shifts=None,is_ip=False,normalize=True,data_avail_tolerance=0):
18+
def __init__(self,description,paths,machines,tex_label=None,causal_shifts=None,is_ip=False,normalize=True,data_avail_tolerance=0,is_strictly_positive=False):
1919
assert(len(paths) == len(machines))
2020
self.description = description
2121
self.paths = paths
@@ -27,6 +27,10 @@ def __init__(self,description,paths,machines,tex_label=None,causal_shifts=None,i
2727
self.num_channels = 1
2828
self.normalize = normalize
2929
self.data_avail_tolerance = data_avail_tolerance
30+
self.is_strictly_positive=is_strictly_positive
31+
32+
def is_strictly_positive(self):
33+
return self.is_strictly_positive
3034

3135
def is_ip(self):
3236
return self.is_ip

0 commit comments

Comments
 (0)