889 def write_paramCard(self):
890 """Write out paramCardDict to disk.
891 The function will copy the layout and format from the default card.
892 """
893 if self.paramCard_default_loc is None or not os.path.isfile(self.paramCard_default_loc):
894 self.paramCard_default_loc = self.paramCard_loc +'.old_to_be_deleted'
895 os.rename(self.paramCard_loc, self.paramCard_default_loc)
896
897 with open(self.paramCard_default_loc,'r') as f:
898 oldCard = f.read()
899
900 newCard = open(self.paramCard_loc,'w')
901 dict_blocks = [v.lower() for v in self.paramCardDict]
902
903 oldCard_blocks = oldCard.split('\n\n')
904
905 for block in oldCard_blocks:
906 name = None
907 nParams = []
908
909 for line in block.split('\n'):
910 l = line.strip()
911 if l.startswith('#'):
912 newCard.write(f"{line} \n")
913 elif l == '':
914 newCard.write("\n")
915 elif l.lower().startswith('block'):
916 if name is not None and len(nParams) == len(self.paramCardDict[name]):
917 name = None
918 nParams = []
919
920 elif name is not None and len(nParams) != len(self.paramCardDict[name]):
921
922 for key in self.paramCardDict[name]:
923
924 if key in nParams:
925 continue
926 elif key not in nParams:
927 newCard.write(f" {key} {self.paramCardDict[name][key]}\n")
928 nParams.append(key)
929
930 name = l.split(
' ',1)[1].
strip()
931 nParams = []
932 if name.lower() not in dict_blocks:
933 raise RuntimeError("Cannot find %s in paramCardDict"%str(name))
934 elif name not in self.paramCardDict:
935 for b in self.paramCardDict:
936 if b.lower() == name.lower():
937 name = b
938 else:
939 continue
940
941 newCard.write(f"Block {name}\n")
942 elif l.lower().startswith('decay'):
943
944 if name is not None and name.lower() != 'decay':
945 if len(nParams) == len(self.paramCardDict[name]):
946 continue
947 elif len(nParams) != len(self.paramCardDict[name]):
948
949 for key in self.paramCardDict[name]:
950
951 if key in nParams:
952 continue
953 elif key not in nParams:
954 newCard.write(f" {key} {self.paramCardDict[name][key]}\n")
955 nParams.append(key)
956
957 nParams = []
958
960
961 command = l[5:].
strip()
962 ID = command.split(' ',1)[0]
963 nParams.append(ID)
964
965 newCard.write(f"{self.paramCardDict[name][ID]} \n")
966
967 elif l == '\n':
968 newCard.write(l)
969
970 else:
971 if name.lower() == 'decay':
972 continue
973 else:
974 ID =
' '.join(l.partition(
'#')[0].
split()[:-1])
975 newCard.write(f" {ID} {self.paramCardDict[name][ID]}\n")
976 nParams.append(ID)
977
978
979
980 if name is not None and len(nParams) == len(self.paramCardDict[name]):
981 name = None
982 nParams = []
983
984 elif name is not None and len(nParams) != len(self.paramCardDict[name]):
985
986 for key in self.paramCardDict[name]:
987
988 if key in nParams:
989 continue
990 elif key not in nParams and key is not None and key.strip() != '':
991 newCard.write(f" {key} {self.paramCardDict[name][key]}\n")
992 nParams.append(key)
993 elif key is None or key.strip() == '':
994 continue
995
996 mglog.info("Finished writing paramCardDict to param_card.dat")