void FixedUpdate()
    {
        //get the device associated with that tracked object (which is how you access buttons and stuff)
        SteamVR_Controller.Device device = SteamVR_Controller.Input((int)trackedObj.index);

        //get the velocity
        //velocity = device.transform.rot.eulerAngles;
        //print(comfortZoomVignette.intensity);
        //print(q);
        if (Controller.GetPress(SteamVR_Controller.ButtonMask.Trigger) == false)
        {
            //graph.transform.rotation = Quaternion.Lerp(graph.transform.rotation, rotateGraphTo, 0.01f);
            pulling = false;
            if (mini != null)
            {
                if (nodeParent != null)
                {
                    mini.transform.parent = nodeParent;
                }
                mini.setMoving(false);
            }
        }
        StudyController();
        // Laser code
        if (laser != null && studyState == 2)
        {
            circle.transform.position = laserTransform.position + laserTransform.forward * (laserDist * 2);
            circle.transform.LookAt(Camera.main.transform);
            laserTransform.position   = trackedObj.transform.position;
            laserTransform.rotation   = trackedObj.transform.rotation;
            laserTransform.localScale = new Vector3(laserTransform.localScale.x, laserTransform.localScale.y,
                                                    laserDist);
            if (Controller.GetHairTriggerDown())
            {
                Camera_System camera_sys       = Camera.main.GetComponent <Camera_System>();
                Vector3       teleportPosition = transform.position + transform.forward * (laserDist * 2);
                camera_sys.FadeOutIn(teleportPosition);
                camera_sys.setLaserPointer(this);
            }
            if (q.y > 0.4f)
            {
                laserDist += Time.deltaTime * 0.5f;
            }

            if (q.y < -0.4f && laserDist > 0.1f)
            {
                laserDist -= Time.deltaTime * 0.5f;
            }
        }
        if (Controller.GetPress(SteamVR_Controller.ButtonMask.Trigger) && save_button != null)
        {
            save_button.pushButton();
        }
        // Creates a path marker
        if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Grip))
        {
            Instantiate(pathMarker, transform.position + new Vector3(0, 0.01f, 0), pathMarker.transform.rotation);
        }

        if (Controller.GetPress(SteamVR_Controller.ButtonMask.Trigger) && node != null && Dual_Controller_Behaviour.zoomGesture == false && save_button == null)
        {
            if (userStudyRunning == false)
            {
                pulling = true;
            }
            if (node.transform.tag == "NavigationCamera")
            {
                pulling = true;
            }
            if (node.transform.tag == "pathMarker")
            {
                pulling = true;
            }

            Vector3 v_rot = Controller.angularVelocity;
            Vector3 v_pos = Controller.velocity;


            if (node.transform.name == "filter_cube")
            {
                Vector3 new_rot = new Vector3(0, v_rot.y, 0);
                node.transform.rotation *= Quaternion.Euler(new_rot);
                node.transform.position  = transform.position + new Vector3(0, 0.1f, 0);
                //node.transform.rotation = transform.rotation;
            }
            if (node.transform.tag == "NavigationCamera")
            {
                //Power_Button_Behaviour p = node.transform.root.GetComponentInChildren<Power_Button_Behaviour>();
                mini = node.transform.GetComponent <Miniature_Camera_Behaviour>();
                mini.setMoving(true);
                mini.setCone(transform);
                //graph.transform.rotation = transform.rotation;
                print("mini = " + mini);
                Vector3 new_rot = new Vector3(0, 0, v_rot.z);
                //node.transform.localRotation *= Quaternion.Euler(new_rot);

                node.transform.parent = transform;
                //Camera.main.transform.parent.localPosition += Controller.velocity * 0.1f;
            }
            else
            {
                if (mini != null)
                {
                    mini.setMoving(false);
                    //mini = null;
                }
            }
            if (node.transform.tag == "Lever")
            {
                lev = node.GetComponent <Lever_Behaviour>();
                if (lev.isHorizontial)
                {
                    if (v_pos.x > 0.1f)
                    {
                        lev.movetoPos2();
                    }
                    if (v_pos.x < -0.1f)
                    {
                        lev.movetoPos1();
                    }
                }
                if (lev.isVertical)
                {
                    if (v_pos.y > 0.1f)
                    {
                        lev.movetoPos1();
                    }
                    if (v_pos.y < -0.1f)
                    {
                        lev.movetoPos2();
                    }
                }
            }
            if (node.transform.tag == "cluster" && !userStudyRunning || node.transform.tag == "Node" && !userStudyRunning)
            {
                if (userStudyRunning == false)
                {
                    node.transform.position = transform.position + new Vector3(0, 0.01f, 0);
                    if (Controller.velocity.magnitude > 1.5f && node.transform.tag == "Node")
                    {
                        //node.transform.GetComponent<Rigidbody>().useGravity = true;
                        node.transform.GetComponent <Rigidbody>().velocity = Controller.velocity;
                        node = null;
                    }
                }
            }
            if (node.transform.tag == "Untagged" || node.transform.tag == "SaveBox" && save_button == null ||
                node.transform.tag == "pathMarker")
            {
                Destroy(node.gameObject);
                node = null;
            }
        }
        else
        {
            if (lev != null)
            {
                lev.movetoStartPos();
                lev = null;
            }
        }

        if (!pulling && node != null)
        {
            t -= Time.deltaTime;
            if (t <= 0)
            {
                node = null;
                t    = 0.5f;
            }
        }
        if (documentText)
        {
            if (Controller.velocity.y > 0.4f && doc_time <= 0)
            {
                doc_move = 1;
                doc_time = 0.5f;
            }
            if (Controller.velocity.y < -0.4f && doc_time <= 0)
            {
                doc_move = -1;
                doc_time = 0.5f;
            }
        }
        if (doc_time > -0.01f && documentText != null)
        {
            documentText.anchoredPosition += new Vector2(0, 0.05f * doc_move);
            doc_time -= Time.deltaTime;
        }

        if (laser_t >= 0)
        {
            laser_t -= Time.deltaTime;
        }

        if (Controller.GetPress(SteamVR_Controller.ButtonMask.Touchpad) && q.y > -0.7f)
        {
            touchPadDown = true;
            RaycastHit hit;
            laser.SetActive(true);

            if (target != null)
            {
                target.enabled = true;
            }

            if (Physics.Raycast(trackedObj.transform.position, transform.forward, out hit, 100))
            {
                hitPoint = hit.point;
                ShowLaser(hit);
            }
        }
        else
        {
            touchPadDown = false;
        }
    }
    private void ShowLaser(RaycastHit hit)
    {
        //laserTransform.position = Vector3.Lerp(trackedObj.transform.position, hitPoint, .5f);


        //laserTransform.position = trackedObj.transform.position;
        //laserTransform.LookAt(hitPoint);
        //laserTransform.localScale = new Vector3(laserTransform.localScale.x, laserTransform.localScale.y,
        //  laserDist);
        if (hit.transform.name != "Bounds")
        {
            if (hit.transform.tag == "Node" || hit.transform.tag == "StudyNode")
            {
                if (Controller.GetPress(SteamVR_Controller.ButtonMask.Grip) && studyState == 0 || studyState == 2 && Controller.GetPress(SteamVR_Controller.ButtonMask.Trigger))
                {
                    Camera_System camera_sys       = Camera.main.GetComponent <Camera_System>();
                    Vector3       teleportPosition = hit.point;
                    camera_sys.FadeOutIn(teleportPosition);
                }
                if (lasered_node == null && laser_t <= 0 && userStudyRunning == false)
                {
                    lasered_node = hit.transform.GetComponent <VisualNode>();
                    lasered_node.OnLaserOver();
                    if (laser_t <= 0)
                    {
                        laser_t = 1f;
                    }
                }
                else
                {
                    if (lasered_node != null)
                    {
                        if (hit.transform == lasered_node.transform && laser_t < 0.5f && laser_t > 0.25f && lasered_node != null)
                        {
                            lasered_node.OnLaserExit();
                            lasered_node = null;
                        }
                        else
                        {
                            lasered_node.OnLaserExit();
                            lasered_node = hit.transform.GetComponent <VisualNode>();
                            lasered_node.OnLaserOver();
                            if (laser_t <= 0)
                            {
                                laser_t = 1f;
                            }
                        }
                    }
                }
            }

            if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
            {
                hitTransform = hit.transform;
                if (hitTransform.tag != "cluster")
                {
                    // controller move right
                    if (velocity.x > 0.1f)
                    {
                        //hitTransform.position += new Vector3(0.1f, 0, 0);
                    }
                    // controller move left
                    if (velocity.x < -0.1f)
                    {
                        //hitTransform.position += new Vector3(-0.1f, 0, 0);
                    }
                }
                if (hitTransform.tag == "cluster" && userStudyRunning == false)
                {
                    if (c == null)
                    {
                        c = hit.transform.GetComponent <ClusterBehaviour>();
                        c.Highlight();
                    }
                    else
                    {
                        c.ExitHighlight();
                        print("exit_highlight");
                        c = null;
                        c = hit.transform.GetComponent <ClusterBehaviour>();
                        c.Highlight();
                    }
                }
            }
            else
            {
            }
        }
        else
        {
        }
    }