Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  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.  
  235.