#include <calib_barrel_q0.h>
Inheritance diagram for calib_barrel_q0:
Public Member Functions | |
void | calculate (RecordSet *&data, unsigned int icounter) |
void | calculate (RecordSet *&data, unsigned int icounter) |
calib_barrel_q0 () | |
calib_barrel_q0 () | |
void | fillRoot (const char *file) |
void | fillRoot (const char *file) |
void | fillTxt (const char *file) |
void | fillTxt (const char *file) |
const string & | name () const |
const string & | name () const |
void | setTCorrelation (HepVector tc) |
void | setTCorrelation (HepVector tc) |
HepVector | tcorrelation () |
HepVector | tcorrelation () |
~calib_barrel_q0 () | |
~calib_barrel_q0 () | |
Protected Attributes | |
std::vector< string > | CanvasName |
std::vector< string > | CanvasName |
std::vector< string > | CanvasPerCounterName |
std::vector< string > | CanvasPerCounterName |
std::vector< TGraphErrors * > | m_graphs |
std::vector< TGraphErrors * > | m_graphs |
std::vector< TH1F * > | m_histograms |
std::vector< TH1F * > | m_histograms |
string | m_name |
int | m_npar |
std::vector< HepVector > | m_result |
std::vector< HepVector > | m_result |
HepVector | m_tcorrelation |
unsigned int | nBinPerCounter |
unsigned int | nCanvas |
unsigned int | nCanvasPerCounter |
std::vector< unsigned int > | nGraphPerCanvas |
std::vector< unsigned int > | nGraphPerCanvas |
std::vector< unsigned int > | nGraphPerCanvasPerCounter |
std::vector< unsigned int > | nGraphPerCanvasPerCounter |
unsigned int | nHistogram |
unsigned int | nHistPerCounter |
unsigned int | nKind |
HepVector | X |
Private Member Functions | |
void | fillGraph () |
void | fillGraph () |
void | fillRecord (const Record *r, unsigned int icounter) |
void | fillRecord (const Record *r, unsigned int icounter) |
void | fitGraph () |
void | fitGraph () |
void | fitHistogram (unsigned int icounter) |
void | fitHistogram (unsigned int icounter) |
Private Attributes | |
std::vector< double > | itofid |
std::vector< double > | itofid |
std::vector< double > | itofiderr |
std::vector< double > | itofiderr |
double | itofidstep |
std::vector< HepVector > | m_fitresult |
std::vector< HepVector > | m_fitresult |
|
00006 :TofCalibFit( true, nBarrelQ0 ) { 00007 00008 nKind = 1; 00009 nBinPerCounter = 1; 00010 00011 nHistPerCounter = 0; 00012 nCanvasPerCounter = 0; 00013 00014 nHistPerCounter = 0; 00015 nCanvasPerCounter = 0; 00016 nHistogram = NBarrel*nKind*nBinPerCounter; // NO directory 00017 nCanvas = 2; 00018 CanvasName.push_back( static_cast<string>("Most Probable Value of Q0 vs TOF counter Number (Barrel part)") ); 00019 CanvasName.push_back( static_cast<string>("Sigma of Q0 vs TOF Counter Number (Barrel part)") ); 00020 nGraphPerCanvas.push_back(1); 00021 nGraphPerCanvas.push_back(1); 00022 00023 m_name = string("calib_barrel_q0"); 00024 00025 int numGraphs = 0; 00026 std::vector<unsigned int>::iterator iter = nGraphPerCanvas.begin(); 00027 for( ; iter!=nGraphPerCanvas.end(); iter++ ) { 00028 numGraphs = numGraphs + (*iter); 00029 } 00030 if( numGraphs != nGraphTotalQ0 ) { 00031 cout << "tofcalgsec::calib_barrel_q0: the number of Graphs is NOT reasonable!!!" << endl; 00032 exit(0); 00033 } 00034 00035 const int qbin = 100; 00036 const double qbegin = 0.0; 00037 const double qend = 5000.0; 00038 00039 // histograms 00040 char hname[256]; 00041 for( unsigned int i=0; i<NBarrel; i++ ) { 00042 m_result.push_back( HepVector(nBarrelQ0,0) ); 00043 00044 sprintf( hname, "Q0-tofid-%i", i ); 00045 m_histograms.push_back( new TH1F( hname, hname, qbin, qbegin, qend ) ); 00046 00047 m_fitresult.push_back( HepVector(nParQ0,0) ); 00048 } 00049 00050 itofid.resize( NBarrel ); 00051 itofiderr.resize( NBarrel ); 00052 itofidstep = 1.0; 00053 for( unsigned int i=0; i<NBarrel; i++ ) { 00054 itofid[i] = i*1.0; 00055 itofiderr[i] = 0.5; 00056 } 00057 }
|
|
00060 { 00061 m_fitresult.clear(); 00062 itofid.clear(); 00063 itofiderr.clear(); 00064 }
|
|
|
|
|
|
Implements TofCalibFit. |
|
Implements TofCalibFit. 00067 { 00068 00069 std::cout << setiosflags(ios::left) << setw(10) << icounter << setw(8) << data->size() << setw(30) << name() << std::endl; 00070 00071 if( data->size() > 0 ) { 00072 std::vector<Record*>::iterator iter = data->begin(); 00073 for( ; iter!=data->end(); iter++ ) { 00074 fillRecord( (*iter), icounter ); 00075 } 00076 } 00077 fitHistogram( icounter ); 00078 00079 if( icounter==(NBarrel-1) ) { 00080 fillGraph(); 00081 fitGraph(); 00082 } 00083 00084 return; 00085 }
|
|
|
|
00112 { 00113 00114 std::vector<double> qmean, qmeanerr; 00115 std::vector<double> qsig, qsigerr; 00116 qmean.resize( NBarrel ); 00117 qmeanerr.resize( NBarrel ); 00118 qsig.resize( NBarrel ); 00119 qsigerr.resize( NBarrel ); 00120 00121 std::vector<HepVector>::iterator iter = m_fitresult.begin(); 00122 for( unsigned int i=0; i<NBarrel; i++, iter++ ) { 00123 qmean[i] = (*iter)[0]; 00124 qmeanerr[i] = (*iter)[1]; 00125 qsig[i] = (*iter)[2]; 00126 qsigerr[i] = (*iter)[3]; 00127 } 00128 00129 TGraphErrors* graph1 = new TGraphErrors( NBarrel, &itofid[0], &qmean[0], &itofiderr[0], &qmeanerr[0]); 00130 graph1->SetTitle( CanvasName[0].c_str() ); 00131 graph1->SetMarkerSize(1.5); 00132 graph1->SetMarkerStyle(20); 00133 graph1->SetMarkerColor(2); 00134 m_graphs.push_back( graph1 ); 00135 00136 TGraphErrors* graph2 = new TGraphErrors( NBarrel, &itofid[0], &qsig[0], &itofiderr[0], &qsigerr[0]); 00137 graph2->SetTitle( CanvasName[1].c_str() ); 00138 graph2->SetMarkerSize(1.5); 00139 graph2->SetMarkerStyle(20); 00140 graph2->SetMarkerColor(4); 00141 m_graphs.push_back( graph2 ); 00142 00143 return; 00144 }
|
|
|
|
00088 { 00089 std::vector<TH1F*>::iterator iter = m_histograms.begin() + icounter; 00090 (*iter)->Fill( r->q0() ); 00091 return; 00092 }
|
|
|
|
00080 { 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<TGraphErrors*>::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("AP"); 00139 } 00140 else { 00141 (*(iter2+k))->Draw("P"); 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<TGraphErrors*>::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("AP"); 00170 } 00171 else { 00172 (*(iter2+k))->Draw("P"); 00173 } 00174 } 00175 iter2 = iter2 + (*it2); 00176 c1->Write(); 00177 } 00178 00179 } 00180 00181 f.Close(); 00182 00183 return; 00184 }
|
|
|
|
00052 { 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 }
|
|
|
|
00147 { 00148 unsigned int number = 0; 00149 std::vector<HepVector>::iterator iter1 = m_result.begin(); 00150 std::vector<HepVector>::iterator iter2 = m_fitresult.begin(); 00151 for( ; iter1!=m_result.end(); iter1++, number++ ) { 00152 (*iter1)[0] = (*(iter2+number))[0]/ (*iter2)[0]; 00153 (*iter1)[1] = (*(iter2+number))[0]; 00154 (*iter1)[2] = (*(iter2+number))[2]; 00155 } 00156 00157 return; 00158 }
|
|
|
|
00095 { 00096 TF1* ld = new TF1("ld", "landau"); 00097 ld->SetLineColor(2); 00098 ld->SetLineWidth(1); 00099 00100 std::vector<TH1F*>::iterator iter1 = m_histograms.begin() + icounter; 00101 std::vector<HepVector>::iterator iter2 = m_fitresult.begin() + icounter; 00102 (*iter1)->Fit( ld, "Q"); 00103 (*iter2)[0] = ld->GetParameter(1); 00104 (*iter2)[1] = ld->GetParError(1); 00105 (*iter2)[2] = ld->GetParameter(2); 00106 (*iter2)[3] = ld->GetParError(2); 00107 00108 return; 00109 }
|
|
00029 { return m_name; }
|
|
00029 { return m_name; }
|
|
00037 { m_tcorrelation = tc; }
|
|
00037 { m_tcorrelation = tc; }
|
|
00036 { return X; }
|
|
00036 { return X; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|