00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "tofcalgsec/TofCalibFit.h"
00010 #include "TDirectory.h"
00011 #include "TFile.h"
00012 #include "TStyle.h"
00013 #include <iostream>
00014 #include <ios>
00015 #include <fstream>
00016
00017 TofCalibFit::TofCalibFit( bool isbarrel, const int npar ) {
00018 if( isbarrel ) { nCounter = NBarrel; }
00019 else { nCounter = NEndcap; }
00020
00021 nKind = 0;
00022 nBinPerCounter = 0;
00023
00024 nHistPerCounter = 0;
00025 nCanvasPerCounter = 0;
00026 nHistogram = 0;
00027 nCanvas = 0;
00028
00029 m_npar = npar;
00030 X = HepVector(m_npar,0);
00031 m_name = string("calibfit");
00032
00033 m_tcorrelation = HepVector( nBarrelCommon,0);
00034 }
00035
00036
00037 TofCalibFit::~TofCalibFit() {
00038 std::vector<TH1F*>::iterator iter1 = m_histograms.begin();
00039 for( ; iter1 != m_histograms.end(); iter1++ ) {
00040 delete (*iter1);
00041 }
00042 m_histograms.clear();
00043 std::vector<TH1F*>::iterator iter2 = m_graphs.begin();
00044 for( ; iter2 != m_graphs.end(); iter2++ ) {
00045 delete (*iter2);
00046 }
00047 m_graphs.clear();
00048 m_result.clear();
00049 }
00050
00051
00052 void TofCalibFit::fillTxt( const char* file ) {
00053 std::ofstream out(file,ios::out);
00054 if( out ) {
00055 std::vector<HepVector>::iterator it;
00056 for( it=m_result.begin(); it!=m_result.end(); it++ ) {
00057 for( int i=0; i<(*it).num_row(); i++ ) {
00058 out << (*it)[i] << " ";
00059 }
00060 out << std::endl;
00061 }
00062 out.close();
00063 }
00064 else{
00065 cerr << "error when open file " << file << " for write in " << name() << "::fillTxt()" << std::endl;
00066 cout << "print all parameters to srceen: in total " << m_result.size() << " items" << std::endl;
00067 std::vector<HepVector>::iterator it;
00068 for( it=m_result.begin(); it!=m_result.end(); it++ ) {
00069 for( int i=0; i<(*it).num_row(); i++ ) {
00070 cout << (*it)[i] << " ";
00071 }
00072 cout << std::endl;
00073 }
00074 }
00075
00076 return;
00077 }
00078
00079
00080 void TofCalibFit::fillRoot( const char* file ) {
00081
00082 unsigned int nhist = m_histograms.size();
00083 if( nhist != (nCounter*nHistPerCounter + nHistogram) ) {
00084 std::cout<<" tofcalgsec::TofCalibFit:" << m_name << ": the number of histograms is NOT same as the number of histograms saved!" << " nhist=" << nhist << " calculated=" << (nCounter*nHistPerCounter + nHistogram) << " nCounter=" << nCounter << " nHistPerCounter=" << nHistPerCounter << " nHistogram=" << nHistogram << std::endl;
00085 exit(0);
00086 }
00087
00088 unsigned int numgraph1 = 0;
00089 unsigned int numgraph2 = 0;
00090 if( nCanvasPerCounter!=0 ) {
00091 std::vector<unsigned int>::iterator iter = nGraphPerCanvasPerCounter.begin();
00092 for( ; iter!=nGraphPerCanvasPerCounter.end(); iter++ ) {
00093 numgraph1 = numgraph1 + (*iter);
00094 }
00095 }
00096 if( nCanvas!=0 ) {
00097 std::vector<unsigned int>::iterator iter = nGraphPerCanvas.begin();
00098 for( ; iter!=nGraphPerCanvas.end(); iter++ ) {
00099 numgraph2 = numgraph2 + (*iter);
00100 }
00101 }
00102 unsigned int ngraph = m_graphs.size();
00103 if( ngraph != ( nCounter*numgraph1+numgraph2) ) {
00104 std::cout<<" tofcalgsec::TofCalibFit:"<< m_name << ": the number of graphs is NOT same as the number of graphs saved!"<<std::endl;
00105 exit(0);
00106 }
00107
00108 TFile f(file,"RECREATE");
00109
00110 gStyle->SetOptStat(2211);
00111 gStyle->SetOptFit(1111);
00112 gStyle->SetLabelSize(0.03,"x");
00113 gStyle->SetLabelSize(0.03,"y");
00114
00115 char dirname[256];
00116 char canvasname[256];
00117 if( nHistPerCounter>0 || nCanvasPerCounter>0 ) {
00118 std::vector<TH1F*>::iterator iter1 = m_histograms.begin();
00119 std::vector<TH1F*>::iterator iter2 = m_graphs.begin();
00120 for( unsigned int i=0; i<nCounter; i++ ) {
00121 sprintf( dirname, "tofid%i", i );
00122 TDirectory* cdresult = f.mkdir( dirname );
00123 cdresult->cd();
00124
00125 for( unsigned int j=0; j<nHistPerCounter; j++ ) {
00126 (*(iter1+j))->Write();
00127 }
00128 iter1 = iter1 + nHistPerCounter;
00129
00130 for( unsigned int j=0; j<nCanvasPerCounter; j++ ) {
00131 std::vector<string>::iterator it1 = CanvasPerCounterName.begin() + j;
00132 std::vector<unsigned int>::iterator it2 = nGraphPerCanvasPerCounter.begin() + j;
00133 sprintf( canvasname, "%s-tofid-%i", (*it1).c_str(), i );
00134 TCanvas* c1 = new TCanvas( canvasname, canvasname, 1);
00135 c1->SetFillColor(10);
00136 for( unsigned int k=0; k<(*it2); k++ ) {
00137 if( k==0 ) {
00138 (*(iter2+k))->Draw("E");
00139 }
00140 else {
00141 (*(iter2+k))->Draw("Esame");
00142 }
00143 }
00144 iter2 = iter2 + (*it2);
00145 c1->Write();
00146 }
00147 }
00148 }
00149
00150 if( nHistogram>0 || nCanvas>0 ) {
00151 sprintf( dirname, "summary" );
00152 TDirectory* cdresult = f.mkdir( dirname );
00153 cdresult->cd();
00154
00155 std::vector<TH1F*>::iterator iter1 = m_histograms.begin() + nCounter*nHistPerCounter;
00156 std::vector<TH1F*>::iterator iter2 = m_graphs.begin() + nCounter*numgraph1;
00157 for( ; iter1 != m_histograms.end(); iter1++ ) {
00158 (*iter1)->Write();
00159 }
00160
00161 for( unsigned int j=0; j<nCanvas; j++ ) {
00162 std::vector<string>::iterator it1 = CanvasName.begin() + j;
00163 std::vector<unsigned int>::iterator it2 = nGraphPerCanvas.begin() + j;
00164 sprintf( canvasname, (*it1).c_str() );
00165 TCanvas* c1 = new TCanvas( canvasname, canvasname, 1);
00166 c1->SetFillColor(10);
00167 for( unsigned int k=0; k<(*it2); k++ ) {
00168 if( k==0 ) {
00169 (*(iter2+k))->Draw("E");
00170 }
00171 else {
00172 (*(iter2+k))->Draw("Esame");
00173 }
00174 }
00175 iter2 = iter2 + (*it2);
00176 c1->Write();
00177 }
00178
00179 }
00180
00181 f.Close();
00182
00183 return;
00184 }