Skip to content

Commit

Permalink
Further improvements for re #5414
Browse files Browse the repository at this point in the history
Signed-off-by: Karl Palmen <karl.palmen@stfc.ac.uk>
  • Loading branch information
KarlPalmen committed Oct 26, 2012
1 parent a09ed74 commit 578c509
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 42 deletions.
39 changes: 21 additions & 18 deletions Code/Mantid/scripts/Calibration/Examples/TubeCalibDemoMerlin.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,11 @@
#CalibratedComponent = 'door3' # Calibrate door3.

# Get calibration raw file and integrate it
rawMapWS = Load(path+filename) #'raw' in 'rawMapWS' means unintegrated.
mapWS = Integration( rawMapWS, RangeLower=rangeLower, RangeUpper=rangeUpper )
DeleteWorkspace(rawMapWS)

rawCalibInstWS = Load(path+filename) #'raw' in 'rawCalibInstWS' means unintegrated.
print "Integrating Workspace"
CalibInstWS = Integration( rawCalibInstWS, RangeLower=rangeLower, RangeUpper=rangeUpper )
DeleteWorkspace(rawCalibInstWS)
print "Created workspace (CalibInstWS) with integrated data from run and instrument to calibrate"

# == Create Objects needed for calibration ==

Expand All @@ -49,7 +50,7 @@
calibrationTable.addColumn(type="V3D",name="Detector Position") # "Detector Position" column required by ApplyCalbration

# Specify component to calibrate
thisTubeSet = TubeSpec(mapWS)
thisTubeSet = TubeSpec(CalibInstWS)
thisTubeSet.setTubeSpecByString(CalibratedComponent)

# Get ideal tube
Expand All @@ -59,15 +60,16 @@
# Get fitting parameters
fitPar = TubeCalibFitParams( [], ExpectedHeight, ExpectedWidth, ThreePointMethod=True )

print "Created objects needed for calibration."

# == Get the calibration and put results into calibration table ==
# also put peaks into PeakFile
getCalibration( mapWS, thisTubeSet, calibrationTable, fitPar, iTube, ExcludeShortTubes=ActiveLength, PeakFile=path+'TubeDemoMerlin01.txt' )

getCalibration( CalibInstWS, thisTubeSet, calibrationTable, fitPar, iTube, ExcludeShortTubes=ActiveLength, PeakFile=path+'TubeDemoMerlin01.txt' )
print "Got calibration (new positions of detectors) and put slit peaks into file TubeDemoMerlin01.txt"

# == Apply the Calibation ==
ApplyCalibration( Workspace=mapWS, PositionTable=calibrationTable)

ApplyCalibration( Workspace=CalibInstWS, PositionTable=calibrationTable)
print "Applied calibration"

# == Override Selected Tubes ==
# Now we may override selected tubes
Expand All @@ -79,15 +81,15 @@
# PeakFile created by the previous call of getCalibration.

#Specify tube_3_1 and its override
tube31 = TubeSpec( mapWS)
tube31 = TubeSpec( CalibInstWS)
tube31.setTubeSpecByString('MERLIN/door3/tube_3_1')
override31 = [28.821573928922724, 520.0, 997.359428534161]
#Specify tube_3_2 and its override
tube32 = TubeSpec( mapWS)
tube32 = TubeSpec( CalibInstWS)
tube32.setTubeSpecByString('MERLIN/door3/tube_3_2')
override32 = [29.088837989024192, 510.0, 997.729400488547]
#Specify tube_3_3 and its override
tube33 = TubeSpec( mapWS)
tube33 = TubeSpec( CalibInstWS)
tube33.setTubeSpecByString('MERLIN/door3/tube_3_3')
override33 = [28.60189163158781, 510.0, 997.4536392249629]

Expand All @@ -97,14 +99,15 @@
ovrCalibrationTable.addColumn(type="V3D",name="Detector Position") # "Detector Position" column required by ApplyCalbration

# Put the calibrations of the overrides into the calibration table
getCalibration( mapWS, tube31, ovrCalibrationTable, fitPar, iTube, OverridePeaks=override31 )
getCalibration( mapWS, tube32, ovrCalibrationTable, fitPar, iTube, OverridePeaks=override32 )
getCalibration( mapWS, tube33, ovrCalibrationTable, fitPar, iTube, OverridePeaks=override33 )
getCalibration( CalibInstWS, tube31, ovrCalibrationTable, fitPar, iTube, OverridePeaks=override31 )
getCalibration( CalibInstWS, tube32, ovrCalibrationTable, fitPar, iTube, OverridePeaks=override32 )
getCalibration( CalibInstWS, tube33, ovrCalibrationTable, fitPar, iTube, OverridePeaks=override33 )

#Apply the calibration
ApplyCalibration( Workspace=mapWS, PositionTable=ovrCalibrationTable)

ApplyCalibration( Workspace=CalibInstWS, PositionTable=ovrCalibrationTable)
print "got and applied override calibrations"

# == Save workspace ==
SaveNexusProcessed( mapWS, path+'TCDemoMerlinResult.nxs',"Result of Running TCDemoMerlin.py")
SaveNexusProcessed( CalibInstWS, path+'TubeCalibDemoMerlinResult.nxs',"Result of Running TCDemoMerlin.py")
print "saved calibrated workspace (CalibInstWS) into Nexus file TubeCalibDemoMerlinResult.nxs"

17 changes: 11 additions & 6 deletions Code/Mantid/scripts/Calibration/Examples/TubeCalibDemoWish0.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,18 @@
# Get calibration raw file and integrate it
path = r"C:/Temp/" # Path name of folder containing input and output files
filename = 'WISH00017701.raw' # Name of calibration run
rawMapWS = Load(path+filename) #'raw' in 'rawMapWS' means unintegrated.
mapWS = Integration( rawMapWS, RangeLower=1, RangeUpper=20000 )
DeleteWorkspace(rawMapWS)
rawCalibInstWS = Load(path+filename) #'raw' in 'rawCalibInstWS' means unintegrated.
CalibInstWS = Integration( rawCalibInstWS, RangeLower=1, RangeUpper=20000 )
DeleteWorkspace(rawCalibInstWS)
print "Created workspace (CalibInstWS) with integrated data from run and instrument to calibrate"

#Create Calibration Table
calibrationTable = CreateEmptyTableWorkspace(OutputWorkspace="CalibTable")
calibrationTable.addColumn(type="int",name="Detector ID") # "Detector ID" column required by ApplyCalibration
calibrationTable.addColumn(type="V3D",name="Detector Position") # "Detector Position" column required by ApplyCalibration

# Specify panel 03 of WISH instrument
thisTubeSet = TubeSpec(mapWS)
thisTubeSet = TubeSpec(CalibInstWS)
thisTubeSet.setTubeSpecByString('WISH/panel03')

# Give y-positions of slit points (gotten for converting first tube's slit point to Y)
Expand All @@ -34,8 +35,12 @@
eP = [65.0, 113.0, 161.0, 209.0, 257.0, 305.0, 353.0, 401.0, 449.0]
fitPar = TubeCalibFitParams( eP, 2000, 32 )

print "Created objects needed for calibration."

# Get the calibration and put it into the calibration table
getCalibration( mapWS, thisTubeSet, calibrationTable, fitPar, iTube)
getCalibration( CalibInstWS, thisTubeSet, calibrationTable, fitPar, iTube)
print "Got calibration (new positions of detectors)"

#Apply the calibration
ApplyCalibration( Workspace=mapWS, PositionTable=calibrationTable)
ApplyCalibration( Workspace=CalibInstWS, PositionTable=calibrationTable)
print "Applied calibration"
21 changes: 13 additions & 8 deletions Code/Mantid/scripts/Calibration/Examples/TubeCalibDemoWish1.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,36 @@
# Get calibration raw file and integrate it
path = r"C:/Temp/" # Path name of folder containing input and output files
filename = 'WISH00017701.raw' # Name of calibration run
rawMapWS = Load(path+filename) #'raw' in 'rawMapWS' means unintegrated.
mapWS = Integration( rawMapWS, RangeLower=1, RangeUpper=20000 )
DeleteWorkspace(rawMapWS)
rawCalibInstWS = Load(path+filename) #'raw' in 'rawCalibInstWS' means unintegrated.
CalibInstWS = Integration( rawCalibInstWS, RangeLower=1, RangeUpper=20000 )
DeleteWorkspace(rawCalibInstWS)
print "Created workspace (CalibInstWS) with integrated data from run and instrument to calibrate"

#Create Calibration Table
calibrationTable = CreateEmptyTableWorkspace(OutputWorkspace="CalibTable")
calibrationTable.addColumn(type="int",name="Detector ID") # "Detector ID" column required by ApplyCalibration
calibrationTable.addColumn(type="V3D",name="Detector Position") # "Detector Position" column required by ApplyCalibration

# Specify panel 03 of WISH instrument
thisTubeSet = TubeSpec(mapWS)
thisTubeSet = TubeSpec(CalibInstWS)
thisTubeSet.setTubeSpecByString('WISH/panel03')

# Set fitting parameters
eP = [65.0, 113.0, 161.0, 209.0, 257.0, 305.0, 353.0, 401.0, 449.0]
fitPar = TubeCalibFitParams( eP, 2000, 32 )

print "Created objects needed for calibration."

# Use first tube as ideal tube
tube1 = TubeSpec(mapWS)
tube1 = TubeSpec(CalibInstWS)
tube1.setTubeSpecByString('WISH/panel03/tube001')
iTube = IdealTube()
iTube.constructIdealTubeFromRealTube( mapWS, tube1, fitPar)
iTube.constructIdealTubeFromRealTube( CalibInstWS, tube1, fitPar)

# Get the calibration and put it into the calibration table
getCalibration( mapWS, thisTubeSet, calibrationTable, fitPar, iTube)
getCalibration( CalibInstWS, thisTubeSet, calibrationTable, fitPar, iTube)
print "Got calibration (new positions of detectors)"

#Apply the calibration
ApplyCalibration( Workspace=mapWS, PositionTable=calibrationTable)
ApplyCalibration( Workspace=CalibInstWS, PositionTable=calibrationTable)
print "Applied calibration"
12 changes: 6 additions & 6 deletions Code/Mantid/scripts/Calibration/tube_calib.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,12 +196,12 @@ def getIdealTubeFromNSlits ( IntegratedWorkspace, slits ):
"""
ideal = []
print "slits for ideal tube", slits
# print "slits for ideal tube", slits
for i in range(len(slits)):
print slits[i]
# print slits[i]
ideal.append( get_ypos( IntegratedWorkspace, slits[i] )) # Use Pascal Manuel's Y conversion.

print "Ideal Tube",ideal
# print "Ideal Tube",ideal
return ideal


Expand Down Expand Up @@ -391,7 +391,7 @@ def getCalibration ( ws, tubeSet, calibTable, fitPar, iTube, PeakTestMode=False,

# Deal with (i+1)st tube specified
wht = tubeSet.getTube(i)
print "tube listed", i+1, tubeSet.getTubeName(i), " length", tubeSet.getTubeLength(i)
print "tube listed", i+1, tubeSet.getTubeName(i) #, " length", tubeSet.getTubeLength(i)
if ( len(wht) < 1 ):
print "Unable to get any workspace indices for this tube. Calibration abandoned."
return
Expand All @@ -408,7 +408,7 @@ def getCalibration ( ws, tubeSet, calibTable, fitPar, iTube, PeakTestMode=False,
else:
ht, wd = fitPar.getHeightAndWidth()
actualTube = getPeaksForNSlitsMethod ( ws, eP, ht, wd, wht )
print actualTube
# print actualTube

if( len(actualTube) == 0):
print "getPeaksForNSlitMethod failed"
Expand All @@ -421,7 +421,7 @@ def getCalibration ( ws, tubeSet, calibTable, fitPar, iTube, PeakTestMode=False,
#detIDList, detPosList = get3pointsMethodResults( ws, AP, BP, CP, wht, 2900 )
detIDList, detPosList = getCalibratedPixelPositions( ws, actualTube, idealTube, wht, PeakTestMode )

print len(wht)
#print len(wht)
if( len(detIDList) == len(wht)): # We have corrected positions
for j in range(len(wht)):
nextRow = {'Detector ID': detIDList[j], 'Detector Position': detPosList[j] }
Expand Down
7 changes: 3 additions & 4 deletions Code/Mantid/scripts/Calibration/tube_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def getComponent ( self ):
return self.component

# We look for the component
print self.specString,
#print self.specString,

comp = self.inst.getComponentByName(self.specString)

Expand Down Expand Up @@ -212,7 +212,7 @@ def getTubeByString(self, tubeIx):
"""
firstDet, numDet = self.getDetectorInfoFromTube( tubeIx )
wkIds = []
print " First dectector", firstDet," Last detector", firstDet+numDet-1, "Number of detectors", numDet
#print " First dectector", firstDet," Last detector", firstDet+numDet-1, "Number of detectors", numDet
#print "Histograms", self.ws.getNumberHistograms()

# First check we have one detector per histogram/workpsaceID/spectrum
Expand All @@ -233,8 +233,7 @@ def getTubeByString(self, tubeIx):
if (detID >= firstDet and detID < firstDet+numDet):
iPixel = detID - firstDet
wkIds = range( i - iPixel, i - iPixel + numDet)
#print detID, iPixel, i-iPixel, i-iPixel+numDet
print "Workspace indices",i-iPixel,"to",i-iPixel+numDet-1
#print "Workspace indices",i-iPixel,"to",i-iPixel+numDet-1

else: #We can't assume continuous indices within tube, must loop over all indices (there are many).
if( numDet > 0):
Expand Down

0 comments on commit 578c509

Please sign in to comment.