00001 #include "GaudiKernel/MsgStream.h"
00002
00003 #include <sstream>
00004 #include <string>
00005 #include "TTree.h"
00006 #include "TH1F.h"
00007 #include "TF1.h"
00008 #include "TFile.h"
00009 #include "TStyle.h"
00010 #include "TCanvas.h"
00011
00012 #include "DedxCalibAlg/DedxCalibEAng.h"
00013
00014 using namespace std;
00015
00016 const double StepEAng = (PhiMax-PhiMin)/NumSlices;
00017
00018 DedxCalibEAng::DedxCalibEAng(const std::string& name, ISvcLocator* pSvcLocator): DedxCalib(name, pSvcLocator){}
00019
00020 void DedxCalibEAng::BookHists()
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 }
00054
00055 void DedxCalibEAng::FillHists()
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 }
00113
00114 void DedxCalibEAng::AnalyseHists()
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" );
00168 m_pos_eangle[ip]->Fit(func, "rq");
00169 m_neg_eangle[ip]->Fit(func, "rq");
00170 }
00171 }
00172
00173 void DedxCalibEAng::WriteHists()
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
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
00327
00328
00329 for(int i=0;i<NumSlices;i++) denangle[i] = gain[i];
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 }