public boolean checkFinalState(PhysicsEvent event)
    {
        boolean filter = true;
        
        int pc = event.countByCharge(+1);
        int pm = event.countByCharge(-1);
        int pn = event.countByCharge( 0);
        
        if(pc<this.getMinimumByCharge(+1)||pc>this.getMaximumByCharge(+1))
            return false;
        if(pm<this.getMinimumByCharge(-1)||pm>this.getMaximumByCharge(-1))
            return false;       
        if(pn<this.getMinimumByCharge( 0)||pn>this.getMaximumByCharge( 0))
            return false;
        
        Set<Integer> pKeys = this.getIdKeys();
        Iterator it = pKeys.iterator();
        while(it.hasNext())
        {
            Integer key = (Integer) it.next();
            int idcount = this.getIdCount(key);
            if(event.countByPid(key)<idcount) return false;
        }
        return filter;
    }