Skip to content

Commit

Permalink
added atoms and other stuff ??
Browse files Browse the repository at this point in the history
Former-commit-id: d7edf98
  • Loading branch information
cpe committed Mar 18, 2014
1 parent 0b56cb6 commit a98bde3
Show file tree
Hide file tree
Showing 8 changed files with 340 additions and 55 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "vamdclib"]
path = vamdclib
url = https://github.com/cpe/vamdclib.git
25 changes: 13 additions & 12 deletions nodes/cdms/node/dictionaries.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
#'AtomStateRef':'AtomState.',
#'AtomStateS':'AtomState.S',
#'AtomStateS2':'AtomState.',
#'AtomStateStatisticalWeight':'AtomState.',
'AtomStateStatisticalWeight':'AtomState.degeneracy',
'AtomStateTermLSL':'Component.L', #AtomState.attach_atomic_qn()',
'AtomStateTermLSS':'Component.S', #AtomState.S',
'AtomStateTotalAngMom':'AtomState.attach_atomic_qn()',
Expand Down Expand Up @@ -134,14 +134,14 @@
'RadTransUpperStateRef':'RadTran.upperstateref_id',
'RadTransLowerStateRef':'RadTran.lowerstateref_id',
#'RadTransFrequency':'RadTran.get_exp_transitions()', #frequencyArray',
'RadTransFrequency':'RadTran.attach_exp_frequencies()',
#'RadTransFrequency':'RadTran.frequencies',
'RadTransFrequencyUnit':'RadTran.units',
'RadTransFrequencyAccuracy':'RadTran.uncertainties',
'RadTransFrequencyRef':'RadTran.refs',
#'RadTransFrequency':'RadTran.attach_exp_frequencies()',
'RadTransFrequency':'eval(RadTran.frequencies)',
'RadTransFrequencyUnit':'MHz', #RadTran.units',
'RadTransFrequencyAccuracy':'eval(RadTran.uncertainties)',
'RadTransFrequencyRef':'eval(RadTran.references)',
#'RadTransFrequencyMethod':'RadTran.freqmethodref_id',
#'RadTransFrequencyMethod':'RadTran.species_id',
'RadTransFrequencyMethod':'RadTran.methods',
'RadTransFrequencyMethod':'eval(RadTran.methods)',
'RadTransProbabilityA':'RadTran.einsteina',
'RadTransProbabilityAUnit':'1/cm', # <-New
'RadTransProbabilityIdealisedIntensity':'RadTran.intensity',
Expand All @@ -155,11 +155,11 @@
'RadTransSpeciesRef':'RadTran.specie_id',
#'RadTransWavelength':'RadTran.',
#'RadTransWavenumber':'RadTran.',
'RadTransFrequencyEval':'RadTran.evaluations',
'RadTransFrequencyEvalRecommended':'RadTran.recommendations',
'RadTransFrequencyEvalRef':'RadTran.evalrefs',
#'RadTransFrequencyEval':'RadTran.evaluations',
#'RadTransFrequencyEvalRecommended':'RadTran.recommendations',
#'RadTransFrequencyEvalRef':'RadTran.evalrefs',

'RadTransCode':'RadTran.process_class()',
'RadTransCode':'eval(str(RadTran.processclass))',

'SourceAuthorName':'Source.getAuthorList()',
'SourceCategory':'Source.category',
Expand Down Expand Up @@ -303,7 +303,7 @@ def processclass(r, op, *rhs):
#'MoleculeStateCharacLifeTime':'',
#'MoleculeStateCharacNuclearSpinSymmetry':'',
'MoleculeStateNSIName':'lowerstateref__nsi__name', #nuclearspinisomer',
'MoleculeStateNuclearSpinIsomer':'lowerstateref_nsi_name',
'MoleculeStateNuclearSpinIsomer':'lowerstateref__nsi__name',
'MoleculeStateEnergy':'lowerstateref__energy',
#'MoleculeStateID':'',
'MoleculeStoichiometricFormula':'specie__molecule__stoichiometricformula',
Expand Down Expand Up @@ -331,6 +331,7 @@ def processclass(r, op, *rhs):
#'SourceCategory':'',
#'SourceYear':'',
'MoleculeSpeciesID':'specie',
'SpeciesID':'specie',
'Lower.StateEnergy':'lowerstateref__energy',
'Upper.StateEnergy':'upperstateref__energy',
'StateEnergy':bothStates,
Expand Down
184 changes: 184 additions & 0 deletions nodes/cdms/node/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,35 @@
# References which will always be returned
DATABASE_REFERENCES = [1921]


def formatstring(value, format, noneformat):
if value is not None:
return format % value
else:
return noneformat % ""


def formatqn(value):
if value == None:
return ''
elif value > 99 and value < 360:
return chr(55+value/10)+ "%01d" % ( value % 10)
elif value < -9 and value > -260:
return chr(95-(value-1)/10)+ "%01d" % -( value % -10)
else:
return str(value)


def format_degeneracy(value):
if value == None:
return ''
elif value>999 and value < 3600:
return chr(55+value/100) + "%02d" % (value % 100)
else:
return str(value)



class Molecules( Model):
"""
The Molecules class contains general information of the species. It is on top of
Expand Down Expand Up @@ -562,7 +591,39 @@ def attach_exp_frequencies(self):

return self.frequencies

def spfitstr(self):
if self.frequencyexp:
frequency = self.frequencyexp
speciestag = -self.speciestag
else:
frequency = self.frequency
speciestag = self.speciestag

egy_lower = formatstring(self.energylower,'%10.4lf','%10s')
if egy_lower==' -0.0000':
egy_lower = ' 0.0000'

return '%s%s%s%s%s%3s%s%s%2s%2s%2s%2s%2s%2s%2s%2s%2s%2s%2s%2s'\
% (formatstring(frequency,'%13.4lf','%13s'),
formatstring(self.uncertainty,'%8.4lf','%8s'),
formatstring(self.intensity,'%8.4lf','%8s'),
formatstring(self.degreeoffreedom,'%2d','%s'),
egy_lower,
format_degeneracy(self.upperstatedegeneracy),
formatstring(speciestag,'%7d','%7s'),
formatstring(self.qntag,'%4d','%4s'),
formatqn(self.qnup1),
formatqn(self.qnup2),
formatqn(self.qnup3),
formatqn(self.qnup4),
formatqn(self.qnup5),
formatqn(self.qnup6),
formatqn(self.qnlow1),
formatqn(self.qnlow2),
formatqn(self.qnlow3),
formatqn(self.qnlow4),
formatqn(self.qnlow5),
formatqn(self.qnlow6))

## def get_exp_transitions(self):
## exptranss = TransitionsExp.objects.filter(species=self.species,
Expand Down Expand Up @@ -594,6 +655,107 @@ class Meta:
db_table = u'Predictions'


class RadiativeTransitions( Model):
"""
This class contains the calculated transition frequencies (mysql-table Predictions).
"""
id = IntegerField(primary_key=True, db_column='RadiativeTransitionID')
specie = ForeignKey(Species, db_column='SpeciesID')
speciestag = IntegerField(db_column='SpeciesTag')
frequency = FloatField(null=True, db_column='FrequencyValue')
intensity = FloatField(null=True, db_column='IdealisedIntensity')
einsteina = FloatField(null=True, db_column='EinsteinA')
#smu2 = FloatField(null=True, db_column='P_Smu2')
uncertainty = FloatField(null=True, db_column='EnergyWavelengthAccuracy')
energylower = FloatField(null=True, db_column='LowerStateEnergyValue')
#energyupper = FloatField(null=True, db_column='P_Energy_Upper')
qntag = IntegerField(db_column='CaseQN')
qnup1 = IntegerField(db_column='QN_Up_1')
qnup2 = IntegerField(db_column='QN_Up_2')
qnup3 = IntegerField(db_column='QN_Up_3')
qnup4 = IntegerField(db_column='QN_Up_4')
qnup5 = IntegerField(db_column='QN_Up_5')
qnup6 = IntegerField(db_column='QN_Up_6')
qnlow1 = IntegerField(db_column='QN_Low_1')
qnlow2 = IntegerField(db_column='QN_Low_2')
qnlow3 = IntegerField(db_column='QN_Low_3')
qnlow4 = IntegerField(db_column='QN_Low_4')
qnlow5 = IntegerField(db_column='QN_Low_5')
qnlow6 = IntegerField(db_column='QN_Low_6')
#dummy = CharField(max_length=20, db_column ='P_Dummy')
unit = CharField(max_length=200, db_column='FrequencyUnit')
degreeoffreedom = IntegerField(db_column='Degree_Of_Freedom')
upperstatedegeneracy = IntegerField(db_column='UpperStateNuclearStatisticalWeight')
originid = IntegerField(db_column='Resource')
hfsflag = IntegerField(db_column='hfsflag')
#userid = IntegerField(db_column='P_U_ID')
dataset = ForeignKey(Datasets, db_column='DAT_ID')
#qualityflag = IntegerField(db_column='P_Quality')
#archiveflag = IntegerField(db_column='P_Archive')
timestamp = DateTimeField(db_column='Createdate')
frequencies = CharField (db_column = 'FrequencyList')
uncertainties = CharField (db_column = 'UncertaintyList')
methods = CharField (db_column = 'MethodList')
references = CharField (db_column = 'ReferenceList')
frequencymethod = IntegerField(db_column = 'FrequencyMethodRef')
processclass = CharField(max_length=100, db_column='ProcessClass')

upperstateref = ForeignKey(States, related_name='upperstate',
db_column='UpperStateRef')
lowerstateref = ForeignKey(States, related_name='lowerstate',
db_column='LowerStateRef')

upstate = ForeignKey(States, related_name='upperstate',
db_column='UpperStateRef')
lostate = ForeignKey(States, related_name='lowerstate',
db_column='LowerStateRef')
#frequencyArray

def __unicode__(self):
return u'ID:%s Tag:%s Freq: %s'%(self.id,self.speciestag,self.frequency)

def specieid(self):
return '%s-hyp%s' % (self.specie_id,self.hfsflag)

# def process_class(self):
# return eval(self.processclass)

def spfitstr(self):
if self.frequencymethod == 4:
speciestag = -self.speciestag
else:
speciestag = self.speciestag

egy_lower = formatstring(self.energylower,'%10.4lf','%10s')
if egy_lower==' -0.0000':
egy_lower = ' 0.0000'

return '%s%s%s%s%s%3s%s%s%2s%2s%2s%2s%2s%2s%2s%2s%2s%2s%2s%2s'\
% (formatstring(self.frequency,'%13.4lf','%13s'),
formatstring(self.uncertainty,'%8.4lf','%8s'),
formatstring(self.intensity,'%8.4lf','%8s'),
formatstring(self.degreeoffreedom,'%2d','%s'),
egy_lower,
format_degeneracy(self.upperstatedegeneracy),
formatstring(speciestag,'%7d','%7s'),
formatstring(self.qntag,'%4d','%4s'),
formatqn(self.qnup1),
formatqn(self.qnup2),
formatqn(self.qnup3),
formatqn(self.qnup4),
formatqn(self.qnup5),
formatqn(self.qnup6),
formatqn(self.qnlow1),
formatqn(self.qnlow2),
formatqn(self.qnlow3),
formatqn(self.qnlow4),
formatqn(self.qnlow5),
formatqn(self.qnlow6))


class Meta:
db_table = u'RadiativeTransitions'



class Sources( Model):
Expand Down Expand Up @@ -887,7 +1049,29 @@ class Meta:
db_table = u'Partitionfunctions'


class PartitionfunctionsDetailed( Model):
"""
This class contains partition function (mysql-table: Partitionfunctions) for each specie
which have been calculated based on the state energy listing and include contributions
from other vibrational states (other specie).
"""
id = AutoField(primary_key=True, db_column='PFD_ID')
specie = ForeignKey(Species, db_column='PFD_E_ID')
inchikey = CharField(max_length=30, db_column='PFD_Inchikey', blank=True, null = True)
state = CharField(max_length=100, db_column = 'PFD_State')
loweststateenergy = FloatField(db_column='PFD_LowestStateEnergy')
nsi = ForeignKey(NuclearSpinIsomers, db_column='PFD_NSI', blank=True, null = True)
temperature = FloatField(db_column='PFD_Temperature')
partitionfunc = FloatField(db_column='PFD_Partitionfunction')
comment = CharField(max_length=150, db_column='PFD_Comment')
createdate = DateTimeField(db_column='PFD_Createdate')
changedate = DateTimeField(db_column='PFD_Changedate')

class Meta:
db_table = u'PartitionFunctionsDetailed'

def __unicode__(self):
return "%6d %20s %9.3lf %20.6lf" % (self.specie.id, self.state, self.temperature, self.partitionfunc)

class Method:
"""
Expand Down
Loading

0 comments on commit a98bde3

Please sign in to comment.