From 4328b847953f5b04d26e92ea8d405af6dcbc3a06 Mon Sep 17 00:00:00 2001
From: GotthardG <51994228+GotthardG@users.noreply.github.com>
Date: Tue, 6 May 2025 11:28:36 +0200
Subject: [PATCH] Add beamtime relationships and enhance sample handling
This commit adds relationships to link Pucks and Samples to Beamtime in the models, enabling better data association. Includes changes to assign beamtime IDs during data generation and updates in API response models for improved data loading. Removed redundant code in testfunctions.ipynb to clean up the notebook.
---
backend/app/data/data.py | 12 +-
backend/app/models.py | 8 ++
backend/app/routers/beamtime.py | 18 ++-
backend/app/routers/sample.py | 2 +
backend/app/schemas.py | 21 +++
backend/main.py | 4 +-
frontend/src/App.tsx | 8 +-
frontend/src/components/BeamtimeOverview.tsx | 138 +++++++++++++++++++
frontend/src/pages/ResultsView.tsx | 22 +--
testfunctions.ipynb | 17 +--
10 files changed, 222 insertions(+), 28 deletions(-)
create mode 100644 frontend/src/components/BeamtimeOverview.tsx
diff --git a/backend/app/data/data.py b/backend/app/data/data.py
index 616e261..ffdb068 100644
--- a/backend/app/data/data.py
+++ b/backend/app/data/data.py
@@ -407,9 +407,9 @@ beamtimes = [
),
Beamtime(
id=2,
- pgroups="p20002",
+ pgroups="p20003",
shift="afternoon",
- beamtime_name="p20001-test",
+ beamtime_name="p20003-test",
beamline="X06DA",
start_date=datetime.strptime("07.05.2025", "%d.%m.%Y").date(),
end_date=datetime.strptime("08.05.2025", "%d.%m.%Y").date(),
@@ -677,8 +677,15 @@ pucks = [
# Define samples
samples = []
sample_id_counter = 1
+# Assign a beamtime to each dewar
+dewar_to_beamtime = {
+ dewar.id: random.choice([1, 2]) for dewar in dewars # Or use actual beamtime ids
+}
for puck in pucks:
+ dewar_id = puck.dewar_id # Assuming puck has dewar_id
+ assigned_beamtime = dewar_to_beamtime[dewar_id]
+
positions_with_samples = random.randint(1, 16)
occupied_positions = random.sample(range(1, 17), positions_with_samples)
@@ -689,6 +696,7 @@ for puck in pucks:
sample_name=f"Sample{sample_id_counter:03}",
position=pos,
puck_id=puck.id,
+ beamtime_id=assigned_beamtime, # IMPORTANT: Use the dewar's beamtime
)
samples.append(sample)
sample_id_counter += 1
diff --git a/backend/app/models.py b/backend/app/models.py
index 7ebca2e..651708e 100644
--- a/backend/app/models.py
+++ b/backend/app/models.py
@@ -154,6 +154,10 @@ class Puck(Base):
dewar = relationship("Dewar", back_populates="pucks")
samples = relationship("Sample", back_populates="puck")
events = relationship("PuckEvent", back_populates="puck")
+ beamtime_id = Column(Integer, ForeignKey("beamtimes.id"), nullable=True)
+ beamtime = relationship(
+ "Beamtime", back_populates="pucks", foreign_keys=[beamtime_id]
+ )
class Sample(Base):
@@ -173,6 +177,8 @@ class Sample(Base):
puck = relationship("Puck", back_populates="samples")
events = relationship("SampleEvent", back_populates="sample", lazy="joined")
images = relationship("Image", back_populates="sample", lazy="joined")
+ beamtime_id = Column(Integer, ForeignKey("beamtimes.id"), nullable=True)
+ beamtime = relationship("Beamtime", back_populates="samples")
@property
def mount_count(self) -> int:
@@ -256,6 +262,8 @@ class Beamtime(Base):
local_contact = relationship("LocalContact")
dewars = relationship("Dewar", back_populates="beamtime")
+ pucks = relationship("Puck", back_populates="beamtime")
+ samples = relationship("Sample", back_populates="beamtime")
class Image(Base):
diff --git a/backend/app/routers/beamtime.py b/backend/app/routers/beamtime.py
index c077ea5..07d0eae 100644
--- a/backend/app/routers/beamtime.py
+++ b/backend/app/routers/beamtime.py
@@ -1,9 +1,14 @@
from fastapi import APIRouter, HTTPException, status, Depends
-from sqlalchemy.orm import Session
+from sqlalchemy.orm import Session, joinedload
from sqlalchemy import or_
from app.models import Beamtime as BeamtimeModel
-from app.schemas import Beamtime as BeamtimeSchema, BeamtimeCreate, loginData
+from app.schemas import (
+ Beamtime as BeamtimeSchema,
+ BeamtimeCreate,
+ loginData,
+ BeamtimeResponse,
+)
from app.dependencies import get_db
from app.routers.auth import get_current_user
@@ -60,7 +65,7 @@ async def create_beamtime(
@beamtime_router.get(
"/my-beamtimes",
- response_model=list[BeamtimeSchema],
+ response_model=list[BeamtimeResponse],
)
async def get_my_beamtimes(
db: Session = Depends(get_db),
@@ -68,5 +73,10 @@ async def get_my_beamtimes(
):
user_pgroups = current_user.pgroups
filters = [BeamtimeModel.pgroups.like(f"%{pgroup}%") for pgroup in user_pgroups]
- beamtimes = db.query(BeamtimeModel).filter(or_(*filters)).all()
+ beamtimes = (
+ db.query(BeamtimeModel)
+ .options(joinedload(BeamtimeModel.local_contact))
+ .filter(or_(*filters))
+ .all()
+ )
return beamtimes
diff --git a/backend/app/routers/sample.py b/backend/app/routers/sample.py
index f2c31b6..b76bcee 100644
--- a/backend/app/routers/sample.py
+++ b/backend/app/routers/sample.py
@@ -425,6 +425,7 @@ def create_result(payload: ResultCreate, db: Session = Depends(get_db)):
result_entry = ResultsModel(
sample_id=payload.sample_id,
+ status=payload.status,
run_id=payload.run_id,
result=payload.result.model_dump(), # Serialize entire result to JSON
)
@@ -435,6 +436,7 @@ def create_result(payload: ResultCreate, db: Session = Depends(get_db)):
return ResultResponse(
id=result_entry.id,
+ status=result_entry.status,
sample_id=result_entry.sample_id,
run_id=result_entry.run_id,
result=payload.result, # return original payload directly
diff --git a/backend/app/schemas.py b/backend/app/schemas.py
index cc5ec72..14a8ffd 100644
--- a/backend/app/schemas.py
+++ b/backend/app/schemas.py
@@ -534,6 +534,7 @@ class PuckCreate(BaseModel):
puck_type: str
puck_location_in_dewar: int
samples: List[SampleCreate] = []
+ beamtime_id: Optional[int] = None
class PuckUpdate(BaseModel):
@@ -541,6 +542,7 @@ class PuckUpdate(BaseModel):
puck_type: Optional[str] = None
puck_location_in_dewar: Optional[int] = None
dewar_id: Optional[int] = None
+ beamtime_id: Optional[int] = None
class Puck(BaseModel):
@@ -549,6 +551,7 @@ class Puck(BaseModel):
puck_type: str
puck_location_in_dewar: int
dewar_id: int
+ beamtime_id: Optional[int] = None
events: List[PuckEvent] = []
samples: List[Sample] = []
@@ -800,6 +803,24 @@ class BeamtimeCreate(BaseModel):
local_contact_id: Optional[int]
+class BeamtimeResponse(BaseModel):
+ id: int
+ pgroups: str
+ shift: str
+ beamtime_name: str
+ beamline: str
+ start_date: date
+ end_date: date
+ status: str
+ comments: Optional[str] = None
+ proposal_id: Optional[int]
+ local_contact_id: Optional[int]
+ local_contact: Optional[LocalContact]
+
+ class Config:
+ from_attributes = True
+
+
class ImageCreate(BaseModel):
pgroup: str
sample_id: int
diff --git a/backend/main.py b/backend/main.py
index 328c368..caf1b7d 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -168,8 +168,8 @@ async def lifespan(app: FastAPI):
load_slots_data(db)
else: # dev or test environments
print(f"{environment.capitalize()} environment: Regenerating database.")
- # Base.metadata.drop_all(bind=engine)
- # Base.metadata.create_all(bind=engine)
+ Base.metadata.drop_all(bind=engine)
+ Base.metadata.create_all(bind=engine)
# from sqlalchemy.engine import reflection
# from app.models import ExperimentParameters # adjust the import as needed
# inspector = reflection.Inspector.from_engine(engine)
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index bae4f15..447a599 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -12,6 +12,7 @@ import AddressManager from './pages/AddressManagerView';
import ContactsManager from './pages/ContactsManagerView';
import LoginView from './pages/LoginView';
import ProtectedRoute from './components/ProtectedRoute';
+import BeamtimeOverview from './components/BeamtimeOverview';
const App: React.FC = () => {
const [openAddressManager, setOpenAddressManager] = useState(false);
@@ -84,7 +85,12 @@ const App: React.FC = () => {
} />} />
} />} />
} />} />
- } />} />
+ } />} />
+ } />} />
+ } />}/>
+ {/* Optionally, add a 404 fallback route */}
+ Page not found} />
+
diff --git a/frontend/src/components/BeamtimeOverview.tsx b/frontend/src/components/BeamtimeOverview.tsx
new file mode 100644
index 0000000..b1032dc
--- /dev/null
+++ b/frontend/src/components/BeamtimeOverview.tsx
@@ -0,0 +1,138 @@
+import React, { useEffect, useState } from 'react';
+import { DataGridPremium, GridColDef } from '@mui/x-data-grid-premium';
+import { useNavigate } from 'react-router-dom'; // For navigation
+import { BeamtimesService } from '../../openapi';
+import { Chip, Typography } from '@mui/material';
+
+interface BeamtimeRecord {
+ id: number;
+ start_date: string;
+ end_date: string;
+ shift: string;
+ beamline: string;
+ local_contact: string;
+ pgroups: string;
+}
+
+interface BeamtimeOverviewProps {
+ activePgroup: string;
+}
+
+const BeamtimeOverview: React.FC = ({ activePgroup }) => {
+ const [rows, setRows] = useState([]);
+ const [isLoading, setIsLoading] = useState(false);
+
+ // For navigation
+ const navigate = useNavigate();
+
+ const renderPgroupChips = (pgroups: string, activePgroup: string) => {
+ // Safely handle pgroups as an array
+ const pgroupsArray = pgroups.split(",").map((pgroup: string) => pgroup.trim());
+
+ if (!pgroupsArray.length) {
+ return No associated pgroups;
+ }
+
+ return pgroupsArray.map((pgroup: string) => (
+
+ ));
+ };
+
+ // Fetch beamtime records from the backend
+ const fetchBeamtimeRecords = async () => {
+ try {
+ setIsLoading(true);
+ const records = await BeamtimesService.getMyBeamtimesProtectedBeamtimesMyBeamtimesGet(activePgroup);
+
+ const mappedRecords: BeamtimeRecord[] = records.map((record: any) => ({
+ id: record.id,
+ start_date: record.start_date || 'N/A',
+ end_date: record.end_date || 'N/A',
+ shift: record.shift || 'N/A',
+ beamline: record.beamline || 'N/A',
+ local_contact: `${record.local_contact.firstname || "N/A"} ${record.local_contact.lastname || "N/A"}`,
+ pgroups: record.pgroups || '',
+ }));
+
+ setRows(mappedRecords);
+ } catch (error) {
+ console.error('Failed to fetch beamtime records:', error);
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ useEffect(() => {
+ fetchBeamtimeRecords();
+ }, [activePgroup]);
+
+ // Define table columns, including the "View Results" button
+ const columns: GridColDef[] = [
+ { field: 'start_date', headerName: 'Start Date', flex: 1 },
+ { field: 'end_date', headerName: 'End Date', flex: 1 },
+ { field: 'shift', headerName: "Shift", flex: 1 },
+ { field: 'beamline', headerName: 'Beamline', flex: 1 },
+ { field: 'local_contact', headerName: 'Local Contact', flex: 1 },
+ {
+ field: 'pgroups',
+ headerName: 'Pgroups',
+ flex: 2, // Slightly wider column for chips
+ renderCell: (params) => renderPgroupChips(params.row.pgroups, activePgroup),
+ },
+ {
+ field: 'viewResults',
+ headerName: 'Actions',
+ flex: 1,
+ renderCell: (params) => (
+
+ ),
+ },
+ ];
+
+ // Navigate to the ResultsView page for the selected beamtime
+ const handleViewResults = (beamtimeId: number) => {
+ navigate(`/results/${beamtimeId}`); // Pass the beamtimeId in the URL
+ };
+
+ return (
+
+
Beamtime Overview
+
+
+ );
+};
+
+export default BeamtimeOverview;
\ No newline at end of file
diff --git a/frontend/src/pages/ResultsView.tsx b/frontend/src/pages/ResultsView.tsx
index 5e52b59..46e1929 100644
--- a/frontend/src/pages/ResultsView.tsx
+++ b/frontend/src/pages/ResultsView.tsx
@@ -1,24 +1,24 @@
-// components/ResultView.tsx
-
import React from 'react';
+import { useParams } from 'react-router-dom';
import SampleTracker from '../components/SampleTracker';
import ResultGrid from '../components/ResultGrid';
-interface ResultsViewProps {
- activePgroup: string;
-}
+interface ResultsViewProps {}
-const ResultsView: React.FC = ({activePgroup
-}) => {
+const ResultsView: React.FC = () => {
+ // Get the selected beamtime ID from the URL
+ const { beamtimeId } = useParams();
return (
Results Page
-
-
-
+ Results for Beamtime ID: {beamtimeId}
+ {/* Use the beamtimeId to filter or query specific results */}
+
+
+
);
};
-export default ResultsView;
\ No newline at end of file
+export default ResultsView;
diff --git a/testfunctions.ipynb b/testfunctions.ipynb
index 8595a84..cbd0651 100644
--- a/testfunctions.ipynb
+++ b/testfunctions.ipynb
@@ -876,8 +876,8 @@
{
"metadata": {
"ExecuteTime": {
- "end_time": "2025-05-02T13:49:50.890862Z",
- "start_time": "2025-05-02T13:49:50.841161Z"
+ "end_time": "2025-05-05T14:38:32.418132Z",
+ "start_time": "2025-05-05T14:38:32.370685Z"
}
},
"cell_type": "code",
@@ -894,7 +894,7 @@
"# Your actual sample and experiment IDs\n",
"sample_id = sample_id # Replace with valid IDs\n",
"status = \"successful\"\n",
- "run_id = 1 # Replace with valid run_id\n",
+ "run_id = 2 # Replace with valid run_id\n",
"\n",
"# Function to generate list of CurvePoint (resolution, value pairs)\n",
"def logarithmic_decay_curve(length, min_res=4.0, max_res=1.0, max_value=1.0, min_value=0.0, noise=0.005, decimals=3):\n",
@@ -917,6 +917,7 @@
"# Create random Results payload\n",
"results_data = Results(\n",
" pipeline=\"autoproc\",\n",
+ " status=status,\n",
" resolution=round(random.uniform(1.0, 4.0), 2),\n",
" unit_cell=f\"{random.uniform(20, 120):.2f}, {random.uniform(20, 120):.2f}, \"\n",
" f\"{random.uniform(20, 120):.2f}, {random.uniform(60, 120):.2f}, \"\n",
@@ -935,13 +936,13 @@
" comments=\"Random auto-generated test entry\"\n",
")\n",
"\n",
- "payload = ResultCreate(sample_id=sample_id, run_id=run_id, result=results_data)\n",
+ "payload = ResultCreate(sample_id=sample_id, run_id=run_id, result=results_data, status=status)\n",
"\n",
"# correct serialization, passing exact required dict structure\n",
"payload_dict = {\n",
" \"sample_id\": sample_id,\n",
- " \"status\": status,\n",
" \"run_id\": run_id,\n",
+ " \"status\": status,\n",
" \"result\": results_data.model_dump(),\n",
"}\n",
"\n",
@@ -968,7 +969,7 @@
"DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): localhost:8000\n",
"/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1103: InsecureRequestWarning: Unverified HTTPS request is being made to host 'localhost'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n",
" warnings.warn(\n",
- "DEBUG:urllib3.connectionpool:https://localhost:8000 \"POST /samples/processing-results HTTP/1.1\" 200 7192\n"
+ "DEBUG:urllib3.connectionpool:https://localhost:8000 \"POST /samples/processing-results HTTP/1.1\" 200 7213\n"
]
},
{
@@ -976,11 +977,11 @@
"output_type": "stream",
"text": [
"API call successful:\n",
- "ResultResponse(id=2, sample_id=204, run_id=6, result=Results(pipeline='autoproc', resolution=3.73, unit_cell='86.44, 99.53, 23.45, 111.04, 110.10, 115.31', spacegroup='P21212', rmerge=0.029, rmeas=0.052, isig=16.74, cc=[CurvePoint(resolution=3.991, value=1.0), CurvePoint(resolution=3.93, value=1.0), CurvePoint(resolution=3.926, value=0.995), CurvePoint(resolution=3.894, value=0.997), CurvePoint(resolution=3.774, value=1.0), CurvePoint(resolution=3.658, value=0.996), CurvePoint(resolution=3.656, value=1.0), CurvePoint(resolution=3.612, value=1.0), CurvePoint(resolution=3.612, value=1.0), CurvePoint(resolution=3.594, value=1.0), CurvePoint(resolution=3.59, value=1.0), CurvePoint(resolution=3.571, value=1.0), CurvePoint(resolution=3.57, value=0.995), CurvePoint(resolution=3.562, value=0.999), CurvePoint(resolution=3.495, value=0.999), CurvePoint(resolution=3.436, value=0.999), CurvePoint(resolution=3.389, value=1.0), CurvePoint(resolution=3.365, value=0.997), CurvePoint(resolution=3.291, value=0.999), CurvePoint(resolution=3.224, value=0.999), CurvePoint(resolution=3.215, value=0.999), CurvePoint(resolution=3.201, value=1.0), CurvePoint(resolution=3.188, value=0.999), CurvePoint(resolution=3.161, value=1.0), CurvePoint(resolution=3.121, value=0.996), CurvePoint(resolution=3.111, value=0.997), CurvePoint(resolution=3.016, value=1.0), CurvePoint(resolution=2.973, value=0.996), CurvePoint(resolution=2.969, value=0.998), CurvePoint(resolution=2.925, value=0.998), CurvePoint(resolution=2.925, value=0.998), CurvePoint(resolution=2.908, value=1.0), CurvePoint(resolution=2.896, value=0.998), CurvePoint(resolution=2.854, value=1.0), CurvePoint(resolution=2.843, value=1.0), CurvePoint(resolution=2.841, value=0.997), CurvePoint(resolution=2.84, value=0.999), CurvePoint(resolution=2.831, value=1.0), CurvePoint(resolution=2.777, value=1.0), CurvePoint(resolution=2.759, value=0.999), CurvePoint(resolution=2.757, value=1.0), CurvePoint(resolution=2.74, value=1.0), CurvePoint(resolution=2.723, value=1.0), CurvePoint(resolution=2.698, value=1.0), CurvePoint(resolution=2.689, value=0.998), CurvePoint(resolution=2.614, value=1.0), CurvePoint(resolution=2.569, value=0.997), CurvePoint(resolution=2.561, value=1.0), CurvePoint(resolution=2.547, value=1.0), CurvePoint(resolution=2.518, value=1.0), CurvePoint(resolution=2.506, value=0.996), CurvePoint(resolution=2.455, value=1.0), CurvePoint(resolution=2.446, value=0.996), CurvePoint(resolution=2.374, value=1.0), CurvePoint(resolution=2.365, value=0.999), CurvePoint(resolution=2.298, value=0.996), CurvePoint(resolution=2.287, value=1.0), CurvePoint(resolution=2.278, value=0.996), CurvePoint(resolution=2.278, value=1.0), CurvePoint(resolution=2.272, value=0.995), CurvePoint(resolution=2.211, value=1.0), CurvePoint(resolution=2.195, value=1.0), CurvePoint(resolution=2.165, value=1.0), CurvePoint(resolution=2.14, value=1.0), CurvePoint(resolution=2.108, value=1.0), CurvePoint(resolution=2.067, value=0.999), CurvePoint(resolution=2.021, value=0.996), CurvePoint(resolution=1.992, value=0.995), CurvePoint(resolution=1.947, value=0.995), CurvePoint(resolution=1.937, value=1.0), CurvePoint(resolution=1.904, value=0.995), CurvePoint(resolution=1.865, value=0.992), CurvePoint(resolution=1.8, value=0.992), CurvePoint(resolution=1.752, value=0.995), CurvePoint(resolution=1.751, value=0.989), CurvePoint(resolution=1.739, value=0.995), CurvePoint(resolution=1.716, value=0.993), CurvePoint(resolution=1.7, value=0.992), CurvePoint(resolution=1.659, value=0.988), CurvePoint(resolution=1.594, value=0.982), CurvePoint(resolution=1.586, value=0.984), CurvePoint(resolution=1.555, value=0.973), CurvePoint(resolution=1.555, value=0.979), CurvePoint(resolution=1.463, value=0.953), CurvePoint(resolution=1.442, value=0.943), CurvePoint(resolution=1.412, value=0.94), CurvePoint(resolution=1.407, value=0.935), CurvePoint(resolution=1.394, value=0.924), CurvePoint(resolution=1.377, value=0.923), CurvePoint(resolution=1.374, value=0.922), CurvePoint(resolution=1.358, value=0.905), CurvePoint(resolution=1.34, value=0.894), CurvePoint(resolution=1.319, value=0.879), CurvePoint(resolution=1.306, value=0.875), CurvePoint(resolution=1.257, value=0.817), CurvePoint(resolution=1.225, value=0.773), CurvePoint(resolution=1.141, value=0.608), CurvePoint(resolution=1.139, value=0.606), CurvePoint(resolution=1.059, value=0.322), CurvePoint(resolution=1.013, value=0.082)], cchalf=[CurvePoint(resolution=3.98, value=0.995), CurvePoint(resolution=3.98, value=1.0), CurvePoint(resolution=3.947, value=1.0), CurvePoint(resolution=3.837, value=1.0), CurvePoint(resolution=3.769, value=0.999), CurvePoint(resolution=3.757, value=1.0), CurvePoint(resolution=3.731, value=0.999), CurvePoint(resolution=3.723, value=1.0), CurvePoint(resolution=3.694, value=1.0), CurvePoint(resolution=3.685, value=0.995), CurvePoint(resolution=3.658, value=1.0), CurvePoint(resolution=3.643, value=1.0), CurvePoint(resolution=3.615, value=1.0), CurvePoint(resolution=3.522, value=0.999), CurvePoint(resolution=3.502, value=1.0), CurvePoint(resolution=3.491, value=0.998), CurvePoint(resolution=3.486, value=1.0), CurvePoint(resolution=3.474, value=1.0), CurvePoint(resolution=3.468, value=0.997), CurvePoint(resolution=3.464, value=1.0), CurvePoint(resolution=3.463, value=1.0), CurvePoint(resolution=3.43, value=1.0), CurvePoint(resolution=3.378, value=0.999), CurvePoint(resolution=3.297, value=0.998), CurvePoint(resolution=3.25, value=1.0), CurvePoint(resolution=3.244, value=1.0), CurvePoint(resolution=3.191, value=0.998), CurvePoint(resolution=3.188, value=0.998), CurvePoint(resolution=3.17, value=0.996), CurvePoint(resolution=3.158, value=0.995), CurvePoint(resolution=3.158, value=1.0), CurvePoint(resolution=3.145, value=0.996), CurvePoint(resolution=3.142, value=1.0), CurvePoint(resolution=3.122, value=0.996), CurvePoint(resolution=3.093, value=1.0), CurvePoint(resolution=3.089, value=0.995), CurvePoint(resolution=3.013, value=1.0), CurvePoint(resolution=2.975, value=1.0), CurvePoint(resolution=2.955, value=1.0), CurvePoint(resolution=2.813, value=0.999), CurvePoint(resolution=2.74, value=1.0), CurvePoint(resolution=2.723, value=0.997), CurvePoint(resolution=2.695, value=0.997), CurvePoint(resolution=2.692, value=0.995), CurvePoint(resolution=2.673, value=1.0), CurvePoint(resolution=2.645, value=0.997), CurvePoint(resolution=2.608, value=1.0), CurvePoint(resolution=2.582, value=1.0), CurvePoint(resolution=2.556, value=1.0), CurvePoint(resolution=2.457, value=1.0), CurvePoint(resolution=2.422, value=1.0), CurvePoint(resolution=2.408, value=0.998), CurvePoint(resolution=2.388, value=0.996), CurvePoint(resolution=2.377, value=0.996), CurvePoint(resolution=2.347, value=1.0), CurvePoint(resolution=2.325, value=0.998), CurvePoint(resolution=2.299, value=0.998), CurvePoint(resolution=2.275, value=0.998), CurvePoint(resolution=2.259, value=1.0), CurvePoint(resolution=2.242, value=0.995), CurvePoint(resolution=2.209, value=1.0), CurvePoint(resolution=2.186, value=1.0), CurvePoint(resolution=2.175, value=0.997), CurvePoint(resolution=2.165, value=0.999), CurvePoint(resolution=2.113, value=1.0), CurvePoint(resolution=2.041, value=1.0), CurvePoint(resolution=1.997, value=0.994), CurvePoint(resolution=1.993, value=1.0), CurvePoint(resolution=1.979, value=0.997), CurvePoint(resolution=1.972, value=0.995), CurvePoint(resolution=1.93, value=1.0), CurvePoint(resolution=1.884, value=1.0), CurvePoint(resolution=1.877, value=0.996), CurvePoint(resolution=1.869, value=0.998), CurvePoint(resolution=1.863, value=0.996), CurvePoint(resolution=1.861, value=1.0), CurvePoint(resolution=1.851, value=0.995), CurvePoint(resolution=1.825, value=0.997), CurvePoint(resolution=1.791, value=0.997), CurvePoint(resolution=1.757, value=0.995), CurvePoint(resolution=1.734, value=0.997), CurvePoint(resolution=1.675, value=0.987), CurvePoint(resolution=1.635, value=0.987), CurvePoint(resolution=1.606, value=0.979), CurvePoint(resolution=1.556, value=0.974), CurvePoint(resolution=1.53, value=0.972), CurvePoint(resolution=1.466, value=0.958), CurvePoint(resolution=1.443, value=0.945), CurvePoint(resolution=1.435, value=0.947), CurvePoint(resolution=1.409, value=0.936), CurvePoint(resolution=1.344, value=0.897), CurvePoint(resolution=1.305, value=0.873), CurvePoint(resolution=1.275, value=0.839), CurvePoint(resolution=1.194, value=0.729), CurvePoint(resolution=1.163, value=0.664), CurvePoint(resolution=1.149, value=0.625), CurvePoint(resolution=1.142, value=0.609), CurvePoint(resolution=1.116, value=0.54), CurvePoint(resolution=1.037, value=0.218), CurvePoint(resolution=1.027, value=0.164)], completeness=85.1, multiplicity=3.28, nobs=53636, total_refl=140858, unique_refl=24272, comments='Random auto-generated test entry'))\n"
+ "ResultResponse(id=5, status='successful', sample_id=277, run_id=2, result=Results(pipeline='autoproc', resolution=1.4, unit_cell='108.05, 108.47, 84.95, 78.67, 102.50, 78.68', spacegroup='P1', rmerge=0.033, rmeas=0.049, isig=3.77, cc=[CurvePoint(resolution=3.982, value=0.995), CurvePoint(resolution=3.944, value=0.998), CurvePoint(resolution=3.937, value=0.996), CurvePoint(resolution=3.87, value=0.999), CurvePoint(resolution=3.85, value=1.0), CurvePoint(resolution=3.841, value=1.0), CurvePoint(resolution=3.827, value=1.0), CurvePoint(resolution=3.775, value=1.0), CurvePoint(resolution=3.719, value=0.996), CurvePoint(resolution=3.718, value=0.998), CurvePoint(resolution=3.711, value=1.0), CurvePoint(resolution=3.688, value=0.998), CurvePoint(resolution=3.684, value=0.997), CurvePoint(resolution=3.679, value=0.998), CurvePoint(resolution=3.53, value=1.0), CurvePoint(resolution=3.518, value=0.999), CurvePoint(resolution=3.493, value=0.997), CurvePoint(resolution=3.456, value=1.0), CurvePoint(resolution=3.443, value=0.998), CurvePoint(resolution=3.416, value=1.0), CurvePoint(resolution=3.368, value=1.0), CurvePoint(resolution=3.334, value=1.0), CurvePoint(resolution=3.32, value=1.0), CurvePoint(resolution=3.287, value=1.0), CurvePoint(resolution=3.278, value=0.995), CurvePoint(resolution=3.26, value=0.999), CurvePoint(resolution=3.247, value=1.0), CurvePoint(resolution=3.225, value=0.995), CurvePoint(resolution=3.173, value=0.996), CurvePoint(resolution=3.17, value=0.998), CurvePoint(resolution=3.155, value=1.0), CurvePoint(resolution=3.019, value=1.0), CurvePoint(resolution=3.007, value=0.997), CurvePoint(resolution=3.005, value=1.0), CurvePoint(resolution=2.962, value=0.999), CurvePoint(resolution=2.954, value=1.0), CurvePoint(resolution=2.939, value=1.0), CurvePoint(resolution=2.935, value=1.0), CurvePoint(resolution=2.935, value=1.0), CurvePoint(resolution=2.93, value=1.0), CurvePoint(resolution=2.903, value=1.0), CurvePoint(resolution=2.889, value=0.997), CurvePoint(resolution=2.851, value=1.0), CurvePoint(resolution=2.721, value=1.0), CurvePoint(resolution=2.705, value=0.999), CurvePoint(resolution=2.671, value=0.997), CurvePoint(resolution=2.639, value=0.996), CurvePoint(resolution=2.536, value=1.0), CurvePoint(resolution=2.529, value=1.0), CurvePoint(resolution=2.509, value=1.0), CurvePoint(resolution=2.501, value=0.997), CurvePoint(resolution=2.485, value=0.998), CurvePoint(resolution=2.458, value=1.0), CurvePoint(resolution=2.454, value=1.0), CurvePoint(resolution=2.452, value=1.0), CurvePoint(resolution=2.438, value=0.998), CurvePoint(resolution=2.435, value=1.0), CurvePoint(resolution=2.402, value=1.0), CurvePoint(resolution=2.354, value=0.999), CurvePoint(resolution=2.345, value=1.0), CurvePoint(resolution=2.334, value=0.997), CurvePoint(resolution=2.331, value=1.0), CurvePoint(resolution=2.255, value=0.999), CurvePoint(resolution=2.229, value=1.0), CurvePoint(resolution=2.186, value=1.0), CurvePoint(resolution=2.128, value=1.0), CurvePoint(resolution=2.08, value=1.0), CurvePoint(resolution=2.004, value=0.999), CurvePoint(resolution=1.991, value=0.997), CurvePoint(resolution=1.981, value=0.997), CurvePoint(resolution=1.966, value=1.0), CurvePoint(resolution=1.951, value=0.996), CurvePoint(resolution=1.926, value=0.997), CurvePoint(resolution=1.915, value=0.996), CurvePoint(resolution=1.904, value=0.995), CurvePoint(resolution=1.889, value=0.994), CurvePoint(resolution=1.872, value=1.0), CurvePoint(resolution=1.825, value=0.995), CurvePoint(resolution=1.818, value=0.999), CurvePoint(resolution=1.811, value=0.991), CurvePoint(resolution=1.791, value=0.994), CurvePoint(resolution=1.722, value=0.992), CurvePoint(resolution=1.702, value=0.991), CurvePoint(resolution=1.696, value=0.993), CurvePoint(resolution=1.665, value=0.985), CurvePoint(resolution=1.648, value=0.987), CurvePoint(resolution=1.519, value=0.969), CurvePoint(resolution=1.467, value=0.954), CurvePoint(resolution=1.394, value=0.931), CurvePoint(resolution=1.365, value=0.914), CurvePoint(resolution=1.351, value=0.905), CurvePoint(resolution=1.338, value=0.895), CurvePoint(resolution=1.278, value=0.847), CurvePoint(resolution=1.233, value=0.79), CurvePoint(resolution=1.191, value=0.723), CurvePoint(resolution=1.187, value=0.715), CurvePoint(resolution=1.114, value=0.534), CurvePoint(resolution=1.107, value=0.514), CurvePoint(resolution=1.084, value=0.434), CurvePoint(resolution=1.038, value=0.229)], cchalf=[CurvePoint(resolution=3.994, value=0.999), CurvePoint(resolution=3.994, value=0.996), CurvePoint(resolution=3.986, value=1.0), CurvePoint(resolution=3.929, value=1.0), CurvePoint(resolution=3.926, value=1.0), CurvePoint(resolution=3.892, value=0.996), CurvePoint(resolution=3.797, value=1.0), CurvePoint(resolution=3.784, value=0.999), CurvePoint(resolution=3.7, value=0.998), CurvePoint(resolution=3.694, value=1.0), CurvePoint(resolution=3.66, value=0.998), CurvePoint(resolution=3.645, value=0.999), CurvePoint(resolution=3.601, value=1.0), CurvePoint(resolution=3.581, value=0.996), CurvePoint(resolution=3.555, value=1.0), CurvePoint(resolution=3.421, value=1.0), CurvePoint(resolution=3.421, value=1.0), CurvePoint(resolution=3.365, value=1.0), CurvePoint(resolution=3.339, value=0.999), CurvePoint(resolution=3.271, value=0.999), CurvePoint(resolution=3.261, value=1.0), CurvePoint(resolution=3.252, value=0.996), CurvePoint(resolution=3.22, value=0.995), CurvePoint(resolution=3.205, value=0.996), CurvePoint(resolution=3.179, value=0.999), CurvePoint(resolution=3.116, value=0.996), CurvePoint(resolution=3.073, value=0.998), CurvePoint(resolution=3.012, value=0.999), CurvePoint(resolution=2.999, value=0.999), CurvePoint(resolution=2.985, value=1.0), CurvePoint(resolution=2.98, value=1.0), CurvePoint(resolution=2.976, value=1.0), CurvePoint(resolution=2.927, value=0.996), CurvePoint(resolution=2.911, value=0.996), CurvePoint(resolution=2.855, value=1.0), CurvePoint(resolution=2.831, value=1.0), CurvePoint(resolution=2.827, value=1.0), CurvePoint(resolution=2.785, value=0.996), CurvePoint(resolution=2.778, value=0.999), CurvePoint(resolution=2.753, value=0.998), CurvePoint(resolution=2.716, value=1.0), CurvePoint(resolution=2.691, value=1.0), CurvePoint(resolution=2.677, value=0.995), CurvePoint(resolution=2.659, value=0.998), CurvePoint(resolution=2.646, value=1.0), CurvePoint(resolution=2.626, value=1.0), CurvePoint(resolution=2.532, value=0.996), CurvePoint(resolution=2.508, value=1.0), CurvePoint(resolution=2.507, value=0.999), CurvePoint(resolution=2.446, value=0.997), CurvePoint(resolution=2.439, value=0.997), CurvePoint(resolution=2.409, value=1.0), CurvePoint(resolution=2.404, value=0.995), CurvePoint(resolution=2.346, value=1.0), CurvePoint(resolution=2.332, value=1.0), CurvePoint(resolution=2.328, value=0.996), CurvePoint(resolution=2.309, value=0.996), CurvePoint(resolution=2.27, value=1.0), CurvePoint(resolution=2.193, value=0.997), CurvePoint(resolution=2.148, value=1.0), CurvePoint(resolution=2.143, value=1.0), CurvePoint(resolution=2.123, value=0.995), CurvePoint(resolution=2.109, value=1.0), CurvePoint(resolution=2.099, value=1.0), CurvePoint(resolution=2.051, value=1.0), CurvePoint(resolution=2.036, value=0.999), CurvePoint(resolution=2.035, value=0.995), CurvePoint(resolution=2.033, value=0.999), CurvePoint(resolution=1.996, value=1.0), CurvePoint(resolution=1.99, value=1.0), CurvePoint(resolution=1.988, value=1.0), CurvePoint(resolution=1.977, value=0.994), CurvePoint(resolution=1.934, value=0.997), CurvePoint(resolution=1.898, value=1.0), CurvePoint(resolution=1.856, value=0.994), CurvePoint(resolution=1.808, value=0.994), CurvePoint(resolution=1.755, value=0.993), CurvePoint(resolution=1.743, value=0.998), CurvePoint(resolution=1.735, value=0.991), CurvePoint(resolution=1.701, value=0.987), CurvePoint(resolution=1.687, value=0.992), CurvePoint(resolution=1.561, value=0.98), CurvePoint(resolution=1.538, value=0.975), CurvePoint(resolution=1.533, value=0.974), CurvePoint(resolution=1.456, value=0.956), CurvePoint(resolution=1.452, value=0.948), CurvePoint(resolution=1.419, value=0.938), CurvePoint(resolution=1.404, value=0.935), CurvePoint(resolution=1.371, value=0.919), CurvePoint(resolution=1.346, value=0.902), CurvePoint(resolution=1.315, value=0.876), CurvePoint(resolution=1.286, value=0.848), CurvePoint(resolution=1.266, value=0.833), CurvePoint(resolution=1.212, value=0.753), CurvePoint(resolution=1.21, value=0.75), CurvePoint(resolution=1.175, value=0.692), CurvePoint(resolution=1.172, value=0.678), CurvePoint(resolution=1.156, value=0.649), CurvePoint(resolution=1.147, value=0.625), CurvePoint(resolution=1.109, value=0.517)], completeness=97.29, multiplicity=5.3, nobs=189003, total_refl=140823, unique_refl=44561, comments='Random auto-generated test entry'))\n"
]
}
],
- "execution_count": 31
+ "execution_count": 27
},
{
"metadata": {