 by the 47 running round! An enjoyable tour was over.
We returned to Haymarket for a classic Edinburgh chip supper then the bar at Waverly before joining V29 South.
Tour phot spot
27046 and 27049 arrive at Falkirk Grahamston with the SRPS “Tyne Valley Express” tour on March 14th 1987
Generator 47418 looking good at Newcastle Central on March 14th 1987
Crowds at Newcastle not for the “tippies” though as 27049 and 27046 get ready to return North on March 14th 1987
The return run, Sunday March 15th
The classic overnight from Edinburgh to Bristol was joined early but the train wasn’t that busy and we dossed most of the way. Being a Saturday night the juice was off and 47547 worked through to New St.
At Stafford the West Midlands hordes piled on as 56094 was to pilot our train via Cannock to New St. We were too tired to show much interest! The 0756 Wolves – Euston had an equally tasty 56086 dragging 86425 to Nuneaton, but it was all a bit plastic compared with our class 27 action 24 hours earlier…….
Moves and Gen
85021 1B09 1815 Euston-Northampton
85020 1F09 1820 Euston-Liverpool EU-CR
81011 1H14 1845 Euston-Manchester
86420 1A80 2000 Manchester-Euston CR-RU
85036 1S06 2110 Euston-Stranraer (fail Preston) RU-PR
47455 1S06 2110 Euston-Stranraer
86245 1S19 2124 Bristol-Glas/Edin PR-CA
14/3/87 Sa
47707 1S19 2124 Bristol-Edinburgh CA-WA
47703 2O91 0610 Edinburgh-Glasgow WA-FG
27046} 1Z30 0747 Falkirk-Carlisle Railtour FG-NC
27049}
5305(Kettle) 0747 Falkirk-Carlisle Railtour NC-CA
40122} 1447 Carlisle-Falkirk Railtour CA-AN
5305}
5305 1447 Carlisle-Falkirk Railtour AN-BA
47209} 1447 Carlisle-Falkirk Railtour (steaming) BA-ED
5305}
47209 1447 Carlisle-Falkirk Railtour ED-WA
47705 1O62 2130 Queen St- Waverly HA-WA
47707 1V29 2305 Edinburgh-Bristol WA-CA
15/3/87 Su
47547 1V29 2310 Glas/Edin-Bristol (via Cannock) CA-NS
56094 1V29 2310 Glas/Edin-Bristol (via Cannock) ST-NS
56086 1A05 0756 Wolverhampton-Euston NS-NU
86425 1A05 0756 Wolverhampton-Euston (via Nor) NU-MK
057 1020 Rugby-Euston MK-LB
endThis Court in M.M.R. Khan v. Union of India' held that the employees appointed in the statutory canteens as well as those engaged in non-statutory recognised canteens in the railway establishments are the railway employees and they are entitled to be treated as such. In other respects, this Court had not granted relief to other non-statutory employees while the writ petitions were pending. The petitioners' association representing the persons appointed by the commission vendors on the railway platforms on the various places also claime parity to be treated as railway catering service. This writ petition came to be dismissed and for review of that order the petitioners have filed this petition. It is contended by the learned counsel for the petitioners that in another case Writ Petition No. 575 of 1987 etc., etc. the petitioners therein claimed that there will be an order in same terms as in T.1. Madhavan v. Union of India2. That judgment was rendered on September 8, 1987.
That was not brought to the notice of the three Judges' Bench when Khan case' was decided. After Khan case1 was decided the non-statutory non-recognised cases were directed for disposal. It would appear when W.P. No. 575 of 1987 etc. were posted, instead of bringing to the notice of the Court of Khan case', Madhavan case2 was referred as having being covered. Accordingly, it was ordered thus : "There will be an order as in Madhavan v. Union of India2." Thus this Court was led to believe that the law holding the field is Madhavan's ratio (a two-Judge Bench) instead of Khan's ratio (three Judge-Bench) a binding precedent. Therefore what is prevailing law is the one laid down by this Court in M.M.R.
Khan v. Union of India1 and the direction given by this Court in the above writ petition referred to on September 22, 1992 would also fall in line with Khan's ratio.
1 1990 Supp SCC 191: 1990 SCC (L & S) 632: (1991) 16 ATC 541 2 1988 Supp SCC 437: 1988 SCC (L & S) 872 610 Accordingly, the petitioners are not entitled to the parity of treatment. The question of review does not arise. The civil miscellaneous petition is dismissed accordingly."""
Thatcherizer App
take photo, detect eyes/mouth, flip, arrange, print

-jjm 3/18/2016
"""


import sys
import os
import re
import traceback
from os.path import splitext, join, isfile
from subprocess import call
import math
import numpy as np
import pygame
import Image
from thatcherizerTools import *

##### CONFIG VARS ##########################################
# dirs
thatcherDir = os.path.abspath(os.path.dirname(sys.argv[0]))
outputDir = join(thatcherDir, 'output')
stimsDir = join(thatcherDir,'stims')
for d in [outputDir, stimsDir]:
	if not os.path.isdir(d): os.makedirs(d)

# settings
size = width, height = 800, 480
fps = 15
actual_fps = 0
centerX, centerY = width/2, height/2
viewerSize = (400,400)			# define the size of the viewer centered on the screen

# colors
black = (0,0,0)
white = (255,255,255)
yellow = (246, 238, 28)
bgBlue = (51,55,135)
ltBlue  = (108,190,220)

# initialize camera
camResolution = (640,480)		# specify resolution of the camera
imgCenterX, imgCenterY = camResolution[0]/2, camResolution[1]/2

useCamera = True
if useCamera:
	camStream = PiCamStream(camResolution, fps)
	camStream.start()
else:
	dummyImage = Image.open(join(stimsDir,"tmp2.jpg"))
	dummyImage = np.array(dummyImage)

# initialize misc
pygame.font.init()

# load BGs
introBg = pygame.image.load(join(stimsDir, 'introBg.png'))
takePhotoBg = pygame.image.load(join(stimsDir, 'takePhotoBg.png'))
confirmPhotoBg = pygame.image.load(join(stimsDir, 'confirmPhotoBg.png'))
confirmFeaturesBg = pygame.image.load(join(stimsDir, 'confirmFeaturesBg.png'))
resultsBg = pygame.image.load(join(stimsDir,'resultsBg.png'))
printBg = pygame.image.load(join(stimsDir, 'printBg.png'))

# load stims
headGuide = pygame.image.load(join(stimsDir, 'headGuide.png'))
headGuide = pygame.transform.scale(headGuide, viewerSize)
mask = Image.open(join(stimsDir, "alphaMask.png"))



###### INITIALIZE PYGAME MAIN APP LOOP #################################
def run_thatcherizer(width, height, fps, starting_state):
	""" function to initialize and run the Thatcherizer App """

	# initialize pygame
	pygame.init()
	screen = pygame.display.set_mode((width, height), pygame.FULLSCREEN)
	clock = pygame.time.Clock()

	# custom cursor
	cursorString = (
	"XX      ",
	"XX      ",
	"        ",
	"        ",
	"        ",
	"        ",
	"        ",
	"        ")
	myCursor, cursorMask = pygame.cursors.compile(cursorString, "X")
	pygame.mouse.set_cursor((8,8), (0,0), myCursor, cursorMask)

	# set which state to begin with
	activeState = starting_state

	# loop for as long as there's an active state
	while activeState!=