logDetail( "Pre-update: "
if ( _logger.isDetailEnabled() ) _logger.detail( "Pre-update: "
    void updateBeliefStateDiagnosisObs( BeliefStateDimension prev_belief,                                        DiagnosisTrigger diagnosis,                                        BeliefStateDimension next_belief )            throws BelievabilityException    {        if (( prev_belief == null )            || ( diagnosis == null )            || ( next_belief == null ))            throw new BelievabilityException                    ( "updateBeliefStateDiagnosisObs()",                      "NULL parameter(s) sent in." );        double denom = 0.0;        String diagnosis_value = diagnosis.getSensorValue();        double[] prev_belief_prob = prev_belief.getProbabilityArray();        double[] next_belief_prob = new double[prev_belief_prob.length];        logDebug( "Updating belief given sensor '"                  + diagnosis.getSensorName()                  + "' has sensed '" + diagnosis_value + "'");        SensorTypeModel sensor_model                 = _asset_dim_model.getSensorTypeModel                 ( diagnosis.getSensorName() );                if ( sensor_model == null )            throw new BelievabilityException                    ( "updateBeliefStateDiagnosisObs()",                      "Cannot find sensor model for: "                      + diagnosis.getSensorName() );                // This 'obs_prob' is a matrix of conditional probabilities of        // an observation (i.e., diagnosis) given an asset state.  The        // first index is the observation and the second is the state.        //        double[][] obs_prob = sensor_model.getObservationProbabilityArray();        logDetail( "Observation probabilities: "                   + _asset_dim_model.getStateDimensionName() + "\n"                   + ProbabilityUtils.arrayToString( obs_prob ));        int obs_idx = sensor_model.getObsNameIndex( diagnosis_value );        if ( obs_idx < 0 )            throw new BelievabilityException                    ( "updateBeliefStateDiagnosisObs()",                      "Diagnosis value '"                       + diagnosis_value + "' not found. "                      + diagnosis.toString() );         logDetail( "Pre-update: "                   + ProbabilityUtils.arrayToString( prev_belief_prob ));        for ( int state = 0; state < prev_belief_prob.length; state++ )         {            next_belief_prob[state]                     = prev_belief_prob[state] * obs_prob[state][obs_idx];                        denom += next_belief_prob[state];                    } // for state        logDetail( "Pre-normalization: "                   + ProbabilityUtils.arrayToString( next_belief_prob ));           // Here we choose to ignore impossible observations, though we        // will give a warning.  We do not want to completely abort        // this operation, since the previous belief state will more        // than likely have some threat transition information in it.        // Thus, we choose to leave the belief state as is, which is        // why we simply copy the arrays over.         //        if( Precision.isZeroComputation( denom ))        {            logWarning( "updateBeliefStateDiagnosisObs(): "                        + "Diagnosis is not possible. i.e., Pr("                        + diagnosis_value + ") = 0.0. Ignoring diagnosis.");            next_belief.setProbabilityArray                    ( prev_belief.getProbabilityArray());            return;        } // if found an impossible observation        for( int i = 0; i < next_belief_prob.length; i++ )            next_belief_prob[i] /= denom;        logDetail( "Post-normalization: "                   + ProbabilityUtils.arrayToString( next_belief_prob ));        next_belief.setProbabilityArray( next_belief_prob );    } // method updateBeliefStateDiagnosisObs