/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Tof/TofCaliSvc/TofCaliSvc-00-01-13/test/convert2root.cxx File Reference

#include "TTree.h"
#include "TFile.h"
#include <assert.h>
#include <iostream>
#include <fstream>

Go to the source code of this file.

Functions

bool calib_conv2root ()
bool barrel_conv2root ()
bool endcap_conv2root ()
bool etf_conv2root ()
bool join ()
int main ()


Function Documentation

bool barrel_conv2root (  ) 

Definition at line 128 of file convert2root.cxx.

References showlog::filelist, genRecEmupikp::i, ganga-rec::j, and TrigConf::N.

Referenced by main().

00128                        {
00129 
00130   TTree* t1 = new TTree( "BarTofPar","barrel parameters" );
00131 
00132   double p[20]={1.};
00133   char brname[20];
00134   char ptname[20];
00135   for(int i=0;i<20;i++){
00136     sprintf( brname, "P%d",   i );
00137     sprintf( ptname, "p%d/D", i );
00138     t1->Branch(brname,&p[i],ptname);
00139   }
00140 
00141   double bunch0_poff[40]={1.},bunch1_poff[40]={1.},bunch2_poff[40]={1.},bunch3_poff[40]={1.};
00142   char broffname[40];
00143   char ptoffname[40];
00144   for(int i=0;i<40;i++){
00145     sprintf( broffname, "Bunch0_Poff%d",   i );
00146     sprintf( ptoffname, "bunch0_poff%d/D", i );
00147     t1->Branch( broffname, &bunch0_poff[i], ptoffname );
00148   }
00149   for(int i=0;i<40;i++){
00150     sprintf( broffname, "Bunch1_Poff%d",   i );
00151     sprintf( ptoffname, "bunch1_poff%d/D", i );
00152     t1->Branch( broffname, &bunch1_poff[i], ptoffname );
00153   }
00154   for(int i=0;i<40;i++){
00155     sprintf( broffname, "Bunch2_Poff%d",   i );
00156     sprintf( ptoffname, "bunch2_poff%d/D", i );
00157     t1->Branch( broffname, &bunch2_poff[i], ptoffname );
00158   }
00159   for(int i=0;i<40;i++){
00160     sprintf( broffname, "Bunch3_Poff%d",   i );
00161     sprintf( ptoffname, "bunch3_poff%d/D", i );
00162     t1->Branch( broffname, &bunch3_poff[i], ptoffname );
00163   }
00164 
00165   double fitfun[20]={0.};;
00166   char fbrname1[5], fptname1[5], fbrname2[5], fptname2[5];
00167   char fbrname3[10], fptname3[10];
00168   for(int i=0;i<5;i++){
00169     sprintf( fbrname1, "FLeft%d",   i );
00170     sprintf( fptname1, "fleft%d/D", i );
00171     t1->Branch( fbrname1, &fitfun[i], fptname1 );
00172     sprintf( fbrname2, "FRight%d",   i );
00173     sprintf( fptname2, "fright%d/D", i );
00174     t1->Branch( fbrname2, &fitfun[5+i], fptname2 );
00175   }
00176   for(int i=0;i<10;i++){
00177     sprintf( fbrname3, "FCounter%d",   i );
00178     sprintf( fptname3, "fcounter%d/D", i );
00179     t1->Branch( fbrname3, &fitfun[10+i], fptname3 );
00180   }
00181 
00182   double Atten[8]={1.};
00183   for(int i=0;i<8;i++){
00184     sprintf( brname, "Atten%d",   i );
00185     sprintf( ptname, "Atten%d/D", i );
00186     t1->Branch(brname, &Atten[i], ptname);
00187   }
00188 
00189   double Speed[2]={1.};
00190   t1->Branch( "Speed0", &Speed[0], "Speed0/D" );
00191   t1->Branch( "Speed1", &Speed[1], "Speed1/D" );
00192 
00193   const int N = 23;
00194   ifstream inf[N];
00195   bool is_open[N]={false};
00196   const char* filelist[N]={
00197     "calib_barrel_left.txt",          // 0
00198     "calib_barrel_right.txt",         // 1
00199     "calib_barrel_left_offset1_bunch0.txt",  // 2
00200     "calib_barrel_left_offset2_bunch0.txt",  // 3
00201     "calib_barrel_right_offset1_bunch0.txt", // 4
00202     "calib_barrel_right_offset2_bunch0.txt", // 5
00203     "calib_barrel_left_offset1_bunch1.txt",  // 6
00204     "calib_barrel_left_offset2_bunch1.txt",  // 7
00205     "calib_barrel_right_offset1_bunch1.txt", // 8
00206     "calib_barrel_right_offset2_bunch1.txt", // 9
00207     "calib_barrel_left_offset1_bunch2.txt",  // 10
00208     "calib_barrel_left_offset2_bunch2.txt",  // 11
00209     "calib_barrel_right_offset1_bunch2.txt", // 12
00210     "calib_barrel_right_offset2_bunch2.txt", // 13
00211     "calib_barrel_left_offset1_bunch3.txt",  // 14
00212     "calib_barrel_left_offset2_bunch3.txt",  // 15
00213     "calib_barrel_right_offset1_bunch3.txt", // 16
00214     "calib_barrel_right_offset2_bunch3.txt", // 17
00215     "calib_barrel_sigma.txt",         // 18
00216     "calib_barrel_atten.txt",         // 19
00217     "calib_barrel_q0.txt",            // 20
00218     "calib_barrel_veff.txt",          // 21
00219     "calib_barrel_common.txt"         // 22
00220   };
00221   for(int m=0;m<N;m++){
00222     inf[m].open(filelist[m],ios::in);
00223     if(inf[m].good())
00224       is_open[m]=true;
00225     else
00226       std::cerr<<"file: "<<filelist[m]<<" can't be found!"<<std::endl;
00227   }
00228 
00229   try{
00230     for(int k=0;k<176;k++){
00231       //------------set p-------------------------
00232       if(is_open[0]&&is_open[1]){
00233         for(int j=0;j<7;j++) {
00234           inf[0]>>p[j];
00235           inf[1]>>p[j+10];
00236         }
00237       }
00238       //-------set offset of bunch0 correction  pars -------
00239       if(is_open[2]&&is_open[3]&&is_open[4]&&is_open[5]){
00240         for(int j=0;j<7;j++) {
00241           inf[2]>>bunch0_poff[j];
00242           inf[3]>>bunch0_poff[j+10];
00243           inf[4]>>bunch0_poff[j+20];
00244           inf[5]>>bunch0_poff[j+30];      
00245         }
00246       }
00247       //-------set offset of bunch1 correction  pars -------
00248       if(is_open[6]&&is_open[7]&&is_open[8]&&is_open[9]){
00249         for(int j=0;j<7;j++) {
00250           inf[6]>>bunch1_poff[j];
00251           inf[7]>>bunch1_poff[j+10];
00252           inf[8]>>bunch1_poff[j+20];
00253           inf[9]>>bunch1_poff[j+30];
00254         }
00255       }
00256 
00257       //-------set offset of bunch2 correction  pars -------
00258       if(is_open[10]&&is_open[11]&&is_open[12]&&is_open[13]){
00259         for(int j=0;j<7;j++) {
00260           inf[10]>>bunch2_poff[j];
00261           inf[11]>>bunch2_poff[j+10];
00262           inf[12]>>bunch2_poff[j+20];
00263           inf[13]>>bunch2_poff[j+30];
00264         }
00265       }
00266       if(is_open[14]&&is_open[15]&&is_open[16]&&is_open[17]){
00267         for(int j=0;j<7;j++) {
00268           inf[14]>>bunch3_poff[j];
00269           inf[15]>>bunch3_poff[j+10];
00270           inf[16]>>bunch3_poff[j+20];
00271           inf[17]>>bunch3_poff[j+30];
00272         }
00273       }
00274       //--------fit sigma vs z parameters---------
00275       if(is_open[18]){
00276         for(int j=0; j<15; j++) {
00277           inf[18] >> fitfun[j];
00278         }
00279       }
00280       //-----------atten lenght-------------------
00281       if(is_open[19]){
00282         for(int j=0;j<2;j++){
00283           inf[19]>>Atten[j];
00284         }
00285         Atten[0]=1./Atten[0];
00286       }
00287       //--------------Q0--------------------------
00288       if(is_open[20]){
00289         for(int j=2;j<5;j++){
00290           inf[20] >> Atten[j];
00291         }
00292       }
00293       //-------------speed------------------------
00294       if(is_open[21]){
00295         for(int j=0;j<2;j++){
00296           inf[21]>>Speed[j];
00297         }
00298         Speed[0]=1./Speed[0];
00299       }
00300       t1->Fill();
00301     }
00302   }catch(...) {
00303     return false;
00304   }
00305   
00306   TTree* t2 = new TTree( "BarTofParCommon","common part of barrel" );
00307   double t0Offset[2]={0.},sigmaCorr[8]={0.};
00308   for(int i=0;i<2;i++){
00309     sprintf(brname,"t0offset%d",i);
00310     sprintf(ptname,"t0offset%d/D",i);
00311     t2->Branch(brname,&t0Offset[i],ptname);
00312   }
00313   for(int i=0;i<8;i++){
00314     sprintf(brname,"sigmaCorr%d",i);
00315     sprintf(ptname,"sigmaCorr%d/D",i);
00316     t2->Branch(brname,&sigmaCorr[i],ptname);
00317   }
00318   try{
00319     if(is_open[22]){
00320       inf[22] >> sigmaCorr[0] >> sigmaCorr[1] >> t0Offset[0] >> t0Offset[1];
00321     }
00322     t2->Fill();
00323   } catch(...) {
00324     return false;
00325   }
00326   
00327   for(int m=0;m<N;m++) { inf[m].close(); }
00328   
00329   TFile f("BarTofPar.root","RECREATE");
00330   t1->Write();
00331   t2->Write();
00332   f.Close();
00333   delete t1;
00334   delete t2;
00335   t1=NULL;
00336   t2=NULL;
00337 
00338   return true;
00339 }

bool calib_conv2root (  ) 

Definition at line 14 of file convert2root.cxx.

References deljobs::end, file, and genRecEmupikp::i.

Referenced by main().

00014                        {
00015   TTree* t0 = new TTree("CalibInfo","run number and version number");
00016   int run1=0, run2=0, version=0;
00017   int qCorr=1, qElec=1, misLable=1;
00018   int itofid[15]={0};
00019   char  ebrname[5],  wbrname[5],  ecname[5];
00020   char iebrname[5], iwbrname[5], iecname[5];
00021   t0->Branch("Run1",    &run1,    "Run1/I"    );
00022   t0->Branch("Run2",    &run2,    "Run2/I"    );
00023   t0->Branch("Version", &version, "Version/I" );
00024   t0->Branch("qCorr",   &qCorr,   "qCorr/I"   );
00025   t0->Branch("qElec",   &qElec,   "qElec/I"   );
00026   t0->Branch("misLable",&misLable,"misLable/I");
00027 
00028   for( unsigned int i=0; i<5; i++ ){
00029     sprintf(  ebrname, "ebrId%d",  i );
00030     sprintf( iebrname, "ebrId%d/I",i );
00031     t0->Branch(ebrname,&itofid[i],iebrname);
00032     sprintf(  wbrname, "wbrId%d",  i );
00033     sprintf( iwbrname, "wbrId%d/I",i );
00034     t0->Branch(wbrname,&itofid[i+5],iwbrname);
00035     sprintf(  ecname, "ecId%d",   i );
00036     sprintf( iecname, "ecId%d/I", i );
00037     t0->Branch(ecname,&itofid[i+10],iecname);
00038   }
00039 
00040   int itmp;
00041   unsigned int barrel, layer, tofid, end;
00042   ifstream inf;
00043   bool is_open=false;
00044   const char* file="calib_info.txt";
00045   inf.open(file,ios::in);
00046   if( inf.good() ) {
00047     is_open=true;
00048   }
00049   else {
00050     std::cerr<<"file: "<<file <<" can't be found!"<<std::endl;
00051   }
00052   try{
00053     if( is_open ){
00054       inf >> run1 >> run2 >> version;
00055       inf >> qCorr >> qElec >> misLable;
00056       for( unsigned int i=0; i<15; i++ ) {
00057         inf >> itmp;
00058         if( itmp != -1 ) {
00059           tofid = unsigned int( itmp );
00060           if( i>=0 && i<=9 ) {
00061             if( i>=0 && i<=4 ) {
00062               end = 0;
00063             }
00064             else if( i>=5 && i<=9 ) {
00065               end = 1;
00066             }
00067             barrel = 1;
00068             if( itmp>=0 && itmp<=87 ) {
00069               layer = 0;
00070             }
00071             else if( itmp>=88 && itmp<=175 ) {
00072               tofid = tofid - 88;
00073               layer = 1;
00074             }
00075             else {
00076               std::cout << "1 impossible tofid!" << std::endl;
00077             }
00078             itofid[i] = ( 0x20000000 | (barrel<<14) | (layer<<8) | (tofid<<1) | end );
00079           }
00080           else if( i>=10 && i<=14 ) {
00081             if( version==0 ) {
00082               barrel = 0;
00083               layer = 0;
00084               end = 0;
00085               if( itmp>=48 && itmp<=95 ) {
00086                 barrel = 2;
00087                 tofid = tofid - 48;
00088               }
00089               itofid[i] = ( 0x20000000 | (barrel<<14) | (layer<<8) | (tofid<<1) | end );
00090             }
00091             else {
00092               barrel = 3;
00093               end = unsigned int ( itmp/10000 );
00094               tofid = unsigned int ( (itmp - end*10000)/100 );
00095               unsigned int strip = unsigned int ( itmp%100 );
00096               unsigned int endcap = 0;
00097               if( tofid>=36 && tofid<=71 ) {
00098                 endcap = 1;
00099                 tofid = tofid - 35;
00100               }
00101               itofid[i] = ( 0x20000000 | (barrel<<14) | (endcap<<11) | (tofid<<5) | (strip<<1) | end );
00102             }
00103           }
00104           else {
00105             std::cout << "impossible tofid!" << std::endl;
00106           }
00107         }
00108         else {
00109           itofid[i] = 0x2fffffff;
00110         }
00111       }
00112       t0->Fill();
00113     }
00114   }catch(...) {
00115     return false;
00116   }
00117 
00118   TFile f("CalibInfo.root","RECREATE");
00119   t0->Write();
00120   f.Close();
00121   delete t0;
00122   t0=NULL;
00123 
00124   return true;
00125 }

bool endcap_conv2root (  ) 

Definition at line 347 of file convert2root.cxx.

References genRecEmupikp::i, and t().

Referenced by main().

00347                        {
00348 
00349   TTree* t = new TTree( "EndTofPar", "endcap parameters" );
00350   char brname[8];
00351   char ptname[8];
00352   double p[8]={0.};
00353   for(int i=0;i<8;i++){
00354     sprintf( brname, "P%d",   i );
00355     sprintf( ptname, "p%d/D", i );
00356     t->Branch( brname, &p[i], ptname );
00357   }
00358   double fcounter[5]={0.},Atten[5]={0.},Speed[4]={0.};
00359   for(int i=0;i<5;i++){
00360     sprintf( brname, "FCounter%d",   i );
00361     sprintf( ptname, "fcounter%d/D", i );
00362     t->Branch( brname, &fcounter[i], ptname );
00363     sprintf( brname, "Atten%d",   i );
00364     sprintf( ptname, "Atten%d/D", i );
00365     t->Branch( brname, &Atten[i], ptname );
00366   }
00367   double Speed[4]={0.};
00368   for(int i=0;i<4;i++){
00369     sprintf( brname, "Speed%d",   i );
00370     sprintf( ptname, "Speed%d/D", i );
00371     t->Branch( brname, &Speed[i], ptname );
00372   }
00373 
00374   try{
00375     for(int k=0;k<96;k++){
00376       t->Fill();
00377     }
00378   } catch(...){
00379     return false;
00380   }
00381   //-------------------------------------------
00382   TFile f("EndTofPar.root","RECREATE");
00383   t->Write();
00384   f.Close();
00385   delete t;
00386   t=NULL;
00387 
00388   return true;
00389 }

bool etf_conv2root (  ) 

Definition at line 392 of file convert2root.cxx.

References showlog::filelist, genRecEmupikp::i, ganga-rec::j, and t().

Referenced by main().

00392                     {
00393 
00394   TTree* t  = new TTree( "EtfTofPar","etf parameters" );
00395   TTree* t1 = new TTree( "EtfTofBunch","etf parameters" );
00396 
00397   char brname[60];
00398   char ptname[60];
00399   double p[60]={1.};
00400   for(int i=0;i<60;i++){
00401     sprintf( brname, "P%d",   i );
00402     sprintf( ptname, "p%d/D", i );
00403     t->Branch(brname,&p[i],ptname);
00404   }
00405   double Speed[4]={1.};
00406   for(int i=0;i<4;i++){
00407     sprintf( brname, "Speed%d",   i );
00408     sprintf( ptname, "Speed%d/D", i );
00409     t->Branch( brname, &Speed[i], ptname );
00410   }
00411   double tmp;
00412   double pBunch[4]={1.};
00413   for(int i=0;i<4;i++){
00414     sprintf( brname, "pbunch%d",   i );
00415     sprintf( ptname, "pbunch%d/D", i );
00416     t1->Branch( brname, &pBunch[i], ptname );
00417   }
00418 
00419   const int K=5;
00420   ifstream inf[K];
00421   bool is_open[K]={false};
00422   const char* filelist[K]={
00423     "calib_etf_combine.txt",
00424     "calib_etf_left.txt",
00425     "calib_etf_right.txt",
00426     "calib_etf_veff.txt",
00427     "calib_etf_bunch.txt"
00428   };
00429   for(int i=0;i<K;i++){
00430     inf[i].open(filelist[i],ios::in);
00431     if(inf[i].good())
00432       is_open[i]=true;
00433     else{
00434       std::cerr<<"File: "<<filelist[i]<<" can't be opened"<<std::endl;
00435     }
00436   }
00437   try{
00438     for(int i=0;i<72;i++) {
00439       for(int j=0;j<12;j++) {
00440         //------------set p-------------------------
00441         if(is_open[0] && is_open[1] && is_open[2]){
00442           for(int k=0;k<7;k++) {
00443             inf[0]>>p[k];
00444           }
00445           for(int k=0;k<13;k++) {
00446             inf[1]>>p[k+20];
00447             inf[2]>>p[k+40];
00448           }
00449         }
00450         //-------------speed------------------------
00451         if(is_open[3]){
00452           for(int k=0;k<4;k++){
00453             inf[3]>>Speed[k];
00454           }
00455         }
00456         t->Fill();
00457       }
00458     }
00459     //-------------bunch------------------------
00460     if(is_open[4]){
00461       for(int k=0;k<4;k++){
00462         inf[4]>>pBunch[k]>>tmp;
00463       }
00464     }
00465     t1->Fill();
00466   }catch(...) {
00467     return false;
00468   }
00469 
00470   for(int i=0;i<K;i++) { inf[i].close(); }
00471   
00472   TFile f("EtfTofPar.root","RECREATE");
00473   t->Write();
00474   t1->Write();
00475   f.Close();
00476   delete t;
00477   delete t1;
00478   t=NULL;
00479   t1=NULL;
00480 
00481   return true;
00482 }

bool join (  ) 

Definition at line 485 of file convert2root.cxx.

References f1, f2, and t().

00485            {  
00486 
00487   TFile f0("CalibInfo.root");
00488   TTree* t0=(TTree*)f0.Get("CalibInfo");
00489   TTree* tnew0 = t0->CloneTree();
00490   if(0==tnew0) { std::cerr<<" can't get tree :CalibInfo in file CalibInfo.root"<<std::endl; return false;}
00491 
00492   TFile f("EndTofPar.root");
00493   TTree* t=(TTree*)f.Get("EndTofPar");
00494   TTree* tnew = t->CloneTree();
00495   if(0==tnew) { std::cerr<<" can't get tree :EndTofPar in file EndTofPar.root"<<std::endl; return false;}
00496 
00497   TFile f1("BarTofPar.root");
00498   TTree* t1=(TTree*)f1.Get("BarTofPar");
00499   TTree* tnew1 = t1->CloneTree();
00500   if(0==tnew1) { std::cerr<<" can't get tree :BarTofPar in file BarTofPar.root"<<std::endl; return false;}
00501   TTree* t2=(TTree*)f1.Get("BarTofParCommon");
00502   TTree* tnew2 = t2->CloneTree();
00503   if(0==tnew2) { std::cerr<<" can't get tree :BarTofPar Common in file BarTofPar.root"<<std::endl; return false;}
00504 
00505   TFile f2("EtfTofPar.root");
00506   TTree* t3=(TTree*)f2.Get("EtfTofPar");
00507   TTree* tnew3 = t3->CloneTree();
00508   TTree* t4=(TTree*)f2.Get("EtfTofBunch");
00509   TTree* tnew4 = t4->CloneTree();
00510   if(0==tnew4) { std::cerr<<" can't get tree :EtfTofBunch in file EtfTofPar.root"<<std::endl; return false;}
00511 
00512   TFile fnew("TofCalConst.root","RECREATE");
00513   tnew0->Write();
00514   tnew->Write();
00515   tnew1->Write();
00516   tnew2->Write();
00517   tnew3->Write();
00518   tnew4->Write();
00519   f0.Close();
00520   f.Close();
00521   f1.Close();
00522   f2.Close();
00523   fnew.Close();
00524 
00525   t0=NULL;
00526   t=NULL;
00527   t1=NULL;
00528   t2=NULL;
00529   t3=NULL;
00530   t4=NULL;
00531   tnew0=NULL;
00532   tnew=NULL;
00533   tnew1=NULL;
00534   tnew2=NULL;
00535   tnew3=NULL;
00536   tnew4=NULL;
00537 
00538   return true;
00539 }

int main (  ) 

Definition at line 542 of file convert2root.cxx.

References barrel_conv2root(), calib_conv2root(), endcap_conv2root(), etf_conv2root(), and join().

00542           {
00543   calib_conv2root();
00544   barrel_conv2root();
00545   endcap_conv2root();
00546   etf_conv2root();
00547   join();
00548 }


Generated on Tue Nov 29 23:17:16 2016 for BOSS_7.0.2 by  doxygen 1.4.7