Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
326 | f9daq | 1 | #include "TXMLEngine.h" |
2 | |||
3 | // const char nodes[][20]={"TMON0","TMON1", "dna", "VDD", "V2P","V2N","VSS","VTH1","VTH2","VCC12","VCC15","VCC25","V38P",0}; |
||
4 | |||
5 | const double ul[20] ={ 20, 0.25 }; |
||
6 | const double ll[20] ={ -0.1,-0.1 }; |
||
7 | |||
8 | Int_t mode=0; |
||
9 | Int_t mid=0; |
||
10 | Int_t chid=0; |
||
11 | const char measurement[2][0xFF]={"HV test;N,I(uA)","LV test &firmware upload;N;I(A)"}; |
||
12 | const char smode[2][0xFF]={"n1470","pw18"}; |
||
13 | const int nch[2]={1,4}; |
||
14 | const char nodes[2][0xFF]={"V","I"}; |
||
15 | const double hmax[2] ={ 20, 0.25 }; |
||
16 | double current=0; |
||
17 | double voltage=0; |
||
18 | void hinit( int id){ |
||
19 | char name[0xFF]; |
||
20 | sprintf(name,"title%d",id); |
||
21 | TPaveText *pt = new TPaveText(.05,.4,.95,.8); |
||
22 | pt->SetName(name); |
||
23 | gDirectory->GetList()->Add(pt); |
||
24 | for (mode=0;mode<2;mode++){ |
||
25 | for (chid=0;chid<nch[mode];chid++){ |
||
26 | for (int inode=0;inode<2;inode++){ |
||
27 | sprintf(name,"%s_%s_%d_ch%d",smode[mode],nodes[inode],id,chid); |
||
28 | printf("name=%s\n",name); |
||
29 | TGraph *g0 = (TGraph *) (gROOT->FindObject(name)) ; |
||
30 | if (g0) printf("%s already exists!\n",name); |
||
31 | |||
32 | TGraph *g= new TGraph(); |
||
33 | g->SetName(name); |
||
34 | g->SetLineColor(chid%9+1); |
||
35 | g->SetLineWidth(3); |
||
36 | gDirectory->GetList()->Add(g); |
||
37 | } |
||
38 | } |
||
39 | } |
||
40 | |||
41 | mid=0; |
||
42 | mode=0; |
||
43 | chid=0; |
||
44 | } |
||
45 | |||
46 | void hplot(int id, int what){ |
||
47 | int i=0; |
||
48 | char name[0xFF]; |
||
49 | char title[0xFF]; |
||
50 | |||
51 | leg = new TLegend(0.60,0.9-nch[what]*0.1,0.99,0.9); |
||
52 | //leg->SetHeader("Legend"); |
||
53 | for (i=0;i<nch[what];i++){ |
||
54 | sprintf(title,"%s",measurement[what]); |
||
55 | sprintf(name,"%s_%s_%d_ch%d",smode[what],"I",id,i); |
||
56 | printf("hplot name=%s\n",name); |
||
57 | TGraph *g = (TGraph *) (gROOT->FindObject(name)) ; |
||
58 | if (g ) { |
||
59 | |||
60 | if (i==0) { |
||
61 | sprintf(name,"h2%s_%s_%d",smode[what],"I",id); |
||
62 | TH2F *frame = new TH2F(name,title,g->GetN(),0,g->GetN()+7,40,0,hmax[what]); |
||
63 | frame->SetStats(0); |
||
64 | frame->Draw(); |
||
65 | } |
||
66 | double x, y; |
||
67 | g->GetPoint(g->GetN()-1,x,y); |
||
68 | if (y>ll[what] && y<ul[what]){ |
||
69 | sprintf(title,"CH %d\t=%2.2f A",i, y); |
||
70 | } else { |
||
71 | sprintf(title,"CH %d\t=%2.2f A ERROR",i, y); |
||
72 | } |
||
73 | leg->AddEntry(g,title,"l"); |
||
74 | if (g->GetN()) g->Draw("ls"); |
||
75 | } else { |
||
76 | printf("%s not found!\n",name); |
||
77 | } |
||
78 | } |
||
79 | leg->Draw(); |
||
80 | } |
||
81 | |||
82 | void hend(){ |
||
83 | int i=0; |
||
84 | char name[0xFF]; |
||
85 | TCanvas *c[4]; |
||
86 | |||
87 | for ( i=0;i<4;i++) { |
||
88 | sprintf(name,"cfebps%d",i); |
||
89 | c[i] = new TCanvas(name,name, 500,800); |
||
90 | c[i]->Divide(1,3); |
||
91 | c[i]->cd(1); |
||
92 | sprintf(name,"title%d",i); |
||
93 | TPaveText *pt = (TPaveText *) (gROOT->FindObject(name)); |
||
94 | if (pt) pt->Draw(); |
||
95 | c[i]->cd(2); |
||
96 | hplot(i,1); |
||
97 | c[i]->cd(3); |
||
98 | hplot(i,0); |
||
99 | c[i]->Modified(); |
||
100 | c[i]->Update(); |
||
101 | printf("tekst je=%s\n", pt); |
||
102 | } |
||
103 | } |
||
104 | |||
105 | |||
106 | |||
107 | void DisplayNode(TXMLEngine* xml, XMLNodePointer_t node, Int_t level, const char *fname) |
||
108 | { |
||
109 | // this function display all accessible information about xml node and its children |
||
110 | |||
111 | printf("%*c node: %s\n",level,' ', xml->GetNodeName(node)); |
||
112 | |||
113 | // display namespace |
||
114 | XMLNsPointer_t ns = xml->GetNS(node); |
||
115 | if (ns!=0) |
||
116 | printf("%*c namespace: %s refer: %s\n",level+2,' ', xml->GetNSName(ns), xml->GetNSReference(ns)); |
||
117 | |||
118 | // display attributes |
||
119 | XMLAttrPointer_t attr = xml->GetFirstAttr(node); |
||
120 | while (attr!=0) { |
||
121 | printf("%*c attr: %s value: %s\n",level+2,' ', xml->GetAttrName(attr), xml->GetAttrValue(attr)); |
||
122 | if (strcmp(xml->GetNodeName(node),"feb")==0 && strcmp(xml->GetAttrName(attr),"id")==0 ) { |
||
123 | mid=atoi( xml->GetAttrValue(attr) ); |
||
124 | printf("ID---->%d\n",mid); |
||
125 | } |
||
126 | if (strcmp(xml->GetNodeName(node),"pw18")==0 && strcmp(xml->GetAttrName(attr),"id")==0 ) { |
||
127 | chid=atoi( xml->GetAttrValue(attr) ); |
||
128 | } |
||
129 | if (strcmp(xml->GetNodeName(node),"n1470")==0 && strcmp(xml->GetAttrName(attr),"id")==0 ) { |
||
130 | chid=atoi( xml->GetAttrValue(attr) ); |
||
131 | } |
||
132 | attr = xml->GetNextAttr(attr); |
||
133 | } |
||
134 | |||
135 | // display content (if exists) |
||
136 | const char* content = xml->GetNodeContent(node); |
||
137 | if (strcmp(xml->GetNodeName(node),"n1470")==0) { |
||
138 | printf("mode %s\n",smode[mode]); |
||
139 | mode=0; |
||
140 | printf("N1470 Channel ID---->%d\n",chid); |
||
141 | } |
||
142 | if (strcmp(xml->GetNodeName(node),"pw18")==0) { |
||
143 | mode=1; |
||
144 | printf("PW18 Channel ID---->%d\n",chid); |
||
145 | } |
||
146 | |||
147 | if (content!=0){ |
||
148 | printf("%*c cont: %s\n",level+2,' ', content); |
||
149 | if (strcmp(xml->GetNodeName(node),"dna")==0) { |
||
150 | |||
151 | char name[0xFF]; |
||
152 | sprintf(name,"title%d",mid); |
||
153 | TPaveText *pt = (TPaveText *) (gROOT->FindObject(name)) ; |
||
154 | if (pt) { |
||
155 | sprintf(name,"DNA=%s",content); |
||
156 | pt->AddText(name); |
||
157 | } |
||
158 | } |
||
159 | if (strcmp(xml->GetNodeName(node),"sn")==0 && mode==0) { |
||
160 | char name[0xFF]; |
||
161 | sprintf(name,"title%d",mid); |
||
162 | TPaveText *pt = (TPaveText *) (gROOT->FindObject(name)) ; |
||
163 | if (pt) { |
||
164 | sprintf(name,"SN = %s",content); |
||
165 | pt->AddText(fname); |
||
166 | pt->AddText(name); |
||
167 | } |
||
168 | } |
||
169 | if (strcmp(xml->GetNodeName(node),"time")==0) { |
||
170 | char name[0xFF]; |
||
171 | for (int ii=0;ii<4;ii++){ |
||
172 | sprintf(name,"title%d",ii); |
||
173 | TPaveText *pt = (TPaveText *) (gROOT->FindObject(name)) ; |
||
174 | if (pt) { |
||
175 | sprintf(name,"Time=\t%s",content); |
||
176 | pt->AddText("ARICH FEB QA test"); |
||
177 | pt->AddText(name); |
||
178 | } |
||
179 | } |
||
180 | } |
||
181 | if (strcmp(xml->GetNodeName(node),"V")==0) { |
||
182 | voltage =atof( content ); |
||
183 | char name[0xFF]; |
||
184 | sprintf(name,"%s_%s_%d_ch%d",smode[mode],xml->GetNodeName(node),mid,chid); |
||
185 | TGraph *g = (TGraph *) (gROOT->FindObject(name)) ; |
||
186 | if (g) g->SetPoint(g->GetN(), g->GetN(), voltage ); |
||
187 | else printf("%s not found!\n",name); |
||
188 | } |
||
189 | if (strcmp(xml->GetNodeName(node),"I")==0) { |
||
190 | current =atof( content ); |
||
191 | char name[0xFF]; |
||
192 | sprintf(name,"%s_%s_%d_ch%d",smode[mode],xml->GetNodeName(node),mid,chid); |
||
193 | TGraph *g = (TGraph *) (gROOT->FindObject(name)) ; |
||
194 | if (g) g->SetPoint(g->GetN(), g->GetN(), current ); |
||
195 | else printf("%s not found!\n",name); |
||
196 | } |
||
197 | |||
198 | } |
||
199 | // display all child nodes |
||
200 | XMLNodePointer_t child = xml->GetChild(node); |
||
201 | while (child!=0) { |
||
202 | DisplayNode(xml, child, level+2, fname); |
||
203 | child = xml->GetNext(child); |
||
204 | } |
||
205 | } |
||
206 | |||
207 | |||
208 | void febpsxml2root(const char* filename = "febps_0001.xml") |
||
209 | { |
||
210 | |||
211 | // First create engine |
||
212 | TXMLEngine* xml = new TXMLEngine; |
||
213 | |||
214 | // Now try to parse xml file |
||
215 | // Only file with restricted xml syntax are supported |
||
216 | XMLDocPointer_t xmldoc = xml->ParseFile(filename); |
||
217 | if (xmldoc==0) { |
||
218 | delete xml; |
||
219 | return; |
||
220 | } |
||
221 | |||
222 | // take access to main node |
||
223 | XMLNodePointer_t mainnode = xml->DocGetRootElement(xmldoc); |
||
224 | |||
225 | // display recursively all nodes and subnodes |
||
226 | for (int i=0;i<4;i++) hinit(i); |
||
227 | |||
228 | DisplayNode(xml, mainnode, 1, filename); |
||
229 | hend(); |
||
230 | // Release memory before exit |
||
231 | xml->FreeDoc(xmldoc); |
||
232 | delete xml; |
||
233 | } |
||
234 |