/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Tof/tofcalgsec/tofcalgsec-00-02-21/src/calib_barrel_q0.cxx

Go to the documentation of this file.
00001 #include "tofcalgsec/calib_barrel_q0.h"
00002 #include "TF1.h"
00003 
00004 using namespace CLHEP;
00005 
00006 calib_barrel_q0::calib_barrel_q0():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 }
00058 
00059 
00060 calib_barrel_q0::~calib_barrel_q0() {
00061   m_fitresult.clear();
00062   itofid.clear();
00063   itofiderr.clear();
00064 }
00065 
00066 
00067 void calib_barrel_q0::calculate( RecordSet*& data, unsigned int icounter ) {
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 }
00086 
00087 
00088 void calib_barrel_q0::fillRecord( const Record* r, unsigned int icounter ) {
00089   std::vector<TH1F*>::iterator iter = m_histograms.begin() + icounter;
00090   (*iter)->Fill( r->q0() );
00091   return;
00092 }
00093 
00094 
00095 void calib_barrel_q0::fitHistogram( unsigned int icounter ) {
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 }
00110 
00111 
00112 void calib_barrel_q0::fillGraph() {
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   TH1F* graph1 = new TH1F( CanvasName[0].c_str(), CanvasName[0].c_str(), NBarrel, -0.5, NBarrel-0.5 );
00122   graph1->SetMarkerSize(1.5);
00123   graph1->SetMarkerStyle(20);
00124   graph1->SetMarkerColor(2);
00125 
00126   TH1F* graph2 = new TH1F( CanvasName[1].c_str(), CanvasName[1].c_str(), NBarrel, -0.5, NBarrel-0.5 );
00127   graph2->SetMarkerSize(1.5);
00128   graph2->SetMarkerStyle(20);
00129   graph2->SetMarkerColor(4);
00130 
00131   std::vector<HepVector>::iterator iter = m_fitresult.begin();
00132   for( unsigned int i=0; i<NBarrel; i++, iter++ ) {
00133     qmean[i]    = (*iter)[0];
00134     qmeanerr[i] = (*iter)[1];
00135     qsig[i]     = (*iter)[2];
00136     qsigerr[i]  = (*iter)[3];
00137     graph1->SetBinContent( i+1, qmean[i]    );
00138     graph1->SetBinError(   i+1, qmeanerr[i] );
00139     graph2->SetBinContent( i+1, qsig[i]     );
00140     graph2->SetBinError(   i+1, qsigerr[i]  );
00141   }
00142 
00143   m_graphs.push_back( graph1 );
00144   m_graphs.push_back( graph2 );
00145 
00146   return;
00147 }
00148 
00149 
00150 void calib_barrel_q0::fitGraph() {
00151   unsigned int number = 0;
00152   std::vector<HepVector>::iterator iter1 = m_result.begin();
00153   std::vector<HepVector>::iterator iter2 = m_fitresult.begin();
00154   for( ; iter1!=m_result.end(); iter1++, number++ ) {
00155     (*iter1)[0] = (*(iter2+number))[0]/ (*iter2)[0];
00156     (*iter1)[1] = (*(iter2+number))[0];
00157     (*iter1)[2] = (*(iter2+number))[2];
00158   }
00159 
00160   return;
00161 }

Generated on Tue Nov 29 23:14:35 2016 for BOSS_7.0.2 by  doxygen 1.4.7