public SingleTrackInitializer(FusionEngine fusionEngine, int minBatchMeasurements)
        {
            Debug.LogWarning("Warning: Track initialization not fully implemented yet, for now will try to put all unassociated measurements into a single track");

            this.fusionEngine = fusionEngine;
            this.batchEstimator = new WLSQBatchEstimator(minBatchMeasurements, fusionEngine);
        }
        // Internal storage
        //private List<GaussianTrack> protoTrackList;

        // Constructor
        public ChiSquareAssociator(FusionEngine fusionEngine, float chiSquareThreshold)
        {
            // Save pointer to the fusion engine
            this.fusionEngine = fusionEngine;
            this.chiSquareThreshold = chiSquareThreshold;

            // Initialize hungarian algorithm
            this.hungarianAlgorithm = new HungarianAlgorithm();

            // Initialize internal storage
            //protoTrackList = new List<GaussianTrack>();
        }
    // Use this for initialization
    void Start()
    {
        // Save a pointer to the fusion engine
        fusionEngine = GetComponentInParent<FusionEngine>();

        // Get a pointer to the target
        targets = GameObject.FindGameObjectsWithTag("Target");

        // Noise distribution
        nd = new NormalDistribution(0, 1);
        noiseCovariance = new Matrix(3, 3);
        noiseCovariance[0, 0] = 1e-3;
        noiseCovariance[1, 1] = 1e-3;
        noiseCovariance[2, 2] = 1e-3;

        noiseCovCholT = noiseCovariance.CholeskyDecomposition.TriangularFactor.Clone();
        noiseCovCholT.Transpose();

        // Reset time since the last update
        timeSinceLastUpdateSec = 0.0f;
    }
 // Constructor
 public WLSQBatchEstimator(int minBatchMeasurements, FusionEngine fusionEngine)
 {
     this.minBatchMeasurements = minBatchMeasurements;
     this.fusionEngine = fusionEngine;
 }