/* *Copyright 2007, 2011 CCLS Columbia University (USA), LIFO University of Orl��ans (France), BRGM (France) * *Authors: Cyril Nortet, Xiangrong Kong, Ansaf Salleb-Aouissi, Christel Vrain, Daniel Cassard * *This file is part of QuantMiner. * *QuantMiner is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. * *QuantMiner is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * *You should have received a copy of the GNU General Public License along with QuantMiner. If not, see <http://www.gnu.org/licenses/>. */ package src.apriori; public class ItemQuantitative extends Item { public AttributQuantitative m_attributQuant = null; // Attribut de la BD dont est issu l'item public int m_iNombreDisjonctions = 0; public float [] m_tBornes = null; // Les bornes min et max, stock�es successivement 2 � 2 (chaque paire correspond � un intervalle afin de pouvoir autoriser les unions) /** * Creating Multi Item Quantitative Intervals * @param attributQuant Quantitative attributes * @param tBornes Interval bounds */ private void CreerItemQuantitatifMultiIntervalles(AttributQuantitative attributQuant, float [] tBornes) { int iIndiceDisjonction = 0; super.m_iTypeItem = ITEM_TYPE_QUANTITATIF; m_attributQuant = attributQuant; if (tBornes == null) m_iNombreDisjonctions = 0; else m_iNombreDisjonctions = tBornes.length / 2; if (m_iNombreDisjonctions == 0) { m_tBornes = null; return; } m_tBornes = new float [m_iNombreDisjonctions * 2]; for (iIndiceDisjonction=0; iIndiceDisjonction<(m_iNombreDisjonctions*2); iIndiceDisjonction++) m_tBornes[iIndiceDisjonction] = tBornes[iIndiceDisjonction]; } public ItemQuantitative(AttributQuantitative attributQuant, float [] tBornes) { super(); CreerItemQuantitatifMultiIntervalles(attributQuant, tBornes); } /** * Simple constructor that puts all the intervals, the number required [0,0]: * @param attributQuant Quantitative attribute * @param iNombreDisjonctions number of disjunctions */ public ItemQuantitative(AttributQuantitative attributQuant, int iNombreDisjonctions) { super(); float tBornes [] = null; int iIndiceBorne = 0; if (iNombreDisjonctions <= 0) CreerItemQuantitatifMultiIntervalles(attributQuant, null); else { tBornes = new float [iNombreDisjonctions*2]; for (iIndiceBorne=0; iIndiceBorne<iNombreDisjonctions*2; iIndiceBorne++) tBornes[iIndiceBorne] = 0.0f; CreerItemQuantitatifMultiIntervalles(attributQuant, tBornes); } } /** * Constructor plus simple pour attribuer un intervalle unique : * @param attributQuant * @param fBorneMin * @param fBorneMax */ public ItemQuantitative(AttributQuantitative attributQuant, float fBorneMin, float fBorneMax) { super(); super.m_iTypeItem = ITEM_TYPE_QUANTITATIF; m_attributQuant = attributQuant; m_iNombreDisjonctions = 1; m_tBornes = new float [2]; m_tBornes[0] = fBorneMin; m_tBornes[1] = fBorneMax; } // Constructeur de copie : public ItemQuantitative(ItemQuantitative item) { super(); CopierItemQuantitatif(item); } public void CopierItemQuantitatif(ItemQuantitative item) { int iIndiceDisjonction = 0; this.m_iTypeItem = ITEM_TYPE_QUANTITATIF; this.m_attributQuant = item.m_attributQuant; this.m_iNombreDisjonctions = item.m_iNombreDisjonctions; if (m_iNombreDisjonctions == 0) { this.m_tBornes = null; return; } this.m_tBornes = new float [this.m_iNombreDisjonctions * 2]; for (iIndiceDisjonction=0; iIndiceDisjonction<(this.m_iNombreDisjonctions*2); iIndiceDisjonction++) this.m_tBornes[iIndiceDisjonction] = item.m_tBornes[iIndiceDisjonction]; } //obtain the min value of the iIndiceDisjonction disjunct public float ObtenirBorneMinIntervalle(int iIndiceDisjonction) { if (iIndiceDisjonction < m_iNombreDisjonctions) return m_tBornes[iIndiceDisjonction * 2]; else return 0; } //obtain the max value of the iIndiceDisjonction disjunct public float ObtenirBorneMaxIntervalle(int iIndiceDisjonction) { if (iIndiceDisjonction < m_iNombreDisjonctions) return m_tBornes[iIndiceDisjonction*2 + 1]; else return 0; } //obtain the name, min, max value of the attribute public Quantitative getAttributeNameBoundary(int iIndiceDisjonction){ Quantitative element = new Quantitative(); String sNomItem = null; if (m_attributQuant==null) return null; sNomItem = m_attributQuant.ObtenirNom(); if (sNomItem != null) sNomItem = sNomItem.trim(); element.setM_name(sNomItem); element.setM_lower(m_tBornes[iIndiceDisjonction*2]); element.setM_upper(m_tBornes[iIndiceDisjonction*2 + 1]); return element; } //return something like ALTITUDE in [1814.0; 4926.0] public String toString(int iIndiceDisjonction) { String sItem = null; String sNomItem = null; if (m_attributQuant==null) return "Item nul"; sNomItem = m_attributQuant.ObtenirNom(); if (sNomItem != null) sNomItem = sNomItem.trim(); sItem = sNomItem; sItem += " in "; sItem += "["; sItem += String.valueOf( m_tBornes[iIndiceDisjonction*2] ); //min sItem += "; "; sItem += String.valueOf( m_tBornes[iIndiceDisjonction*2 + 1] ); //max sItem += "]"; return sItem; } }