@@ -2255,14 +2255,14 @@ static Function PSX_UpdateAverageTraces(string win, WAVE/T eventIndexFromTraces,
22552255
22562256 variable i , idx, numEvents, eventState, start, stop
22572257 variable acceptIndex, rejectIndex, undetIndex, extractStartAbs, extractStopAbs, fitStartAbs
2258- string extAllGraph, name
2258+ string extAllGraph, name, path
22592259
22602260 extAllGraph = PSX_GetAllEventGraph ( win)
22612261
22622262 numEvents = DimSize ( eventIndexFromTraces, ROWS)
22632263
22642264 Make / WAVE /FREE/ N= ( numEvents) contAverageAll, contAverageAccept, contAverageReject, contAverageUndet
2265- Make / FREE/ D/ N= ( numEvents) eventStopTime , eventPeakTime
2265+ Make / FREE/ D/ N= ( numEvents) eventOnsetTime , eventPeakTime, eventStopTime , eventKernelAmp
22662266
22672267 for ( i = 0; i < numEvents; i += 1 )
22682268 idx = str2num ( eventIndexFromTraces[ i ])
@@ -2285,8 +2285,12 @@ static Function PSX_UpdateAverageTraces(string win, WAVE/T eventIndexFromTraces,
22852285 // single event waves are zeroed in x-direction to extractStartAbs
22862286 [ extractStartAbs, extractStopAbs] = PSX_GetSingleEventRange ( psxEvent, sweepDataOffFilt, idx)
22872287 eventStopTime[ acceptIndex] = extractStopAbs - extractStartAbs
2288+ eventOnsetTime[ acceptIndex] = psxEvent[ idx][ %$ "Onset Time" ] - extractStartAbs
22882289 eventPeakTime[ acceptIndex] = psxEvent[ idx][ % peak_t] - extractStartAbs
22892290
2291+ path = SF_META_USER_GROUP + PSX_JWN_PARAMETERS + "/" + SF_OP_PSX_KERNEL
2292+ eventKernelAmp[ acceptIndex] = JWN_GetNumberFromWaveNote ( psxEvent, path + "/amp" )
2293+
22902294 acceptIndex += 1
22912295 break
22922296 case PSX_REJECT:
@@ -2311,8 +2315,8 @@ static Function PSX_UpdateAverageTraces(string win, WAVE/T eventIndexFromTraces,
23112315 PSX_UpdateAverageWave ( contAverageUndet, undetIndex, averageDFR, PSX_UNDET)
23122316 PSX_UpdateAverageWave ( contAverageAll, numEvents, averageDFR, PSX_ALL)
23132317
2314- Redimension / N= ( acceptIndex) eventStopTime
2315- PSX_FitAcceptAverage ( win, averageDFR, eventPeakTime, eventStopTime)
2318+ Redimension / N= ( acceptIndex) eventOnsetTime , eventPeakTime , eventStopTime, eventKernelAmp
2319+ PSX_FitAcceptAverage ( win, averageDFR, eventOnsetTime , eventPeakTime, eventStopTime, eventKernelAmp )
23162320End
23172321
23182322/// @brief Helper function to update the average waves for the all event graph
@@ -2336,10 +2340,11 @@ static Function/DF PSX_GetAverageFolder(string win)
23362340 endif
23372341End
23382342
2339- static Function PSX_FitAcceptAverage ( string win, DFREF averageDFR, WAVE eventPeakTime, WAVE eventStopTime)
2343+ static Function PSX_FitAcceptAverage ( string win, DFREF averageDFR, WAVE eventOnsetTime, WAVE eventPeakTime, WAVE eventStopTime, WAVE eventKernelAmp )
23402344
23412345 string specialEventPanel, str, htmlStr, rawCode, browser, msg, fitFunc
2342- variable err, numAveragePoints, start, stop, meanStopTime, meanPeakTime
2346+ variable err, numAveragePoints, start, stop, meanStopTime, meanOnsetTime, meanPeakTime, meanKernelAmp
2347+ variable xStart, xEnd, yStart, yEnd, lowerThreshold, upperThreshold
23432348
23442349 WAVE acceptedAverageFit = GetPSXAcceptedAverageFitWaveFromDFR ( averageDFR)
23452350
@@ -2364,22 +2369,39 @@ static Function PSX_FitAcceptAverage(string win, DFREF averageDFR, WAVE eventPea
23642369 FastOp acceptedAverageFit = ( NaN )
23652370 CopyScales average, acceptedAverageFit
23662371
2372+ WAVE /Z eventOnsetTimeClean = ZapNaNs ( eventOnsetTime)
2373+ if ( WaveExists ( eventOnsetTimeClean))
2374+ meanOnsetTime = mean ( eventOnsetTimeClean)
2375+ else
2376+ meanOnsetTime = Inf
2377+ endif
2378+
23672379 WAVE /Z eventStopTimeClean = ZapNaNs ( eventStopTime)
23682380 if ( WaveExists ( eventStopTimeClean))
23692381 meanStopTime = mean ( eventStopTimeClean)
23702382 else
23712383 meanStopTime = Inf
23722384 endif
23732385
2386+ WAVE /Z eventKernelAmpClean = ZapNaNs ( eventKernelAmp)
2387+ ASSERT ( WaveExists ( eventKernelAmpClean) , "Could not find any events with finite kernelAmp" )
2388+ meanKernelAmp = mean ( eventKernelAmpClean)
2389+
23742390 WAVE /Z eventPeakTimeClean = ZapNaNs ( eventPeakTime)
2375- if ( WaveExists ( eventPeakTimeClean))
2376- meanPeakTime = mean ( eventPeakTime)
2377- else
2378- ASSERT ( 0, "Could not find any events with finite peak_t" )
2379- endif
2391+ ASSERT ( WaveExists ( eventPeakTimeClean) , "Could not find any events with finite peak_t" )
2392+ meanPeakTime = mean ( eventPeakTime)
2393+
2394+ xStart = max ( IndexToScale ( average, 0, ROWS) , meanOnsetTime)
2395+ xEnd = min ( IndexToScale ( average, DimSize ( average, ROWS) - 1, ROWS) , meanPeakTime)
2396+ ASSERT ( xStart < xEnd, "xStart must be smaller than xEnd" )
2397+ yStart = average ( xStart)
2398+ yEnd = average ( xEnd)
2399+
2400+ lowerThreshold = GetSetVariable ( specialEventPanel, "setvar_fit_start_amplitude" ) * PERCENT_TO_ONE
2401+ upperThreshold = 0.80
23802402
2381- start = 0.1 * meanPeakTime
2382- stop = min ( IndexToScale ( average, DimSize ( average, ROWS) - 1, ROWS) , meanStopTime)
2403+ [ start, err ] = PSX_CalculateRiseTime ( average , xStart , xEnd , yStart , yEnd , lowerThreshold , upperThreshold , meanKernelAmp )
2404+ stop = min ( IndexToScale ( average, DimSize ( average, ROWS) - 1, ROWS) , meanStopTime)
23832405
23842406 AssertOnAndClearRTError ()
23852407 fitFunc = GetPopupMenuString ( specialEventPanel, "popupmenu_accept_fit_function" )
0 commit comments