本文整理匯總了Python中pydpiper.pipeline.Pipeline.addPipeline方法的典型用法代碼示例。如果您正苦於以下問題:Python Pipeline.addPipeline方法的具體用法?Python Pipeline.addPipeline怎麽用?Python Pipeline.addPipeline使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類pydpiper.pipeline.Pipeline
的用法示例。
在下文中一共展示了Pipeline.addPipeline方法的8個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: __init__
# 需要導入模塊: from pydpiper.pipeline import Pipeline [as 別名]
# 或者: from pydpiper.pipeline.Pipeline import addPipeline [as 別名]
class FullIterativeLSQ12Nlin:
"""Does a full iterative LSQ12 and NLIN. Basically iterative model building starting from LSQ6
and without stats at the end. Designed to be called as part of a larger application.
Specifying an initModel is optional, all other arguments are mandatory."""
def __init__(self, inputs, dirs, options, avgPrefix=None, initModel=None):
self.inputs = inputs
self.dirs = dirs
self.options = options
self.avgPrefix = avgPrefix
self.initModel = initModel
self.nlinFH = None
self.p = Pipeline()
self.buildPipeline()
def buildPipeline(self):
lsq12LikeFH = None
if self.initModel:
lsq12LikeFH = self.initModel[0]
elif self.options.lsq12_likeFile:
lsq12LikeFH = self.options.lsq12_likeFile
lsq12module = lsq12.FullLSQ12(self.inputs,
self.dirs.lsq12Dir,
likeFile=lsq12LikeFH,
maxPairs=self.options.lsq12_max_pairs,
lsq12_protocol=self.options.lsq12_protocol,
subject_matter=self.options.lsq12_subject_matter)
lsq12module.iterate()
self.p.addPipeline(lsq12module.p)
self.lsq12Params = lsq12module.lsq12Params
if lsq12module.lsq12AvgFH.getMask()== None:
if self.initModel:
lsq12module.lsq12AvgFH.setMask(self.initModel[0].getMask())
if not self.avgPrefix:
self.avgPrefix = self.options.pipeline_name
nlinModule = nlin.initializeAndRunNLIN(self.dirs.lsq12Dir,
self.inputs,
self.dirs.nlinDir,
avgPrefix=self.avgPrefix,
createAvg=False,
targetAvg=lsq12module.lsq12AvgFH,
nlin_protocol=self.options.nlin_protocol,
reg_method=self.options.reg_method)
self.p.addPipeline(nlinModule.p)
self.nlinFH = nlinModule.nlinAverages[-1]
self.nlinParams = nlinModule.nlinParams
self.initialTarget = nlinModule.initialTarget
# Now we need the full transform to go back to LSQ6 space
for i in self.inputs:
linXfm = lsq12module.lsq12AvgXfms[i]
nlinXfm = i.getLastXfm(self.nlinFH)
outXfm = st.createOutputFileName(i, nlinXfm, "transforms", "_with_additional.xfm")
xc = ma.xfmConcat([linXfm, nlinXfm], outXfm, fh.logFromFile(i.logDir, outXfm))
self.p.addStage(xc)
i.addAndSetXfmToUse(self.nlinFH, outXfm)
示例2: __init__
# 需要導入模塊: from pydpiper.pipeline import Pipeline [as 別名]
# 或者: from pydpiper.pipeline.Pipeline import addPipeline [as 別名]
class HierarchicalMinctracc:
"""Default HierarchicalMinctracc currently does:
1. 2 lsq12 stages with a blur of 0.25
2. 5 nlin stages with a blur of 0.25
3. 1 nlin stage with no blur"""
def __init__(self,
inputPipeFH,
templatePipeFH,
steps=[1,0.5,0.5,0.2,0.2,0.1],
blurs=[0.25,0.25,0.25,0.25,0.25, -1],
gradients=[False, False, True, False, True, False],
iterations=[60,60,60,10,10,4],
simplexes=[3,3,3,1.5,1.5,1],
w_translations=0.2,
linearparams = {'type' : "lsq12", 'simplex' : 1, 'step' : 1},
defaultDir="tmp"):
self.p = Pipeline()
for b in blurs:
#MF TODO: -1 case is also handled in blur. Need here for addStage.
#Fix this redundancy and/or better design?
if b != -1:
tblur = ma.blur(templatePipeFH, b, gradient=True)
iblur = ma.blur(inputPipeFH, b, gradient=True)
self.p.addStage(tblur)
self.p.addStage(iblur)
# Do standard LSQ12 alignment prior to non-linear stages
lsq12reg = lsq12.LSQ12(inputPipeFH,
templatePipeFH,
defaultDir=defaultDir)
self.p.addPipeline(lsq12reg.p)
# create the nonlinear registrations
for i in range(len(steps)):
"""For the final stage, make sure the output directory is transforms."""
if i == (len(steps) - 1):
defaultDir = "transforms"
nlinStage = ma.minctracc(inputPipeFH,
templatePipeFH,
defaultDir=defaultDir,
blur=blurs[i],
gradient=gradients[i],
iterations=iterations[i],
step=steps[i],
similarity=0.8,
w_translations=w_translations,
simplex=simplexes[i])
self.p.addStage(nlinStage)
示例3: MAGeTRegister
# 需要導入模塊: from pydpiper.pipeline import Pipeline [as 別名]
# 或者: from pydpiper.pipeline.Pipeline import addPipeline [as 別名]
def MAGeTRegister(inputFH,
templateFH,
regMethod,
name="initial",
createMask=False,
lsq12_protocol=None,
nlin_protocol=None):
p = Pipeline()
if createMask:
defaultDir="tmp"
else:
defaultDir="transforms"
if regMethod == "minctracc":
sp = HierarchicalMinctracc(inputFH,
templateFH,
lsq12_protocol=lsq12_protocol,
nlin_protocol=nlin_protocol,
defaultDir=defaultDir)
p.addPipeline(sp.p)
elif regMethod == "mincANTS":
register = LSQ12ANTSNlin(inputFH,
templateFH,
lsq12_protocol=lsq12_protocol,
nlin_protocol=nlin_protocol,
defaultDir=defaultDir)
p.addPipeline(register.p)
rp = LabelAndFileResampling(inputFH, templateFH, name=name, createMask=createMask)
p.addPipeline(rp.p)
return(p)
示例4: MAGeTMask
# 需要導入模塊: from pydpiper.pipeline import Pipeline [as 別名]
# 或者: from pydpiper.pipeline.Pipeline import addPipeline [as 別名]
def MAGeTMask(atlases, inputs, numAtlases, regMethod, lsq12_protocol=None, nlin_protocol=None):
""" Masking algorithm is as follows:
1. Run HierarchicalMinctracc or mincANTS with mask=True,
using masks instead of labels.
2. Do voxel voting to find the best mask. (Or, if single atlas,
use that transform)
3. mincMath to multiply original input by mask to get _masked.mnc file
(This is done for both atlases and inputs, though for atlases, voxel
voting is not required.)
4. Replace lastBasevol with masked version, since once we have created
mask, we no longer care about unmasked version.
5. Clear out labels arrays, which were used to keep track of masks,
as we want to re-set them for actual labels.
Note: All data will be placed in a newly created masking directory
to keep it separate from data generated during actual MAGeT.
"""
p = Pipeline()
for atlasFH in atlases:
maskDirectoryStructure(atlasFH, masking=True)
for inputFH in inputs:
maskDirectoryStructure(inputFH, masking=True)
for atlasFH in atlases:
sp = MAGeTRegister(inputFH,
atlasFH,
regMethod,
name="initial",
createMask=True,
lsq12_protocol=lsq12_protocol,
nlin_protocol=nlin_protocol)
p.addPipeline(sp)
""" Prior to final masking, set log and tmp directories as they were."""
for atlasFH in atlases:
"""Retrieve labels for use in new group. Assume only one"""
labels = atlasFH.returnLabels(True)
maskDirectoryStructure(atlasFH, masking=False)
mp = maskFiles(atlasFH, True)
p.addPipeline(mp)
atlasFH.newGroup()
atlasFH.addLabels(labels[0], inputLabel=True)
for inputFH in inputs:
maskDirectoryStructure(inputFH, masking=False)
mp = maskFiles(inputFH, False, numAtlases)
p.addPipeline(mp)
# this will remove the "inputLabels"; labels that
# come directly from the atlas library
inputFH.clearLabels(True)
# this will remove the "labels"; second generation
# labels. I.e. labels from labels from the atlas library
inputFH.clearLabels(False)
inputFH.newGroup()
return(p)
示例5: __init__
# 需要導入模塊: from pydpiper.pipeline import Pipeline [as 別名]
# 或者: from pydpiper.pipeline.Pipeline import addPipeline [as 別名]
class LSQ12ANTSNlin:
"""Class that runs a basic LSQ12 registration, followed by a single mincANTS call.
Currently used in MAGeT, registration_chain and pairwise_nlin."""
def __init__(self,
inputFH,
targetFH,
lsq12_protocol=None,
nlin_protocol=None,
subject_matter=None,
defaultDir="tmp"):
self.p = Pipeline()
self.inputFH = inputFH
self.targetFH = targetFH
self.lsq12_protocol = lsq12_protocol
self.nlin_protocol = nlin_protocol
self.subject_matter = subject_matter
self.defaultDir = defaultDir
if ((self.lsq12_protocol == None and self.subject_matter==None) or self.nlin_protocol == None):
# always base the resolution to be used on the target for the registrations
self.fileRes = rf.returnFinestResolution(self.targetFH)
else:
self.fileRes = None
self.buildPipeline()
def buildPipeline(self):
# Run lsq12 registration prior to non-linear
self.lsq12Params = mp.setLSQ12MinctraccParams(self.fileRes,
subject_matter=self.subject_matter,
reg_protocol=self.lsq12_protocol)
lsq12reg = lsq12.LSQ12(self.inputFH,
self.targetFH,
blurs=self.lsq12Params.blurs,
step=self.lsq12Params.stepSize,
gradient=self.lsq12Params.useGradient,
simplex=self.lsq12Params.simplex,
w_translations=self.lsq12Params.w_translations,
defaultDir=self.defaultDir)
self.p.addPipeline(lsq12reg.p)
#Resample using final LSQ12 transform and reset last base volume.
res = ma.mincresample(self.inputFH, self.targetFH, likeFile=self.targetFH, argArray=["-sinc"])
self.p.addStage(res)
self.inputFH.setLastBasevol(res.outputFiles[0])
lsq12xfm = self.inputFH.getLastXfm(self.targetFH)
#Get registration parameters from nlin protocol, blur and register
#Assume a SINGLE generation here.
self.nlinParams = mp.setOneGenMincANTSParams(self.fileRes, reg_protocol=self.nlin_protocol)
for b in self.nlinParams.blurs:
for j in b:
#Note that blurs for ANTS params in an array of arrays.
if j != -1:
self.p.addStage(ma.blur(self.targetFH, j, gradient=True))
self.p.addStage(ma.blur(self.inputFH, j, gradient=True))
sp = ma.mincANTS(self.inputFH,
self.targetFH,
defaultDir=self.defaultDir,
blur=self.nlinParams.blurs[0],
gradient=self.nlinParams.gradient[0],
similarity_metric=self.nlinParams.similarityMetric[0],
weight=self.nlinParams.weight[0],
iterations=self.nlinParams.iterations[0],
radius_or_histo=self.nlinParams.radiusHisto[0],
transformation_model=self.nlinParams.transformationModel[0],
regularization=self.nlinParams.regularization[0],
useMask=self.nlinParams.useMask[0])
self.p.addStage(sp)
nlinXfm = sp.outputFiles[0]
#Reset last base volume to original input for future registrations.
self.inputFH.setLastBasevol(setToOriginalInput=True)
#Concatenate transforms to get final lsq12 + nlin. Register volume handles naming and setting of lastXfm
output = self.inputFH.registerVolume(self.targetFH, "transforms")
xc = ma.xfmConcat([lsq12xfm, nlinXfm], output, fh.logFromFile(self.inputFH.logDir, output))
self.p.addStage(xc)
示例6: stats
# 需要導入模塊: from pydpiper.pipeline import Pipeline [as 別名]
# 或者: from pydpiper.pipeline.Pipeline import addPipeline [as 別名]
class LongitudinalStatsConcatAndResample:
""" For each subject:
1. Calculate stats (displacement, absolute jacobians, relative jacobians) between i and i+1 time points
2. Calculate transform from subject to common space (nlinFH) and invert it.
For most subjects this will require some amount of transform concatenation.
3. Calculate the stats (displacement, absolute jacobians, relative jacobians) from common space
to each timepoint.
"""
def __init__(self, subjects, timePoint, nlinFH, statsKernels, commonName):
self.subjects = subjects
self.timePoint = timePoint
self.nlinFH = nlinFH
self.blurs = []
self.setupBlurs(statsKernels)
self.commonName = commonName
self.p = Pipeline()
self.buildPipeline()
def setupBlurs(self, statsKernels):
if isinstance(statsKernels, list):
self.blurs = statsKernels
elif isinstance(statsKernels, str):
for i in statsKernels.split(","):
self.blurs.append(float(i))
else:
print("Improper type of blurring kernels specified for stats calculation: " + str(statsKernels))
sys.exit()
def statsCalculation(self, inputFH, targetFH, xfm=None, useChainStats=True):
"""If useChainStats=True, calculate stats between input and target.
This happens for all i to i+1 calcs.
If useChainStats=False, calculate stats in the standard way, from target to
input, We do this, when we go from the common space to all others. """
if useChainStats:
stats = st.CalcChainStats(inputFH, targetFH, self.blurs)
else:
stats = st.CalcStats(inputFH, targetFH, self.blurs)
self.p.addPipeline(stats.p)
"""If an xfm is specified, resample all to this common space"""
if xfm:
if not self.nlinFH:
likeFH = targetFH
else:
likeFH = self.nlinFH
res = resampleToCommon(xfm, inputFH, stats.statsGroup, self.blurs, likeFH)
self.p.addPipeline(res)
def statsAndConcat(self, s, i, count, beforeAvg=True):
"""Construct array to common space for this timepoint.
This builds upon arrays from previous calls."""
if beforeAvg:
xfm = s[i].getLastXfm(s[i+1])
else:
xfm = s[i].getLastXfm(s[i-1])
"""Set this transform as last xfm from input to nlin and calculate nlin to s[i] stats"""
if self.nlinFH:
self.xfmToCommon.insert(0, xfm)
""" Concat transforms to get xfmToCommon and calculate statistics
Note that inverted transform, which is what we want, is calculated in
the statistics module. """
xtc = createBaseName(s[i].transformsDir, s[i].basename + "_to_" + self.commonName + ".xfm")
xc = ma.xfmConcat(self.xfmToCommon, xtc, fh.logFromFile(s[i].logDir, xtc))
self.p.addStage(xc)
# here in order to visually inspect the alignment with the common
# time point, we should resample this subject:
inputResampledToCommon = createBaseName(s[i].resampledDir, s[i].basename + "_to_" + self.commonName + ".mnc")
logToCommon = fh.logFromFile(s[i].logDir, inputResampledToCommon)
resampleCmd = ma.mincresample(s[i],
self.nlinFH,
likeFile=self.nlinFH,
transform=xtc,
output=inputResampledToCommon,
logFile=logToCommon,
argArray=["-sinc"])
self.p.addStage(resampleCmd)
s[i].addAndSetXfmToUse(self.nlinFH, xtc)
self.statsCalculation(s[i], self.nlinFH, xfm=None, useChainStats=False)
else:
xtc=None
"""Calculate i to i+1 stats for all but final timePoint"""
if count - i > 1:
self.statsCalculation(s[i], s[i+1], xfm=xtc, useChainStats=True)
def buildPipeline(self):
for subj in self.subjects:
s = self.subjects[subj]
count = len(s)
"""Wherever iterative model building was run, the indiv --> nlin xfm is stored
in the group with the name "final". We need to use this group for to get the
transform and do the stats calculation, and then reset to the current group.
Calculate stats first from average to timepoint included in average"""
if self.timePoint == -1:
# This means that we used the last file for each of the subjects
# to create the common average. This will be a variable time
# point, so we have to determine it for each of the input files
#.........這裏部分代碼省略.........
示例7: initializeAndRunNLIN
# 需要導入模塊: from pydpiper.pipeline import Pipeline [as 別名]
# 或者: from pydpiper.pipeline.Pipeline import addPipeline [as 別名]
class initializeAndRunNLIN(object):
"""Class to setup target average (if needed),
instantiate correct version of NLIN class,
and run NLIN registration."""
def __init__(self,
targetOutputDir, #Output directory for files related to initial target (often _lsq12)
inputFiles,
nlinDir,
avgPrefix, #Prefix for nlin-1.mnc, ... nlin-k.mnc
createAvg=True, #True=call mincAvg, False=targetAvg already exists
targetAvg=None, #Optional path to initial target - passing name does not guarantee existence
targetMask=None, #Optional path to mask for initial target
nlin_protocol=None,
reg_method=None):
self.p = Pipeline()
self.targetOutputDir = targetOutputDir
self.inputFiles = inputFiles
self.nlinDir = nlinDir
self.avgPrefix = avgPrefix
self.createAvg = createAvg
self.targetAvg = targetAvg
self.targetMask = targetMask
self.nlin_protocol = nlin_protocol
self.reg_method = reg_method
# setup initialTarget (if needed) and initialize non-linear module
self.setupTarget()
self.initNlinModule()
#iterate through non-linear registration and setup averages
self.nlinModule.iterate()
self.p.addPipeline(self.nlinModule.p)
self.nlinAverages = self.nlinModule.nlinAverages
self.nlinParams = self.nlinModule.nlinParams
def setupTarget(self):
if self.targetAvg:
if isinstance(self.targetAvg, str):
self.initialTarget = RegistrationPipeFH(self.targetAvg,
mask=self.targetMask,
basedir=self.targetOutputDir)
self.outputAvg = self.targetAvg
elif isinstance(self.targetAvg, RegistrationPipeFH):
self.initialTarget = self.targetAvg
self.outputAvg = self.targetAvg.getLastBasevol()
if not self.initialTarget.getMask():
if self.targetMask:
self.initialTarget.setMask(self.targetMask)
else:
print "You have passed a target average that is neither a string nor a file handler: " + str(self.targetAvg)
print "Exiting..."
else:
self.targetAvg = abspath(self.targetOutputDir) + "/" + "initial-target.mnc"
self.initialTarget = RegistrationPipeFH(self.targetAvg,
mask=self.targetMask,
basedir=self.targetOutputDir)
self.outputAvg = self.targetAvg
if self.createAvg:
avg = mincAverage(self.inputFiles,
self.initialTarget,
output=self.outputAvg,
defaultDir=self.targetOutputDir)
self.p.addStage(avg)
def initNlinModule(self):
if self.reg_method=="mincANTS":
self.nlinModule = NLINANTS(self.inputFiles, self.initialTarget, self.nlinDir, self.avgPrefix, self.nlin_protocol)
elif self.reg_method=="minctracc":
self.nlinModule = NLINminctracc(self.inputFiles, self.initialTarget, self.nlinDir, self.avgPrefix, self.nlin_protocol)
else:
logger.error("Incorrect registration method specified: " + self.reg_method)
sys.exit()
示例8: FullLSQ12
# 需要導入模塊: from pydpiper.pipeline import Pipeline [as 別名]
# 或者: from pydpiper.pipeline.Pipeline import addPipeline [as 別名]
#.........這裏部分代碼省略.........
self.simplex = []
"""Parse through rows and assign appropriate values to each parameter array.
Everything is read in as strings, but in some cases, must be converted to
floats, booleans or gradients.
"""
for p in params:
if p[0]=="blur":
"""Blurs must be converted to floats."""
for i in range(1,len(p)):
self.blurs.append(float(p[i]))
elif p[0]=="step":
"""Steps are strings but must be converted to a float."""
for i in range(1,len(p)):
self.stepSize.append(float(p[i]))
elif p[0]=="gradient":
"""Gradients must be converted to bools."""
for i in range(1,len(p)):
if p[i]=="True" or p[i]=="TRUE":
self.useGradient.append(True)
elif p[i]=="False" or p[i]=="FALSE":
self.useGradient.append(False)
elif p[0]=="simplex":
"""Simplex must be converted to an int."""
for i in range(1,len(p)):
self.simplex.append(int(p[i]))
else:
print "Improper parameter specified for minctracc protocol: " + str(p[0])
print "Exiting..."
sys.exit()
def getGenerations(self):
arrayLength = len(self.blurs)
errorMsg = "Array lengths in lsq12 minctracc protocol do not match."
if (len(self.stepSize) != arrayLength
or len(self.useGradient) != arrayLength
or len(self.simplex) != arrayLength):
print errorMsg
raise
else:
return arrayLength
def iterate(self):
if not self.maxPairs:
xfmsToAvg = {}
lsq12ResampledFiles = {}
for inputFH in self.inputs:
"""Create an array of xfms, to compute an average lsq12 xfm for each input"""
xfmsToAvg[inputFH] = []
for targetFH in self.inputs:
if inputFH != targetFH:
lsq12 = LSQ12(inputFH,
targetFH,
self.blurs,
self.stepSize,
self.useGradient,
self.simplex)
self.p.addPipeline(lsq12.p)
xfmsToAvg[inputFH].append(inputFH.getLastXfm(targetFH))
"""Create average xfm for inputFH using xfmsToAvg array"""
cmd = ["xfmavg"]
for i in range(len(xfmsToAvg[inputFH])):
cmd.append(InputFile(xfmsToAvg[inputFH][i]))
avgXfmOutput = createBaseName(inputFH.transformsDir, inputFH.basename + "-avg-lsq12.xfm")
cmd.append(OutputFile(avgXfmOutput))
xfmavg = CmdStage(cmd)
xfmavg.setLogFile(LogFile(logFromFile(inputFH.logDir, avgXfmOutput)))
self.p.addStage(xfmavg)
self.lsq12AvgXfms[inputFH] = avgXfmOutput
""" resample brain and add to array for mincAveraging"""
if not self.likeFile:
likeFile=inputFH
else:
likeFile=self.likeFile
rslOutput = createBaseName(inputFH.resampledDir, inputFH.basename + "-resampled-lsq12.mnc")
res = ma.mincresample(inputFH,
inputFH,
transform=avgXfmOutput,
likeFile=likeFile,
output=rslOutput,
argArray=["-sinc"])
self.p.addStage(res)
lsq12ResampledFiles[inputFH] = rslOutput
""" After all registrations complete, setLastBasevol for each subject to be
resampled file in lsq12 space. We can then call mincAverage on fileHandlers,
as it will use the lastBasevol for each by default."""
for inputFH in self.inputs:
inputFH.setLastBasevol(lsq12ResampledFiles[inputFH])
""" mincAverage all resampled brains and put in lsq12Directory"""
self.lsq12Avg = abspath(self.lsq12Dir) + "/" + basename(self.lsq12Dir) + "-pairs.mnc"
self.lsq12AvgFH = RegistrationPipeFH(self.lsq12Avg, basedir=self.lsq12Dir)
avg = ma.mincAverage(self.inputs,
self.lsq12AvgFH,
output=self.lsq12Avg,
defaultDir=self.lsq12Dir)
self.p.addStage(avg)
else:
print "Registration using a specified number of max pairs not yet working. Check back soon!"
sys.exit()