Family creation

I was trying to sweep a profile inside the family. I am getting an error that A sub-transaction can only be active inside an open Transaction. My code is below. Anybody can help me to identify the mistake.

import clr
import sys
sys.path.append('C:\Program Files (x86)\IronPython 2.7\Lib')
import System
from System import Array
from System.Collections.Generic import *
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager 
from RevitServices.Transactions import TransactionManager 

clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")

import Autodesk 
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB import SketchPlane
from Autodesk.Revit.UI import *
from Autodesk.Revit.ApplicationServices import Application
from Autodesk.Revit.Creation.FamilyItemFactory import NewSweep
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication 
app = uiapp.Application 
uidoc = uiapp.ActiveUIDocument

SaveAsOpt = SaveAsOptions()
SaveAsOpt.OverwriteExistingFile = True

family_template = IN[0]
save_path = IN[1]
newpath = save_path + '\\' + IN[2] + ".rfa"

#newFamily_doc = app.NewFamilyDocument(family_template)
famdoc = doc.Application.NewFamilyDocument(family_template)
m_creationFamily = famdoc.FamilyCreate
#m_creationFamily = newFamily_doc.FamilyCreate
#define profile for sweep
arrarr = CurveArrArray()
arr = CurveArray()
#Create an ovoid profile
pnt1 = XYZ(0,0,0)
pnt2 = XYZ(0.21,0,0)
pnt3 = XYZ(0.21,0.21,0)
pnt4 = XYZ(0,0.21,0)
arr.Append(Line.CreateBound(pnt1, pnt2))
arr.Append(Line.CreateBound(pnt2, pnt3))
arr.Append(Line.CreateBound(pnt3, pnt4))
arr.Append(Line.CreateBound(pnt4, pnt1))
arrarr.Append(arr)
profile = famdoc.Application.Create.NewCurveLoopsProfile(arrarr)
#Create a path for the sweep
pnt5 = XYZ(0,0,0)
pnt6 = XYZ(0,0,3)
path1 = Line.CreateBound(pnt4, pnt6)

referencearray = ReferenceArray()
referencearray.Append(path1.Reference)


#TransactionManager.Instance.EnsureInTransaction(doc)
TransactionManager.Instance.EnsureInTransaction(famdoc)
sweep = famdoc.FamilyCreate.NewSweep(True, referencearray, profile, 0, ProfilePlaneLocation.Start)
TransactionManager.Instance.TransactionTaskDone()

#newFamily_doc.SaveAs(newpath, SaveAsOpt)



OUT = referencearray


Anybody can help Please