DedxCalibEAng Class Reference

#include <DedxCalibEAng.h>

Inheritance diagram for DedxCalibEAng:

DedxCalib List of all members.

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

IMdcGeomSvcgeosvc
IDedxCorrecSvcexsvc
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< stringm_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

Detailed Description

Definition at line 10 of file DedxCalibEAng.h.


Constructor & Destructor Documentation

DedxCalibEAng::DedxCalibEAng ( const std::string name,
ISvcLocator *  pSvcLocator 
)

Definition at line 18 of file DedxCalibEAng.cxx.

00018 : DedxCalib(name, pSvcLocator){}

DedxCalibEAng::~DedxCalibEAng (  )  [inline]

Definition at line 14 of file DedxCalibEAng.h.

00014 {};


Member Function Documentation

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]

Implements DedxCalib.

Definition at line 17 of file DedxCalibEAng.h.

00017 {}

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]

Implements DedxCalib.

Definition at line 15 of file DedxCalibEAng.h.

00015 {}

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 }


Member Data Documentation

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]

Definition at line 43 of file DedxCalib.h.

Referenced by DedxCalib::set_dEdx().

TH1F* DedxCalibEAng::m_EAngAverdE [private]

Definition at line 26 of file DedxCalibEAng.h.

Referenced by BookHists(), and WriteHists().

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]

Definition at line 44 of file DedxCalib.h.

Referenced by DedxCalib::set_dEdx().

TH1F* DedxCalibEAng::m_neg_EAngAverdE [private]

Definition at line 28 of file DedxCalibEAng.h.

Referenced by BookHists(), and WriteHists().

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]

Definition at line 45 of file DedxCalib.h.

Referenced by DedxCalib::set_dEdx().

TH1F* DedxCalibEAng::m_pos_EAngAverdE [private]

Definition at line 27 of file DedxCalibEAng.h.

Referenced by BookHists(), and WriteHists().

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().


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