Computational logic in the undergraduate curriculum Logic provides the mathematical basis for hardware design and software development. In fact, digital circuits and computer programs are logic formulas expressed in a formal language. Accordingly, educated computer scientists should have experience in reasoning about the formulas that their digital circuits and programs represent. An exemplary way to get this experience is to use computational logic in support of such reasoning. This paper searches the typical undergraduate curriculum in computer science for opportunities to include material on computational logic in the context of hardware and software design and implementation. It explains how computational logic has been included as an element of two courses required in most computer science programs. It discusses some successes and a few missteps that the author has experienced over the past nine years in developing this material and using it in the classroom, and it suggests opportunities for similar efforts in other courses. Categories and Subject DescriptorsDesign, Reliability, Languages, Verification.Formal methods, theorem provers, ACL2, software engineering, computer science curriculum.Logic provides the mathematical basis for hardware design and software development. In fact, digital circuits and computer programs are logic formulas expressed in a formal language.Accordingly, educated computer scientists should have experience in reasoning about the formulas that their digital circuits and programs represent. An exemplary way to get this experience is to use computational logic in support of such reasoning.Using ACL2 [10] as a computational logic engine for exposing students to this technology provides some advantages over other choices. It employs the widely used syntax of Common Lisp and smoothly integrates its theorem proving system within this syntax. This is important because it alleviates problems that come with introducing radically new elements into the curriculum. One such problem is resistance from students, computer science faculties, and outside advisors of academic programs. A programming notation in widespread use over a long period is easier to sell than one that has seen less use. Practical applications of ACL2 in industry and government are important in this regard.Another problem has to do with the steepness of the learning curve. Many computational logic systems require a substantial investment of intense study before they begin to pay off. ACL2 presents a relatively simple basis for stating properties of software (and of hardware models), one that most students recognize from their knowledge of predicate calculus. Furthermore, the reasoning engine of ACL2 automatically generates inductive proofs of many correctness properties. This makes it possible for students to succeed early. Once they understand how to state properties as formulas in logic, ACL2 delivers proofs of many of those properties without assistance.The following sections describe experience with computational logic in three courses required of all computer science majors at the University of Oklahoma, discuss the impact of particular choices in material and projects, survey typical curricula for other opportunities to include similar material, and point out related efforts to put computational logic in baccalaureate courses. Some of the material in this paper has appeared in other forms in previous publications [13] In my experience over the past five years of using ACL2 in software engineering courses, I have found that almost all Evidence of the use of computational logic in undergraduate computer science courses is hard to find. Manolios uses ACL2, via the ACL2 Sedan [4] , in a lower division logic course introduced experimentally by Felleisen [5] . Tinelli 5 has included assignments in the use of KeY [2] , a tool for theorems and proofs about programs written in a subset of Java. Courses employing Haskell often use QuickCheck [3] , which gives students practice in stating properties as logic formulas, an important skill in using computational logic systems. Jackson´s Alloy system is used in undergraduate classes and exposes students to logic as a tool for stating and verifying properties of software components [9] .

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I B B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O B I O O O O O O O O O O O O O O O O O O O O O O O O O B O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Fast and Accurate Statistical Criticality Computation Under Process Variations Abstract-With ever-shrinking device geometries, process variations play an increased role in determining the delay of a digital circuit. Under such variations, a gate may lie on the critical path of a manufactured die with a certain probability, called the criticality probability. In this paper, we present a new technique to compute the statistical criticality information in a digital circuit under process variations by linearly traversing the edges in its timing graph and dividing it into "zones." We investigate the sources of error in using tightness probabilities for criticality computation with Clark's statistical maximum formulation. The errors are dealt with using a new clustering-based pruning algorithm which greatly reduces the size of circuit-level cutsets improving both accuracy and runtime over the current state of the art. On large benchmark circuits, our clustering algorithm gives about a 250× speedup compared with a pairwise pruning strategy with similar accuracy in results. Coupled with a localized sampling technique, errors are reduced to around 5% of Monte Carlo simulations with large speedups in runtime. Our algorithms were implemented in C++ on top of an SSTA engine [1] and exercised on the 12 largest ISCAS89 benchmarks, with parameter values corresponding to the 100-nm technology node [11] . Experiments were conducted on a Linux PC with a 3.0-GHz CPU and 2-GB RAM. The average ratio of the standard deviation to the mean of circuit delay was about 12%. We compared four schemes with MC simulations using 10 000 samples, shown in Table III .. The first scheme is the zone-based ZSC approach in Algorithm 3. Scheme n C 2 additionally implements the pairwise pruning strategy of Section V-A with a pruning threshold ε = 5%. Clustering-based pruning SC (CPSC) algorithm implements Algorithm 6 using our clustered pruning and ordering technique. CPSC + LS + TGR performs clustered pruning on the reduced timing graph (TGR) and computes criticalities using the LS procedure (Algorithm 7) with N ls = 1000 samples. All approaches, excluding ZSC, account for structural correlations due to independent parameter variations, as described in Section VI-C. Row "maximum %δ" reports the maximum difference between the edge criticality computed using any of the aforementioned schemes and the MC simulations; row "runtime" reports the running time, in seconds; and "η" reports the maximum number of edges in any cutset of the timing graph after pruning. We exclude the times for SSTA and generating the N ls samples in LS.. From Table III , ZSC, which computes criticalities using Clark's MAX θ formulation, results in large errors (the largest being about 60%). As described in Section IV, this is mainly due to the propagation of local errors. CPSC, with cutset pruning and ordering, does better than ZSC in accuracy and runtime. For circuits exhibiting large global errors, the LS procedure helps reduce them further. Rows in bold compare ZSC with CPSC + LS + TGR. The combined approach greatly reduces the errors and runtime, due to pruning. Moreover, runtime increase is negligible compared with CPSC (an anomaly is s35932, wherein runtime decreases due to TGR). For the three large benchmarks, we obtain about an order of magnitude difference in runtimes of ZSC and the combined approach. Most circuits have errors below 10%, except for s38584. On investigation, it was found that, for large fan-out structures, path delays themselves (computed in terms of the PCs) contained large errors, and hence, the LS procedure does not completely eliminate global errors. In terms of the efficacy of our pruning strategy, as expected, we vastly outperform the n C 2 procedure in runtime (about two orders of magnitude for the larger benchmarks). Each circuit also contained an identical number of edges remaining in the cutsets using the n C 2 and CPSC pruning strategies, seen from the entries in row "η.". To evaluate the runtime effectiveness of the zone-based approach, Fig. 8 shows the criticality computation runtime with (denoted "Criticality with zones") and without (denoted "Criticality without zones") zones as a fraction of the SSTA runtime. In all cases, structural correlations due to independent parameter variations were not taken into account. On average, criticality computation with zones is about ten times faster than SSTA, and we obtain a speedup of about 2.7 times in the runtime compared with the case without zones. The runtime for the zone computation procedure of Algorithm 2, on average, was less than 0.5% of the SSTA runtime.. In deciding N ls , we observed that, as the number of samples increases, the improvement in accuracy diminishes. Fig. 9 shows the tradeoff between the number of samples N ls and the maximum percentage error δ, obtained between our clusteringbased approach and an MC analysis with 10 000 runs. As expected, with a small number of LS samples N ls < 500, the error is more than double that with N ls = 10 000. However, as the number of samples increases, for example, from 1000 to 5000, the overall runtime almost triples, without much reduction in error. Moreover, as N ls increases, the overall runtime is dominated by the time for LS. In our algorithm, to maintain a reasonable tradeoff of accuracy and runtime, we chose N ls = 1000. Fig. 10 shows the variation of runtime and accuracy (averaged over all benchmarks) when the pruning threshold ε is varied. With an increase in ε, the cutset size decreases, reducing the overall criticality runtime (mainly due to the reduction in the runtime for LS). For pruning thresholds below 5%, the error is relatively constant since the nondominant edges eliminated do not adversely affect the global criticality of dominant edges. Therefore, in our algorithm, we chose a pruning threshold of 5% to obtain good accuracy with a reasonable runtime. Finally, we implemented the approach of Xiong et al. [15] and compared its performance with our clustering-based approach for the benchmarks shown in Table III . For a fair comparison, we ignored independent parameter variations when comparing the two approaches. On average, we obtain a speedup of about five times over the approach in [15] . This is mainly attributed to cutset pruning, which eliminates a large number of nondominant edges, thereby reducing the number of criticality computations. The advantage of cutset pruning is particularly pronounced for the larger sized benchmarks.. The difference in maximum percentage error (% δ) when compared with an MC simulation of 10 000 runs is shown in Fig. 11 on the secondary axis. On average, over all the benchmarks, we see that, if our algorithm reported the maximum criticality difference with an MC simulation of x%, the approach in [15] reported a maximum criticality difference of x + 35%. The errors are of similar magnitude to our zone-based scheme (ZSC) implemented without cutset pruning (Table III) since, fundamentally, both the approaches are similar. Hence, as was seen in the abc problem, local and global errors contribute to large overall errors in the criticality computation (Table I) . This section briefly describes the correlation model used to capture the process variations and provides definitions which are used throughout the rest of this paper.

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Adaptive Random Re-Routing for Differentiated QoS in Sensor Networks Sensor Networks consist of spatially distributed sensors which monitor an environment, and which are connected to some sinks or backbone system to which the sensor data is being forwarded. In many cases, the sensor nodes themselves can serve as intermediate nodes for data coming from other nodes, on the way to the sinks. Much of the traffic carried by sensor networks will originate from routine measurements or observations by sensors which monitor a particular situation, such as the temperature and humidity in a room or the infrared observation of the perimeter of a house, so that the volume of routine traffic resulting from such observations may be quite high. When important and unusual events occur, such as a sudden fire breaking out or the arrival of an intruder, it will be necessary to convey this new information very urgently through the network to a designated set of sink nodes where this information can be processed and dealt with. This paper addresses the important challenge of avoiding that the volume of routine background traffic may create delays or bottlenecks that impede the rapid delivery of high priority traffic resulting from the unusual events. Specifically we propose a novel technique, the "Randomized Re-Routing Algorithm (RRR)", which detects the presence of novel events in a distributed manner, and dynamically disperses the background traffic towards secondary paths in the network, while creating a "fast track path" which provides better delay and better QoS for the high priority traffic which is carrying the new information. When the surge of new information has subsided, this is again detected by the nodes and the nodes progressively revert to best QoS or shortest path routing for all the ongoing traffic. The proposed technique is evaluated using a mathematical model as well as simulations, and is also compared with a standard node by node priority scheduling technique. Sensor networks (WSNs), and sensor networks (SNs) in general, must forward significant data promptly and efficiently from the different sensors where the data originates to one or more sinks in the network at which data is collected and where it may also be interpreted. In such networks: (1) routine measurements and sensing take place constantly resulting in a steady volume of data being transmitted towards the sink(s), and (2) unusual events of particular interest will occur unexpectedly, and the information related to such events will require fast transmission to the sink(s). While routine data are essential for reporting on the conditions that the SN is monitoring, unusual events are more critical and need a faster or "better QoS" treatment by the network, such as short delay, very low loss, possibly high bandwidth, better security, etc.. In this paper we propose an adaptive technique which we call Randomized Re-Routing (RRR) for addressing these needs of SNs based on the following steps:. • During network operation, the network nodes observe the traffic they are conveying and each of them learns the different traffic flows that it may be carrying. In the simplest case, this may just imply that a node maintains the running average value of a measurement which is contained in packets. The Computer Journal Vol. 00 No. 0, 2009 belonging to each of the connections (source-todestination) that it is conveying. Thus nodes can be classified as a "normal" packet if the packet's contents are very similar to those of the running average for the same connection; the node then inserts a ZERO bit header in that packet.. • A node which generates or conveys a packet whose content differs significantly from the running average value will classify that packet as being "unusual" and insert a ONE bit in its header.. • Each node also monitors the rate at which it receives "unusual" packets, and if this rate does not exceed a threshold τ 0 , then the node forwards all packets it receives along their preferred (e.g. shortest or best QoS) path towards their destinations. Obviously the preferred path may be determined by criteria such as the minimum delay, greatest security, lowest power consumption, smallest loss etc.. • If a node (source or transit) senses that the rate at which it forwards unusual packets exceeds the threshold τ 0 , then it will forward all ONEbit packets along the best QoS path to their destination, while all ZERO-bit carrying packets will be directed along a randomized route which spreads the lower priority traffic across the network away from the high priority paths, reserving the better paths to the high priority traffic.. In the sequel we will present this algorithm in detail and provide an evaluation of its effectiveness using both an analytical model and simulations. In particular, we will use a mathematical approach based on diffusion approximations [1, 2] to estimate the resulting packet travel delays from source to destination. The remainder of the paper is organized as follow. In Section 2, we describe some related work in the area. In Section 3, we discuss our network model for evaluating the travel delay of packets in SNs. In Section 4, we present the RRR algorithm for providing better quality of service to unusual events in SNs. Sections 5 and 6 summarize the numerical and simulation results that we have obtained, and we conclude the paper in Section 7. In this paper we propose a simple randomized algorithm that is designed to react to the needs of the important unusual events in SNs, in the presence of traffic that is reporting routing and less important events. The objective of the RRR algorithm is to provide better QoS to the packets carrying the novel or unusual data, and also achieving overall good performance by distributing the secondary or routine traffic across a wider area to reduce congestion in the network. The RRR algorithm may be of use both in wired and wireless sensor networks.. We have evaluated the RRR algorithm using a mathematical model based on diffusion approximations, and in this paper we also present numerous simulation results. Both the analysis and simulation demonstrate that RRR can achieve significant QoS improvements for high priority traffic, while offering acceptable QoS levels to secondary traffic streams. When unusual events occur in the network, RRR has the added advantage of distributing the "routine" traffic streams randomly over secondary paths in the network so as to reduce congestion on the more heavily used shortest paths.. We are currently evaluating our proposed protocol in a real sensor network testbed with 34 Crossbow's TelosB motes [31] . The protocol has been implemented and run on sensor hardware successfully, and preliminary measurement results have been obtained [32] . For the future, we are interested in deploying sensors for some real world applications. We will further enhance our routing algorithm by considering specific effects that may appear in the wireless context, such as wireless interference among sensor nodes and its impact on the selection of primary and secondary paths for the low and high priority traffic. Adaptation in packet networks in general is again coming to the forefront [3] and it contributes to the general framework of "autonomic communications" [4, 5] . One significant trend in this work has been to consider routing that can be modified based on online measurements of network load so as to respond to quality-of-service needs [6, 7] .. Several real-time communication protocols have been studied for sensor networks. He et al. [8] propose SPEED, a protocol which combines feedback control and non-deterministic quality of service (QoS) aware geographic forwarding. Lu et al. [9] describe a packet scheduling policy, called Velocity Monotonic Scheduling, which inherently accounts for both time and distance constraints. Felemban et al. [10] have proposed the Multi-path and Multi-Speed Routing Protocol (MMSPEED) to provide a probabilistic QoS guarantee in WSNs with multiple QoS levels related to timeliness of data delivery using different delivery speeds and probabilistic multipath forwarding in the reliability domain. Our approach addresses similar objectives, but is much simpler; the implementation of MMSPEED requires multiple priority queues in each sensor which is not always practical in resource-limited sensors. Also, nodes in MMSPEED have to track the delay and packet loss rate, and update the packet travel speed constantly with each of their neighboring nodes by exchanging a large number of control messages, which bring extra message and computation overheads. On the other hand, RRR requires only simple single queue management and does not require that intermediate nodes carry out complicated computations when forwarding the packets. Ergen et al. [11] present a routing algorithm that maximizes the sensor network lifetime, and further incorporates delay guarantees into energy efficient routing by limiting the length of paths from each sensor to the collection node. Moreover, there are some work which jointly consider the latency and energy efficiency for communications in wireless sensor networks [12, 13, 14, 15] . Some routing protocols with congestion awareness have also been proposed for ad hoc networks [16] [17] .. In our work we focus on the quality of service in forwarding routine data and unusual events in SNs, and consider how to manage routing so that network capacity is made available to offer uncongested paths to traffic emanating from unexpected events, in addition to routing the routine parts of the traffic.. Some congestion control algorithms have also been proposed for wireless sensor networks. Wan et al. [18] proposed an energy efficient congestion control scheme for sensor networks called CODA (COngestion Detection and Avoidance), which includes receiverbased congestion detection, open-loop hop-by-hop backpressure, and closed-loop multi-source regulation. Hull et al. [19] have examined three techniques to mitigate congestion in WSN, which includes hop-by-hop flow control, rate limiting source traffic, and prioritized medium access control (MAC). Ee et al. [20] propose a distributed algorithm for congestion control and fairness in many-to-one routing, which measures the average transmission rate, then divides and assigns the average to downstream nodes equally. Some recent work also studies the effect of time-outs on the travel delays in wireless sensor networks [21] . Most of the existing work requires feedback from sensor nodes which result in extra overhead in the network. On the contrary, the RRR approach we propose is quite simple and easy to implement in a distributed manner since all decisions are locally taken by the nodes, and it requires no feedback messages from the congested nodes.

O O O O O O O B I B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O B I O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Analysis of multibackground memory testing techniques March tests are widely used in the process of RAM testing. This family of tests is very efficient in the case of simple faults such as stuck-at or transition faults. In the case of a complex fault model-such as pattern sensitive faults-their efficiency is not sufficient. Therefore we have to use other techniques to increase fault coverage for complex faults. Multibackground memory testing is one of such techniques. In this case a selected March test is run many times. Each time it is run with new initial conditions. One of the conditions which we can change is the initial memory background. In this paper we compare the efficiency of multibackground tests based on four different algorithms of background generation. Modern semiconductor memories are among the most fundamental integrated-circuit devices and cores in digital systems (Krasniewski, 2008; Sosnowski, 2007; Zorian, 2002) . Their testing is quickly becoming a more difficult issue as the rapidly increasing capacity and density of memory chips. With the advances of deep-submicron technology, more failure modes and faults need to be dealt with in order to maintain good quality and reliability of memory chips. The neighborhood pattern sensitive fault (NPSF) model is not new, but it is still widely discussed in the literature of memory testing (Goor, 1991; Cheng et al., 2002; Huang and Li, 2006) . This model is more general and allows describing a wide spectrum of failures within modern memory chips.. Traditional March algorithms (Goor, 1991) have been widely used in memory testing because of their linear time complexity, high fault coverage, and ease in builtin self-test (BIST) implementation. It is known that traditional March algorithms do not generate all neighborhood patterns that are required for testing NPSFs. However, they can be modified to get detection abilities for NPSFs. Based on traditional March algorithms, various approaches have been proposed to detect NPSFs, such as the tiling method (Goor, 1991; Hayes, 1975) , the twogroup method (Goor, 1991; Hayes, 1980) , the row-March algorithm (Franklin and Saluja, 1996) , transparent testing (Cockburn, 1995; Karpovsky and Yarmolik, 1994; Nicolaidis, 1996; Voyiatzis, 2006) , pseudo-exhaustive testing (Karpovsky et al., 1995) , testing based on different address sequences (Sokol and Yarmolik, 2006; Yarmolik, 2008 ) and different address seeds (Yarmolik, 2008) , and the multibackground method (Yarmolik and Mrozek, 2007) .. For one execution of a March test there are no specific requirements on the address order or the memory background (Niggemeyer et al., 1998) . For any address order and memory background, the number of detectable memory faults will be the same and can be calculated according to the structure and properties of the memory test (Niggemeyer et al., 1998; Yarmolik and Mrozek, 2007) . In the case of multibackground memory tests, backgrounds play a very important role in the final outcome. As was shown and investigated in (Yarmolik and Mrozek, 2007) , different subsets of backgrounds can give different subsets of detectable faults for a selected memory test. The selection of an optimal set of backgrounds to get the highest fault coverage is still an open issue and there are no known algorithms for optimal background generation and construction in the case of more than four iterations of the test.. The main goal of this paper is to compare the efficiency of multibackground March tests (in terms of pattern sensitive fault detection) based on standard backgrounds (Goor, 1991; Karpovsky and Yarmolik, 1994; Cheng et al., 2002) and the optimal one, which was proposed by the author in (Yarmolik and Mrozek, 2007; 192 I. Mrozek Mrozek and Yarmolik, 2008b) . The paper is organized as follows: Section 2 provides an overview of pattern sensitive faults, their types and definitions. Section 3 reviews March test abilities regarding PSF detection. This section reviews the March test structure and provides an analysis of the fault coverage of the MATS+ test in the case of PSF faults. Moreover, this section stresses the importance of proper background selection in multibackground testing. Section 4 covers background generation techniques. This section reviews the structure of backgrounds which are used in multibackground testing. Subsections 4.1-4.3 describe and analyse standard backgrounds known from the literature. Subsection 4.4 develops in-depth optimal sets of backgrounds for two, three and four run memory testing. Section 5 presents the results of the comparison of the efficiency (in term of PSF detection) of standard backgrounds and the optimal one. This section presents the fault coverage of the multirun MATS+ test for PNPSFk faults and various backgrounds. There are many methods for generating backgrounds in multirun memory testing. The most popular and optimal ones are presented and compared in this paper. From the results we can conclude that for a multirun test procedure which consist up to four iterations the best results will be achieved with optimal backgrounds. If we want to run the test more than four times, the best results will be achieved with regular backgrounds or random pairs of 204 I. Mrozek (Mrozek et al., 2008) , it is not necessary to use complex tests to achieve good results in multibackground testing. Weighted fault coverage takes into consideration not only the fault coverage of the test but its complexity, too. So in multirun memory testing the simplest tests allow us to achieve as good results (or better) as complex ones with the same total complexity of the test procedure. Based on (8), (22), (24), (32) and (35), we can compare the efficiency (in terms of the PNPSFk detection ability) of the test procedures based on the MATS+ like test and the presented backgrounds. First, we will compare standard backgrounds (random backgrounds, random pairs and regular backgrounds). The fault coverage of the procedure which consists of multiple runs of the MATS+ test and applications of regular backgrounds is presented in Table 11 . In this table, k means the size of the PNPSFk fault and l-the number of the pairs of backgrounds (iterations) applied. The same results for random backgrounds are presented in Table 3 . The third test procedure is based on consecutive application of the backgrounds pairs (B j , B j ), where the first background is the random one and the second is its inverted version. The results for the procedure based on Analysis of multibackground memory testing techniques the MATS+ like test and such backgrounds are presented in Table 13 . From the presented results we can see that all the sets of backgrounds allows us to achieve very similar fault coverage. Some better results can be achieved with regular backgrounds (see Table 11 ) and random pairs of backgrounds (see Table 13 ) than with random backgrounds. Therefore it seems that, especially in periodic testing, random pairs of backgrounds allow us to achieve very good results with minimal hardware overhead. Now let we compare the efficiency (in terms of NPSFk detection) of the test procedure based on standard backgrounds and optimal backgrounds. Unfortunately, nowadays the author is able to generate only four optimal backgrounds according to algorithm presented in (Mrozek and Yarmolik, 2008b) . Algorithms for optimal background generation for more than four iterations are still an open issue. Therefore we compare the efficiency of only four iterations of the MATS+ like test for PNPSF3 detection. The results of the comparison for various fault sizes (k) are presented in Table 14 .

O O O O O O B I O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Shape sensitive geometric monitoring A fundamental problem in distributed computation is the distributed evaluation of functions. The goal is to determine the value of a function over a set of distributed inputs, in a communication efficient manner. Specifically, we assume that each node holds a time varying input vector, and we are interested in determining, at any given time, whether the value of an arbitrary function on the average of these vectors crosses a predetermined threshold.In this paper, we introduce a new method for monitoring distributed data, which we term shape sensitive geometric monitoring. It is based on a geometric interpretation of the problem, which enables to define local constraints on the data received at the nodes. It is guaranteed that as long as none of these constraints has been violated, the value of the function does not cross the threshold. We generalize previous work on geometric monitoring, and solve two problems which seriously hampered its performance: as opposed to the constraints used so far, which depend only on the current values of the local input vectors, here we incorporate their temporal behavior into the constraints. Also, the new constraints are tailored to the geometric properties of the specific function which is being monitored, while the previous constraints were generic.Experimental results on real world data reveal that using the new geometric constraints reduces communication by up to three orders of magnitude in comparison to existing approaches, and considerably narrows the gap between existing results and a newly defined lower bound on the communication complexity. Many emerging applications require processing high-volume streams of data. Examples include network traffic monitoring systems, real-time analysis of financial data [32, 34] , distributed intrusion detection systems, and sensor networks [23] . These applications are commonly referred to as Data Stream Management Systems (DSMS) [4] . A key difference between DSMS and traditional DBMS is that DSMS are required to process continuous queries. DBMS receive queries that are static in nature, i.e. the system receives a query, and returns a response based on the data currently present in the system. DSMS, on the other hand, are designed to handle continuous queries, i.e. the system receives a query and continuously updates the user as new data arrives. This key difference poses new fundamental challenges that are not addressed by traditional DBMS.. Various types of continuous queries have been studied in the past, including continuous versions of selection and join queries [24] , various types of aggregation queries [2, 26] , and monitoring queries [6] . While most previous work regarding data stream systems considers sequential setups (the data is processed by a single processor), many data stream applications are inherently distributed: examples include sensor networks [23] , network monitoring [17] , and distributed intrusion detection.. In many cases, the user of a distributed stream system is interested in receiving notifications when global "events of interest" occur. These tasks are referred to as distributed monitoring tasks. Consider, for example, a distributed system for detecting denial of service attacks. A node is considered to be under a denial of service attack if more than a certain percentage of the incoming traffic, say 0.1 percent, is directed to that node. The system is comprised of agents installed on the routers controlling the network traffic entering a local network. Each agent monitors the traffic flowing into the network through its host.. It is easy to see that in the example given above, when a certain node is under a distributed denial of service attack, at least one of the agents will detect that the network traffic to that node exceeds 0.1 percent of the incoming traffic through its host. In other words, the global "event of interest" has a local indication. This fact can be utilized to develop efficient monitoring algorithms, as described in [17] .. In more complex monitoring tasks, global "events of interest" may be harder to detect by solely examining local data. As an example of a complex monitoring task, consider a distributed search engine. The engine is comprised of a distributed set of mirrors. Each mirror receives a stream of queries, where each query consists of multiple search terms. We are interested in monitoring the correlation between the appearance of pairs of search terms is a search query. In order to do so, each mirror keeps track of the queries it received in the last, say, 48 hours. We refer to these queries as the sliding windows held by the mirrors. Given two search terms, denoted A and B, let fA and fB be the respective global frequency of occurrence 1 of A and B, i.e. the frequency of their occurrence in the union of the sliding windows held by the mirrors. In addition, let fAB be the global frequency of occurrence of both A and B. The correlation between the appearance of A and that of B is measured using the correlation coefficient ρAB, which is given by:. The correlation coefficient receives values in the range [−1..1]. A negative score indicates that the terms tend to exclude each other, a score of zero indicates that there is no correlation between the appearance of the terms, and a positive score indicates that the terms tend to appear in the same queries. We would like to receive a notification when the correlation coefficient crosses a given positive threshold. It is easy to see that it is impossible to reach a correct decision, given only the local values of the correlation coefficient. This is a characteristic of non-linear functions.. In this paper we consider a set of nodes, each of which holds a time varying data vector. The global "event of interest" is defined by an arbitrary (possibly non-linear) function over the weighted average of the vectors held by the nodes, and we are interested in detecting when the value of this function crosses a predetermined threshold value. We refer to these monitoring tasks as non-linear monitoring tasks. Note that the aforementioned problem of determining the correlation coefficient is covered by this definition. We presented geometric constraints that take advantage of the distribution of the data vectors and the shape of the threshold surface of the monitored function. Using these constraints yields a typical improvement of two orders of magnitude in comparison to the results achieved with previously used constraints. In all cases, the new constraints drastically reduced the gap between previous results, and those achieved when using theoretic optimal constraints. Future research will attempt to devise new types of geometric constraints. We also plan to explore alternative methods for resolving constraint violations. A well studied problem is the monitoring of frequency counts over a single data stream [2, 3, 8, 26] , however these works do not address distributed environments. Other important problems over a single data stream were studied in [7, 9, 16, 18] .. Distributed function computation has been addressed by the "Distributed Triggers" framework presented in [21] . Later, this framework has been employed to monitor network wide traffic anomalies [19, 20] . Our work is consistent with the distributed triggers framework in that it employs a set of local constraints for detecting a global event of interest. In contrast to [19, 20] , which focus on an anomaly detection problem, our work addresses a wide class of non-linear monitoring problems.. A well studied problem is the computation of a the sum or average of a distributed set of variables. Prominent examples include [17] , which studies detecting when such a sum exceeds a given threshold, [10] , which proposes observing the distribution of the input data to receive optimal algorithms, and [27] which enables tracking the sum, average, or minimum of a distributed set of variables within a certain predetermined error margin. Our work differs in that we monitor the value of an arbitrary function over a vector of distributed variables.. A common approach to distributed stream monitoring is the use of sketches to summarize data while maintaining accuracy guarantees. This approach has been employed to detect "heavy hitters" [25] , compute quantiles [12] , count distinct elements [14] , and compute join aggregates [11] .. Other distributed computation problems studied in previous work include top-k problems [5] , set-expression cardinality estimation [15] , clustering [13] , and distributed verification of logical expressions [1] .. Recently, the geometric monitoring scheme was proposed in [30] . In contrast to the methods proposed in [30] , which are oblivious to the nature of the data on the streams and to the monitored function at hand, the methods presented here leverage this information, yielding very significant reductions in communications.

B O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Value-Cell Bar Charts for Visualizing Large Transaction Data Sets Abstract-One of the common problems businesses need to solve is how to use large volumes of sales histories, Web transactions, and other data to understand the behavior of their customers and increase their revenues. Bar charts are widely used for daily analysis, but only show highly aggregated data. Users often need to visualize detailed multidimensional information reflecting the health of their businesses. In this paper, we propose an innovative visualization solution based on the use of value cells within bar charts to represent business metrics. The value of a transaction can be discretized into one or multiple cells: high-value transactions are mapped to multiple value cells, whereas many small-value transactions are combined into one cell. With value-cell bar charts, users can 1) visualize transaction value distributions and correlations, 2) identify high-value transactions and outliers at a glance, and 3) instantly display values at the transaction record level. Value-Cell Bar Charts have been applied with success to different sales and IT service usage applications, demonstrating the benefits of the technique over traditional charting techniques. A comparison with two variants of the well-known Treemap technique and our earlier work on Pixel Bar Charts is also included. T HE rapid increase of automatically collected data has led to the availability of large volumes of business transaction data. Many research efforts have focused on how to turn the raw data into valuable information. For the exploration of large multidimensional data, analysts want to identify problem areas at a glance, with the possibility to easily drill into problem areas to get detailed information. Therefore, we need to present an overview of the data and at the same time show detailed information for each data item. For the exploration of large volumes of multiattribute data, the current charts and tables are not able to show important information such as . data distribution of multiple attributes, . patterns, correlations, trends, and exceptions, and . detailed information, for example, each sales transaction with price, location, time, and so forth. Value-Cell Bar Charts are simple and easy to use. They allow users to visually analyze large transaction data sets and capitalize on the popularity of the daily used regular bar charts. While retaining the advantages of regular bar value aspects. At the same time, it shows the detailed information and allows root-cause detection without requiring the user to click through many charts and listings.. Our applications using real-world sales and IT service usage data show the wide applicability and usefulness of our new technique. Future work will be in the areas of Fig. 10 (continued) . (c) Value-cell bar chart showing low correlation between transaction price and discount many high-price transactions with low discounts (that is, the highest price transaction at the top of the bar, but color yellow means low discount) (x-axis: product type; y-axis ordering: price; color: discount) (40,525 invoices). alternative solutions to the rounding and aggregation problems for optimizing cell placements. In addition, we plan to draw outlines or cushions for large transactions within a bar to better visualize their transaction boundaries. Ming C. Hao received the MA degree in mathematics from the City University of New York. She is a senior member of the technical staff at Hewlett-Packard Research Laboratories in Palo Alto, California. Currently, she is working in the area of advance database, business management, and IT services information visualization, In addition to visualization, her field of expertise includes 3D collaboration, database, and window systems. She was a senior scientist at the IBM Almaden Research Center and T.J. Watson Research. She has been awarded more than 30 US patents and has published many papers in the areas of visualization and window systems. She is a member of the IEEE.. Umeshwar Dayal received the PhD degree in applied mathematics from Harvard University in 1979. He is a principal laboratory fellow in the Advanced Data Base Program at Hewlett-Packard Laboratories, Palo Alto, California, where he initiated and led research programs in data mining solutions and business process management. He has more than 20 years of research experience in data management. Prior to joining HP Labs, he was a senior researcher at DEC's Cambridge Research Lab, chief scientist at Xerox Advanced Information Technology and Computer Corporation of America, and on the faculty at the University of Texas-Austin. He has published extensively and holds several patents in the areas of database systems, transaction management, workflow systems, and data mining. He is on the editorial board of four international journals, has coedited two books, and has chaired and served on the program committees of numerous conferences. He is a member of board of the VLDB Endowment, the board of the International Foundation for Cooperative Information Systems, and the Steering Committee of the SIAM Data Mining Conference. He is a member of the IEEE Computer Society.. Martha Lyons received the master's degree in computer science from the University of Texas, Austin. She is currently a distinguished technologist at Hewlett-Packard Services and has more than 22 years of experience driving R&D initiatives and innovation for HP Services. She is currently responsible for managing HP Services' research agenda and relationship with HP Labs, which is focused on incubating and delivering innovative service offerings and capabilities to HP's customers. Previously, she led the development of a number of solutions, which introduced and extended HP's electronic and automated service capabilities over the Web. She has published on the topics of information retrieval for service and support, innovation, and R&D in IT services, automating services, and support processes, and currently has four patents pending. Bar Charts are the most simple presentation graphics; however, bar charts show only aggregated values such as total sales for each month, as shown in Fig. 1 . In bar charts, due to the aggregation, valuable information often gets lost.. The usefulness of bar charts is especially limited if the user is interested in relationships between the different attributes such as product price, number of orders, and quantities. The reason for this limitation is that multiple bar charts for different attributes do not support the discovery and correlation of interesting subsets, which is one of the main tasks in mining transaction data. A number of visualization techniques have shown the usefulness of visual data exploration [4] , [5] , [6] for discovering patterns and trends in multidimensional data. For example, Tableau's visual spreadsheet [11] and SpotFire's visual data exploration interface [10] are widely used by business managers to make daily decisions. Space-filling techniques such as squarified treemaps [2] and screen-filling curves [12] are also used for visualizing hundreds or even thousands of data records. 1 For visualizing even larger amounts of data, pixel-oriented techniques, which use each pixel to represent one data value, can be used. In the VisDB system [8] , for example, each pixel is arranged and colored to indicate an item's relevance to a user query. Another wellknown technique that uses pixel-level visualization is the Seesoft software visualization technique [15] , which maps each line of source code to a line of pixels. Pixel techniques have also been used to build interactive decision tree classifiers based on a visualization of the training data [1] .

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Novel fuzzy information proximity measures As a measure of information shared between two fuzzy pattern vectors, the fuzzy information proximity measure (FIPM) plays an important part in fuzzy pattern recognition, fuzzy clustering analysis and fuzzy approximate reasoning. In this paper, two novel FIPMs are set up. Firstly, an axiom theory about the FIPM is given, and different expressions of the FIPM are discussed. A new FIPM is then proposed based on the axiom theory of the FIPM and the concept of fuzzy subsethood function. Two concepts based on the idea of Shannon information entropy, fuzzy joint entropy (FJE) and fuzzy conditional entropy (FCE), are proposed and the basic properties of FJE and FCE are given and proved. Finally, classical similarity measures such as dissimilarity measure (DM) and similarity measure (SM) are studied, and two new measures, fuzzy absolute information measure (FAIM) and fuzzy relative information measure (FRIM), are set up, which can be used as measures of the proximity between fuzzy sets A and B.Keywords: Fuzzy information proximity measure (FIPM); fuzzy nearness degree; fuzzy joint entropy (FJE); fuzzy conditional entropy (FCE); fuzzy absolute information measure (FAIM); fuzzy relative information measure (FRIM) Pattern recognition is the scientific discipline whose goal is the classification of objects into a number of categories or classes. It is divided into two types, called supervised and unsupervised pattern recognition. In unsupervised pattern recognition, our major concern is to reveal the organization of patterns into sensible clusters (groups), which will allow us to discover similarities and differences between patterns and to derive useful conclusions about them. This idea is met in many fields, such as life sciences (biology, zoology), medical sciences (psychiatry, pathlogy), social sciences (sociology, archeology), earth sciences (geography, geology), and engineering. A major issue in unsupervised pattern recognition is that of defining the similarity between two pattern vectors and choosing an appropriate measure for it. Another issue of importance lies in identifying various types of ground cover and clustering (grouping) the vectors on the basis of the adopted similarity measure. Generally speaking, there are two basic similarity measures, the dissimilarity measure (DM) and similarity measure (SM). These play an important part in pattern recognition and classification, picture processing and unsupervised learning theories, but as a rule, systems make use of the DM or SM between the two pattern vectors within a certain environment [1] [2] [3] . In practice, people usually work in an uncertain environment, for example random environment, fuzzy environment, etc.. It is well known that the concept of Shannon's entropy has a central role in information theory, and is sometimes referred to as the measure of uncertainty [4, 5] . The entropy of a random variable is defined in terms of its probability distribution and can be shown to be a good measure of its randomness or uncertainty. The concept of information is too broad to be captured completely by a single definition. However, for any probability distribution, we define a quantity called the entropy, or information entropy, which has many properties that agree with the intuitive notion of what a measure of information should be [6] . This notion is extended to define mutual information, which is a measure of the amount of information one random variable contains about another. Entropy then becomes the self-information of a random variable. Mutual information is a special case of a more general quantity called relative entropy, which is a measure of the distance between two probability distributions. Some researchers have studied information entropy and applied it in pattern recognition, clustering analysis, feature extraction, system simulation and decision-making and so on [7] [8] [9] .. In this paper, we study fuzzy information measures based on the existing information pattern measures. In Section 2, we introduce the commonly used similarity measures, such as DM and SM. The four axioms of fuzzy entropy, according to the definition of Shannon information entropy, are discussed, the concepts of fuzzy joint entropy and fuzzy conditional entropy are introduced, and some of their properties are given and proved in Section 3. Two novel information measures, called the fuzzy absolute information measure (FAIM) and fuzzy relative information measurement (FRIM), are proposed for measuring the similarity degree between fuzzy sets A and B in Section 4. In Section 5, we come to a conclusion. Some definitions of fuzzy entropy are summarized on the basis of their adherence to the four axioms of fuzzy entropy. From this foundation, we give definitions of the fuzzy joint entropy and fuzzy conditional entropy, and prove their basic properties. The classical similarity measures, such as the DM and the SM, are studied, and then two new similarity measures, FAIM and FRIM, are proposed. The FAIM and FRIM can be used to measure the degree of similarity between two fuzzy sets A and B to some extent, and so they are a useful further development of the theory of similarity measures.

O O O O O O O O O O O O O O O O O B I I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I I O B I I I I O O O O O O O O O O O O O O O O O O B I I I I B I I B I I I B I I I B I I I I B I I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Harmonic Field Based Volume Model Construction from Triangle Soup Abstract Surface triangle meshes and volume data are two commonly used representations of digital geometry. Converting from triangle meshes to volume data is challenging, since triangle meshes often contain defects such as small holes, internal structures, or self-intersections. In the extreme case, we may be simply presented with a set of arbitrarily connected triangles, a "triangle soup". This paper presents a novel method to generate volume data represented as an octree from a general 3D triangle soup. Our motivation is the Faraday cage from electrostatics. We consider the input triangles as forming an approximately closed Faraday cage, and set its potential to zero. We then introduce a second conductor surrounding it, and give it a higher constant potential. Due to the electrostatic shielding effect, the resulting electric field approximately lies in that part of space outside the shape implicitly determined by the triangle soup. Unlike previous approaches, our method is insensitive to small holes and internal structures, and is observed to generate volumes with low topological complexity. While our approach is somewhat limited in accuracy by the requirement of filling holes, it is still useful, for example, as a preprocessing step for applications such as mesh repair and skeleton extraction. In computer graphics, geometric models can be represented in various ways, such as subdivision surfaces, spline surfaces, triangle meshes, volumetric representation etc. Triangle meshes are the most widely used surface representation, and are typically produced by 3D range scans or designed using computer-aided design software. Volumetric representation is another commonly used representation, especially in important applications such as medical imaging (e.g., CT and MRI data), scientific visualization, virtual reality and simulation. Converting between these two representations is an essential step in various geometry processing processes. The volumetric representation also has the advantage that it always corresponds to some valid configuration in space, unlike a triangle mesh, which may represent a self-intersecting surface. Indeed, various methods of producing triangle meshes lead to invalid models, containing defects such as small holes, unwanted internal structures, or self-intersections. In an extreme case, connectivity information may be lacking, and we may just be presented with a "triangle soup" (see Fig.1(a) ). Well-known algorithms [1] [2] have been proposed to robustly convert volumetric representations to triangle meshes. However, the inverse problem, i.e., converting mesh models to volumetric representation, is challenging due to the potential presence of defects. We present here a novel method for doing this, which can be a beneficial preprocessing step for various geometry processing applications.. The process of converting triangle meshes to a volumetric representation is referred to as scan-conversion or voxelization. Clearly, the problem of producing an octree is closely related to that. The key issue is to determine which voxels in 3D space lie inside or outside the model. However, for imperfect triangle meshes, defects like missing triangles (holes), self-intersecting triangles, and internal disconnected triangles prevent this from being a straightforward decision. In the extreme case, we may simply have a triangle soup, and the lack of connectivity information makes it yet harder to decide what is inside and what is outside. Presented with such an input, many current volume construction methods such as [3] [4] [5] fail to produce satisfactory results. Such defective meshes may be restored by mesh repair methods [6] and a well-known method which can cope with triangle soups is given in [7] , but the output may be of undesirably high genus if there are internal structures inside the mesh.. This paper presents a conversion method which takes a triangle soup as input, and outputs a volumetric representation in the form of an octree. Our method is based on the properties of harmonic fields. The motivation for our method is the Faraday cage, a construction used in electrostatics to shield a region from voltages. If a closed conducting shell is placed in an electric field, it provides a shielding effect: there is no field inside the shell. Even if there are small gaps, the interior is still well shielded. Thus, to generate a volumetric model, we consider the input triangles as forming a more-or-less closed Faraday cage, with potential zero. Outside and surrounding it, we then construct a second conductor having a higher constant potential. By considering the electric field magnitude at each point of space, which should be zero inside the cage, we have a method for determining whether each point is inside or outside the input triangle model.. Because of its robustness in the presence of internal structures and small holes, our method has various potential applications as a beneficial preprocessing step in geometry processing. For example, mesh repair methods like [7] are sensitive to internal structures, which may output results of unnecessarily high genus due to topological redundancy. The results can be substantially improved if we selectively pass to the mesh repair pipeline only those triangles from the input triangle mesh close to the boundary of the volume generated by our method. Another use of our approach is in skeleton extraction. Skeletons are important shape descriptors for object representation and recognition, but they cannot be robustly extracted from mesh models with defects such as internal structures. In this case, we can convert the imperfect mesh to volumetric representation first, and then adopt existing robust and efficient methods of extracting skeletons from volume models like [8] .. Thus, the main contribution of our work is a novel approach to generating a volumetric representation from a triangle soup, which may serve as a beneficial preprocessing step for various geometry processing applications. Although other volume construction methods like [4] [5] 9] have been proposed, our method differs from them in having the following two main advantages: (i) our method is insensitive to small holes and internal structures, and (ii) our method produces a volume with low topological complexity.. The rest of the paper is organized as follows. In Section 2, we briefly review the related work. In Section 3, we overview our method; details are in Section 4. Experimental results are given in Section 5 and concluding remarks are given in Section 6. Our volume construction method is motivated by the Faraday cage from physics [18] , and uses the approach illustrated in Fig.2 . Suppose our input object is an approximately closed electrical conductor, whose potential is set to zero. A second conductor is placed outside it and surrounding it, and given a higher potential, generating an electric field. Due to the shielding effect of the inner conductor, the electric field magnitude should be approximately zero inside it. By comparing the electric field magnitude to a small threshold, we get a method for determining whether a given point lies inside or outside the input model. Obviously, there maybe places outside the model that could possibly have zero gradient magnitude. For highly non-convex objects, if the external conductor has a rather different shape to the inner conductor, the electric field may also be quite small in some places outside. To ensure that the method works well for such objects, we first compute a coarse object contour using an enclosing cube as the external conductor. Then we dilate the coarse object contour (i.e., offset it outwards) to get a new external conductor with a similar shape to the original object, and fairly close to it. We then use the method again with this new outer conductor to get a more accurate location for the object boundary.. Thus, our volume construction method is composed of three steps, which are detailed in Section 4:. • Discretization. During discretization, we embed the input triangle model in a tight (but not contacting) bounding cube and an initial octree representation of the input triangle model is computed by marking voxels that intersect with the triangles as boundary voxels. The depth of the octree is specified by the user or a default value is calculated from the triangle size, as explained later.. • Coarse Contour Generation. To get a contour for the outer conductor that is a similar shape and close to the input model, a harmonic field is coarsely constructed inside the bounding cube with potential value zero on boundary voxels (those containing triangles) and a constant higher potential value on the boundary of the cube. We make use of the octree structure to perform fast computation. We extract those voxels whose field value is below a threshold as an initial estimation of the volume to be voxelized. We next apply a morphological dilation operation to this volume, to get a new coarse contour which has a similar shape to the object. Using this in place of the cube as the outer conductor allows us to get an almost uniform field between inner and outer conductors, even for highly non-convex objects, allowing us to straightforwardly use thresholding later to determine a more accurate boundary for the object.. • Volume Extraction. We now construct a more accurate harmonic field inside the new coarse contour. The potential value of the boundary voxels (containing triangles) is again set to zero, and a higher potential is applied to the new coarse contour. We use a uniform grid between the conductors to compute the harmonic field in this case, which gives more accurate results. Voxels whose field gradient is below a given threshold are extracted as the final volumetric representation of the input triangle soup. In this paper, we present a novel method to construct volume model from triangle soups, which has applications as a beneficial preprocessing step for various geometry processing tasks like mesh repair and skeleton extraction. In our method, we consider the input triangles as forming a more-or-less closed Faraday cage, with potential zero, and a second conductor, outside it and surrounding it, is given a higher potential. We may then determine whether a given point in space is inside or outside the input model by considering the resulting electric field. Our method is insensitive to small holes and internal structures and is observed to generate volumes with low topological complexity. In the future, we intend to further develop the method. One possible solution to the issue of accuracy may be to adaptively vary α across the mesh, assuming we can distinguish what is a concavity from an unwanted hole. Apart from that, we think the gradient magnitude of the harmonic field is related to the curvature and we intend to investigate its usage in shape analysis. The key problem during volume model construction is to determine whether a given voxel in 3D space lies inside or outside the model. We thus briefly review and classify existing techniques in terms of how they make this decision.. To classify the interior and exterior of a polygonal model, approaches like [10] [11] are used to assess the visibility of the surface from a surrounding sphere of cameras. However, simple viewpoint-visibility tests may fail for imperfect meshes, since some interior points may be visible through small holes in the surface, as for the Kitten model shown in Fig.1(a) .. In [3, 12] , triangle meshes are voxelized using those grid cells that intersect the model surface, which therefore only generates a thin-shelled volumetric representation. There is thus no explicit representation of inside and outside, only the boundary, which is unsuitable for many applications. To fill the interior of the model, a boundary filling algorithm is used in [4] after voxelizing triangles in a similar way. Similarly, in [13] , an octree is constructed and the inside/outside property of cells is determined using a robust seed algorithm. However, these two methods fail if the input contains defects in the form of gaps in the input triangle mesh.. In [5] , a signed volume is generated using a signed distance field, computed as the minimum signed distance from each cell to the input triangles. The authors also use an octree structure to adaptively sample the field. Fast computation of this field using graphics hardware is presented in [14] . However, these methods assume that the input triangle mesh is consistently oriented, which is not true for all input meshes, and is not assumed by our method.. In [15] , an implicit representation of the object's surface is constructed from oriented points using radial basis functions. This allows holes to be smoothly filled by extrapolation. Alternatively, surface reconstruction from oriented points can be formulated as a Poisson problem [16] , which yields a well-conditioned sparse linear system similar to ours. Yet another approach is given in [17] , where a moving least-squares method is used to interpolate gaps between the input polygons. However, these methods again require consistent orientation of the input data, and furthermore, any unwanted internal triangles are retained.. Nooruddin and Turk [9] give two methods of voxelization based on different principles, parity-counting and ray-stabbing. The former method simply generalizes to 3D the well-known method of determining whether a point is interior to a polygon in 2D. The ray-stabbing method involves casting rays from each grid cell and voting based on intersections on the ray with the model. Neither method is robust as small gaps in the surface may cause a large portion of the cells at a distant location to be misclassified. They may also be confused by extra unwanted internal triangles.. A robust method which can guarantee to produce a closed model from a triangle soup is given in [7] . However, as noted by the author, if the input model contains internal structures, the output may be of high genus, which is undesirable in most applications. Our method does not suffer from this problem, and is observed to generate volumes with low topological complexity.

B I O B I O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O B I O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O