Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
326 | f9daq | 1 | #include <stdio.h> |
2 | #include <stdlib.h> |
||
3 | #include <TROOT.h> |
||
4 | #include <TF1.h> |
||
5 | #include <TH1F.h> |
||
6 | #include <TH1D.h> |
||
7 | #include <TH2D.h> |
||
8 | #include <TTree.h> |
||
9 | #include <TCanvas.h> |
||
10 | #include <TStyle.h> |
||
11 | #include <TSystem.h> |
||
12 | #include <TFile.h> |
||
13 | #include <TDirectory.h> |
||
14 | #include <TGraph.h> |
||
15 | #include <TLegend.h> |
||
16 | |||
17 | #include <TPaveText.h> |
||
18 | |||
19 | #include "TXMLEngine.h" |
||
20 | |||
21 | // const char nodes[][20]={"TMON0","TMON1", "dna", "VDD", "V2P","V2N","VSS","VTH1","VTH2","VCC12","VCC15","VCC25","V38P",0}; |
||
22 | const char nodes[][20]={ "VDD", "V2P","V2N","VSS","VTH1","VTH2","VCC12","VCC15","VCC25","V38P",0}; |
||
23 | const double ul[20] ={ 1.7 , 2.1, -1.85, -1.61, 3, 3, 1.31, 1.61 , 2.61 , 3.91 }; |
||
24 | const double ll[20] ={ 1.61, 1.85, -2.09, -1.69 , 0, 0, 1.09, 1.39 , 2.39 , 3.69 }; |
||
25 | |||
26 | Int_t mid=0; |
||
27 | void hinit( int id){ |
||
28 | int i=0; |
||
29 | char name[0xFF]; |
||
30 | sprintf(name,"title%d",id); |
||
31 | //printf("ime naslova=%s\n", name); |
||
32 | TPaveText *pt = new TPaveText(.2,.2,.7,.7); |
||
33 | pt->SetName(name); |
||
34 | gDirectory->GetList()->Add(pt); |
||
35 | |||
36 | do { |
||
37 | sprintf(name,"%s_%d",nodes[i],id); |
||
38 | printf("name=%s\n",name); |
||
39 | TGraph *g= new TGraph(); |
||
40 | g->SetName(name); |
||
41 | g->SetLineColor(i%9+1); |
||
42 | g->SetLineWidth(3); |
||
43 | gDirectory->GetList()->Add(g); |
||
44 | i++; |
||
45 | } while (strlen(nodes[i])> 1); |
||
46 | } |
||
47 | |||
48 | void hplot(int id){ |
||
49 | int i=0; |
||
50 | char name[0xFF]; |
||
51 | char title[0xFF]= "Feb Test"; |
||
52 | |||
53 | TLegend *leg = new TLegend(0.60,0.1,0.99,0.9); |
||
54 | //leg->SetHeader("Legend"); |
||
55 | do { |
||
56 | sprintf(name,"%s_%d",nodes[i],id); |
||
57 | if (gROOT->FindObject(name) ) { |
||
58 | TGraph *g = (TGraph *) (gROOT->FindObject(name)) ; |
||
59 | if (i==0) { |
||
60 | TH2F *frame = new TH2F("frame",title,g->GetN(),0,g->GetN()+5,40,-2.5,4.5); |
||
61 | frame->SetStats(0); |
||
62 | frame->Draw(); |
||
63 | } |
||
64 | double x, y; |
||
65 | g->GetPoint(g->GetN()-1,x,y); |
||
66 | if (y>ll[i] && y<ul[i]){ |
||
67 | sprintf(title,"%s\t=%2.2f V",nodes[i], y); |
||
68 | } else { |
||
69 | sprintf(title,"%s\t=%2.2f V ERROR",nodes[i], y); |
||
70 | } |
||
71 | leg->AddEntry(g,title,"l"); |
||
72 | g->Draw("ls"); |
||
73 | } else { |
||
74 | printf("%s not found!\n",name); |
||
75 | } |
||
76 | i++; |
||
77 | } while (strlen(nodes[i])> 1); |
||
78 | leg->Draw(); |
||
79 | } |
||
80 | |||
81 | void hpt( int id ){ |
||
82 | char name[0xFF]; |
||
83 | sprintf(name,"title%d",id); |
||
84 | |||
85 | //printf("title=%s\n", name); |
||
86 | TPaveText *pt = (TPaveText *) (gROOT->FindObject(name)); |
||
87 | if (pt) pt->Draw(); |
||
88 | |||
89 | |||
90 | |||
91 | } |
||
92 | |||
93 | void hend(){ |
||
94 | TCanvas *c= new TCanvas("slowcontrol"); |
||
95 | c->Divide(2,2); |
||
96 | for (int i=0;i<4;i++) { |
||
97 | c->cd(i+1); |
||
98 | hplot(i); |
||
99 | } |
||
100 | c->Modified(); |
||
101 | c->Update(); |
||
102 | } |
||
103 | |||
104 | |||
105 | void DisplayNode(TXMLEngine* xml, XMLNodePointer_t node, Int_t level) |
||
106 | { |
||
107 | // this function display all accessible information about xml node and its children |
||
108 | |||
109 | //printf("%*c node: %s\n",level,' ', xml->GetNodeName(node)); |
||
110 | |||
111 | // display namespace |
||
112 | XMLNsPointer_t ns = xml->GetNS(node); |
||
113 | if (ns!=0) |
||
114 | printf("%*c namespace: %s refer: %s\n",level+2,' ', xml->GetNSName(ns), xml->GetNSReference(ns)); |
||
115 | |||
116 | // display attributes |
||
117 | XMLAttrPointer_t attr = xml->GetFirstAttr(node); |
||
118 | while (attr!=0) { |
||
119 | //printf("%*c attr: %s value: %s\n",level+2,' ', xml->GetAttrName(attr), xml->GetAttrValue(attr)); |
||
120 | attr = xml->GetNextAttr(attr); |
||
121 | } |
||
122 | |||
123 | // display content (if exists) |
||
124 | const char* content = xml->GetNodeContent(node); |
||
125 | |||
126 | if (content!=0){ |
||
127 | //printf("%*c cont: %s\n",level+2,' ', content); |
||
128 | if (strcmp(xml->GetNodeName(node),"time")==0) { |
||
129 | // printf("Time=%s\n", content); |
||
130 | char name[0xFF]; |
||
131 | //sprintf(name,"Cas kki ga hocem=\t%s",content); |
||
132 | //printf("Time=%s\n", name); |
||
133 | for (int ii=0;ii<4;ii++){ |
||
134 | sprintf(name,"title%d",ii); |
||
135 | printf("title=%s\n",name); |
||
136 | TPaveText *pt = (TPaveText *) (gROOT->FindObject(name)) ; |
||
137 | if (pt) { |
||
138 | pt->AddText("ARICH FEB QA test"); |
||
139 | sprintf(name,"Time= %s",content); |
||
140 | pt->AddText(name); |
||
141 | |||
142 | |||
143 | } |
||
144 | } |
||
145 | } |
||
146 | |||
147 | if (strcmp(xml->GetNodeName(node),"id")==0) { |
||
148 | mid=atoi(content); |
||
149 | //printf("ID---->%d\n",mid); |
||
150 | } else { |
||
151 | char name[0xFF]; |
||
152 | sprintf(name,"%s_%d",xml->GetNodeName(node),mid); |
||
153 | TGraph *g = (TGraph *) (gROOT->FindObject(name)) ; |
||
154 | if (g) g->SetPoint(g->GetN(), g->GetN() ,atof(content)); |
||
155 | else printf("%s not found!\n",name); |
||
156 | } |
||
157 | } |
||
158 | // display all child nodes |
||
159 | XMLNodePointer_t child = xml->GetChild(node); |
||
160 | while (child!=0) { |
||
161 | DisplayNode(xml, child, level+2); |
||
162 | child = xml->GetNext(child); |
||
163 | } |
||
164 | } |
||
165 | |||
166 | |||
167 | void slowcxml2root(const char* filename = "febslowc_0044.xml") |
||
168 | { |
||
169 | TTree *run = new TTree("run", "run"); |
||
170 | |||
171 | // First create engine |
||
172 | TXMLEngine* xml = new TXMLEngine; |
||
173 | |||
174 | // Now try to parse xml file |
||
175 | // Only file with restricted xml syntax are supported |
||
176 | XMLDocPointer_t xmldoc = xml->ParseFile(filename); |
||
177 | if (xmldoc==0) { |
||
178 | delete xml; |
||
179 | return; |
||
180 | } |
||
181 | |||
182 | // take access to main node |
||
183 | XMLNodePointer_t mainnode = xml->DocGetRootElement(xmldoc); |
||
184 | |||
185 | // display recursively all nodes and subnodes |
||
186 | for (int i=0;i<4;i++) hinit(i); |
||
187 | DisplayNode(xml, mainnode, 1); |
||
188 | //hend(); |
||
189 | // Release memory before exit |
||
190 | xml->FreeDoc(xmldoc); |
||
191 | delete xml; |
||
192 | } |
||
193 |