|
tuple | pRow = n.min( og, axis = 0 ) |
| og = self.results["modelAbsoluteOrderPositions"][:,1:56] provides the positions of the "highest point" of the order
|
|
list | cop = self.results[ "crossOrderProfile" ] |
| we should read the 50 = centeredIdx from the model (it is saved in the cop fits file)
|
|
list | sizeCop = cop.shape[ 0 ] |
|
list | ccop = self.results[ "centerCrossOrderProfile" ] |
|
int | nSum = self.bluest-self.reddest+1 |
|
tuple | posx = n.zeros( [ nSum ], int ) |
|
tuple | posy = n.zeros( [ nSum ], float ) |
|
| l = u-self.reddest |
|
tuple | er = n.where( og [ : , l ] == pRow [ l ], 1, 0 ) |
|
tuple | cops = n.zeros( [ nSum, sizeCop ], float ) |
|
tuple | xS = n.zeros( [ nSum, sizeCop ], float ) |
|
tuple | xC = n.zeros( ( ( nSum - 1 ) * sizeCop ), float ) |
|
tuple | yC = n.zeros( ( ( nSum - 1 ) * sizeCop ), float ) |
|
tuple | sumT = n.sum( cops [ k, : ], axis = 0 ) |
|
tuple | frac = ( 0.49 - posy [ k ] % 1.0) |
|
tuple | surf = n.sum( cops [ k, : ] ) |
|
int | zC = yC+xC*10000 |
|
tuple | xCS = n.sort( xC ) |
|
tuple | yCS = n.sort( zC ) |
|
tuple | icCOP = self.getCenter( xCS, yCS ) |
|
| hWiCore = self.halfWidthOfTheCore |
|
| ov = self.overLap |
|
list | coreCOPx = [] |
|
list | coreCOPy = [] |
|
list | leftCOPx = [] |
|
list | leftCOPy = [] |
|
list | rightCOPx = [] |
|
list | rightCOPy = [] |
|
list | fLeftCOPx = [] |
|
list | fLeftCOPy = [] |
|
list | fRightCOPx = [] |
|
list | fRightCOPy = [] |
|
tuple | yT = self.mountProfile( xfl, yfl, xl, yl, xco, yco, xr, yr, xfr, yfr, xCS, yCS ) |
|
tuple | xTmp = n.zeros( [ xCS.shape [ 0 ] + 1 ], float ) |
|
tuple | yTmp = n.zeros( [ xCS.shape [ 0 ] + 1 ], float ) |
|
| xCS = xTmp |
|
| yT = yTmp |
|
| devC = ccop-icCOP |
|
| residuals = yT-yCS |
|
tuple | maxCOP = n.max( ycF ) |
|
tuple | fig = plt.figure( ) |
|
| doGraphics = True |
|
tuple | ax1 = fig.add_subplot( 411 ) |
|
tuple | ax2 = fig.add_subplot( 412 ) |
|
tuple | ax3 = fig.add_subplot( 413 ) |
|
tuple | ax4 = fig.add_subplot( 414 ) |
|
list | date = self.results[ "inputImageHeader" ] |
| please add a date as title
|
|
int | centeredIdx = 0 |
|
int | kl = 0 |
|
tuple | xx = n.arange( sizeCop ) |
|
tuple | newCop = zeros( ( 100, sizeCop ), float ) |
|
tuple | yy = self.discretization( xcF, ycF, xx, shift, s1 = s2, k1 = k2 ) |
|
| centeredIdx = kl |
|
list | obsd = imHead[ "DATE-OBS" ] |
|
tuple | date = ( ( obsd.split ( "T" ) ) [ 0 ] ) |
|
tuple | idx = inputFile.split( "_" ) |
|
tuple | slits = n.array( ( og.shape [ 1 ] ) * [ int ( n.rint ( slitW ) + 1 ) ] ) |
|
PURPOSE :
Generate, on the fly, the cross order profile using the FF.
COMMENTS :
This procedure is not iterative. It starts from an a priori knowledge of the order positions.
These positions are computed using the model coefficients found in the header of the order
position template in the model. In a second step the COP is measured and smoothed.
The COP is therefore divided in 3 regions: core, wings and far-wings. Each of these regions
are modeled in a somewhat different way. The size of these regions depends on the observing mode
(HRF/LRF). Once the COP is generated, the reduction may proceed to the extraction.
SYNTAX :
INPUT CONSTANTS FROM INSTRUMENT MODEL :
Order position template: we need the coefficients of the bivariate polynomial used to represent
the position of the order centers.
COP: The COP in the model is assumed to be the one used to measure the order positions during the
night used as reference in the model. We use this profile to generate an instrument warning.
INPUT DATA FROM RESULTDICT :
OPTIONS READ FROM OPTIONDICT :
MANDATORY :
OPTIONAL :
OUTPUT WRITTEN TO THE RESULTDICT:
Are always written :
path2mslit - Slit widths derived from the new COP. These widths are also saved in the file
XXXXXXXX_HRF_FF_mslit.fits and after verification can be used to make a new model.
crossOrderProfile - Updated cross order profile. Is also saved in the file
XXXXXXXX_HRF_FF_COP.fits. After verification (you can check f.e. the corresponding png file)
this file can also be used to create a new model.
When success condition is not met :
SUCCESS CONDITIONS :
def hermes.pipeline.components.generatecop.generateCop.locateOrdersOnRow |
( |
|
self, |
|
|
|
apOrdPos, |
|
|
|
imageLine, |
|
|
|
cop, |
|
|
|
ccop |
|
) |
| |
a first estimate of the order positions is used to locate the orders more accurately.
Input: apOrdPos, the approximate order position (generally we assume that the approximate order position is the order position on the previous row. In that case, we just need to put (or to locate) the order positions of the first row (here we take the middle row where more signal is available. row, is the CCD row we are studying, cop, is the cross order profile, ccop, is the center of the cop.