00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "iostream.h"
00019
00020
00021 TH1F *hnHitsOffline = new TH1F("hnHitsOffline", "nHits, global tracks", 42, 3.5, 45.5);
00022 TH2F *hdEdx = new TH2F("hdEdx", "dEdx vs p", 1000, 0, 2.5, 1200, 0, 30);
00023
00024 TH1F *hpt = new TH1F("hpt", "pt", 200, 0, 7);
00025
00026
00027 TNtuple *trackNtuple = new TNtuple("trackNtuple", "l3t tracks",
00028 "px:py:pz:r0:phi0:z0:q:nHits:dedx:nDedx:chi2xy:chi2sz");
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 void readL3Events(Int_t nEvents, const Char_t **fileList)
00040 {
00041
00042 cout << endl << endl <<" readL3Events - input # events = " << nEvents << endl;
00043 Int_t ilist=0;
00044 while (fileList[ilist]) {
00045 cout << " readL3Events - input fileList = " << fileList[ilist] << endl;
00046 ilist++;
00047 }
00048
00049 gSystem->Load("St_base");
00050 gSystem->Load("StarRoot");
00051 gSystem->Load("StChain");
00052 gSystem->Load("StUtilities");
00053 gSystem->Load("libglobal_Tables");
00054 gSystem->Load("StAnalysisUtilities");
00055 gSystem->Load("StIOMaker");
00056 gSystem->Load("StarClassLibrary");
00057 gSystem->Load("StEvent");
00058
00059
00060
00061
00062
00063
00064 chain = new StChain("MyChain");
00065
00066
00067 StFileI *setFiles =0;
00068 if (fileList) {
00069 setFiles= new StFile(fileList);
00070 }
00071
00072
00073 StIOMaker *IOMk = new StIOMaker("IO","r",setFiles,"bfcTree");
00074 IOMk->SetIOMode("r");
00075 IOMk->SetBranch("*",0,"0");
00076
00077
00078
00079 IOMk->SetBranch("eventBranch",0,"r");
00080
00081
00082
00083
00084 Int_t iInit = chain->Init();
00085
00086 int istat = 0;
00087 int iEvent = 1;
00088
00089
00090 while (iEvent<(nEvents+1) && istat!=2) {
00091
00092
00093 chain->Clear();
00094
00095
00096 istat = chain->Make(iEvent);
00097 cout << "\n\n====================== ";
00098 cout <<"Working on Event number " << (iEvent) << endl;
00099
00100
00101 myEvent = (StEvent*) chain->GetInputDS("StEvent");
00102 if (!myEvent) {
00103 cout <<"No StEvent found.\n";
00104 break;
00105 }
00106
00107
00108 StL0Trigger* myL0Trigger = myEvent->l0Trigger();
00109 if (!myL0Trigger) {
00110 cout <<"No l0 trigger found.\n";
00111
00112 }
00113 else printf("Trigger Word: 0x%x\n", myL0Trigger->triggerWord());
00114
00115
00116 myL3Trigger = (StL3Trigger*) myEvent->l3Trigger();
00117 if (!myL3Trigger) {
00118 cout <<"No l3 found inside StEvent.\n";
00119 iEvent++;
00120 continue;
00121 }
00122
00123
00124 const StL3EventSummary* myL3EventSummary = myL3Trigger->l3EventSummary();
00125 if (!myL3EventSummary) {
00126 cout << "No l3 event summary found." << endl;
00127 continue;
00128 }
00129
00130
00131 cout << "Global Counters: #processed = " << myL3EventSummary->numberOfProcessedEvents()
00132 << ", #reconstructed = " << myL3EventSummary->numberOfReconstructedEvents()
00133 << ", #tracks = " << myL3EventSummary->numberOfTracks()
00134 << endl;
00135
00136 printf("L0 trigger word: %x\n", myL3EventSummary->l0TriggerWord());
00137
00138
00139 if (myL3EventSummary->unbiasedTrigger()==true)
00140 cout << "unbiased Trigger: YES" << endl;
00141 else
00142 cout << "unbiased Trigger: NO" << endl;
00143
00144
00145 unsigned int nAlgorithms = myL3EventSummary->numberOfAlgorithms();
00146 cout << "Number of L3 algorithms for this run: " << nAlgorithms << endl;
00147 const StSPtrVecL3AlgorithmInfo& myL3AlgInfo = myL3EventSummary->algorithms();
00148 for (int i=0; i<nAlgorithms; i++) {
00149 int algId = myL3AlgInfo[i]->id();
00150 const int nProcessed = myL3AlgInfo[i]->numberOfProcessedEvents();
00151 const int nAccept = myL3AlgInfo[i]->numberOfAcceptedEvents();
00152 const int nBuild = myL3AlgInfo[i]->numberOfBuildEvents();
00153 if (myL3AlgInfo[i]->build()) cout << "**";
00154 cout << " alg id " << algId
00155 << ":\t #proc " << nProcessed
00156 << "\t #accept " << nAccept
00157 << "\t #build " << nBuild
00158 << "\t preScale " << myL3AlgInfo[i]->preScale()
00159 << "\t postScale " << myL3AlgInfo[i]->postScale()
00160 << "\t intPara ";
00161 for (int j=0; j<myL3AlgInfo[i]->intParameterSize(); j++) {
00162 cout << myL3AlgInfo[i]->intParameter(j) << " ";
00163 }
00164 cout << "\t floatPara ";
00165 for (int k=0; k<myL3AlgInfo[i]->floatParameterSize(); k++) {
00166 cout << myL3AlgInfo[i]->floatParameter(k) << " ";
00167 }
00168 cout << endl;
00169 }
00170
00171
00172 const StPtrVecL3AlgorithmInfo& myL3TriggerAlgInfo = myL3EventSummary->algorithmsAcceptingEvent();
00173 cout << "Number of L3 algorithms which triggered this event: "
00174 << myL3TriggerAlgInfo->size() << endl;
00175 cout << "triggered algorithms: ";
00176 for (int i=0; i<myL3TriggerAlgInfo->size(); i++) {
00177 cout << myL3TriggerAlgInfo[i]->id() << " ";
00178 }
00179 cout << endl;
00180
00181
00182 if (myL3Trigger->primaryVertex()) {
00183 cout << "L3 Vertex = ( " << myL3Trigger->primaryVertex()->position()->x()
00184 << ", " << myL3Trigger->primaryVertex()->position()->y()
00185 << ", " << myL3Trigger->primaryVertex()->position()->z()
00186 << " )" << endl;
00187 }
00188
00189
00190 if (false) {
00191 StSPtrVecTrackNode& mtracknodes = (StSPtrVecTrackNode&) myL3Trigger->trackNodes();
00192 cout << " nubmer of tracks " << mtracknodes->size() << endl;
00193 for (Int_t i=0; i<mtracknodes->size(); i++) {
00194
00195 Int_t id = i;
00196 Float_t px = mtracknodes[i]->track(0)->geometry()->momentum()->x();
00197 Float_t py = mtracknodes[i]->track(0)->geometry()->momentum()->y();
00198 Float_t pz = mtracknodes[i]->track(0)->geometry()->momentum()->z();
00199
00200 Short_t nHits = mtracknodes[i]->track(0)->detectorInfo()->numberOfPoints();
00201 Short_t q = mtracknodes[i]->track(0)->geometry()->charge();
00202 Float_t psi = mtracknodes[i]->track(0)->geometry()->psi();
00203 Float_t tanl = tan(mtracknodes[i]->track(0)->geometry()->dipAngle());
00204 Float_t curv = mtracknodes[i]->track(0)->geometry()->curvature();
00205
00206 Float_t r0 = mtracknodes[i]->track(0)->geometry()->origin()->perp();
00207 Float_t phi0 = mtracknodes[i]->track(0)->geometry()->origin()->phi();
00208 Float_t z0 = mtracknodes[i]->track(0)->geometry()->origin()->z();
00209
00210 Float_t dedx = 0;
00211 Short_t nDedx = 0;
00212
00213 Float_t chi2xy = (Float_t) mtracknodes[i]->track(0)->fitTraits()->chi2(0) / nHits;
00214 Float_t chi2sz = (Float_t) mtracknodes[i]->track(0)->fitTraits()->chi2(1) / nHits;
00215
00216 StSPtrVecTrackPidTraits &traits = mtracknodes[i]->track(0)->pidTraits();
00217 StDedxPidTraits *pid;
00218 if (traits.size()) {
00219 pid = dynamic_cast<StDedxPidTraits*>(traits[0]);
00220 if (pid) {
00221 dedx = pid->mean();
00222 nDedx = pid->numberOfPoints();
00223 }
00224 }
00225
00226 trackNtuple->Fill(px, py, pz, r0, phi0, z0,
00227 (Float_t) q, (Float_t) nHits, dedx, (Float_t) nDedx, chi2xy, chi2sz);
00228
00229 Float_t pt = sqrt(px*px +py*py);
00230
00231
00232 hnHitsOffline->Fill(nHits);
00233
00234 hpt->Fill(pt);
00235
00236
00237 if (nHits>22 && dedx>0) {
00238 hdEdx->Fill(mtracknodes[i]->track(0)->geometry()->momentum()->mag(), dedx);
00239 }
00240
00241
00242 if (i<5 || i%1000==0) {
00243 cout << "L3 Track : " << i << "\t";
00244 cout << "px : " << Double_t (mtracknodes[i]->track(0)->geometry()->momentum()->x()) << "\t";
00245 cout << "py : " << Double_t (mtracknodes[i]->track(0)->geometry()->momentum()->y()) << "\t";
00246 cout << "pz : " << Double_t ( mtracknodes[i]->track(0)->geometry()->momentum()->z()) << "\t";
00247
00248
00249
00250
00251
00252 cout << "dca : " << mtracknodes[i]->track(0)->impactParameter() << "\t";
00253 cout << "dedx : " << dedx << "\n";
00254 }
00255 }
00256 }
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272 iEvent++;
00273
00274 }
00275
00276
00277
00278
00279
00280
00281 }
00282
00283
00284
00285
00286 void readL3Events(const Int_t nEvents, const Char_t *file)
00287 {
00288 cout << "*file = " << file << endl;
00289 const char *fileListQQ[]={0,0};
00290 fileListQQ[0]=file;
00291 readL3Events(nEvents, fileListQQ);
00292 }