export const MODEL_VERSION='1.0.0',DEFAULTS=Object.freeze({polarity:1,current_mA:3,field_T:.3,sensitivity:100,common_mV:.5,currentOdd_mV:.3,fieldOdd_mV:.2,sameParity_mV:0}); const signs=[[1,1],[-1,1],[-1,-1],[1,-1]]; export function validateParameters(p){if(![1,2,3,4].includes(p.polarity))throw new RangeError('极性');for(const[k,a,b]of[['current_mA',.1,5],['field_T',0,1],['sensitivity',10,200],['common_mV',-5,5],['currentOdd_mV',-5,5],['fieldOdd_mV',-5,5],['sameParity_mV',-5,5]])if(!Number.isFinite(p[k])||p[k]b)throw new RangeError(k);return{...p};} export function project(v){if(v.length!==4||v.some(x=>!Number.isFinite(x)))throw new RangeError('four finite voltages');const[a,b,c,d]=v;return{hall:(a-b+c-d)/4,common:(a+b+c+d)/4,currentOdd:(a+b-c-d)/4,fieldOdd:(a-b-c+d)/4};} export function response(p){validateParameters(p);const trueHall_mV=p.sensitivity*p.current_mA*p.field_T,[Bsign,Isign]=signs[p.polarity-1],raw=signs.map(([B,I])=>B*I*(trueHall_mV+p.sameParity_mV)+p.common_mV+I*p.currentOdd_mV+B*p.fieldOdd_mV),proj=project(raw);return{polarity:p.polarity,Bsign,Isign,rawVoltage_mV:raw[p.polarity-1],trueHall_mV,projectedHall_mV:proj.hall,projectedCommon_mV:proj.common,projectedCurrentOdd_mV:proj.currentOdd,projectedFieldOdd_mV:proj.fieldOdd};} export function plots(p){const all=[1,2,3,4].map(polarity=>response({...p,polarity})),r=response(p);return[{caption:'四极性原始电压与当前换向状态',xLabel:'极性序号(见选择器)',yLabel:'原始电压 / mV',curves:[{points:all.map((r,i)=>[i+1,r.rawVoltage_mV]),markers:true}],selected:[p.polarity,r.rawVoltage_mV]},{caption:'完整四极性电压的奇偶投影',xLabel:'分量 1霍尔 2共模 3电流奇 4磁场奇',yLabel:'投影电压 / mV',curves:[{points:[r.projectedHall_mV,r.projectedCommon_mV,r.projectedCurrentOdd_mV,r.projectedFieldOdd_mV].map((v,i)=>[i+1,v]),markers:true}]}];} export function analyzeRecords(rows,p){const keys=Object.keys(DEFAULTS).filter(k=>k!=='polarity'),s=rows.filter(r=>keys.every(k=>r.parameters[k]===p[k])),selected=[1,2,3,4].map(n=>s.filter(r=>r.parameters.polarity===n).at(-1));if(selected.some(r=>!r))return'保持幅值和副项不变,依次换向并记录全部四种极性后反演。';const c=project(selected.map(r=>r.readings.rawVoltage_mV));return'实录四次投影:霍尔奇偶项 '+c.hall.toFixed(7)+' mV,共模 '+c.common.toFixed(7)+' mV,电流奇 '+c.currentOdd.toFixed(7)+' mV,磁场奇 '+c.fieldOdd.toFixed(7)+' mV;同奇偶副项仍包含在第一项。';}