1414import hexrd .imageseries .save
1515from hexrd .config .loader import NumPyIncludeLoader
1616from hexrd .instrument import HEDMInstrument
17- from hexrd .instrument .constants import PHYSICS_PACKAGE_DEFAULTS
17+ from hexrd .instrument .constants import PHYSICS_PACKAGE_DEFAULTS , PINHOLE_DEFAULTS
1818from hexrd .instrument .physics_package import HEDPhysicsPackage
1919from hexrd .material import load_materials_hdf5 , save_materials_hdf5 , Material
2020from hexrd .rotations import RotMatEuler
2727from hexrdgui import utils
2828from hexrdgui .masking .constants import MaskType
2929from hexrdgui .singletons import QSingleton
30- from hexrdgui .utils .guess_instrument_type import guess_instrument_type
3130
3231import hexrdgui .resources .calibration
3332import hexrdgui .resources .indexing
@@ -596,7 +595,7 @@ def set_overlays():
596595 def set_physics_and_coatings ():
597596 pp = state .get ('physics_package_dictified' , None )
598597 self .physics_package_dictified = pp if pp is not None else {}
599- dc = state .get ('detector_coatings_dictified' )
598+ dc = state .get ('detector_coatings_dictified' , None )
600599 self .detector_coatings_dictified = dc if dc is not None else {}
601600
602601 if 'detector_coatings_dictified' in state :
@@ -702,7 +701,7 @@ def overlays_dictified(self, v):
702701 continue
703702
704703 if overlay_dict .get ('tth_distortion_type' ) is not None :
705- if self .physics_package is None :
704+ if not self .has_physics_package :
706705 # We need to create a default physics package
707706 # This is for backward compatibility
708707 self .create_default_physics_package ()
@@ -2434,7 +2433,7 @@ def custom_polar_tth_distortion_object_serialized(self):
24342433 def custom_polar_tth_distortion_object_serialized (self , v ):
24352434 obj = None
24362435 if v is not None :
2437- if self .physics_package is None :
2436+ if not self .has_physics_package :
24382437 # This requires a physics package to deserialize
24392438 self .create_default_physics_package ()
24402439
@@ -3045,37 +3044,53 @@ def apply_absorption_correction(self, v):
30453044
30463045 @property
30473046 def physics_package_dictified (self ):
3048- if self .physics_package is None :
3047+ if not self .has_physics_package :
30493048 return None
3049+
30503050 return self .physics_package .serialize ()
30513051
30523052 @physics_package_dictified .setter
3053- def physics_package_dictified (self , v ):
3054- instr_type = guess_instrument_type (self .detector_names )
3055- self .update_physics_package (instr_type , ** v )
3053+ def physics_package_dictified (self , kwargs ):
3054+ if not kwargs :
3055+ self .physics_package = None
3056+ return
3057+
3058+ # Set defaults if missing
3059+ kwargs = {
3060+ ** PHYSICS_PACKAGE_DEFAULTS .HED ,
3061+ ** kwargs ,
3062+ }
3063+ self .physics_package = HEDPhysicsPackage (** kwargs )
3064+
3065+ def update_physics_package (self , ** kwargs ):
3066+ self .physics_package_dictified = {
3067+ ** self .physics_package_dictified ,
3068+ ** kwargs ,
3069+ }
30563070
30573071 @property
30583072 def physics_package (self ):
30593073 return self ._physics_package
30603074
3061- def update_physics_package (self , instr_type = None , ** kwargs ):
3062- if instr_type not in ('TARDIS' , 'PXRDIP' ):
3063- self ._physics_package = None
3064- elif self .physics_package is None :
3065- all_kwargs = PHYSICS_PACKAGE_DEFAULTS .HED
3066- all_kwargs .update (** kwargs )
3067- self ._physics_package = HEDPhysicsPackage (** all_kwargs )
3068- else :
3069- self ._physics_package .deserialize (** kwargs )
3070- self .physics_package_modified .emit ()
3075+ @physics_package .setter
3076+ def physics_package (self , value ):
3077+ if value != self ._physics_package :
3078+ self ._physics_package = value
3079+ self .physics_package_modified .emit ()
3080+
3081+ @property
3082+ def has_physics_package (self ) -> bool :
3083+ return self .physics_package is not None
30713084
30723085 def create_default_physics_package (self ):
3073- self ._physics_package = HEDPhysicsPackage (
3074- ** PHYSICS_PACKAGE_DEFAULTS .HED )
3075- self .physics_package_modified .emit ()
3086+ # Our default will be an HED Physics package with a pinhole
3087+ self .physics_package_dictified = {
3088+ ** PHYSICS_PACKAGE_DEFAULTS .HED ,
3089+ ** PINHOLE_DEFAULTS .TARDIS ,
3090+ }
30763091
30773092 def absorption_length (self ):
3078- if self ._physics_package is None :
3093+ if not self .has_physics_package :
30793094 raise ValueError (
30803095 f'Cannot calculate absorption length without physics package' )
30813096 return self .physics_package .pinhole_absorption_length (
@@ -3129,6 +3144,8 @@ def detector_filter(self, det_name):
31293144 return self ._detector_coatings [det_name ].get ('filter' , None )
31303145
31313146 def update_detector_filter (self , det_name , ** kwargs ):
3147+ if det_name not in self .detector_names :
3148+ return None
31323149 self ._set_detector_coatings ('filter' )
31333150 filter = self ._detector_coatings [det_name ]['filter' ]
31343151 filter .deserialize (** kwargs )
@@ -3138,6 +3155,8 @@ def detector_coating(self, det_name):
31383155 return self ._detector_coatings [det_name ].get ('coating' , None )
31393156
31403157 def update_detector_coating (self , det_name , ** kwargs ):
3158+ if det_name not in self .detector_names :
3159+ return None
31413160 self ._set_detector_coatings ('coating' )
31423161 coating = self ._detector_coatings [det_name ]['coating' ]
31433162 coating .deserialize (** kwargs )
@@ -3147,6 +3166,8 @@ def detector_phosphor(self, det_name):
31473166 return self ._detector_coatings [det_name ].get ('phosphor' , None )
31483167
31493168 def update_detector_phosphor (self , det_name , ** kwargs ):
3169+ if det_name not in self .detector_names :
3170+ return None
31503171 self ._set_detector_coatings ('phosphor' )
31513172 phosphor = self ._detector_coatings [det_name ]['phosphor' ]
31523173 phosphor .deserialize (** kwargs )
0 commit comments