#include <DedxCalibEAng.h>
Inheritance diagram for DedxCalibEAng:
Public Member Functions | |
DedxCalibEAng (const std::string &name, ISvcLocator *pSvcLocator) | |
~DedxCalibEAng () | |
void | initializing () |
void | BookHists () |
void | genNtuple () |
void | FillHists () |
void | AnalyseHists () |
void | WriteHists () |
StatusCode | initialize () |
StatusCode | execute () |
StatusCode | finalize () |
Protected Member Functions | |
double | cal_dedx_bitrunc (float truncate, std::vector< double > phlist) |
double | cal_dedx (float truncate, std::vector< double > phlist) |
void | getCurvePar () |
void | set_dEdx (int landau, float dEdx, int trkalg, int runflag, int dedxhit_use, float ptrk, float theta, float pl_rp, int vflag[3], double t0) |
void | ReadRecFileList () |
Protected Attributes | |
IMdcGeomSvc * | geosvc |
IDedxCorrecSvc * | exsvc |
float | truncate |
vector< double > | Curve_Para |
vector< double > | Sigma_Para |
int | vFlag [3] |
double | m_dedx_exp [5] |
double | m_ex_sigma [5] |
double | m_pid_prob [5] |
double | m_chi_ex [5] |
vector< string > | m_recFileVector |
int | ParticleFlag |
int | m_calibflag |
int | m_phShapeFlag |
std::string | m_eventType |
std::string | m_recFileList |
std::string | m_rootfile |
std::string | m_curvefile |
Private Attributes | |
TH1F ** | m_eangle |
TH1F ** | m_pos_eangle |
TH1F ** | m_neg_eangle |
TH1F * | m_EAngAverdE |
TH1F * | m_pos_EAngAverdE |
TH1F * | m_neg_EAngAverdE |
Definition at line 10 of file DedxCalibEAng.h.
DedxCalibEAng::DedxCalibEAng | ( | const std::string & | name, | |
ISvcLocator * | pSvcLocator | |||
) |
DedxCalibEAng::~DedxCalibEAng | ( | ) | [inline] |
void DedxCalibEAng::AnalyseHists | ( | ) | [virtual] |
Implements DedxCalib.
Definition at line 114 of file DedxCalibEAng.cxx.
References AsymGauss(), Bes_Common::INFO, Landau(), landaun(), m_eangle, m_neg_eangle, DedxCalib::m_phShapeFlag, m_pos_eangle, msgSvc(), mylan(), NumSlices, and Vavilov().
00115 { 00116 MsgStream log(msgSvc(), name()); 00117 log<<MSG::INFO<<"DedxCalibEAng::AnalyseHists()"<<endreq; 00118 00119 TF1* func; 00120 Double_t entry=0,mean=0,rms=0; 00121 Double_t binmax=0; 00122 Double_t lp[3]={0}; 00123 gStyle->SetOptFit(1111); 00124 for(Int_t ip=0;ip<NumSlices;ip++) 00125 { 00126 entry = m_eangle[ip]->Integral(); 00127 if(entry<10) continue; 00128 mean = m_eangle[ip]->GetMean(); 00129 rms = m_eangle[ip]->GetRMS(); 00130 binmax = m_eangle[ip]->GetMaximumBin(); 00131 lp[1] = m_eangle[ip]->GetBinCenter(binmax); 00132 lp[2] = 200; 00133 lp[0] = (m_eangle[ip]->GetBinContent(binmax)+m_eangle[ip]->GetBinContent(binmax-1)+m_eangle[ip]->GetBinContent(binmax+1))/3; 00134 00135 if(m_phShapeFlag==0) 00136 { 00137 func = new TF1("mylan",mylan,10,3000,4); 00138 func->SetParLimits(0, 0, entry); 00139 func->SetParLimits(1, 0, mean); 00140 func->SetParLimits(2, 10, rms); 00141 func->SetParLimits(3, -1, 0); 00142 func->SetParameters(entry/36., mean-200, rms/2.3, -0.5); 00143 } 00144 else if(m_phShapeFlag==1) 00145 { 00146 func = new TF1("landaun",landaun,10,3000,3); 00147 func->SetParameters(lp[0], lp[1], lp[2] ); 00148 } 00149 else if(m_phShapeFlag==2) 00150 { 00151 func = new TF1("Landau",Landau,10,3000,2); 00152 func->SetParameters(0.7*mean, rms ); 00153 } 00154 else if(m_phShapeFlag==3) 00155 { 00156 func = new TF1("Vavilov",Vavilov,10,3000,2); 00157 func->SetParameters(0.05, 0.6); 00158 } 00159 else if(m_phShapeFlag==4) 00160 { 00161 func = new TF1("AsymGauss",AsymGauss,10,3000,4); 00162 func->SetParameters(entry, mean, rms, 1.0 ); 00163 } 00164 func->SetLineWidth(2.1); 00165 func->SetLineColor(2); 00166 00167 m_eangle[ip]->Fit(func, "rq" );// , "", mean-rms, mean+rms/2); 00168 m_pos_eangle[ip]->Fit(func, "rq");// , "", mean-rms, mean+rms/2); 00169 m_neg_eangle[ip]->Fit(func, "rq");// , "", mean-rms, mean+rms/2); 00170 } 00171 }
void DedxCalibEAng::BookHists | ( | ) | [virtual] |
Implements DedxCalib.
Definition at line 20 of file DedxCalibEAng.cxx.
References genRecEmupikp::i, Bes_Common::INFO, m_EAngAverdE, m_eangle, m_neg_EAngAverdE, m_neg_eangle, m_pos_EAngAverdE, m_pos_eangle, MaxHistValue, MinHistValue, msgSvc(), NumHistBins, NumSlices, PhiMax, PhiMin, and DedxCalib::ReadRecFileList().
00021 { 00022 MsgStream log(msgSvc(), name()); 00023 log<<MSG::INFO<<"DedxCalibEAng::BookHists()"<<endreq; 00024 00025 ReadRecFileList(); 00026 00027 m_eangle = new TH1F*[NumSlices]; 00028 m_pos_eangle = new TH1F*[NumSlices]; 00029 m_neg_eangle = new TH1F*[NumSlices]; 00030 stringstream hlabel; 00031 for(int i=0;i<NumSlices;i++) 00032 { 00033 hlabel.str(""); 00034 hlabel<<"dEdx"<<"_eang"<<i; 00035 m_eangle[i] = new TH1F(hlabel.str().c_str(), hlabel.str().c_str(), NumHistBins, MinHistValue, MaxHistValue); 00036 hlabel.str(""); 00037 hlabel<<"pos_dEdx"<<"_eang"<<i; 00038 m_pos_eangle[i] = new TH1F(hlabel.str().c_str(), hlabel.str().c_str(), NumHistBins, MinHistValue, MaxHistValue); 00039 hlabel.str(""); 00040 hlabel<<"neg_dEdx"<<"_eang"<<i; 00041 m_neg_eangle[i] = new TH1F(hlabel.str().c_str(), hlabel.str().c_str(), NumHistBins, MinHistValue, MaxHistValue); 00042 } 00043 hlabel.str(""); 00044 hlabel<<"dEdxVsEAng"; 00045 m_EAngAverdE = new TH1F(hlabel.str().c_str(),"dEdx & EAng",NumSlices,PhiMin,PhiMax); 00046 hlabel.str(""); 00047 hlabel<<"pos_dEdxVsEAng"; 00048 m_pos_EAngAverdE = new TH1F(hlabel.str().c_str(),"pos_dEdx & EAng",NumSlices,PhiMin,PhiMax); 00049 hlabel.str(""); 00050 hlabel<<"neg_dEdxVsEAng"; 00051 m_neg_EAngAverdE = new TH1F(hlabel.str().c_str(),"neg_dEdx & EAng",NumSlices,PhiMin,PhiMax); 00052 00053 }
double DedxCalib::cal_dedx | ( | float | truncate, | |
std::vector< double > | phlist | |||
) | [protected, inherited] |
Definition at line 127 of file DedxCalib.cxx.
References genRecEmupikp::i.
00128 { 00129 sort(phlist.begin(),phlist.end()); 00130 int smpl = (int)(phlist.size()*(truncate+0.05)); 00131 int min_cut = 0; 00132 double qSum = 0; 00133 unsigned i = 0; 00134 for(vector<double>::iterator ql= phlist.begin();ql!=phlist.end();ql++) 00135 { 00136 i++; 00137 if(i<= smpl && i>=min_cut ) qSum += (*ql); 00138 } 00139 double trunc=-99; 00140 int usedhit = smpl-min_cut+1; 00141 if(usedhit>0) trunc=qSum/usedhit; 00142 00143 return trunc; 00144 }
double DedxCalib::cal_dedx_bitrunc | ( | float | truncate, | |
std::vector< double > | phlist | |||
) | [protected, inherited] |
Definition at line 108 of file DedxCalib.cxx.
References genRecEmupikp::i.
Referenced by DedxCalibLayerGain::AnalyseHists(), DedxCalibRunByRun::FillHists(), DedxCalibMomentum::FillHists(), and DedxCalibCostheta::FillHists().
00109 { 00110 sort(phlist.begin(),phlist.end()); 00111 int smpl = (int)(phlist.size()*(truncate+0.05)); 00112 int min_cut = (int)( phlist.size()*0.05 + 0.5 ); 00113 double qSum = 0; 00114 unsigned i = 0; 00115 for(vector<double>::iterator ql= phlist.begin();ql!=phlist.end();ql++) 00116 { 00117 i++; 00118 if(i<= smpl && i>=min_cut ) qSum += (*ql); 00119 } 00120 double trunc=-99; 00121 int usedhit = smpl-min_cut+1; 00122 if(usedhit>0) trunc=qSum/usedhit; 00123 00124 return trunc; 00125 }
StatusCode DedxCalib::execute | ( | ) | [inherited] |
Definition at line 56 of file DedxCalib.cxx.
References DedxCalib::AnalyseHists(), DedxCalib::FillHists(), DedxCalib::genNtuple(), Bes_Common::INFO, msgSvc(), and DedxCalib::WriteHists().
00057 { 00058 MsgStream log(msgSvc(), name()); 00059 log << MSG::INFO << "DedxCalib execute()" << endreq; 00060 00061 genNtuple(); 00062 FillHists(); 00063 AnalyseHists(); 00064 WriteHists(); 00065 00066 return StatusCode::SUCCESS; 00067 }
void DedxCalibEAng::FillHists | ( | ) | [virtual] |
Implements DedxCalib.
Definition at line 55 of file DedxCalibEAng.cxx.
References DedxCalib::exsvc, genRecEmupikp::i, Iner_DriftDistCut, Bes_Common::INFO, ganga-rec::j, m_eangle, m_neg_eangle, m_pos_eangle, DedxCalib::m_recFileVector, MaxADCValuecut, msgSvc(), Out_DriftDistCut, PhiMax, PhiMin, RPhi_PathMaxCut, IDedxCorrecSvc::StandardHitCorrec(), IDedxCorrecSvc::StandardTrackCorrec(), StepEAng, and deljobs::string.
00056 { 00057 MsgStream log(msgSvc(), name()); 00058 log<<MSG::INFO<<"DedxCalibEAng::FillHists()"<<endreq; 00059 00060 TFile* f; 00061 TTree* n102; 00062 string runlist; 00063 00064 double dedx=0; 00065 float runNO=0,runFlag=0,pathlength=0,wid=0,layid=0,dd_in=0,driftdist=0,eangle=0,zhit=0,costheta=0,tes=0,ptrk=0,charge=0; 00066 cout<<"m_recFileVector.size()= "<<m_recFileVector.size()<<endl; 00067 for(int i=0; i<m_recFileVector.size(); i++) 00068 { 00069 runlist = m_recFileVector[i]; 00070 cout<<"runlist: "<<runlist.c_str()<<endl; 00071 f = new TFile(runlist.c_str()); 00072 n102 = (TTree*)f->Get("n102"); 00073 n102-> SetBranchAddress("adc_raw",&dedx); 00074 n102-> SetBranchAddress("path_rphi",&pathlength); 00075 n102-> SetBranchAddress("wire",&wid); 00076 n102-> SetBranchAddress("layer",&layid); 00077 n102-> SetBranchAddress("doca_in",&dd_in); 00078 n102-> SetBranchAddress("driftdist",&driftdist); 00079 n102-> SetBranchAddress("eangle",&eangle); 00080 n102-> SetBranchAddress("zhit",&zhit); 00081 n102-> SetBranchAddress("runNO",&runNO); 00082 n102-> SetBranchAddress("runFlag",&runFlag); 00083 n102-> SetBranchAddress("costheta1",&costheta); 00084 n102-> SetBranchAddress("t01",&tes); 00085 n102->SetBranchAddress("ptrk1",&ptrk); 00086 n102->SetBranchAddress("charge",&charge); 00087 00088 for(int j=0;j<n102->GetEntries();j++) 00089 { 00090 n102->GetEntry(j); 00091 if(eangle >0.25) eangle = eangle -0.5; 00092 else if(eangle <-0.25) eangle = eangle +0.5; 00093 if(eangle>PhiMin && eangle<PhiMax) 00094 { 00095 if(tes>1400) continue; 00096 if (ptrk<0.1) continue; 00097 if(layid <4) continue; 00098 else if(layid <8) 00099 {if(dedx<MinADCValuecut || dedx>MaxADCValuecut || pathlength>RPhi_PathMaxCut || pathlength<Iner_RPhi_PathMinCut || driftdist>Iner_DriftDistCut) continue;} 00100 else 00101 {if(dedx<MinADCValuecut || dedx>MaxADCValuecut || pathlength>RPhi_PathMaxCut || pathlength<Out_RPhi_PathMinCut || driftdist>Out_DriftDistCut) continue;} 00102 int iEAng = 0; 00103 iEAng = (int) ((eangle-PhiMin)/StepEAng); 00104 dedx = exsvc->StandardHitCorrec(0,runFlag,2,runNO,pathlength,wid,layid,dedx,dd_in,eangle,costheta); 00105 dedx = exsvc->StandardTrackCorrec(0, runFlag, 2, runNO, dedx, costheta, tes); 00106 m_eangle[iEAng]->Fill(dedx); 00107 if(charge>0) m_pos_eangle[iEAng]->Fill(dedx); 00108 if(charge<0) m_neg_eangle[iEAng]->Fill(dedx); 00109 } 00110 } 00111 } 00112 }
StatusCode DedxCalib::finalize | ( | ) | [inherited] |
Definition at line 69 of file DedxCalib.cxx.
References Bes_Common::INFO, and msgSvc().
00070 { 00071 MsgStream log(msgSvc(), name()); 00072 log << MSG::INFO << "DedxCalib finalize()" << endreq; 00073 00074 return StatusCode::SUCCESS; 00075 }
void DedxCalibEAng::genNtuple | ( | ) | [inline, virtual] |
void DedxCalib::getCurvePar | ( | ) | [protected, inherited] |
Definition at line 146 of file DedxCalib.cxx.
References DedxCalib::Curve_Para, genRecEmupikp::i, DedxCalib::m_curvefile, Sigma, DedxCalib::Sigma_Para, and DedxCalib::vFlag.
Referenced by DedxCalib::initialize().
00148 { 00149 if(m_curvefile=="no rootfile") 00150 { 00151 cout<<"no curve file! can not calculate chi!!! "<<endl; 00152 return; 00153 } 00154 00155 double Curve[100]; 00156 double Sigma[100]; 00157 int CurveSize,SigmaSize; 00158 TFile* f = new TFile(m_curvefile.c_str()); 00159 TTree *curve = (TTree*) f->Get("curve"); 00160 TTree *sigma = (TTree*) f->Get("sigma"); 00161 curve->SetBranchAddress("CurveSize",&CurveSize); 00162 curve->SetBranchAddress("curve",Curve); 00163 sigma->SetBranchAddress("SigmaSize",&SigmaSize); 00164 sigma->SetBranchAddress("sigma",Sigma); 00165 curve->GetEntry(0); 00166 sigma->GetEntry(0); 00167 00168 for(int i=0; i<CurveSize; i++) // get the dedx curve parameters 00169 { 00170 cout<<Curve[i]<<endl; 00171 if(i==0) vFlag[0] = (int) Curve[i]; //first element is dedx curve version 00172 else Curve_Para.push_back(Curve[i]); //dedx curve parameters 00173 } 00174 for(int i=0; i<SigmaSize; i++) 00175 { 00176 cout<<Sigma[i]<<endl; 00177 if(i==0) vFlag[1] = (int) Sigma[i]; //dedx sigma version: 2: psip; 3:jpsi 00178 else Sigma_Para.push_back(Sigma[i]); //dedx sigma parameters 00179 } 00180 //if(runflag>0) vFlag[2]=0; 00181 //else vFlag[2]=1; 00182 }
StatusCode DedxCalib::initialize | ( | ) | [inherited] |
Definition at line 24 of file DedxCalib.cxx.
References DedxCalib::BookHists(), calibUtil::ERROR, DedxCalib::exsvc, DedxCalib::geosvc, DedxCalib::getCurvePar(), Bes_Common::INFO, DedxCalib::initializing(), DedxCalib::m_calibflag, msgSvc(), and IDedxCorrecSvc::set_flag().
00025 { 00026 MsgStream log(msgSvc(), name()); 00027 log << MSG::INFO << "DedxCalib initialze()" << endreq; 00028 00029 StatusCode gesc = service("MdcGeomSvc", geosvc); 00030 if (gesc == StatusCode::SUCCESS) 00031 { 00032 log << MSG::INFO <<"MdcGeomSvc is running"<<endreq; 00033 } 00034 else 00035 { 00036 log << MSG::ERROR <<"MdcGeomSvc is failed"<<endreq; 00037 return StatusCode::SUCCESS; 00038 } 00039 00040 StatusCode scex = service("DedxCorrecSvc", exsvc); 00041 if (scex == StatusCode::SUCCESS) { 00042 log << MSG::INFO <<"Hi, DedxCorrectSvc is running"<<endl; 00043 } else { 00044 log << MSG::ERROR <<"DedxCorrectSvc is failed"<<endl; 00045 return StatusCode::SUCCESS; 00046 } 00047 exsvc->set_flag( m_calibflag ); 00048 00049 initializing(); 00050 BookHists(); 00051 getCurvePar(); 00052 00053 return StatusCode::SUCCESS; 00054 }
void DedxCalibEAng::initializing | ( | ) | [inline, virtual] |
void DedxCalib::ReadRecFileList | ( | ) | [protected, inherited] |
Definition at line 89 of file DedxCalib.cxx.
References Bes_Common::INFO, DedxCalib::m_recFileList, DedxCalib::m_recFileVector, msgSvc(), and deljobs::string.
Referenced by DedxCalibWireGain::BookHists(), DedxCalibRunByRun::BookHists(), DedxCalibMomentum::BookHists(), DedxCalibLayerGain::BookHists(), BookHists(), DedxCalibDocaEAng::BookHists(), and DedxCalibCostheta::BookHists().
00090 { 00091 00092 MsgStream log(msgSvc(), name()); 00093 log<<MSG::INFO<<"DedxCalib::ReadRecFileList()"<<endreq; 00094 00095 ifstream filea(m_recFileList.c_str(),ifstream::in); 00096 cout<<m_recFileList.c_str()<<endl; 00097 00098 string runlist; 00099 filea>>runlist; 00100 do 00101 { 00102 m_recFileVector.push_back(runlist); 00103 cout<<runlist.c_str()<<endl; 00104 filea>>runlist; 00105 }while(filea); 00106 }
void DedxCalib::set_dEdx | ( | int | landau, | |
float | dEdx, | |||
int | trkalg, | |||
int | runflag, | |||
int | dedxhit_use, | |||
float | ptrk, | |||
float | theta, | |||
float | pl_rp, | |||
int | vflag[3], | |||
double | t0 | |||
) | [protected, inherited] |
Definition at line 184 of file DedxCalib.cxx.
References DedxCalib::Curve_Para, dedx_pid_exp(), dedx_pid_exp_old(), DedxCalib::m_chi_ex, DedxCalib::m_dedx_exp, DedxCalib::m_ex_sigma, DedxCalib::m_pid_prob, DedxCalib::Sigma_Para, and DedxCalib::vFlag.
Referenced by DedxCalibMomentum::FillHists(), and DedxCalibCostheta::FillHists().
00185 { 00186 //landau: 1:landau distribution; 0:gaus distribution 00187 //pl_rp: 1.5, not know what 00188 //getCurvePar(runflag); 00189 if(runflag>0) vFlag[2]=0; 00190 else vFlag[2]=1; 00191 00192 //some old data with old methods 00193 if(runflag ==1 || runflag ==2 ) 00194 dedx_pid_exp_old( landau, runflag, (float)dEdx, (int)dedxhit_use, 00195 (float)ptrk, (float)theta, (float)t0,(float)pl_rp, 00196 m_dedx_exp, m_ex_sigma, m_pid_prob, m_chi_ex); 00197 //for 2009 psip data and after 00198 else 00199 dedx_pid_exp( vflag, (float)dEdx, trkalg,(int)dedxhit_use, 00200 (float)ptrk, (float)theta, (float)t0,(float)pl_rp, 00201 m_dedx_exp, m_ex_sigma, m_pid_prob, m_chi_ex, Curve_Para, Sigma_Para); 00202 }
void DedxCalibEAng::WriteHists | ( | ) | [virtual] |
Implements DedxCalib.
Definition at line 173 of file DedxCalibEAng.cxx.
References EvtCyclic3::c_str(), count, genRecEmupikp::i, Bes_Common::INFO, m_EAngAverdE, m_eangle, m_neg_EAngAverdE, m_neg_eangle, DedxCalib::m_phShapeFlag, m_pos_EAngAverdE, m_pos_eangle, DedxCalib::m_rootfile, msgSvc(), NumSlices, PhiMin, and StepEAng.
00174 { 00175 MsgStream log(msgSvc(), name()); 00176 log<<MSG::INFO<<"DedxCalibEAng::WriteHists()"<<endreq; 00177 00178 double entryNo[NumSlices]={0},mean[NumSlices]={0},sigma[NumSlices]={0},fitmean[NumSlices]={0},fitmeanerr[NumSlices]={0},fitsigma[NumSlices]={0},gain[NumSlices]={0},chisq[NumSlices]={0}; 00179 double pos_entryNo[NumSlices]={0},pos_mean[NumSlices]={0},pos_sigma[NumSlices]={0},pos_fitmean[NumSlices]={0},pos_fitmeanerr[NumSlices]={0},pos_fitsigma[NumSlices]={0},pos_gain[NumSlices]={0},pos_chisq[NumSlices]={0}; 00180 double neg_entryNo[NumSlices]={0},neg_mean[NumSlices]={0},neg_sigma[NumSlices]={0},neg_fitmean[NumSlices]={0},neg_fitmeanerr[NumSlices]={0},neg_fitsigma[NumSlices]={0},neg_gain[NumSlices]={0},neg_chisq[NumSlices]={0}; 00181 double Ip_eangle[NumSlices]={0},eangle[NumSlices]={0}; 00182 00183 double Norm=0; 00184 int count=0; 00185 for(Int_t ip=0;ip<NumSlices;ip++) 00186 { 00187 Ip_eangle[ip] = ip; 00188 eangle[ip] = (ip+0.5)*StepEAng + PhiMin; 00189 00190 entryNo[ip]= m_eangle[ip]->Integral(); 00191 mean[ip] = m_eangle[ip]->GetMean(); 00192 sigma[ip] = m_eangle[ip]->GetRMS(); 00193 pos_entryNo[ip]= m_pos_eangle[ip]->Integral(); 00194 pos_mean[ip] = m_pos_eangle[ip]->GetMean(); 00195 pos_sigma[ip] = m_pos_eangle[ip]->GetRMS(); 00196 neg_entryNo[ip]= m_neg_eangle[ip]->Integral(); 00197 neg_mean[ip] = m_neg_eangle[ip]->GetMean(); 00198 neg_sigma[ip] = m_neg_eangle[ip]->GetRMS(); 00199 if(entryNo[ip]<10 || pos_entryNo[ip]<10 || neg_entryNo[ip]<10) continue; 00200 00201 if(m_phShapeFlag==0) 00202 { 00203 fitmean[ip] = m_eangle[ip]->GetFunction("mylan")->GetParameter(1); 00204 fitmeanerr[ip] = m_eangle[ip]->GetFunction("mylan")->GetParError(1); 00205 fitsigma[ip] = m_eangle[ip]->GetFunction("mylan")->GetParameter(2); 00206 chisq[ip] = (m_eangle[ip]->GetFunction("mylan")-> GetChisquare())/(m_eangle[ip]->GetFunction("mylan")-> GetNDF()); 00207 00208 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction("mylan")->GetParameter(1); 00209 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction("mylan")->GetParError(1); 00210 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction("mylan")->GetParameter(2); 00211 pos_chisq[ip] = (m_pos_eangle[ip]->GetFunction("mylan")-> GetChisquare())/(m_pos_eangle[ip]->GetFunction("mylan")-> GetNDF()); 00212 00213 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction("mylan")->GetParameter(1); 00214 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction("mylan")->GetParError(1); 00215 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction("mylan")->GetParameter(2); 00216 neg_chisq[ip] = (m_neg_eangle[ip]->GetFunction("mylan")-> GetChisquare())/(m_neg_eangle[ip]->GetFunction("mylan")-> GetNDF()); 00217 } 00218 if(m_phShapeFlag==1) 00219 { 00220 fitmean[ip] = m_eangle[ip]->GetFunction("landaun")->GetParameter(1); 00221 fitmeanerr[ip] = m_eangle[ip]->GetFunction("landaun")->GetParError(1); 00222 fitsigma[ip] = m_eangle[ip]->GetFunction("landaun")->GetParameter(2); 00223 chisq[ip] = (m_eangle[ip]->GetFunction("landaun")-> GetChisquare())/(m_eangle[ip]->GetFunction("mylan")-> GetNDF()); 00224 00225 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction("landaun")->GetParameter(1); 00226 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction("landaun")->GetParError(1); 00227 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction("landaun")->GetParameter(2); 00228 pos_chisq[ip] = (m_pos_eangle[ip]->GetFunction("landaun")-> GetChisquare())/(m_pos_eangle[ip]->GetFunction("landaun")-> GetNDF()); 00229 00230 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction("landaun")->GetParameter(1); 00231 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction("landaun")->GetParError(1); 00232 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction("landaun")->GetParameter(2); 00233 neg_chisq[ip] = (m_neg_eangle[ip]->GetFunction("landaun")-> GetChisquare())/(m_neg_eangle[ip]->GetFunction("landaun")-> GetNDF()); 00234 } 00235 if(m_phShapeFlag==2) 00236 { 00237 fitmean[ip] = m_eangle[ip]->GetFunction("Landau")->GetParameter(1); 00238 fitmeanerr[ip] = m_eangle[ip]->GetFunction("Landau")->GetParError(1); 00239 fitsigma[ip] = m_eangle[ip]->GetFunction("Landau")->GetParameter(2); 00240 chisq[ip] = (m_eangle[ip]->GetFunction("Landau")-> GetChisquare())/(m_eangle[ip]->GetFunction("Landau")-> GetNDF()); 00241 00242 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction("Landau")->GetParameter(1); 00243 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction("Landau")->GetParError(1); 00244 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction("Landau")->GetParameter(2); 00245 pos_chisq[ip] = (m_pos_eangle[ip]->GetFunction("Landau")-> GetChisquare())/(m_pos_eangle[ip]->GetFunction("Landau")-> GetNDF()); 00246 00247 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction("Landau")->GetParameter(1); 00248 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction("Landau")->GetParError(1); 00249 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction("Landau")->GetParameter(2); 00250 neg_chisq[ip] = (m_neg_eangle[ip]->GetFunction("Landau")-> GetChisquare())/(m_neg_eangle[ip]->GetFunction("Landau")-> GetNDF()); 00251 } 00252 if(m_phShapeFlag==3) 00253 { 00254 fitmean[ip] = m_eangle[ip]->GetFunction("Vavilov")->GetParameter(1); 00255 fitmeanerr[ip] = m_eangle[ip]->GetFunction("Vavilov")->GetParError(1); 00256 fitsigma[ip] = m_eangle[ip]->GetFunction("Vavilov")->GetParameter(2); 00257 chisq[ip] = (m_eangle[ip]->GetFunction("Vavilov")-> GetChisquare())/(m_eangle[ip]->GetFunction("Vavilov")-> GetNDF()); 00258 00259 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction("Vavilov")->GetParameter(1); 00260 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction("Vavilov")->GetParError(1); 00261 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction("Vavilov")->GetParameter(2); 00262 pos_chisq[ip] = (m_pos_eangle[ip]->GetFunction("Vavilov")-> GetChisquare())/(m_pos_eangle[ip]->GetFunction("Vavilov")-> GetNDF()); 00263 00264 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction("Vavilov")->GetParameter(1); 00265 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction("Vavilov")->GetParError(1); 00266 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction("Vavilov")->GetParameter(2); 00267 neg_chisq[ip] = (m_neg_eangle[ip]->GetFunction("Vavilov")-> GetChisquare())/(m_neg_eangle[ip]->GetFunction("Vavilov")-> GetNDF()); 00268 } 00269 if(m_phShapeFlag==4) 00270 { 00271 fitmean[ip] = m_eangle[ip]->GetFunction("AsymGauss")->GetParameter(1); 00272 fitmeanerr[ip] = m_eangle[ip]->GetFunction("AsymGauss")->GetParError(1); 00273 fitsigma[ip] = m_eangle[ip]->GetFunction("AsymGauss")->GetParameter(2); 00274 chisq[ip] = (m_eangle[ip]->GetFunction("AsymGauss")-> GetChisquare())/(m_eangle[ip]->GetFunction("AsymGauss")-> GetNDF()); 00275 00276 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction("AsymGauss")->GetParameter(1); 00277 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction("AsymGauss")->GetParError(1); 00278 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction("AsymGauss")->GetParameter(2); 00279 pos_chisq[ip] = (m_pos_eangle[ip]->GetFunction("AsymGauss")-> GetChisquare())/(m_pos_eangle[ip]->GetFunction("AsymGauss")-> GetNDF()); 00280 00281 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction("AsymGauss")->GetParameter(1); 00282 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction("AsymGauss")->GetParError(1); 00283 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction("AsymGauss")->GetParameter(2); 00284 neg_chisq[ip] = (m_neg_eangle[ip]->GetFunction("AsymGauss")-> GetChisquare())/(m_neg_eangle[ip]->GetFunction("AsymGauss")-> GetNDF()); 00285 } 00286 if(entryNo[ip]>1500 && fitmean[ip]>0 && fitmeanerr[ip]>0 && fitmeanerr[ip]<10 && fitsigma[ip]>0 && fitsigma[ip]<200) 00287 { 00288 Norm+=fitmean[ip]; 00289 count++; 00290 } 00291 } 00292 Norm = Norm/count; 00293 // Norm = 550; // use an absolute normalization 00294 cout<<"count= "<<count<<" average value of eangle bins: "<<Norm<<endl; 00295 for(Int_t i=0;i<NumSlices;i++) 00296 { 00297 if(entryNo[i]>10 && fitmean[i]>0 && fitsigma[i]>0) gain[i]=fitmean[i]/Norm; 00298 else{ 00299 gain[i] = 1; 00300 fitmeanerr[i]=10000; 00301 } 00302 if(pos_entryNo[i]>10 && pos_fitmean[i]>0 && pos_fitsigma[i]>0) pos_gain[i]=pos_fitmean[i]/Norm; 00303 else pos_gain[i] = 0; 00304 if(neg_entryNo[i]>10 && neg_fitmean[i]>0 && neg_fitsigma[i]>0) neg_gain[i]=neg_fitmean[i]/Norm; 00305 else neg_gain[i] = 0; 00306 if(gain[i] != 0){ 00307 m_EAngAverdE -> SetBinContent(i+1, gain[i]); 00308 m_EAngAverdE->SetBinError(i+1, fitmeanerr[i]/Norm); 00309 } 00310 if(pos_gain[i] != 0){ 00311 m_pos_EAngAverdE -> SetBinContent(i+1, pos_gain[i]); 00312 m_pos_EAngAverdE->SetBinError(i+1, pos_fitmeanerr[i]/Norm); 00313 } 00314 if(neg_gain[i] != 0){ 00315 m_neg_EAngAverdE -> SetBinContent(i+1, neg_gain[i]); 00316 m_neg_EAngAverdE->SetBinError(i+1, neg_fitmeanerr[i]/Norm); 00317 } 00318 } 00319 00320 log<<MSG::INFO<<"begin getting calibration constant!!! "<<endreq; 00321 double denangle[NumSlices]={0}; 00322 int denangle_entry[1] = {100}; 00323 m_EAngAverdE->Fit("pol1","r","",-0.25,0.25); 00324 double par0 = m_EAngAverdE->GetFunction("pol1")->GetParameter(0); 00325 double par1 = m_EAngAverdE->GetFunction("pol1")->GetParameter(1); 00326 // double par2 = m_EAngAverdE->GetFunction("pol2")->GetParameter(2); 00327 // par1 = -par1; // a trick is used here, because we don't really understand 00328 // for(int i=0;i<NumSlices;i++) denangle[i] = (par0+par1*eangle[i])/par0;//+par2*pow(eangle[i],2))/par0; 00329 for(int i=0;i<NumSlices;i++) denangle[i] = gain[i]; // use raw values instead of fit 00330 00331 log<<MSG::INFO<<"begin generating root file!!! "<<endreq; 00332 TFile* f = new TFile(m_rootfile.c_str(), "recreate"); 00333 for(Int_t ip=0;ip<NumSlices;ip++) 00334 { 00335 m_eangle[ip]->Write(); 00336 m_pos_eangle[ip]->Write(); 00337 m_neg_eangle[ip]->Write(); 00338 } 00339 m_EAngAverdE->Write(); 00340 m_pos_EAngAverdE->Write(); 00341 m_neg_EAngAverdE->Write(); 00342 00343 TTree* entracalib = new TTree("entracalib","entracalib"); 00344 entracalib->Branch("1denangle", denangle, "denangle[100]/D"); 00345 entracalib->Branch("1denangle_entry", denangle_entry, "denangle_entry[1]/I"); 00346 entracalib->Fill(); 00347 entracalib-> Write(); 00348 00349 TTree* ddgcalib = new TTree("ddgcalib", "ddgcalib"); 00350 ddgcalib -> Branch("hits", entryNo, "entryNo[100]/D"); 00351 ddgcalib -> Branch("mean", mean, "mean[100]/D"); 00352 ddgcalib -> Branch("sigma", sigma, "sigma[100]/D"); 00353 ddgcalib -> Branch("fitmean", fitmean, "fitmean[100]/D"); 00354 ddgcalib -> Branch("fitmeanerr", fitmeanerr, "fitmeanerr[100]/D"); 00355 ddgcalib -> Branch("chi", fitsigma, "fitsigma[100]/D"); 00356 ddgcalib -> Branch("gain", gain, "gain[100]/D"); 00357 ddgcalib -> Branch("chisq", chisq, "chisq[100]/D"); 00358 ddgcalib -> Branch("pos_hits", pos_entryNo, "pos_entryNo[100]/D"); 00359 ddgcalib -> Branch("pos_mean", pos_mean, "pos_mean[100]/D"); 00360 ddgcalib -> Branch("pos_sigma", pos_sigma, "pos_sigma[100]/D"); 00361 ddgcalib -> Branch("pos_fitmean", pos_fitmean, "pos_fitmean[100]/D"); 00362 ddgcalib -> Branch("pos_fitmeanerr", pos_fitmeanerr, "pos_fitmeanerr[100]/D"); 00363 ddgcalib -> Branch("pos_chi", pos_fitsigma, "pos_fitsigma[100]/D"); 00364 ddgcalib -> Branch("pos_gain", pos_gain, "pos_gain[100]/D"); 00365 ddgcalib -> Branch("pos_chisq", pos_chisq, "pos_chisq[100]/D"); 00366 ddgcalib -> Branch("neg_hits", neg_entryNo, "neg_entryNo[100]/D"); 00367 ddgcalib -> Branch("neg_mean", neg_mean, "neg_mean[100]/D"); 00368 ddgcalib -> Branch("neg_sigma", neg_sigma, "neg_sigma[100]/D"); 00369 ddgcalib -> Branch("neg_fitmean", neg_fitmean, "neg_fitmean[100]/D"); 00370 ddgcalib -> Branch("neg_fitmeanerr", neg_fitmeanerr, "neg_fitmeanerr[100]/D"); 00371 ddgcalib -> Branch("neg_chi", neg_fitsigma, "neg_fitsigma[100]/D"); 00372 ddgcalib -> Branch("neg_gain", neg_gain, "neg_gain[100]/D"); 00373 ddgcalib -> Branch("neg_chisq", neg_chisq, "neg_chisq[100]/D"); 00374 ddgcalib -> Branch("Ip_eangle", Ip_eangle, "Ip_eangle[100]/D"); 00375 ddgcalib -> Branch("eangle", eangle, "eangle[100]/D"); 00376 ddgcalib -> Fill(); 00377 ddgcalib -> Write(); 00378 f->Close(); 00379 00380 TCanvas c1("c1", "canvas", 500, 400); 00381 c1.Print((m_rootfile+".ps[").c_str()); 00382 m_EAngAverdE->Draw(); 00383 c1.Print((m_rootfile+".ps").c_str()); 00384 m_pos_EAngAverdE->Draw(); 00385 c1.Print((m_rootfile+".ps").c_str()); 00386 m_neg_EAngAverdE->Draw(); 00387 c1.Print((m_rootfile+".ps").c_str()); 00388 for(Int_t ip=0;ip<NumSlices;ip++) 00389 { 00390 m_eangle[ip]->Draw(); 00391 c1.Print((m_rootfile+".ps").c_str()); 00392 } 00393 for(Int_t ip=0;ip<NumSlices;ip++) 00394 { 00395 m_pos_eangle[ip]->Draw(); 00396 c1.Print((m_rootfile+".ps").c_str()); 00397 } 00398 for(Int_t ip=0;ip<NumSlices;ip++) 00399 { 00400 m_neg_eangle[ip]->Draw(); 00401 c1.Print((m_rootfile+".ps").c_str()); 00402 } 00403 c1.Print((m_rootfile+".ps]").c_str()); 00404 00405 for(Int_t ip=0;ip<NumSlices;ip++) 00406 { 00407 delete m_eangle[ip]; 00408 delete m_pos_eangle[ip]; 00409 delete m_neg_eangle[ip]; 00410 } 00411 delete m_EAngAverdE; 00412 delete m_pos_EAngAverdE; 00413 delete m_neg_EAngAverdE; 00414 00415 }
vector<double> DedxCalib::Curve_Para [protected, inherited] |
Definition at line 39 of file DedxCalib.h.
Referenced by DedxCalib::getCurvePar(), and DedxCalib::set_dEdx().
IDedxCorrecSvc* DedxCalib::exsvc [protected, inherited] |
Definition at line 30 of file DedxCalib.h.
Referenced by DedxCalibWireGain::FillHists(), DedxCalibRunByRun::FillHists(), DedxCalibMomentum::FillHists(), DedxCalibLayerGain::FillHists(), FillHists(), DedxCalibDocaEAng::FillHists(), DedxCalibCostheta::FillHists(), and DedxCalib::initialize().
IMdcGeomSvc* DedxCalib::geosvc [protected, inherited] |
Definition at line 29 of file DedxCalib.h.
Referenced by DedxCalibEvent::genNtuple(), and DedxCalib::initialize().
int DedxCalib::m_calibflag [protected, inherited] |
Definition at line 51 of file DedxCalib.h.
Referenced by DedxCalib::DedxCalib(), and DedxCalib::initialize().
double DedxCalib::m_chi_ex[5] [protected, inherited] |
Definition at line 46 of file DedxCalib.h.
Referenced by DedxCalibMomentum::FillHists(), DedxCalibCostheta::FillHists(), and DedxCalib::set_dEdx().
std::string DedxCalib::m_curvefile [protected, inherited] |
Definition at line 56 of file DedxCalib.h.
Referenced by DedxCalib::DedxCalib(), and DedxCalib::getCurvePar().
double DedxCalib::m_dedx_exp[5] [protected, inherited] |
TH1F* DedxCalibEAng::m_EAngAverdE [private] |
TH1F** DedxCalibEAng::m_eangle [private] |
Definition at line 23 of file DedxCalibEAng.h.
Referenced by AnalyseHists(), BookHists(), FillHists(), and WriteHists().
std::string DedxCalib::m_eventType [protected, inherited] |
Definition at line 53 of file DedxCalib.h.
Referenced by DedxCalib::DedxCalib(), and DedxCalibEvent::genNtuple().
double DedxCalib::m_ex_sigma[5] [protected, inherited] |
TH1F* DedxCalibEAng::m_neg_EAngAverdE [private] |
TH1F** DedxCalibEAng::m_neg_eangle [private] |
Definition at line 25 of file DedxCalibEAng.h.
Referenced by AnalyseHists(), BookHists(), FillHists(), and WriteHists().
int DedxCalib::m_phShapeFlag [protected, inherited] |
Definition at line 52 of file DedxCalib.h.
Referenced by DedxCalibWireGain::AnalyseHists(), DedxCalibLayerGain::AnalyseHists(), AnalyseHists(), DedxCalibDocaEAng::AnalyseHists(), DedxCalib::DedxCalib(), DedxCalibWireGain::WriteHists(), DedxCalibLayerGain::WriteHists(), WriteHists(), and DedxCalibDocaEAng::WriteHists().
double DedxCalib::m_pid_prob[5] [protected, inherited] |
TH1F* DedxCalibEAng::m_pos_EAngAverdE [private] |
TH1F** DedxCalibEAng::m_pos_eangle [private] |
Definition at line 24 of file DedxCalibEAng.h.
Referenced by AnalyseHists(), BookHists(), FillHists(), and WriteHists().
std::string DedxCalib::m_recFileList [protected, inherited] |
Definition at line 54 of file DedxCalib.h.
Referenced by DedxCalib::DedxCalib(), and DedxCalib::ReadRecFileList().
vector<string> DedxCalib::m_recFileVector [protected, inherited] |
Definition at line 48 of file DedxCalib.h.
Referenced by DedxCalibRunByRun::BookHists(), DedxCalibWireGain::FillHists(), DedxCalibRunByRun::FillHists(), DedxCalibMomentum::FillHists(), DedxCalibLayerGain::FillHists(), FillHists(), DedxCalibDocaEAng::FillHists(), DedxCalibCostheta::FillHists(), and DedxCalib::ReadRecFileList().
std::string DedxCalib::m_rootfile [protected, inherited] |
Definition at line 55 of file DedxCalib.h.
Referenced by DedxCalib::DedxCalib(), DedxCalibWireGain::WriteHists(), DedxCalibRunByRun::WriteHists(), DedxCalibMomentum::WriteHists(), DedxCalibLayerGain::WriteHists(), WriteHists(), DedxCalibDocaEAng::WriteHists(), and DedxCalibCostheta::WriteHists().
int DedxCalib::ParticleFlag [protected, inherited] |
Definition at line 50 of file DedxCalib.h.
Referenced by DedxCalib::DedxCalib(), DedxCalibMomentum::FillHists(), DedxCalibCostheta::FillHists(), and DedxCalibEvent::genNtuple().
vector<double> DedxCalib::Sigma_Para [protected, inherited] |
Definition at line 40 of file DedxCalib.h.
Referenced by DedxCalib::getCurvePar(), and DedxCalib::set_dEdx().
float DedxCalib::truncate [protected, inherited] |
Definition at line 33 of file DedxCalib.h.
Referenced by DedxCalibLayerGain::AnalyseHists(), DedxCalib::DedxCalib(), DedxCalibRunByRun::FillHists(), DedxCalibMomentum::FillHists(), and DedxCalibCostheta::FillHists().
int DedxCalib::vFlag[3] [protected, inherited] |
Definition at line 41 of file DedxCalib.h.
Referenced by DedxCalibMomentum::FillHists(), DedxCalibCostheta::FillHists(), DedxCalib::getCurvePar(), and DedxCalib::set_dEdx().