00001
00002
00003
00004
00005
00006 #include "StReadRare.h"
00007 #include "StRareEvent.h"
00008 #include "StRareTrack.h"
00009 #include "StL3RareTrack.h"
00010 #include "StEventTypes.h"
00011
00012 ClassImp(StReadRare)
00013
00014
00015 StReadRare::StReadRare()
00016 {
00017 mNEvents = 1000000;
00018
00019
00020 mCutFraction = 0.8;
00021 mMinHits = 27;
00022 mMaxDCA = 5;
00023 mMinP = 0.5;
00024 mMaxDedx = 60;
00025
00026
00027 mMinHitsOffline = 29;
00028 mDEdxnHitsRatio = 0.3;
00029
00030
00031 mChain = 0;
00032
00033
00034 mHistoFile = new TString("/direct/star+data01/pwg/spectra/struck/2001/RarePlots.root");
00035 }
00036
00037
00038 StReadRare::StReadRare(Int_t nEvents, Char_t* histoFileName)
00039 {
00040 mNEvents = nEvents;
00041
00042
00043 mCutFraction = 0.8;
00044 mMinHits = 27;
00045 mMaxDCA = 5;
00046 mMinP = 0.5;
00047 mMaxDedx = 60;
00048
00049
00050 mMinHitsOffline = 29;
00051 mDEdxnHitsRatio = 0.3;
00052
00053
00054 mChain = 0;
00055
00056
00057 mHistoFile = new TString(histoFileName);
00058 }
00059
00060
00061 void StReadRare::Init()
00062 {
00063
00064 hOffP = new TH1F("hOffP", "offline p", 100, 0, 10);
00065 hL3P = new TH1F("hL3P", "L3 p", 100, 0, 10);
00066
00067 hL3Dca = new TH1F("hL3Dca", "dca l3 tracks", 400, 0, 20);
00068
00069 hOffdEdx = new TH2F("hOffdEdx", "dedx offline tracks", 1000, 0, 2.5, 1200, 0, 50);
00070 hL3dEdx = new TH2F("hL3dEdx", "dedx l3 tracks", 1000, 0, 2.5, 1200, 0, 50);
00071
00072 hOffZ = new TH1F("hOffZ", "Z=ln(I_m/I_expect(anti-He3)), offline", 60, -3, 3);
00073 hL3Z = new TH1F("hL3Z", "Z=ln(I_m/I_expect(anti-He3)), L3", 60, -3, 3);
00074
00075 hCandidateMatch = new TH1F("hCandidateMatch", "0:offline-L3 match, -1:offline only, +1:L3 only", 10, -2.5, 2.5);
00076 hOffCandidatedEdx = new TH2F("hOffCandidatedEdx", "dedx offline candidate tracks", 800, 0, 5, 1200, 0, 60);
00077 hOffCandidateZ = new TH1F("hOffCandidateZ", "Z=ln(I_m/I_expect(anti-He3)), offline candidate", 60, -3, 3);
00078 hL3CandidatedEdx = new TH2F("hL3CandidatedEdx", "dedx L3 candidate tracks", 800, 0, 5, 1200, 0, 60);
00079 hL3CandidatedEdxMatch = new TH2F("hL3CandidatedEdxMatch", "dedx L3 candidate tracks, match to offline", 800, 0, 5, 1200, 0, 60);
00080 hL3CandidatedEdxTriggeredMatch = new TH2F("hL3CandidatedEdxTriggeredMatch", "dedx L3 candidate tracks, match to offline, triggered", 800, 0, 5, 1200, 0, 60);
00081 hL3CandidateDca = new TH1F("hL3CandidateDca", "dca l3 candidate tracks", 400, 0, 10);
00082 hL3CandidateZ = new TH1F("hL3CandidateZ", "Z=ln(I_m/I_expect(anti-He3)), l3 candidate tracks", 60, -3, 3);
00083
00084
00085
00086 mChain = new TChain("RareTree");
00087 mChain->Add("/direct/star+data02/scratch/struck/test/new291/st_phys*.root");
00088 mChain->Add("/direct/star+data02/scratch/struck/test/new292/st_phys*.root");
00089 mChain->Add("/direct/star+data02/scratch/struck/test/new294/st_phys*.root");
00090
00091
00092
00093
00094
00095
00096
00097 mNEvents = (Int_t) mChain->GetEntries();
00098 printf("Total # events: %i\n", mNEvents);
00099 }
00100
00101
00102 Int_t StReadRare::Run()
00103 {
00104 StRareEvent *event = new StRareEvent();
00105 mChain->SetBranchAddress("StRareEvent", &event);
00106 printf("StReadRare::Start Run.\nTotal # events: %i\n", mNEvents);
00107
00108 for (int i=0; i<mNEvents; i++) {
00109 printf("Event:%d\n",i);
00110 mChain->GetEvent(i);
00111
00112
00113
00114
00115 if (event->l3Flag()==kTRUE) {
00116 printf(" event TRIGGERED!!\n");
00117 }
00118
00119 int candidateIndex = 0;
00120 bool candidateEvent = kFALSE;
00121
00122
00123 for (int j=0; j<event->numberOfTracks(); j++) {
00124 StRareTrack *track = (StRareTrack* )event->getTracks()->At(j);
00125 float p = track->p();
00126 float dedx = track->dedx();
00127 hOffP->Fill(p);
00128 if (dedx>0
00129 && (track->npntfit()>=mMinHitsOffline)
00130 && track->chargesign()<0
00131 && (((float)track->ndedx())/((float)track->npntfit())>=mDEdxnHitsRatio)) {
00132
00133 hOffdEdx->Fill(p, dedx);
00134
00135 float ionExpected = 2 * 4.598 * (1 + 7.89177 / (4 * p*p));
00136 hOffZ->Fill(TMath::Log(dedx/ionExpected));
00137
00138 if (dedx>(mCutFraction * ionExpected)) {
00139 hOffCandidatedEdx->Fill(p, dedx);
00140 hOffCandidateZ->Fill(TMath::Log(dedx/ionExpected));
00141 candidateIndex--;
00142 candidateEvent = kTRUE;
00143 }
00144 }
00145 }
00146
00147
00148 for (int j=0; j<event->numberOfL3Tracks(); j++) {
00149 StL3RareTrack *l3track = (StL3RareTrack* )event->getL3Tracks()->At(j);
00150 float p = l3track->p();
00151 float dedx = l3track->dedx();
00152 hL3P->Fill(p);
00153 hL3Dca->Fill(l3track->dca2d());
00154 if (dedx>0
00155 && (l3track->npntfit()>=mMinHits)
00156 && (l3track->chargesign()<0)
00157 && (l3track->dca2d()<mMaxDCA)) {
00158
00159 hL3dEdx->Fill(p, dedx);
00160
00161 float ionExpected = 2 * 4.598 * (1 + 7.89177 / (4 * p*p));
00162 hL3Z->Fill(TMath::Log(dedx/ionExpected));
00163
00164 if ((p>mMinP)
00165 && (dedx<mMaxDedx)
00166 && (dedx>(mCutFraction*ionExpected))) {
00167 hL3CandidatedEdx->Fill(p, dedx);
00168 hL3CandidateZ->Fill(TMath::Log(dedx/ionExpected));
00169
00170 if (candidateEvent==kTRUE) {
00171 hL3CandidatedEdxMatch->Fill(p, dedx);
00172
00173 if (event->l3Flag()==kTRUE)
00174 hL3CandidatedEdxTriggeredMatch->Fill(p, dedx);
00175 }
00176 candidateIndex++;
00177 candidateEvent = kTRUE;
00178 hL3CandidateDca->Fill(l3track->dca2d());
00179 }
00180 }
00181 }
00182
00183
00184 if (candidateEvent==kTRUE)
00185 hCandidateMatch->Fill(candidateIndex);
00186
00187 }
00188 return 0;
00189 }
00190
00191
00192 Int_t StReadRare::Finish()
00193 {
00194 TFile *rFile = new TFile(mHistoFile->Data(),"RECREATE");
00195 hOffP->Write();
00196 hL3P->Write();
00197 hL3Dca->Write();
00198 hOffdEdx->Write();
00199 hL3dEdx->Write();
00200 hOffZ->Write();
00201 hL3Z->Write();
00202 hCandidateMatch->Write();
00203 hOffCandidatedEdx->Write();
00204 hOffCandidateZ->Write();
00205 hL3CandidatedEdx->Write();
00206 hL3CandidatedEdxMatch->Write();
00207 hL3CandidatedEdxTriggeredMatch->Write();
00208 hL3CandidateDca->Write();
00209 hL3CandidateZ->Write();
00210 rFile->Close();
00211
00212 return 0;
00213 }