Clear[profile,completeProfile];​​profile[ω_,{ω0_,aw_,as_,D_,LC_,ΔC_,reνHC_,imνHC_},lnumber_]:=Module{ωD,reνH,imνH,fSDVPstar,SDVPstar1,SDVPstar2,result},​​ωD=
D
2
Log[2]
;​​fSDVPstar[y_,ω1_,{ω01_,aw1_,as1_,D1_,LC1_,ΔC1_,reνHC1_,imνHC1_},lnumber1_]:=Module{Bw,Bs,ωD1,pressure1,ω0R,u,L,Δ,reνH1,imνH1,d,Γ,z,g,func1,func2},​​Bw=1+aw1*
2
y
-
3
2
;​​Bs=1+as1*
2
y
-
3
2
;​​ωD1=
D1
2
Log[2]
;​​pressure1=p[ω1];​​ω0R=unperturbedFrequency[ω1,ω01,shift];​​u=
ω1-ω0R
ωD1
;​​If[lnumber12,(L=LC1*pressure1;Δ=ΔC1*pressure1;reνH1=reνHC1*pressure1;imνH1=imνHC1*pressure1),(L=LC1;Δ=ΔC1;reνH1=reνHC1;imνH1=imνHC1)];​​​​d=
Δ
ωD1
;​​Γ=
L
2
;​​z=
reνH1+imνH1I
ωD1
;​​g=
Γ
ωD1
;​​func1=
2
3
2
π
-
2
y

*y*ArcTan
u-d*Bs+y
(g*Bw)+z
+

2
*Log1+
2
u-d*Bs+y
(g*Bw)+z
;​​func2=π*z*func1;​​Return[{func1,func2}];​​;​​SDVPstar1=NIntegrate[fSDVPstar[y,ω,{ω0,aw,as,D,LC,ΔC,reνHC,imνHC},lnumber][[1]],{y,-7,7},MaxRecursion->20,Method->{Automatic,"SymbolicProcessing"->0}];​​SDVPstar2=NIntegrate[fSDVPstar[y,ω,{ω0,aw,as,D,LC,ΔC,reνHC,imνHC},lnumber][[2]],{y,-7,7},MaxRecursion->20,Method->{Automatic,"SymbolicProcessing"->0}];​​result=
1
ωD
*Divide[SDVPstar1,(1-SDVPstar2)];​​Return[result];​​​​completeProfile[ω_,lineparams_,areaparams_,BGparams_,etalonParams_]:=Module[{dummy1,check,dummy2,dummy3},​​dummy1=Sum[(profile[ω,lineparams[[lineno]],lineno]*areaFunc[ω,areaparams,lineno]),{lineno,1,noOfLines}];​​check[x_,chiku_]:=If[x<crossoverFrequency,Re[chiku],((2.99792458*
10
10
*mulFactor)/(4*π*1.))*Im[chiku]];​​dummy2=check[ω,dummy1]+background[ω,BGparams]+etalon[ω,etalonParams];​​Return[dummy2];​​]
Clear[myfit]​​AbsoluteTiming[​​myfit=NonlinearModelFit[completeSortedData,completeProfile[ω,paramstobefitted,Areaparamstobefitted,BGparamstobefitted,etalonParamstobefitted],guessValue,ω,WorkingPrecision6,Method->"LevenbergMarquardt",MaxIterations5000,StepMonitor​​Print[paramstobefitted,Areaparamstobefitted,etalonParamstobefitted,BGparamstobefitted]]​​]