@@ -32,7 +32,7 @@ public class ManipulatorBehaviorController : MonoBehaviour
3232
3333 public int NumAxes { get ; set ; }
3434
35- public Vector3 Dimensions { get ; set ; }
35+ public Vector3 Dimensions { get ; private set ; }
3636
3737 /**
3838 * Getter and setter or the zero coordinate offset of the manipulator.
@@ -140,88 +140,6 @@ private void OnDisable()
140140
141141 #endregion
142142
143- #region Private Methods
144-
145- private void EchoPosition ( Vector4 pos )
146- {
147- if ( ! enabled && _probeController == null ) return ;
148-
149- // Check for special Pathfinder mode (directly set probe position, no calculations needed)
150- if ( NumAxes == - 1 )
151- {
152- CommunicationManager . Instance . GetAngles ( ManipulatorID , angles =>
153- {
154- _probeController . SetProbeAngles ( new Vector3 ( angles . x , 90 - angles . y , angles . z ) ) ;
155-
156- // Convert Pathfinder space coordinates into active atlas space
157- _probeController . SetProbePosition (
158- BrainAtlasManager . ActiveReferenceAtlas . World2Atlas_Vector (
159- CoordinateSpace . Space2World_Vector ( pos ) ) ) ;
160- } ) ;
161- }
162- else
163- {
164- // Calculate last used direction for dropping to brain surface (between depth and DV)
165- var dvDelta = Math . Abs ( pos . z - _lastManipulatorPosition . z ) ;
166- var depthDelta = Math . Abs ( pos . w - _lastManipulatorPosition . w ) ;
167- if ( dvDelta > 0.0001 || depthDelta > 0.0001 ) IsSetToDropToSurfaceWithDepth = depthDelta > dvDelta ;
168- _lastManipulatorPosition = pos ;
169-
170- // Apply zero coordinate offset
171- var zeroCoordinateAdjustedManipulatorPosition = pos - ZeroCoordinateOffset ;
172-
173- // Convert to coordinate space
174- var manipulatorSpacePosition = CoordinateTransform . T2U ( zeroCoordinateAdjustedManipulatorPosition ) ;
175-
176- // Brain surface adjustment
177- var brainSurfaceAdjustment = float . IsNaN ( BrainSurfaceOffset ) ? 0 : BrainSurfaceOffset ;
178- if ( IsSetToDropToSurfaceWithDepth )
179- zeroCoordinateAdjustedManipulatorPosition . w += brainSurfaceAdjustment ;
180- else
181- manipulatorSpacePosition . y -= brainSurfaceAdjustment ;
182-
183- // Convert to world space
184- var zeroCoordinateAdjustedWorldPosition =
185- CoordinateSpace . Space2World ( manipulatorSpacePosition ) ;
186-
187- // Set probe position (change axes to match probe)
188- var transformedApmldv =
189- _probeController . Insertion . World2T_Vector ( zeroCoordinateAdjustedWorldPosition ) ;
190-
191- // Split between 3 and 4 axis assignments
192- if ( CoordinateTransform . Prefix == "3lhm" )
193- _probeController . SetProbePosition ( transformedApmldv ) ;
194- else
195- _probeController . SetProbePosition ( new Vector4 ( transformedApmldv . x , transformedApmldv . y ,
196- transformedApmldv . z , zeroCoordinateAdjustedManipulatorPosition . w ) ) ;
197- }
198-
199- // Log every 5 hz
200- if ( Time . time - _lastLoggedTime >= 0.2 )
201- {
202- _lastLoggedTime = Time . time ;
203- var tipPos = _probeController . ProbeTipT . position ;
204-
205- // ["ephys_link", Real time stamp, Manipulator ID, X, Y, Z, W, Phi, Theta, Spin, TipX, TipY, TipZ]
206- string [ ] data =
207- {
208- "ephys_link" , Time . realtimeSinceStartup . ToString ( CultureInfo . InvariantCulture ) , ManipulatorID ,
209- pos . x . ToString ( CultureInfo . InvariantCulture ) , pos . y . ToString ( CultureInfo . InvariantCulture ) ,
210- pos . z . ToString ( CultureInfo . InvariantCulture ) , pos . w . ToString ( CultureInfo . InvariantCulture ) ,
211- _probeController . Insertion . Yaw . ToString ( CultureInfo . InvariantCulture ) ,
212- _probeController . Insertion . Pitch . ToString ( CultureInfo . InvariantCulture ) ,
213- _probeController . Insertion . Roll . ToString ( CultureInfo . InvariantCulture ) ,
214- tipPos . x . ToString ( CultureInfo . InvariantCulture ) , tipPos . y . ToString ( CultureInfo . InvariantCulture ) ,
215- tipPos . z . ToString ( CultureInfo . InvariantCulture )
216- } ;
217- OutputLog . Log ( data ) ;
218- }
219-
220- // Continue echoing position
221- CommunicationManager . Instance . GetPos ( ManipulatorID , EchoPosition ) ;
222- }
223-
224- #endregion
225143
226144 #region Public Methods
227145
@@ -270,7 +188,7 @@ void StartEchoing()
270188 } ) ;
271189 }
272190
273- public void UpdateSpaceAndTransform ( )
191+ private void UpdateSpaceAndTransform ( )
274192 {
275193 CoordinateSpace = NumAxes switch
276194 {
@@ -416,5 +334,87 @@ public void MoveBackToZeroCoordinate(Action<Vector4> onSuccessCallback, Action<s
416334 }
417335
418336 #endregion
337+
338+ #region Private Methods
339+
340+ private void EchoPosition ( Vector4 pos )
341+ {
342+ if ( ! enabled && _probeController == null ) return ;
343+
344+ // Check for special Pathfinder mode (directly set probe position, no calculations needed)
345+ if ( NumAxes == - 1 )
346+ {
347+ CommunicationManager . Instance . GetAngles ( ManipulatorID , angles =>
348+ {
349+ _probeController . SetProbeAngles ( new Vector3 ( angles . x , 90 - angles . y , angles . z ) ) ;
350+
351+ // Convert Pathfinder space coordinates into active atlas space
352+ _probeController . SetProbePosition (
353+ _probeController . Insertion . World2T_Vector ( CoordinateSpace . Space2World_Vector ( pos ) ) ) ;
354+ } ) ;
355+ }
356+ else
357+ {
358+ // Calculate last used direction for dropping to brain surface (between depth and DV)
359+ var dvDelta = Math . Abs ( pos . z - _lastManipulatorPosition . z ) ;
360+ var depthDelta = Math . Abs ( pos . w - _lastManipulatorPosition . w ) ;
361+ if ( dvDelta > 0.0001 || depthDelta > 0.0001 ) IsSetToDropToSurfaceWithDepth = depthDelta > dvDelta ;
362+ _lastManipulatorPosition = pos ;
363+
364+ // Apply zero coordinate offset
365+ var zeroCoordinateAdjustedManipulatorPosition = pos - ZeroCoordinateOffset ;
366+
367+ // Convert to coordinate space
368+ var manipulatorSpacePosition = CoordinateTransform . T2U ( zeroCoordinateAdjustedManipulatorPosition ) ;
369+
370+ // Brain surface adjustment
371+ var brainSurfaceAdjustment = float . IsNaN ( BrainSurfaceOffset ) ? 0 : BrainSurfaceOffset ;
372+ if ( IsSetToDropToSurfaceWithDepth )
373+ zeroCoordinateAdjustedManipulatorPosition . w += brainSurfaceAdjustment ;
374+ else
375+ manipulatorSpacePosition . y -= brainSurfaceAdjustment ;
376+
377+ // Convert to world space
378+ var zeroCoordinateAdjustedWorldPosition =
379+ CoordinateSpace . Space2World ( manipulatorSpacePosition ) ;
380+
381+ // Set probe position (change axes to match probe)
382+ var transformedApmldv =
383+ _probeController . Insertion . World2T_Vector ( zeroCoordinateAdjustedWorldPosition ) ;
384+
385+ // Split between 3 and 4 axis assignments
386+ if ( CoordinateTransform . Prefix == "3lhm" )
387+ _probeController . SetProbePosition ( transformedApmldv ) ;
388+ else
389+ _probeController . SetProbePosition ( new Vector4 ( transformedApmldv . x , transformedApmldv . y ,
390+ transformedApmldv . z , zeroCoordinateAdjustedManipulatorPosition . w ) ) ;
391+ }
392+
393+ // Log every 5 hz
394+ if ( Time . time - _lastLoggedTime >= 0.2 )
395+ {
396+ _lastLoggedTime = Time . time ;
397+ var tipPos = _probeController . ProbeTipT . position ;
398+
399+ // ["ephys_link", Real time stamp, Manipulator ID, X, Y, Z, W, Phi, Theta, Spin, TipX, TipY, TipZ]
400+ string [ ] data =
401+ {
402+ "ephys_link" , Time . realtimeSinceStartup . ToString ( CultureInfo . InvariantCulture ) , ManipulatorID ,
403+ pos . x . ToString ( CultureInfo . InvariantCulture ) , pos . y . ToString ( CultureInfo . InvariantCulture ) ,
404+ pos . z . ToString ( CultureInfo . InvariantCulture ) , pos . w . ToString ( CultureInfo . InvariantCulture ) ,
405+ _probeController . Insertion . Yaw . ToString ( CultureInfo . InvariantCulture ) ,
406+ _probeController . Insertion . Pitch . ToString ( CultureInfo . InvariantCulture ) ,
407+ _probeController . Insertion . Roll . ToString ( CultureInfo . InvariantCulture ) ,
408+ tipPos . x . ToString ( CultureInfo . InvariantCulture ) , tipPos . y . ToString ( CultureInfo . InvariantCulture ) ,
409+ tipPos . z . ToString ( CultureInfo . InvariantCulture )
410+ } ;
411+ OutputLog . Log ( data ) ;
412+ }
413+
414+ // Continue echoing position
415+ CommunicationManager . Instance . GetPos ( ManipulatorID , EchoPosition ) ;
416+ }
417+
418+ #endregion
419419 }
420420}
0 commit comments