00001
00002
00003
00004
00005
00006 #include "TTree.h"
00007 #include "TFile.h"
00008 #include <assert.h>
00009 #include <iostream>
00010 #include <fstream>
00011 using namespace std;
00012 bool barrel_con2root(){
00013
00014
00015 TTree* t0=new TTree("EsTimeOffset","EsTimeOffset");
00016 double offset[2]={0.};;
00017 char estbrname[20];
00018 char estptname[20];
00019 for(int i = 0; i<2; i++){
00020 sprintf(estbrname, "Offset%d",i);
00021 sprintf(estptname, "Offset%d/D",i);
00022 t0->Branch(estbrname, &offset[i], estptname);
00023 }
00024
00025 ifstream inf0;
00026 ifstream inf01;
00027 inf0.open("calib_EsTimeOffset.txt",ios::in);
00028 inf01.open("EsTimeOffset.txt", ios::in);
00029 if(inf0.good() && inf01.good()) {
00030 try{
00031 inf0 >> offset[0] ;
00032 inf01 >> offset[1] ;
00033 t0->Fill();
00034 }catch(...) {
00035 return false;
00036 }
00037 }
00038 else {
00039 std::cerr<<"file: calib_estimeOffset.txt or est_estimeOffset can't be found!"<<std::endl;
00040 }
00041 inf0.close();
00042 inf01.close();
00043
00044 TTree* t=new TTree("BarTofPar","barrel parameters");
00045
00046 double p[20]={0.};;
00047 char brname[20];
00048 char ptname[20];
00049 for(int i=0;i<20;i++){
00050 sprintf(brname,"P%d",i);
00051 sprintf(ptname,"p%d/D",i);
00052 t->Branch(brname,&p[i],ptname);
00053 }
00054 double w[4];
00055 for(int i=0;i<4;i++){
00056 sprintf(brname,"W%d",i);
00057 sprintf(ptname,"w%d/D",i);
00058 t->Branch(brname,&w[i],ptname);
00059 }
00060 double Atten[8]={0.};
00061 for(int i=0;i<8;i++){
00062 sprintf(brname, "Atten%d",i);
00063 sprintf(ptname, "Atten%d/D",i);
00064 t->Branch(brname, &Atten[i], ptname);
00065 }
00066 double Speed[2]={0.},Q0[1]={0.};
00067 t->Branch("Speed0",&Speed[0],"Speed0/D");
00068 t->Branch("Speed1",&Speed[1],"Speed1/D");
00069 t->Branch("Q0",Q0,"Q0[1]/D");
00070 double fitfun[20]={0.};;
00071 char fbrname1[5];
00072 char fptname1[5];
00073 char fbrname2[5];
00074 char fptname2[5];
00075 char fbrname3[10];
00076 char fptname3[10];
00077 for(int i=0;i<5;i++){
00078 sprintf(fbrname1,"FLeft%d",i);
00079 sprintf(fptname1,"fleft%d/D",i);
00080 t->Branch(fbrname1,&fitfun[i],fptname1);
00081 sprintf(fbrname2,"FRight%d",i);
00082 sprintf(fptname2,"fright%d/D",i);
00083 t->Branch(fbrname2,&fitfun[5+i],fptname2);
00084 }
00085 for(int i=0;i<10;i++){
00086 sprintf(fbrname3,"FCounter%d",i);
00087 sprintf(fptname3,"fcounter%d/D",i);
00088 t->Branch(fbrname3,&fitfun[10+i],fptname3);
00089 }
00090 const int N=10;
00091 ifstream inf[N];
00092 bool is_open[N]={false};
00093 const char* filelist[N]={"calib_barrel_left.txt","calib_barrel_right.txt","calib_barrel_w.txt","calib_barrel_atten.txt","calib_barrel_veff.txt","calib_barrel_sigma.txt","calib_barrel_left1.txt","calib_barrel_right1.txt","calib_barrel_common.txt","calib_barrel_q0.txt"};
00094 for(int m=0;m<N;m++){
00095 inf[m].open(filelist[m],ios::in);
00096 if(inf[m].good())
00097 is_open[m]=true;
00098 else
00099 std::cerr<<"file: "<<filelist[N]<<" can't be found!"<<std::endl;
00100 }
00101 try{
00102 for(int k=0;k<176;k++){
00103
00104 if(is_open[0]&&is_open[1]){
00105 for(int j=0;j<7;j++){
00106 inf[0]>>p[j];
00107
00108 }
00109 for(int l=10;l<17;l++)
00110 inf[1]>>p[l];
00111 }
00112
00113 if(is_open[2]){
00114 for(int j=0;j<4;j++)
00115 inf[2]>>w[j];
00116 }
00117
00118 if(is_open[3]){
00119 for(int j=0;j<2;j++){
00120 inf[3]>>Atten[j];
00121 }
00122 Atten[0]=1./Atten[0];
00123 }
00124
00125 if(is_open[4]){
00126 for(int j=0;j<2;j++){
00127 inf[4]>>Speed[j];
00128 }
00129 Speed[0]=1./Speed[0];
00130 }
00131 if(is_open[5]){
00132 for(int j=0; j<4; j++) {
00133 inf[5] >> fitfun[j];
00134 }
00135 for(int j=5; j<9; j++) {
00136 inf[5] >> fitfun[j];
00137 }
00138 for(int j=10; j<13; j++) {
00139 inf[5] >> fitfun[j];
00140 }
00141 }
00142
00143 if(is_open[9]){
00144 for(int j=2;j<5;j++){
00145 inf[9] >> Atten[j];
00146 }
00147 }
00148
00149
00150
00151
00152 t->Fill();
00153 }
00154 }catch(...) {
00155 return false;
00156 }
00157
00158 TTree* t1=new TTree("BarTofParInner","barrel inner layer parameters");
00159
00160 double p1[20]={0.};;
00161 char brname1[20];
00162 char ptname1[20];
00163 for(int i=0;i<20;i++){
00164 sprintf(brname1,"P%d",i);
00165 sprintf(ptname1,"p%d/D",i);
00166 t1->Branch(brname1,&p1[i],ptname1);
00167 }
00168 try{
00169 for(int k=0;k<88;k++){
00170
00171 if(is_open[6]&&is_open[7]){
00172 for(int j=0;j<7;j++){
00173 inf[6]>>p1[j];
00174
00175 }
00176 for(int l=10;l<17;l++)
00177 inf[7]>>p1[l];
00178 }
00179 t1->Fill();
00180 }
00181 } catch(...) {
00182 return false;
00183 }
00184
00185 TTree* t2=new TTree("BarTofParCommon","common part of barrel");
00186 double t0Offset[2]={0.},sigmaCorr[8]={0.};
00187 for(int i=0;i<2;i++){
00188 sprintf(brname,"t0offset%d",i);
00189 sprintf(ptname,"t0offset%d/D",i);
00190 t2->Branch(brname,&t0Offset[i],ptname);
00191 }
00192 for(int i=0;i<8;i++){
00193 sprintf(brname,"sigmaCorr%d",i);
00194 sprintf(ptname,"sigmaCorr%d/D",i);
00195 t2->Branch(brname,&sigmaCorr[i],ptname);
00196 }
00197 try{
00198 if(is_open[8]){
00199 inf[8] >> sigmaCorr[0] >> sigmaCorr[1] >> t0Offset[0] >> t0Offset[1];
00200 }
00201 t2->Fill();
00202 } catch(...) {
00203 return false;
00204 }
00205 for(int m=0;m<N;m++)
00206 inf[m].close();
00207
00208 TFile f("BarTofPar.root","RECREATE");
00209 t0->Write();
00210 t->Write();
00211 t1->Write();
00212 t2->Write();
00213 f.Close();
00214 delete t0;
00215 delete t;
00216 delete t1;
00217 delete t2;
00218 t0=NULL;
00219 t=NULL;
00220 t1=NULL;
00221 t2=NULL;
00222 return true;
00223 }
00224
00225
00226
00227
00228
00229 bool endcap_con2root(){
00230
00231
00232 TTree* t0=new TTree("EsTimeOffset","EsTimeOffset");
00233 double offset[2]={0.};
00234 char estbrname[20];
00235 char estptname[20];
00236 for(int i = 0; i<2; i++){
00237 sprintf(estbrname, "Offset%d",i);
00238 sprintf(estptname, "Offset%d/D",i);
00239 t0->Branch(estbrname, &offset[i], estptname);
00240 }
00241
00242 ifstream inf0;
00243 ifstream inf01;
00244 inf0.open("calib_estimeOffset.txt",ios::in);
00245 inf01.open("est_estimeOffset.txt", ios::in);
00246 if(inf0.good()&& inf01.good()) {
00247 try{
00248 inf0 >> offset[0] ;
00249 inf01 >> offset[1] ;
00250 t0->Fill();
00251 }catch(...) {
00252 return false;
00253 }
00254 }
00255 else {
00256 std::cerr<<"file: calib_estimeOffset.txt or est_estimeOffset can't be found!"<<std::endl;
00257 }
00258 inf0.close();
00259 inf01.close();
00260
00261 TTree* t=new TTree("EndTofPar","endcap parameters");
00262
00263 double p[8]={0.};;
00264 char brname[8];
00265 char ptname[8];
00266 for(int i=0;i<8;i++){
00267 sprintf(brname,"P%d",i);
00268 sprintf(ptname,"p%d/D",i);
00269 t->Branch(brname,&p[i],ptname);
00270 }
00271 double Atten[5]={0.},Speed[3]={0.},Q0[1]={0.};
00272 t->Branch("Atten0",&Atten[0],"Atten0/D");
00273 t->Branch("Atten1",&Atten[1],"Atten1/D");
00274 t->Branch("Atten2",&Atten[2],"Atten2/D");
00275 t->Branch("Atten3",&Atten[3],"Atten3/D");
00276 t->Branch("Atten4",&Atten[4],"Atten4/D");
00277 t->Branch("Speed0",&Speed[0],"Speed0/D");
00278 t->Branch("Speed1",&Speed[1],"Speed1/D");
00279 t->Branch("Speed2",&Speed[2],"Speed2/D");
00280 t->Branch("Q0",Q0,"Q0[1]/D");
00281 const int N=3;
00282 ifstream inf[N];
00283 bool is_open[N]={false};
00284 const char* filelist[N]={"calib_endcap_left.txt","calib_endcap_atten.txt","calib_endcap_veff.txt"};
00285 for(int m=0;m<N;m++){
00286 inf[m].open(filelist[m],ios::in);
00287 if(inf[m].good())
00288 is_open[m]=true;
00289 else{
00290 std::cerr<<"File: "<<filelist[m]<<" can't be opened"<<std::endl;
00291 }
00292 }
00293 try{
00294 for(int k=0;k<96;k++){
00295
00296 if(is_open[0]&&is_open[1]){
00297 for(int j=0;j<5;j++){
00298 inf[0]>>p[j];
00299
00300 }
00301 }
00302
00303 if(is_open[1]){
00304 for(int j=0;j<3;j++){
00305 inf[1]>>Atten[j];
00306 }
00307 Atten[0]=1./Atten[0];
00308 }
00309
00310 if(is_open[2]){
00311 for(int j=0;j<3;j++){
00312 inf[2]>>Speed[j];
00313 }
00314 Speed[0]=1./Speed[0];
00315 }
00316
00317
00318
00319
00320 t->Fill();
00321 }
00322 } catch(...){
00323 return false;
00324 }
00325 for(int m=0;m<N;m++)
00326 inf[m].close();
00327
00328 TFile f("EndTofPar.root","RECREATE");
00329 t0->Write();
00330 t->Write();
00331 f.Close();
00332 delete t0;
00333 delete t;
00334 t=NULL;
00335 t=NULL;
00336 return true;
00337 }
00338 bool join(){
00339
00340 TTree* t0=new TTree("EsTimeOffset","EsTimeOffset");
00341 double offset[2]={0.};
00342 char estbrname[20];
00343 char estptname[20];
00344 for(int i = 0; i<2; i++){
00345 sprintf(estbrname, "Offset%d",i);
00346 sprintf(estptname, "Offset%d/D",i);
00347 t0->Branch(estbrname, &offset[i], estptname);
00348 }
00349
00350 ifstream inf0;
00351 ifstream inf01;
00352 inf0.open("calib_estimeOffset.txt",ios::in);
00353 inf01.open("est_estimeOffset.txt", ios::in);
00354 if(inf0.good()&& inf01.good()) {
00355 try{
00356 inf0 >> offset[0] ;
00357 inf01 >> offset[1] ;
00358 t0->Fill();
00359 }catch(...) {
00360 return false;
00361 }
00362 }
00363 else {
00364 std::cerr<<"file: calib_estimeOffset.txt or est_estimeOffset can't be found!"<<std::endl;
00365 }
00366 inf0.close();
00367 inf01.close();
00368
00369 TFile f("EndTofPar.root");
00370 TTree* t=(TTree*)f.Get("EndTofPar");
00371 if(0==t) { std::cerr<<" can't get tree :EndTofPar in file EndTofPar.root"<<std::endl; return false;}
00372 TFile f1("BarTofPar.root");
00373 TTree* t1=(TTree*)f1.Get("BarTofPar");
00374 if(0==t1) { std::cerr<<" can't get tree :BarTofPar in file BarTofPar.root"<<std::endl; return false;}
00375 TTree* t2=(TTree*)f1.Get("BarTofParInner");
00376 if(0==t2) { std::cerr<<" can't get tree :BarTofPar Inner Layer in file BarTofPar.root"<<std::endl; return false;}
00377 TTree* t3=(TTree*)f1.Get("BarTofParCommon");
00378 if(0==t3) { std::cerr<<" can't get tree :BarTofPar Common in file BarTofPar.root"<<std::endl; return false;}
00379 TFile fnew("TofCalConst.root","RECREATE");
00380 t0->Write();
00381 t->Write();
00382 t1->Write();
00383 t2->Write();
00384 t3->Write();
00385 f.Close();
00386 f1.Close();
00387 fnew.Close();
00388 t0=NULL;
00389 t=NULL;
00390 t1=NULL;
00391 t2=NULL;
00392 t3=NULL;
00393 return true;
00394 }
00395 int main(){
00396 barrel_con2root();
00397 endcap_con2root();
00398 join();
00399 }