11use super :: { BinaryParameters , BinaryRecord , GroupCount , PureParameters } ;
22use crate :: { FeosError , FeosResult , parameter:: PureRecord } ;
3- use arrayvec:: ArrayString ;
43use ndarray:: Array1 ;
54use num_traits:: Zero ;
65use serde:: { Deserialize , Serialize } ;
76use std:: collections:: { HashMap , HashSet } ;
87
9- type SiteId = ArrayString < 8 > ;
10-
118/// Pure component association parameters.
12- #[ derive( Serialize , Deserialize , Clone , Copy , Debug ) ]
9+ #[ derive( Serialize , Deserialize , Clone , Debug ) ]
1310pub struct AssociationRecord < A > {
14- #[ serde( skip_serializing_if = "SiteId ::is_empty" ) ]
11+ #[ serde( skip_serializing_if = "String ::is_empty" ) ]
1512 #[ serde( default ) ]
16- pub id : SiteId ,
13+ pub id : String ,
1714 #[ serde( flatten) ]
1815 pub parameters : Option < A > ,
1916 /// \# of association sites of type A
@@ -35,7 +32,7 @@ impl<A> AssociationRecord<A> {
3532 Self :: with_id ( Default :: default ( ) , parameters, na, nb, nc)
3633 }
3734
38- pub fn with_id ( id : SiteId , parameters : Option < A > , na : f64 , nb : f64 , nc : f64 ) -> Self {
35+ pub fn with_id ( id : String , parameters : Option < A > , na : f64 , nb : f64 , nc : f64 ) -> Self {
3936 Self {
4037 id,
4138 parameters,
@@ -47,16 +44,16 @@ impl<A> AssociationRecord<A> {
4744}
4845
4946/// Binary association parameters.
50- #[ derive( Serialize , Deserialize , Clone , Copy , Debug ) ]
47+ #[ derive( Serialize , Deserialize , Clone , Debug ) ]
5148pub struct BinaryAssociationRecord < A > {
5249 // Identifier of the association site on the first molecule.
53- #[ serde( skip_serializing_if = "SiteId ::is_empty" ) ]
50+ #[ serde( skip_serializing_if = "String ::is_empty" ) ]
5451 #[ serde( default ) ]
55- pub id1 : SiteId ,
52+ pub id1 : String ,
5653 // Identifier of the association site on the second molecule.
57- #[ serde( skip_serializing_if = "SiteId ::is_empty" ) ]
54+ #[ serde( skip_serializing_if = "String ::is_empty" ) ]
5855 #[ serde( default ) ]
59- pub id2 : SiteId ,
56+ pub id2 : String ,
6057 // Binary association parameters
6158 #[ serde( flatten) ]
6259 pub parameters : A ,
@@ -67,7 +64,7 @@ impl<A> BinaryAssociationRecord<A> {
6764 Self :: with_id ( Default :: default ( ) , Default :: default ( ) , parameters)
6865 }
6966
70- pub fn with_id ( id1 : SiteId , id2 : SiteId , parameters : A ) -> Self {
67+ pub fn with_id ( id1 : String , id2 : String , parameters : A ) -> Self {
7168 Self {
7269 id1,
7370 id2,
@@ -76,16 +73,16 @@ impl<A> BinaryAssociationRecord<A> {
7673 }
7774}
7875
79- #[ derive( Clone , Copy , Debug ) ]
76+ #[ derive( Clone , Debug ) ]
8077pub struct AssociationSite < A > {
8178 pub assoc_comp : usize ,
82- pub id : SiteId ,
79+ pub id : String ,
8380 pub n : f64 ,
8481 pub parameters : A ,
8582}
8683
8784impl < A > AssociationSite < A > {
88- fn new ( assoc_comp : usize , id : SiteId , n : f64 , parameters : A ) -> Self {
85+ fn new ( assoc_comp : usize , id : String , n : f64 , parameters : A ) -> Self {
8986 Self {
9087 assoc_comp,
9188 id,
@@ -120,13 +117,28 @@ impl<A: Clone> AssociationParameters<A> {
120117 for site in record. association_sites . iter ( ) {
121118 let par = & site. parameters ;
122119 if site. na > 0.0 {
123- sites_a. push ( AssociationSite :: new ( i, site. id , site. na , par. clone ( ) ) ) ;
120+ sites_a. push ( AssociationSite :: new (
121+ i,
122+ site. id . clone ( ) ,
123+ site. na ,
124+ par. clone ( ) ,
125+ ) ) ;
124126 }
125127 if site. nb > 0.0 {
126- sites_b. push ( AssociationSite :: new ( i, site. id , site. nb , par. clone ( ) ) ) ;
128+ sites_b. push ( AssociationSite :: new (
129+ i,
130+ site. id . clone ( ) ,
131+ site. nb ,
132+ par. clone ( ) ,
133+ ) ) ;
127134 }
128135 if site. nc > 0.0 {
129- sites_c. push ( AssociationSite :: new ( i, site. id , site. nc , par. clone ( ) ) ) ;
136+ sites_c. push ( AssociationSite :: new (
137+ i,
138+ site. id . clone ( ) ,
139+ site. nc ,
140+ par. clone ( ) ,
141+ ) ) ;
130142 }
131143 }
132144 }
@@ -212,15 +224,15 @@ impl<A: Clone> AssociationParameters<A> {
212224 let par = & site. parameters ;
213225 if site. na > 0.0 {
214226 let na = site. na * record. count . into_f64 ( ) ;
215- sites_a. push ( AssociationSite :: new ( i, site. id , na, par. clone ( ) ) ) ;
227+ sites_a. push ( AssociationSite :: new ( i, site. id . clone ( ) , na, par. clone ( ) ) ) ;
216228 }
217229 if site. nb > 0.0 {
218230 let nb = site. nb * record. count . into_f64 ( ) ;
219- sites_b. push ( AssociationSite :: new ( i, site. id , nb, par. clone ( ) ) ) ;
231+ sites_b. push ( AssociationSite :: new ( i, site. id . clone ( ) , nb, par. clone ( ) ) ) ;
220232 }
221233 if site. nc > 0.0 {
222234 let nc = site. nc * record. count . into_f64 ( ) ;
223- sites_c. push ( AssociationSite :: new ( i, site. id , nc, par. clone ( ) ) ) ;
235+ sites_c. push ( AssociationSite :: new ( i, site. id . clone ( ) , nc, par. clone ( ) ) ) ;
224236 }
225237 }
226238 }
0 commit comments