Revision 0ab53102c02cd5c97fc58c71489748c2546cd368 (click the page title to view the current version)

TrainingCourses/Universities/CTU.cz/PRPL/2014-2015/ViktLoff/tomography.htm

<html>
<head>
<script>

function loadMetadata(shot,callback){
//	var xobj = new XMLHttpRequest();
//	xobj.overrideMimeType("application/json");
//	xobj.open('GET','./'+shot+'_meta.json',true);
//	xobj.onreadystatechange = function(){
//		if(xobj.readyState==4 && xobj.status=="200"){
//			callback(JSON.parse(xobj.responseText););
//		}
//		else alert("cannot load metadata");
//	}
//	xobj.send(null);
	callback(JSON.parse('{"shift": -36, "list": [90, 132, 174, 194, 236, 278, 298, 318, 382, 402, 422, 464, 506, 526, 568, 609, 629, 649, 690, 731, 751, 792, 833, 853, 873, 914, 955, 975, 1016]}'));
}

function getCounter(count,callback){
	if(count<=0)callback();
	return function(){
		if(count>0)count--;
		if(count==0)callback();
	}
}

function getImages(shot,list){
	images = [];
	var counter = getCounter(list.length,startVideo);
	for(var i in list){
		images[list[i]] = new Image();
		images[list[i]].addEventListener("load",counter);
		images[list[i]].addEventListener("error",counter);
		images[list[i]].src = "./"+shot+"_"+i+".png";
	}
	return images;
}

var frame = 0;
function draw(){
	document.querySelector("#tomo").src = images[list[frame]].src;
	document.querySelector("#seeker").style.left = Math.round(list[frame]*150/336+299)+"px";
}

var interval = -1;
function startVideo(){
	interval = setInterval(function(){
		if(frame>=0)draw();
		frame+=1;
		if(frame>=list.length)frame=-1;
	},1000);
}

function stopVideo(){
	clearInterval(interval);
}

function seek(ev){
	if(!ev)ev=window.event;
	stopVideo();
	time = (ev.clientX+document.body.scrollLeft-299)*336/150;
	frame = 0;
	for(var i=1; i<list.length; i++){
		if(Math.abs(list[i]-time)<Math.abs(list[frame]-time)){
			frame = i;
		}
	}
	draw();
}

var list;
addEventListener("load",function(){
	var shot = 18731;
	loadMetadata(shot,function(metadata){
		list = metadata["list"];
		var shift = parseInt(metadata["shift"]);
		images = getImages(shot,list);
		var proj_top = document.querySelector("#proj_top");
		var proj_side = document.querySelector("#proj_side");
		proj_top.src = "http://golem.fjfi.cvut.cz/shots/"+shot+"/diagnostics/Radiation/0211FastCamera.ON/1/plasma_all.png";
		proj_side.src = "http://golem.fjfi.cvut.cz/shots/"+shot+"/diagnostics/Radiation/0211FastCamera.ON/2/plasma_all.png";
		proj_top.style.left = (shift<0)? 300 : Math.round(300+shift/336*150);
		proj_side.style.left = (shift>0)? 300 : Math.round(300-shift/336*150);
		proj_top.addEventListener("click",seek);
		proj_side.addEventListener("click",seek);
	});
});

</script>
</head>
<body>
<div style="position:absolute; left:0px; top:0px; padding:0px">
	<img id=tomo src="#" width=300 height=300 style="float:left" />
	<div style="padding:0px; height:336px">
		<img id=proj_top src="#" style="position:absolute; left:300px; top:0px" height=150/>
		<img id=proj_side src="#" style="position:absolute; left:300px; top:150px" height=150 />
		<div id=seeker style="position:absolute; left:299px; top:0px; width:2px; height:300px; background-color:#FF0"></div>
	</div>
</div>
</body>
</html>