@@ -28,10 +28,12 @@ class Point:
2828 label_id : Optional [str ] = None
2929 values : List [PointValue ] = field (default_factory = list )
3030 analysis_id : Optional [str ] = None
31+ id : Optional [str ] = None
3132
3233 def to_dict (self ) -> dict :
3334 """Convert to dictionary representation."""
3435 return {
36+ "id" : self .id ,
3537 "coordinates" : self .coordinates ,
3638 "space" : self .space ,
3739 "kind" : self .kind ,
@@ -155,7 +157,7 @@ def to_dict(self) -> dict:
155157 }
156158
157159
158- def convert_to_nimads_point (analysis_id : str , point : CoordinatePoint , study_space : Optional [str ] = None ) -> Point :
160+ def convert_to_nimads_point (analysis_id : str , point : CoordinatePoint , study_space : Optional [str ] = None , point_id : Optional [ str ] = None ) -> Point :
159161 """Convert a coordinate point to a NiMADS point."""
160162 # Sanitize the coordinate space
161163 sanitized_space = sanitize_coordinate_space (point .space , study_space )
@@ -166,7 +168,8 @@ def convert_to_nimads_point(analysis_id: str, point: CoordinatePoint, study_spac
166168 nimads_point = Point (
167169 coordinates = sanitized_coordinates ,
168170 space = sanitized_space ,
169- analysis_id = analysis_id
171+ analysis_id = analysis_id ,
172+ id = point_id
170173 )
171174
172175 # Convert point values if they exist
@@ -193,8 +196,9 @@ def convert_to_nimads_analysis(analysis_id: str, analysis: Analysis, study_id: s
193196 )
194197
195198 # Convert points
196- for point in analysis .points :
197- nimads_point = convert_to_nimads_point (analysis_id , point , study_space )
199+ for i , point in enumerate (analysis .points ):
200+ point_id = f"{ analysis_id } _point_{ i } "
201+ nimads_point = convert_to_nimads_point (analysis_id , point , study_space , point_id )
198202 nimads_analysis .points .append (nimads_point )
199203
200204 return nimads_analysis
@@ -211,8 +215,11 @@ def convert_to_nimads_study(study_id: str, autonima_study: 'autonima.models.type
211215 except (ValueError , IndexError ):
212216 pass
213217
218+ # Use the study's PMID as the study_id if available
219+ nimads_study_id = autonima_study .pmid if autonima_study .pmid else study_id
220+
214221 nimads_study = Study (
215- id = study_id ,
222+ id = nimads_study_id ,
216223 doi = autonima_study .doi ,
217224 name = autonima_study .title ,
218225 description = autonima_study .abstract ,
@@ -227,8 +234,8 @@ def convert_to_nimads_study(study_id: str, autonima_study: 'autonima.models.type
227234
228235 # Convert analyses
229236 for i , analysis in enumerate (autonima_study .analyses ):
230- analysis_id = f"{ study_id } _analysis_{ i } "
231- nimads_analysis = convert_to_nimads_analysis (analysis_id , analysis , study_id , study_space )
237+ analysis_id = f"{ nimads_study_id } _analysis_{ i } "
238+ nimads_analysis = convert_to_nimads_analysis (analysis_id , analysis , nimads_study_id , study_space )
232239 nimads_study .analyses .append (nimads_analysis )
233240
234241 return nimads_study
@@ -282,8 +289,9 @@ def convert_to_nimads_studyset(studyset_id: str, studies: List['autonima.models.
282289 )
283290
284291 # Convert studies
285- for i , study in enumerate (studies ):
286- study_id = f"study_{ i } "
292+ for study in studies :
293+ # Use the study's PMID as the study_id if available, otherwise generate one
294+ study_id = study .pmid if study .pmid else f"study_{ len (studyset .studies )} "
287295 nimads_study = convert_to_nimads_study (study_id , study )
288296 studyset .studies .append (nimads_study )
289297
0 commit comments