00001
00002
00003
00004
00005 #ifndef __CINT__
00006 #include "TROOT.h"
00007 #include "TSystem.h"
00008 #include <iostream.h>
00009 #include "TH1.h"
00010 #include "TH2.h"
00011 #include "TH3.h"
00012 #include "TFile.h"
00013 #include "TTree.h"
00014 #include "TChain.h"
00015 #include "TTreeHelper.h"
00016 #endif
00017
00018 void scan_embed_mudst(
00019
00020 const TString inputMuDst = "/star/data06/embed/andrewar/hiroshi/MuDst/*.MuDst.root",
00021
00022 const Char_t* production = "P08ic",
00023
00024 const Char_t* date = "041909",
00025
00026 )
00027 {
00028 gSystem->Load("StarRoot");
00029
00030
00031
00032 const float VZCut = 30.;
00033 const float yCut = 1;
00034 const float NFitCut = 25.;
00035 const int NCommCut = 10;
00036
00037
00038
00039 const int nchNch = 200; const float maxNch = 1000;
00040 const int nchPt = 80; const float maxPt = 8.0;
00041 const int nchNhits = 50; const float minNhits = 0.; const float maxNhits = 50.;
00042 const int nchDca = 100; const float maxDca = 3.;
00043 const float maxDedx = 20.;
00044 const float NSigmaCut = 2.0;
00045 float mass2 = -1.0;
00046
00047
00048
00049
00050 const Char_t* outputFileName = Form("../MuDst/%s_MuDst_%s.root", production, date);
00051 TString oFile(outputFileName);
00052
00053
00054 TString filePathR(inputMuDst);
00055 cout << endl;
00056 cout << endl;
00057 cout << endl;
00058 cout << " Input MuDst (real data) : " << filePathR.Data() <<endl;
00059
00060 TTreeHelper THmu("MuDst");
00061 THmu.AddFile(filePathR);
00062
00063 TH1D* hMultR=new TH1D("hMultR","Multiplicity",1000,0,1000);
00064
00065 TH1D* nChTotalR = new TH1D("nChTotalR", "nCharged Distribution", 1200, 0, maxNch);
00066
00067 TH2F* dedxR = new TH2F("dedxR", "de/dx vs P", 400, 0.0, 2., 400, 0., maxDedx);
00068 TH1D* hDcax = new TH1D("hDcax", "Distance of Closest Approach x", 1000, 0, maxDca);
00069 TH1D* hDcay = new TH1D("hDcay", "Distance of Closest Approach y", 1000, 0, maxDca);
00070 TH1D* hDcaz = new TH1D("hDcaz", "Distance of Closest Approach z", 1000, 0, maxDca);
00071 TH3D* hDcaR = new TH3D("hDcaR","Nch:Pt:Dca",nchNch,0,maxNch,nchPt,0,maxPt,nchDca,0, maxDca);
00072 TH3D* hNfitR = new TH3D("hNfitR","Nch:Pt:Nhits",nchNch,0,maxNch,nchPt,0,maxPt,nchNhits,minNhits,maxNhits);
00073
00074
00075 TH1D* hNSigmaPi = new TH1D("hNSigmaPi","Sigma Pion",1000,-5000,5000);
00076 TH1D* hNSigmaK = new TH1D("hNSigmaK","Sigma Kaon",1000,-5000,5000);
00077 TH1D* hNSigmaP = new TH1D("hNSigmaP","Sigma Proton",1000,-5000,5000);
00078
00079
00080 TH3D* hPtEtaDcaR = new TH3D("hPtEtaDcaR","Pt:Eta:Dca", nchPt,0,maxPt,200,-1.8,1.8, nchDca,0, maxDca);
00081 TH3D* hPtEtaNfitR = new TH3D("hPtEtaNfitR","Pt:Eta:Nfit",nchPt,0,maxPt,200,-1.8,1.8,nchNhits,0,maxNhits);
00082 hPtEtaDcaR->Sumw2();
00083 hPtEtaNfitR->Sumw2();
00084
00085
00086
00087 const UShort_t *&nNeg= THmu("MuEvent.mRefMultNeg");
00088 const UShort_t *&nPos= THmu("MuEvent.mRefMultPos");
00089
00090 const Float_t *&VXR = THmu("MuEvent.mEventSummary.mPrimaryVertexPos.mX1");
00091 const Float_t *&VYR = THmu("MuEvent.mEventSummary.mPrimaryVertexPos.mX2");
00092 const Float_t *&VZR = THmu("MuEvent.mEventSummary.mPrimaryVertexPos.mX3");
00093
00094 const Int_t &ntrkR = THmu("GlobalTracks");
00095 const UChar_t *&NFitR = THmu("GlobalTracks.mNHitsFit");
00096 const Float_t *&dEdxR = THmu("GlobalTracks.mdEdx");
00097 const Float_t *&PtR = THmu("GlobalTracks.mPt");
00098 const Float_t *&EtaR = THmu("GlobalTracks.mEta");
00099
00100 const Float_t *&dcax = THmu("GlobalTracks.mDCAGlobal.mX1");
00101 const Float_t *&dcay = THmu("GlobalTracks.mDCAGlobal.mX2");
00102 const Float_t *&dcaz = THmu("GlobalTracks.mDCAGlobal.mX3");
00103 const Int_t *&vtxid = THmu("GlobalTracks.mVertexIndex");
00104
00105 const UChar_t *&NHitsR = THmu("GlobalTracks.mNHits");
00106 const Int_t *&NSigmaPion = THmu("GlobalTracks.mNSigmaPion");
00107 const Int_t *&NSigmaKaon = THmu("GlobalTracks.mNSigmaKaon");
00108 const Int_t *&NSigmaProton = THmu("GlobalTracks.mNSigmaProton");
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 int evReal = 0;
00122 int evRealGood = 0;
00123
00124 while(THmu.Next() )
00125 {
00126 hMultR->Fill(*nPos + *nNeg);
00127 evReal++;
00128
00129 if(fabs(*VZR)> VZCut) continue;
00130
00131 evRealGood++;
00132
00133 if( evReal % 100 == 0 ){
00134 cout << Form("MuDst: (Good Event)/(Event number) = %5d/%5d, VZ = %1.4f, Number of primary tracks = %10d",
00135 evRealGood, evReal, VZR, (Int_t)ntrkR)
00136 << endl;
00137 }
00138
00139 for (Int_t itr=0; itr<ntrkR; itr++) {
00140 float dca = sqrt(dcax[itr]*dcax[itr]+dcay[itr]*dcay[itr]+dcaz[itr]*dcaz[itr]);
00141
00142 if (fabs(EtaR[itr]) > yCut) continue;
00143
00144 float p = PtR[itr]*cosh(EtaR[itr]);
00145
00146 hDcax->Fill(dcax[itr]);
00147 hDcay->Fill(dcay[itr]);
00148 hDcaz->Fill(dcaz[itr]);
00149
00150 hNSigmaPi->Fill(NSigmaPion[itr]);
00151 hNSigmaK->Fill(NSigmaKaon[itr]);
00152 hNSigmaP->Fill(NSigmaProton[itr]);
00153
00154
00155
00156 if(NFitR[itr]>= NFitCut && vtxid[itr]==0 && fabs(NSigmaPion[itr]/1000.0) < NSigmaCut)
00157 {
00158 hDcaR->Fill((*nNeg +*nPos), PtR[itr],dca);
00159 hPtEtaDcaR->Fill( PtR[itr],EtaR[itr],dca);
00160 }
00161
00162
00163
00164 if (dca < maxDca && NFitR[itr]>=10 && vtxid[itr]==0 && fabs(NSigmaPion[itr]/1000.0) < NSigmaCut)
00165 {
00166 hNfitR ->Fill((*nNeg +*nPos), PtR[itr], NFitR[itr]);
00167 hPtEtaNfitR ->Fill(PtR[itr], EtaR[itr], NFitR[itr]);
00168 }
00169
00170
00171
00172 if(dca< maxDca && NFitR[itr]>= NFitCut)
00173
00174 dedxR->Fill(p,dEdxR[itr]*1e6);
00175
00176 }
00177
00178 }
00179
00180
00181
00182
00183 cout<< "Creating output file .... "<<oFile; flush(cout);
00184
00185 TFile *fout=new TFile(oFile,"recreate");
00186 fout->cd();
00187
00188
00189
00190
00191 hMultR->Write();
00192 nChTotalR->Write();
00193 dedxR->Write();
00194 hDcaR->Write();
00195 hNfitR-> Write();
00196
00197 hPtEtaNfitR->Write();
00198 hPtEtaDcaR->Write();
00199
00200 fout->GetList()->Sort();
00201
00202 fout->Close();
00203 cout<<" done"<<endl; flush(cout);
00204 }