def PMakeMaster(template, size, SumWtImage, SumWt2, err): """ Create a pair of images to accumulation of partial products Create an image to contain the Sum of the input Images times the weights, and another for the sum of the weights squared. The descriptive material is from image template * template = Image with position etc, to be copied * size = output image size in pixels, e.g. [200,200] * SumWtImage = First output image, must be defined (i.e. files named) but not fully created. * SumWt2 = Second output image, like SumWtImage * err = Python Obit Error/message stack """ ################################################################ # Checks if not Image.PIsA(template): print "Actually ",template.__class__ raise TypeError,"template MUST be a Python Obit Image" if not Image.PIsA(SumWtImage): print "Actually ",SumWtImage.__class__ raise TypeError,"SumWtImage MUST be a Python Obit Image" if not Image.PIsA(SumWt2): print "Actually ",SumWt2.__class__ raise TypeError,"SumWt2 MUST be a Python Obit Image" if not OErr.OErrIsA(err): raise TypeError,"err MUST be an OErr" # # Get image info from template Image.POpen (template, 1, err) Image.PRead (template, err) desc = Image.PGetDesc(template) descDict = ImageDesc.PGetDict(desc) # Python dict object listDict = template.Desc.List.Dict Image.PClose (template, err) #OErr.printErrMsg(err, "Error reading input image "+Image.PGetName(template)) # # Create zero filled array for data outArray = FArray.FArray("Initial array", size) # # Modify the descriptor for output. naxis = size[0:3] # Update reference pixel, pixel shift an integral number dim = descDict["inaxes"] pixOff = [naxis[0]/2-dim[0]/2, naxis[1]/2-dim[1]/2] crpix = descDict["crpix"] crpix[0] = crpix[0] + pixOff[0] crpix[1] = crpix[1] + pixOff[1] # Update size dim[0] = naxis[0]; dim[1] = naxis[1] #print "debug dim",dim descDict["inaxes"] = dim descDict["bitpix"] = -32 # output floating # # Do SumWtImage desc = Image.PGetDesc(SumWtImage) InfoList.PSetDict(desc.List, listDict) # Copy list stuff ImageDesc.PSetDict(desc, descDict) # set output descriptor # Write output image Image.POpen(SumWtImage, 2, err) nplane = template.Desc.Dict["inaxes"][2] for iplane in range(1,(nplane+1)): plane = [iplane,1,1,1,1] SumWtImage.PutPlane(outArray, plane, err) Image.PClose(SumWtImage, err) #OErr.printErrMsg(err, "Error writing image for "+Image.PGetName(SumWtImage)) # # Do SumWt2Image desc = Image.PGetDesc(SumWt2) InfoList.PSetDict(desc.List, listDict) # Copy list stuff ImageDesc.PSetDict(desc, descDict) # set output descriptor # Write output image Image.POpen(SumWt2, 2, err) for iplane in range(1,(nplane+1)): plane = [iplane,1,1,1,1] SumWt2.PutPlane(outArray, plane, err) Image.PClose(SumWt2, err) #OErr.printErrMsg(err, "Error writing image for "+Image.PGetName(SumWt2)) # Write history - sorta inHistory = History.History("history", template.List, err) outHistory = History.History("history", SumWtImage.List, err) # Copy History History.PCopy(inHistory, outHistory, err) outHistory.Open(History.READWRITE, err) outHistory.TimeStamp(" Start Obit PMakeMaster",err) outHistory.Close(err)
outDisk = 1 equinox = 2000.0 # Debug print "input",inFile # Convert file into Images inImage = Image.newPImage(inFile, inFile, inDisk, 1, err) OErr.printErrMsg(err, "Error initializing image") # Open/get descriptor Image.POpen(inImage, 3, err) desc = Image.PGetDesc(inImage) # update descriptor descDict = ImageDesc.PGetDict(desc) # Get descriptor as Python Dict descDict["epoch"] = equinox # Update "epoch" descDict["equinox"] = equinox # Update equinox descDict["origin"] = "Obit to fix equinox" # Update origin ImageDesc.PSetDict(desc, descDict) # update descriptor Image.PClose(inImage, err) # Close to update disk OErr.printErrMsg(err, "Error writing updated header for "+Image.PGetName(inImage)) # Say something print "Updated Equinox (EPOCH) in",inFile,"to",equinox # Shutdown Obit OErr.printErr(err) del ObitSys