annotate Allan.c @ 11:773ed756067e

New build
author Daniele Nicolodi <daniele.nicolodi@obspm.fr>
date Wed, 04 Jul 2012 15:03:28 +0200
parents d9aae7d7f2c6
children 0e9f95525a8f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
1 #include <ansi_c.h>
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
2 #include <userint.h>
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
3
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
4 #include "YLCStuff.h"
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
5
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
6 #include "FXAllan.h" // Auto generated panel definitions and protypes
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
7 #include "Allan.h" // My own .h file, containing prototypes and definitions for the class Allan...
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
8
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
9
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
10
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
11 // ******************* Member functions : constructor and destructor *************************
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
12
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
13 int Allan_InitPanel(Allan_Data * Instance, char * title, double Normalizer, void (*OnCloseFunc)(int)) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
14
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
15 int i ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
16
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
17 if ((Instance->AllanPanel = LoadPanel (0, "FXAllan.uir", ALLANPANEL)) < 0)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
18 return -1;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
19 SetPanelAttribute(Instance->AllanPanel, ATTR_TITLE, title) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
20 SetPanelAttribute (Instance->AllanPanel, ATTR_CALLBACK_DATA, (void *)Instance); // the panel callback therefore knows which data structure it is associated to
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
21 Instance->OnClosePanel = OnCloseFunc ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
22 for (i=0 ; i<ALLAN_MAXPOINTSNUMBER ; i++) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
23 Instance->AllanVar[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
24 Instance->LastMean[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
25 Instance->BlocksNumber[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
26 Instance->CurrentAverage[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
27 Instance->NbCurrentAverage[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
28 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
29 Instance->Drift = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
30 DisplayPanel (Instance->AllanPanel);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
31 SetCtrlVal(Instance->AllanPanel, ALLANPANEL_NORMALIZER, Normalizer) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
32 return 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
33 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
34
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
35
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
36
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
37 int Allan_ClosePanel(Allan_Data * Instance) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
38 Instance->OnClosePanel(Instance->AllanPanel) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
39 DiscardPanel (Instance->AllanPanel);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
40 return 0;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
41 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
42
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
43
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
44
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
45 // ******************** Member functions, callbacks (private) *******************************
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
46
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
47
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
48 int CVICALLBACK Allan_CB_Reset(int panel, int control, int event,
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
49 void *callbackData, int eventData1, int eventData2)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
50 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
51 int i ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
52 Allan_Data * Instance = NULL;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
53
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
54 switch(event) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
55
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
56 case EVENT_COMMIT:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
57 GetPanelAttribute (panel, ATTR_CALLBACK_DATA, &Instance);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
58 Allan_Reset(Instance) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
59 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
60
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
61 case EVENT_RIGHT_CLICK:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
62
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
63 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
64 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
65
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
66 return 0;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
67 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
68
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
69 int CVICALLBACK Allan_CB_ChangeMax (int panel, int control, int event,
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
70 void *callbackData, int eventData1, int eventData2)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
71 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
72 int YMin, YMax ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
73
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
74 switch (event)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
75 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
76 case EVENT_COMMIT:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
77 GetCtrlVal(panel, ALLANPANEL_MIN, &YMin) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
78 GetCtrlVal(panel, ALLANPANEL_MAX, &YMax) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
79 if (YMin<YMax) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
80 SetAxisScalingMode(panel, ALLANPANEL_ALLANPLOT, VAL_LEFT_YAXIS, VAL_MANUAL, pow(10,(double)YMin), pow(10,(double)YMax) ) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
81 SetCtrlVal(panel, ALLANPANEL_CHECKBOX_AUTOSCALE, FALSE) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
82 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
83 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
84
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
85 case EVENT_RIGHT_CLICK:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
86
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
87 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
88 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
89 return 0;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
90 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
91
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
92 int CVICALLBACK Allan_CB_ChangeMin (int panel, int control, int event,
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
93 void *callbackData, int eventData1, int eventData2)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
94 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
95 int YMin, YMax ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
96
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
97 switch (event)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
98 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
99 case EVENT_COMMIT:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
100 GetCtrlVal(panel, ALLANPANEL_MIN, &YMin) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
101 GetCtrlVal(panel, ALLANPANEL_MAX, &YMax) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
102 if (YMin<YMax ) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
103 SetAxisScalingMode(panel, ALLANPANEL_ALLANPLOT, VAL_LEFT_YAXIS, VAL_MANUAL, pow(10,(double)YMin), pow(10,(double)YMax) ) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
104 SetCtrlVal(panel, ALLANPANEL_CHECKBOX_AUTOSCALE, FALSE) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
105 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
106 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
107
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
108 case EVENT_RIGHT_CLICK:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
109
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
110 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
111 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
112 return 0;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
113 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
114
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
115
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
116 int CVICALLBACK Allan_CB_ChangeAutoScale (int panel, int control, int event,
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
117 void *callbackData, int eventData1, int eventData2)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
118 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
119 return 0;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
120 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
121
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
122
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
123 int CVICALLBACK Allan_CB_ChangeNormalizer (int panel, int control, int event,
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
124 void *callbackData, int eventData1, int eventData2)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
125 { /*
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
126 bool AutoScale = FALSE;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
127 int NotCare = 20000000 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
128 double YMin = 10000000 , YMax = 64000000 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
129
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
130 switch (event)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
131 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
132 case EVENT_COMMIT:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
133 GetCtrlVal(panel, ALLANPANEL_CHECKBOX_AUTOSCALE, &AutoScale) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
134 if (AutoScale) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
135 SetAxisScalingMode(panel, ALLANPANEL_ALLANPLOT, VAL_LEFT_YAXIS, VAL_AUTOSCALE, YMin, YMax) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
136 GetAxisScalingMode(panel, ALLANPANEL_ALLANPLOT,VAL_LEFT_YAXIS, &NotCare, &YMin, &YMax ) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
137 SetCtrlVal(panel, ALLANPANEL_MIN, YMin);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
138 SetCtrlVal(panel, ALLANPANEL_MAX, YMax);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
139 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
140 else {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
141 GetCtrlVal(panel, ALLANPANEL_MIN, &YMin);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
142 GetCtrlVal(panel, ALLANPANEL_MAX, &YMax);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
143 SetAxisScalingMode(panel, ALLANPANEL_ALLANPLOT, VAL_LEFT_YAXIS, VAL_MANUAL, YMin, YMax) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
144 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
145 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
146 case EVENT_RIGHT_CLICK:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
147
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
148 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
149 } */
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
150 return 0;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
151 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
152
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
153
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
154
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
155 // ******************** Member functions, public *****************************************
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
156
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
157 int Allan_Reset(Allan_Data * Instance) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
158
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
159 int i ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
160
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
161 for (i=0 ; i<ALLAN_MAXPOINTSNUMBER ; i++) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
162 Instance->AllanVar[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
163 Instance->LastMean[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
164 Instance->BlocksNumber[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
165 Instance->CurrentAverage[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
166 Instance->NbCurrentAverage[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
167 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
168
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
169 return 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
170
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
171 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
172
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
173
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
174 int Allan_AddFrequency(Allan_Data * Instance, double Freq) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
175
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
176 int i, N;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
177 double CurrentMean, LastMean, Drift, Mean, Normalizer ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
178
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
179 N = Instance->BlocksNumber[0]+1 ; // the total number of points used, usefull to calculate drift rate
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
180 Mean = Instance->Mean ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
181 Drift = Instance->Drift ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
182
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
183 GetCtrlVal(Instance->AllanPanel, ALLANPANEL_NORMALIZER, &Normalizer);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
184
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
185 if (N > 1) { // Drift measure needs at least 2 values !
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
186 Instance->Drift = (Drift*(N-2) + 6*(Freq-Mean)/N)/(N+1) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
187 SetCtrlVal(Instance->AllanPanel, ALLANPANEL_DRIFT, Instance->Drift/Normalizer ) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
188 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
189
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
190 // update mean value (usefull to calculate drift rate with linear regression incremental algorithm...)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
191 Instance->Mean = (Mean*(N-1)+Freq)/N ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
192
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
193
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
194 for (i=0 ; i<ALLAN_MAXPOINTSNUMBER ; i++) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
195 Instance->CurrentAverage[i] = (Instance->CurrentAverage[i]*Instance->NbCurrentAverage[i] + Freq)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
196 /(Instance->NbCurrentAverage[i]+1) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
197 Instance->NbCurrentAverage[i] +=1 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
198
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
199 if (Instance->NbCurrentAverage[i] >= pow(2,i) ) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
200
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
201 CurrentMean = Instance->CurrentAverage[i];
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
202 LastMean = Instance->LastMean[i] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
203 N = Instance->BlocksNumber[i] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
204 N++ ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
205 Instance->CurrentAverage[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
206 Instance->NbCurrentAverage[i] = 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
207 if (N>1) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
208 Instance->AllanVar[i] = (Instance->AllanVar[i]*(N-2)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
209 +0.5*pow(CurrentMean-LastMean,2))/(N-1) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
210 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
211 else { // ie if N=1, which is realized for the first completed block
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
212 Instance->FirstMean[i] = CurrentMean ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
213 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
214 Instance->LastMean[i] = CurrentMean ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
215 Instance->BlocksNumber[i] = N ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
216 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
217 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
218
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
219 Allan_Display(Instance, VAL_WHITE, VAL_BLUE) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
220
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
221 return 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
222 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
223
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
224 int Allan_Display (Allan_Data * Instance, int ColorPt, int ColorErrorBar){
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
225
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
226 int PointsNumber = ALLAN_MAXPOINTSNUMBER ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
227 int i, N ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
228 double X[ALLAN_MAXPOINTSNUMBER] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
229 double Y[ALLAN_MAXPOINTSNUMBER] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
230 double Normalizer, DriftTau, FirstFreq, LastFreq, Error ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
231 bool DeDrift ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
232
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
233 GetCtrlVal(Instance->AllanPanel, ALLANPANEL_NORMALIZER, &Normalizer) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
234 GetCtrlVal(Instance->AllanPanel, ALLANPANEL_DEDRIFT, &DeDrift) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
235
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
236 for (i=0 ; i<PointsNumber ; i++) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
237 X[i] = pow(2,i) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
238 if (!DeDrift) { Y[i] = sqrt(Instance->AllanVar[i])/Normalizer ;}
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
239 else {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
240 DriftTau = Instance->Drift*X[i] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
241 N = Instance->BlocksNumber[i] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
242 if (N>=2) { // if enough data to calculate AVAR for tau = 2^i*tau0, and therefore, AllanVar[i] is meaningful
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
243 FirstFreq = Instance->FirstMean[i] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
244 LastFreq = Instance->LastMean[i] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
245 Y[i] = sqrt(Instance->AllanVar[i]+DriftTau*(DriftTau/2-(LastFreq-FirstFreq)/(N-1)))/Normalizer ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
246 // Not totaly sure it works... to be checked thoroughly
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
247 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
248 else { Y[i] = 0 ; } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
249 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
250 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
251
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
252 DeleteGraphPlot(Instance->AllanPanel, ALLANPANEL_ALLANPLOT, -1, VAL_IMMEDIATE_DRAW) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
253 PlotXY (Instance->AllanPanel, ALLANPANEL_ALLANPLOT, X, Y, PointsNumber,
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
254 VAL_DOUBLE, VAL_DOUBLE, VAL_SCATTER, VAL_SOLID_SQUARE, VAL_SOLID, 1, ColorPt);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
255
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
256 for (i=0 ; i<PointsNumber ; i++) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
257 Error = 1/sqrt(Instance->BlocksNumber[i]) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
258 PlotLine (Instance->AllanPanel, ALLANPANEL_ALLANPLOT, X[i], Y[i]*(1-Error), X[i], Y[i]*(1+Error), ColorErrorBar);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
259 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
260
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
261
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
262 return 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
263 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
264
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
265 int Allan_DisplayErrorBars (Allan_Data * Instance, int color){
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
266
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
267 int i;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
268 double X[ALLAN_MAXPOINTSNUMBER] ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
269 double Val, Error, Normalizer;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
270
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
271 GetCtrlVal(Instance->AllanPanel, ALLANPANEL_NORMALIZER, &Normalizer) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
272 for (i=0 ; i<ALLAN_MAXPOINTSNUMBER ; i++) {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
273 X[i] = pow(2,i) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
274 Val = sqrt(Instance->AllanVar[i])/Normalizer ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
275 Error = 1/sqrt(Instance->BlocksNumber[i]) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
276 PlotLine (Instance->AllanPanel, ALLANPANEL_ALLANPLOT, X[i], Val*(1-Error), X[i], Val*(1+Error), color);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
277 } ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
278
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
279 return 0 ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
280 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
281
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
282 int CVICALLBACK CB_GeneralAllanPanel (int panel, int event, void *callbackData,
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
283 int eventData1, int eventData2)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
284 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
285 Allan_Data * Instance = NULL;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
286
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
287
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
288 switch (event)
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
289 {
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
290 case EVENT_GOT_FOCUS:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
291
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
292 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
293 case EVENT_LOST_FOCUS:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
294
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
295 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
296 case EVENT_CLOSE:
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
297 GetPanelAttribute (panel, ATTR_CALLBACK_DATA, &Instance);
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
298 Allan_ClosePanel(Instance) ;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
299
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
300 break;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
301 }
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
302 return 0;
Daniele Nicolodi <daniele.nicolodi@obspm.fr>
parents:
diff changeset
303 }