/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="bookmark"></param> /// <param name="obj"></param> protected override void OnBookmarkCallback(NativeActivityContext context, Bookmark bookmark, string obj) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; Debug.Assert(bookmark.Name == BookmarkName); context.GetExtension <CompositionContainer>().SatisfyImportsOnce(this); _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Enter: Finished Processing UnitId: [{1}], Bookmark name: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), bookmark.Name)); var registrationType = SpatialRegistrationObjectType.Get(context); if (registrationType.Equals("2D")) { IList <int> imageIds = new List <int>(); _processSpatialRegistrationObject.GetReferencedImageIds(Int32.Parse(UnitId.Get(context)), VerificationImageSopInstanceValues.Get(context), ref imageIds); foreach (int image_id in imageIds) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing UnitId: [{1}], Found Image ID: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), image_id.ToString())); } if (imageIds.Count == 0) { _logger.Log(EventSeverity.Error, method, string.Format("[{0}] Processing UnitId: [{1}], Image Id list was not set correctly", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context))); ActivityStatus.Set(context, "FAILED"); } else { ActivityStatus.Set(context, "SUCCESS"); } VerificationImageIds.Set(context, imageIds); OutUnitId.Set(context, UnitId.Get(context)); ActivityStatus.Set(context, "SUCCESS"); } else if (registrationType.Equals("3D")) { IList <int> imageIds = new List <int>(); _processSpatialRegistrationObject.GetReferencedImageIdsFromSOPInstanceUIDs(Int32.Parse(UnitId.Get(context)), VerificationImageSopInstanceValues.Get(context), ref imageIds); foreach (int image_id in imageIds) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing UnitId: [{1}], Found Image ID: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), image_id.ToString())); } if (imageIds.Count == 0) { _logger.Log(EventSeverity.Error, method, string.Format("[{0}] Processing UnitId: [{1}], Image Id list was not set correctly", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context))); ActivityStatus.Set(context, "FAILED"); } else { ActivityStatus.Set(context, "SUCCESS"); } VerificationImageIds.Set(context, imageIds); OutUnitId.Set(context, UnitId.Get(context)); } _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Exit: Finished Processing UnitId: [{1}], Bookmark name: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), bookmark.Name)); }
/// <summary> </summary> /// <param name="context"></param> protected override void DoWork(CodeActivityContext context) { string localStatus = "FAILED"; string _dcmInstanceId = UnitId.Get(context); int nDcmInstanceId = Convert.ToInt32(_dcmInstanceId); IList <string> sourceFrameOfReferenceUid = SourceFrameOfReferenceUID.Get(context); string targetFrameOfReferenceUid = TargetFrameOfReferenceUID.Get(context); IList <IList <double> > transformationMatrix = TransformationMatrix.Get(context); IList <int> planningImageIdValues = PlanningImageIdValues.Get(context); IList <int> verificationImageIdValues = VerificationImageIdValues.Get(context); IList <string> planningImageSopInstanceUidValues = PlanningImageSopInstanceValues.Get(context); IList <string> verificationImageSopInstanceUidValues = VerificationImageSopInstanceValues.Get(context); IList <string> planningFrameOfReferenceUidValues = PlanningImageFrameOfReferenceUidValues.Get(context); string spatialRegistrationObjectType = SpatialRegistrationObjectType.Get(context); string siteID = SiteID.Get(context); IList <decimal> dOffsetValues = new List <decimal>(6); int nOffsetId = 0; int nSiteID = 0; int nPatientID = 0; if (siteID.Length > 0) { nSiteID = Convert.ToInt32(siteID); } context.GetExtension <CompositionContainer>().SatisfyImportsOnce(this); bool result = _processSpatialRegistrationObject.PrepAndCreateOffsetRecords( nDcmInstanceId, spatialRegistrationObjectType, planningImageIdValues, verificationImageIdValues, planningImageSopInstanceUidValues, verificationImageSopInstanceUidValues, planningFrameOfReferenceUidValues, sourceFrameOfReferenceUid, targetFrameOfReferenceUid, transformationMatrix, nSiteID, ref nPatientID, ref nOffsetId, ref dOffsetValues); if (result) { localStatus = "SUCCESS"; } PatientID.Set(context, nPatientID.ToString()); OffsetID.Set(context, nOffsetId.ToString()); SroProcessedResult.Set(context, result); OffsetValues.Set(context, dOffsetValues); ActivityStatus.Set(context, localStatus); }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="bookmark"></param> /// <param name="obj"></param> protected override void OnBookmarkCallback(NativeActivityContext context, Bookmark bookmark, string obj) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; Debug.Assert(bookmark.Name == BookmarkName); context.GetExtension <CompositionContainer>().SatisfyImportsOnce(this); _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Enter: Finished Processing SRO UnitId: [{1}], Bookmark name: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), bookmark.Name)); // get the Image IDs for the Verification and Planning images IList <int> verifImageIds = new List <int>(); _processSpatialRegistrationObject.GetReferencedImageIdsFromSOPInstanceUIDs(Int32.Parse(UnitId.Get(context)), VerificationImageSopInstanceUidValues.Get(context), ref verifImageIds); IList <int> planningImageIds = new List <int>(); _processSpatialRegistrationObject.GetReferencedImageIdsFromSOPInstanceUIDs(Int32.Parse(UnitId.Get(context)), PlanningImageSopInstanceUidValues.Get(context), ref planningImageIds); // (NB for an XVI 5x SRO we only expect a single Planning image & a single Verificationn image if (verifImageIds.Count != 1 || planningImageIds.Count != 1) { _logger.Log(EventSeverity.Error, method, string.Format("[{0}] Processing SRO UnitId: [{1}], Verification and/or Planning Image Ids were not correctly found", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context))); ActivityStatus.Set(context, "FAILED"); } else { ActivityStatus.Set(context, "SUCCESS"); } foreach (int imageId in verifImageIds) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing SRO UnitId: [{1}], Found Verification Image ID: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), imageId.ToString())); } foreach (int imageId in planningImageIds) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing SRO UnitId: [{1}], Found Planning Image ID: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), imageId.ToString())); } PlanningImageIds.Set(context, planningImageIds); VerificationImageIds.Set(context, verifImageIds); OutUnitId.Set(context, UnitId.Get(context)); _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Exit: Finished Processing SRO UnitId: [{1}], Bookmark name: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), bookmark.Name)); }
/// <summary> /// </summary> /// <param name="context"></param> protected override void DoWork(CodeActivityContext context) { ActivityStatus.Set(context, "FAILED"); context.GetExtension <CompositionContainer>().SatisfyImportsOnce(this); double xCoord = -9999.99; double yCoord = -9999.99; string localStatus = _processRtImageFromIView.ComputeIViewGTRtImagePosition( IViewGTPortalImageFilename.Get(context), ref xCoord, ref yCoord); RtImagePositionXmm.Set(context, xCoord); RtImagePositionYmm.Set(context, yCoord); ActivityStatus.Set(context, localStatus); }
/// <summary> </summary> /// <param name="context"></param> protected override void DoWork(CodeActivityContext context) { string localStatus = "FAILED"; IList <string> _dcmInstanceIds = StructureSetIds.Get(context); int nDcmInstanceId = 0; string isocenterCoordinates = ""; IList <string> spatialIsocenters = new List <string>(); context.GetExtension <CompositionContainer>().SatisfyImportsOnce(this); ActivityStatus.Set(context, localStatus); foreach (string dcmInstance in _dcmInstanceIds) { nDcmInstanceId = Convert.ToInt32(dcmInstance); isocenterCoordinates = _processSpatialRegistrationObject.ExtractSpatialIsocenterCoordinates(nDcmInstanceId); spatialIsocenters.Add(isocenterCoordinates); } localStatus = "SUCCESS"; SpatialIsocenterCoordinates.Set(context, spatialIsocenters); ActivityStatus.Set(context, localStatus); }
/// <summary> </summary> /// <param name="context"></param> protected override void DoWork(CodeActivityContext context) { string localStatus = "FAILED"; ActivityStatus.Set(context, localStatus); string _dcmInstanceId = UnitId.Get(context); int nDcmInstanceId = Convert.ToInt32(_dcmInstanceId); string siteID = ""; context.GetExtension <CompositionContainer>().SatisfyImportsOnce(this); bool result = _processSpatialRegistrationObject.IsObjectTreatmentDeliveryBased(nDcmInstanceId, ref siteID); if (result) { localStatus = "SUCCESS"; } Result.Set(context, result); SiteID.Set(context, siteID); ActivityStatus.Set(context, localStatus); }
/// <summary> </summary> /// <param name="context"></param> protected override void DoWork(CodeActivityContext context) { string localStatus = "FAILED"; ActivityStatus.Set(context, localStatus); string _dcmInstanceId = UnitId.Get(context); int nDcmInstanceId = Convert.ToInt32(_dcmInstanceId); string referencedRPSUid = ""; context.GetExtension <CompositionContainer>().SatisfyImportsOnce(this); bool result = _processSpatialRegistrationObject.IsElektaXVI5xSRO(nDcmInstanceId, ref referencedRPSUid); if (result) { localStatus = "SUCCESS"; } Result.Set(context, result); ReferencedRPSUid.Set(context, referencedRPSUid); ActivityStatus.Set(context, localStatus); }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="pCancelBookmarkCreation"></param> protected override void OnBeforeCreateBookmark(NativeActivityContext context, out bool pCancelBookmarkCreation) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; pCancelBookmarkCreation = false; _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Enter: Processing UnitId: [{1}], Bookmark name: [{2}], Extension Recorded Id:[{3}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), BookmarkName, _processSpatialRegistrationObject.ConstructedBy)); var registrationType = SpatialRegistrationObjectType.Get(context); var planningSopInstanceUids = PlanningImageSopInstanceValues.Get(context); switch (registrationType) { case "2D": var ref2DImageInfo = _processSpatialRegistrationObject.GetReferenced2DImageInfo(Int32.Parse(UnitId.Get(context)), planningSopInstanceUids); foreach (var tuple in ref2DImageInfo) { foreach (string refSopInstanceUid in tuple.Item2) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing UnitId: [{1}], Looking for IMG with SOP Instance: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), refSopInstanceUid)); } var metadata = _processSpatialRegistrationObject.BuildMonitorMetadataForReferencedImageData(tuple.Item1, tuple.Item2); IList <int> imageIds = new List <int>(); // // If the dataset we are planning to wait is already available // skip the bookmark creation and proceed to next activity. // if (_waitSetDataWrapper.IsDataAvailable(metadata)) { pCancelBookmarkCreation = true; _processSpatialRegistrationObject.GetReferencedImageIds(Int32.Parse(UnitId.Get(context)), VerificationImageSopInstanceValues.Get(context), ref imageIds); if (imageIds.Count > 0) { foreach (int image_id in imageIds) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing UnitId: [{1}], Found Image ID: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), image_id.ToString())); } } if (imageIds.Count == 0) { _logger.Log(EventSeverity.Error, method, string.Format("[{0}] Processing UnitId: [{1}], Image Id list was not set correctly", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context))); ActivityStatus.Set(context, "FAILED"); } else { ActivityStatus.Set(context, "SUCCESS"); } VerificationImageIds.Set(context, imageIds); OutUnitId.Set(context, UnitId.Get(context)); } else { // Perform manual processing to see which images are currently available // This needs to handle 1-N cases _processSpatialRegistrationObject.GetReferencedImageIds(Int32.Parse(UnitId.Get(context)), VerificationImageSopInstanceValues.Get(context), ref imageIds); // based on that result set, set the bookmark if we are still missing some data if (imageIds.Count < VerificationImageSopInstanceValues.Get(context).Count) { BookmarkMetadata.Set(context, metadata.ToString()); _waitSetDataWrapper.InitiateWaitForData(context.WorkflowInstanceId, BookmarkName, metadata, _waitHandlersRepository.Get("WorkQueueElement")); } } } break; case "3D": var ref3DImageInfo = _processSpatialRegistrationObject.GetReferenced3DImageInfo(Int32.Parse(UnitId.Get(context)), planningSopInstanceUids); int i = 0; foreach (var tuple in ref3DImageInfo) { if (tuple.Item2.Count == 0) { continue; } foreach (string refSopInstanceUid in tuple.Item3) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing UnitId: [{1}], Looking for DCM SOP Instance: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), refSopInstanceUid)); } string verForUid = string.Empty; if (!base._useQueryNotificationFor3DWorkflows) { verForUid = _processSpatialRegistrationObject.GetReferencedFrameOfReferenceInfo(Int32.Parse(UnitId.Get(context))); } var metadata = _processSpatialRegistrationObject.BuildMonitorMetadataForReferencedDicomData(tuple.Item1, tuple.Item2[i], verForUid, tuple.Item3); // // If the dataset we are planning to wait is already available // skip the bookmark creation and proceed to next activity. // if (_waitSetDataWrapper.IsDataAvailable(metadata)) { pCancelBookmarkCreation = true; IList <int> imageIds = new List <int>(); _processSpatialRegistrationObject.GetReferencedImageIdsFromSOPInstanceUIDs(Int32.Parse(UnitId.Get(context)), VerificationImageSopInstanceValues.Get(context), ref imageIds); foreach (int image_id in imageIds) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing UnitId: [{1}], Found Image ID: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), image_id.ToString())); } if (imageIds.Count == 0) { _logger.Log(EventSeverity.Error, method, string.Format("[{0}] Processing UnitId: [{1}], Image Id list was not set correctly", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context))); ActivityStatus.Set(context, "FAILED"); } else { ActivityStatus.Set(context, "SUCCESS"); } VerificationImageIds.Set(context, imageIds); OutUnitId.Set(context, UnitId.Get(context)); //if (!base._useQueryNotificationFor3DWorkflows) //{ // if (!String.IsNullOrEmpty(metadata.DataMonitoringEventId)) // { // WaitEventManager.TryRemoveEvent(metadata.DataMonitoringEventId); // } //} } else { BookmarkMetadata.Set(context, metadata.ToString()); if (base._useQueryNotificationFor3DWorkflows) { _waitSetDataWrapper.InitiateWaitForData(context.WorkflowInstanceId, BookmarkName, metadata, _waitHandlersRepository.Get("WorkQueueElement")); } else { _waitSetDataWrapper.InitiateWaitForDataEvent(context.WorkflowInstanceId, BookmarkName, metadata, _waitHandlersRepository.Get("WorkQueueElement")); } } i++; } break; } _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Exit: Processing UnitId: [{1}], Bookmark name: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), BookmarkName)); }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="pCancelBookmarkCreation"></param> protected override void OnBeforeCreateBookmark(NativeActivityContext context, out bool pCancelBookmarkCreation) { var method = System.Reflection.MethodBase.GetCurrentMethod().Name; pCancelBookmarkCreation = false; _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Enter: Processing SRO UnitId: [{1}], Bookmark name: [{2}], Extension Recorded Id:[{3}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), BookmarkName, _processSpatialRegistrationObject.ConstructedBy)); var planningSopInstanceUids = PlanningImageSopInstanceUidValues.Get(context); var verificationSopInstanceUids = VerificationImageSopInstanceUidValues.Get(context); // we want to wait for both planning and verification instances //IList<string> instanceUidsToWaitFor = // planningSopInstanceUids.Concat(verificationSopInstanceUids).ToList(); string verForUid = string.Empty; if (!base._useQueryNotificationFor3DWorkflows) { verForUid = _processSpatialRegistrationObject.GetLocalizationFrameOfRefFromXVISRO(Int32.Parse(UnitId.Get(context))); } var metadata = _processSpatialRegistrationObject.BuildMonitorMetadataForXVI5xReferencedDicomData(verForUid, verificationSopInstanceUids); // // If the dataset we are planning to wait for is already available // skip the bookmark creation and proceed to next activity. // if (_waitSetDataWrapper.IsDataAvailable(metadata)) { pCancelBookmarkCreation = true; // get the Image IDs for the Verification and Planning images IList <int> verifImageIds = new List <int>(); _processSpatialRegistrationObject.GetReferencedImageIdsFromSOPInstanceUIDs(Int32.Parse(UnitId.Get(context)), VerificationImageSopInstanceUidValues.Get(context), ref verifImageIds); IList <int> planningImageIds = new List <int>(); _processSpatialRegistrationObject.GetReferencedImageIdsFromSOPInstanceUIDs(Int32.Parse(UnitId.Get(context)), PlanningImageSopInstanceUidValues.Get(context), ref planningImageIds); // (NB for an XVI 5x SRO we only expect a single Planning image & a single Verification image if (verifImageIds.Count != 1 || planningImageIds.Count != 1) { _logger.Log(EventSeverity.Error, method, string.Format("[{0}] Processing UnitId: [{1}], Verification and/or Planning Image Ids were not correctly found", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context))); ActivityStatus.Set(context, "FAILED"); } else { ActivityStatus.Set(context, "SUCCESS"); } foreach (int imageId in verifImageIds) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing SRO UnitId: [{1}], Found Verification Image ID: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), imageId.ToString())); } foreach (int imageId in planningImageIds) { _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Processing SRO UnitId: [{1}], Found Planning Image ID: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), imageId.ToString())); } PlanningImageIds.Set(context, planningImageIds); VerificationImageIds.Set(context, verifImageIds); OutUnitId.Set(context, UnitId.Get(context)); //if (!base._useQueryNotificationFor3DWorkflows) //{ // if (!String.IsNullOrEmpty(metadata.DataMonitoringEventId)) // { // WaitEventManager.TryRemoveEvent(metadata.DataMonitoringEventId); // } //} } else { BookmarkMetadata.Set(context, metadata.ToString()); if (base._useQueryNotificationFor3DWorkflows) { _waitSetDataWrapper.InitiateWaitForData(context.WorkflowInstanceId, BookmarkName, metadata, _waitHandlersRepository.Get("WorkQueueElement")); } else { _waitSetDataWrapper.InitiateWaitForDataEvent(context.WorkflowInstanceId, BookmarkName, metadata, _waitHandlersRepository.Get("WorkQueueElement")); } } _logger.Log(EventSeverity.Debug, method, string.Format("[{0}] Exit: Processing SRO UnitId: [{1}], Bookmark name: [{2}]", Thread.CurrentThread.ManagedThreadId, UnitId.Get(context), BookmarkName)); }