1. get a specific event from log (of “LogView”)

String eventIdN = log.getEventDataManager().readObject(eN).getAttributes().get("id:name").toString();

2. set the color of a dot in the chart panel
use function setColorAttribute in DottedChart at org.processmining.ocbc.performance.logprojection.plugins.dottedchart;
idea: (1) identify the values for the red and green color; (2)assign the values to the variables.
for (int e = 0; e < log.numEvents(); e++) {
	int val = manager.getAttributeValueLiteralIndex(map(e, colorAttribute.isEventAttribute()),
			colorAttribute);
	//						colors[e] = (short) linearSearch(map, val);
	System.out.println("Attribute name in LITR, val: " + e + ", " + val);
	String referenceTarget = log.getEventDataManager().readObject(e).getAttributes().get("pattern:name").toString();
	String attributeName = colorAttribute.getKey();
	System.out.println("referenceTarget name in LITR: " + e + ", " + referenceTarget);
	if(attributeName.equals("pattern:name")){
		if(referenceTarget.equals("reference")){
			val = 4;
		}	
		else{
			val = 11;
		}
	}
	colorAndShape[e] &= ~COLORMASK;
	colorAndShape[e] |= linearSearch(map, val);
}

3. set the shape of a dot in the chart panel
function renderShape in DottedChart at org.processmining.ocbc.performance.logprojection.plugins.dottedchart;

colorMap = getUniqueColors(map.length); //randomly create colors of the number map.length, i.e., types of elements 
colorAndShape[e] &= ~COLORMASK; // clear the low 10 bits as zero
colorAndShape[e] |= 0; //assign each event index a value (0~map.length)
			
protected void renderShape(Graphics2D g2, double halfDotSize, int transX, int transY, byte shape) {
	switch (shape) {
		case 0 :
			// circle
			g2.fillOval(transX + (int) (halfDotSize * 0.1), transY + (int) (halfDotSize * 0.1),
					(int) (halfDotSize * 1.8), (int) (halfDotSize * 1.8));
			break;

		case 1 :
			// square
			g2.fillRect(transX + (int) (halfDotSize * 0.15), transY + (int) (halfDotSize * 0.15),
					(int) (halfDotSize * 1.7), (int) (halfDotSize * 1.7));

			break;

		case 2 :
			// triangle up
			g2.fillPolygon(new int[] { transX, transX + (int) halfDotSize, transX + (int) (2 * halfDotSize) },
					new int[] { transY + (int) (1.7 * halfDotSize), transY, transY + (int) (1.7 * halfDotSize) }, 3);
			break;

		case 3 :
			// triangle down
			g2.fillPolygon(new int[] { transX, transX + (int) halfDotSize, transX + (int) (2 * halfDotSize) },
					new int[] { transY + (int) (0.3 * halfDotSize), transY + (int) (2 * halfDotSize),
							transY + (int) (0.3 * halfDotSize) }, 3);
			break;
		case 4 :
			// diamond
			g2.fillPolygon(new int[] { transX, transX + (int) halfDotSize, transX + (int) (2 * halfDotSize),
					transX + (int) halfDotSize }, new int[] { transY + (int) (halfDotSize), transY,
					transY + (int) (halfDotSize), transY + (int) (2 * halfDotSize) }, 4);
			break;
		case 5 :
			// pentagon
			g2.fillPolygon(new int[] { transX, transX + (int) halfDotSize, transX + (int) (2 * halfDotSize),
					transX + (int) (1.58 * halfDotSize), transX + (int) (0.42 * halfDotSize) }, new int[] {
					transY + (int) (0.95 * halfDotSize), transY, transY + (int) (0.95 * halfDotSize),
					transY + (int) (2 * halfDotSize), transY + (int) (2 * halfDotSize) }, 5);
			break;
		case 6 :
			// star
			g2.fillPolygon(new int[] { transX, transX + (int) (2 * halfDotSize),
					transX + (int) (0.42 * halfDotSize), transX + (int) halfDotSize,
					transX + (int) (1.58 * halfDotSize) }, new int[] { transY + (int) (0.95 * halfDotSize),
					transY + (int) (0.95 * halfDotSize), transY + (int) (2 * halfDotSize), transY,
					transY + (int) (2 * halfDotSize) }, 5);
			break;
		case 7 :
			// bowtie
			g2.fillPolygon(new int[] { transX, transX + (int) (2 * halfDotSize), transX + (int) halfDotSize,
					transX + (int) halfDotSize }, new int[] { transY + (int) (halfDotSize),
					transY + (int) (halfDotSize), transY, transY + (int) (2 * halfDotSize) }, 4);
			break;

	}
}					
4.add relativetime:timestamp attribute to indicate the relative time
 Date relativeDate = new Date(time.getTime() - timeReference.getTime());
XLogFunctions.putTimestamp(attMap, "relativetime:timestamp", relativeDate);