00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 void dedx(const Char_t *Path="/disk00001/star/auau200/venus412/default/b6_9/year_1b/hadronic_on/tss/",const Char_t *root_file="all2.root")
00023 {
00024
00025
00026
00027 gROOT->Reset();
00028 if (gSystem.Load("St_base")) printf(" Loading DLL \"St_base\" failed \n");
00029 if (gSystem.Load("xdf2root")) printf(" Loading DLL \"xdf2root\" failed \n");
00030 if (gSystem.Load("St_Tables")) printf(" Loading DLL \"St_Tables\" failed \n");
00031
00032 TFile *root_out = 0;
00033
00034 root_out = new TFile(root_file,"RECREATE");
00035 Bool_t drawinit=kFALSE;
00036 Int_t np = 100;
00037 Int_t ndedx = 100;
00038 Int_t fcounter = 0;
00039 Float_t minp = 0.0;
00040 Float_t maxp = 1.5;
00041 Float_t mindedx = 0.0;
00042 Float_t maxdedx = 0.1e-04;
00043
00044 m_p_dedx_rec = new TH2F("p_dedx_rec","p versus dedx (reconstructed)",
00045 np,minp,maxp,ndedx,mindedx,maxdedx);
00046 m_p_dedx_rec->SetYTitle("dedx");
00047 m_p_dedx_rec->SetXTitle("p (GeV)");
00048
00049 c1 = new TCanvas("c1","Particle p by reading STAF table: \"globtrk.h\"",20,10,600,400);
00050 c1->SetGrid();
00051
00052 c1->SetLogz();
00053
00054
00055
00056
00057
00058 TSlider *slider = 0;
00059
00060 St_DataSet *event = 0;
00061 gBenchmark->Start("hsum");
00062 St_FileSet dstdirs(Path);
00063 St_DataSetIter nextxdf(&dstdirs,0);
00064 St_DataSet *set = 0;
00065 St_XDFFile *xdf = 0;
00066 Int_t kUPDATE = 0;
00067 TString path = Path;
00068 while (set = nextxdf()){
00069 if (strcmp(set->GetTitle(),"file") == 0){
00070
00071
00072 if ( strstr(set->GetName(),"dst.xdf") &&
00073 !strstr(set->GetName(),"set174_02_48evts_h_dst.xdf")
00074 ){
00075 if (xdf) delete xdf;
00076
00077 path = Path;
00078 path += set->Path();
00079 Char_t *xdffilename= path.Data();
00080
00081 xdf = new St_XDFFile(xdffilename,"r");
00082 printf ("Open %s\n", xdffilename);
00083 fcounter++;
00084 while (event = xdf.NextEventGet() ) {
00085 St_DataSetIter *dst = 0;
00086 dst = new St_DataSetIter(event);
00087
00088
00089
00090 St_dst_dedx *dedx = (St_dst_dedx *) dst->Find("dst/dst_dedx");
00091 St_dst_track *globtrk = (St_dst_track *) dst->Find("dst/globtrk");
00092
00093 if (dedx && globtrk) {
00094
00095 dst_dedx_st *de = dedx->GetTable();
00096
00097 dst_track_st *trk = globtrk->GetTable();
00098
00099 kUPDATE = dedx->GetNRows()/50;
00100
00101 for (Int_t l = 0; l < dedx->GetNRows(); l++){
00102
00103 dst_dedx_st *d = de + l;
00104
00105 if (d->det_id=2 && d->ndedx > 15) {
00106 Float_t dedx_m = d->dedx[0];
00107 Int_t igl = d->id_track;
00108 Int_t igl_use = igl - 1;
00109
00110
00111 Float_t invpt = trk[igl_use]->invpt;
00112 Float_t pT = 9999.;
00113 if (invpt) pT = 1./TMath::Abs(invpt);
00114 Float_t pz = pT*trk[igl_use]->tanl;
00115 Float_t p = TMath::Sqrt(pT*pT+pz*pz);
00116
00117
00118
00119 m_p_dedx_rec->Fill(p,dedx_m);
00120 }
00121
00122
00123 if (kUPDATE && l && (l%kUPDATE) == 0) {
00124 if ( l==kUPDATE && !drawinit) {
00125 drawinit = kTRUE;
00126 c1->cd();
00127
00128
00129
00130
00131
00132 m_p_dedx_rec->Draw("col");
00133
00134
00135
00136 slider = new TSlider("slider","test",1.05,0,1.1,m_p_dedx_rec->GetMaximum()*1.3,38);
00137 slider->SetFillColor(46);
00138 c1->Update();
00139 }
00140 }
00141 }
00142 if (slider) slider->SetRange(0,Float_t(l)/dedx->GetNRows());
00143 c1->Modified();
00144 c1->Update();
00145
00146 }
00147
00148 delete dst; dst= 0;
00149
00150
00151 if (event) delete event;
00152 event = 0;
00153 c1->Modified();
00154 }
00155 }
00156 }
00157 }
00158 root_out->Write();
00159 printf("\n");
00160 printf(" %d XDF files have been analysed from <%s> directory \n",fcounter,Path);
00161 gBenchmark->Show("hsum");
00162 printf(" This is a finish \n");
00163
00164 }