00001
00002
00003
00004
00005
00007
00008 #include "PhysicalConstants.h"
00009 #include <math.h>
00010 #include "TROOT.h"
00011 #include "TMath.h"
00012 #include "SystemOfUnits.h"
00013 #include "StQABookHist.h"
00014 #include "TH2.h"
00015 #include "TH3.h"
00016
00017 #include "StEventQAMaker.h"
00018 #include "StEventTypes.h"
00019 #include "StDcaGeometry.h"
00020 #include "StMcEventTypes.hh"
00021 #include "StTpcDedxPidAlgorithm.h"
00022 #include "HitHistograms.h"
00023 #include "StTpcDb/StTpcDb.h"
00024 #include "StarClassLibrary/StTimer.hh"
00025 #include "StMessMgr.h"
00026 #include "StEmcUtil/geometry/StEmcGeom.h"
00027 #include "StEmcUtil/others/StEmcMath.h"
00028 #include "StarClassLibrary/BetheBloch.h"
00029
00030 #include "StPmdUtil/StPmdCollection.h"
00031 #include "StPmdUtil/StPmdDetector.h"
00032 #include "StPmdUtil/StPmdMapUtil.h"
00033 #include "StPhmdCollection.h"
00034 #include "StPhmdDetector.h"
00035 #include "StPhmdModule.h"
00036
00037 #include "StTofUtil/tofPathLength.hh"
00038 #include "tables/St_tofTotCorr_Table.h"
00039
00040 #include "StBTofCollection.h"
00041 #include "StBTofHit.h"
00042 #include "StBTofPidTraits.h"
00043
00044 static StEmcGeom* emcGeom[4];
00045
00046
00047
00048 static float ftpcPadrowZPos[20] = {162.75,171.25,184.05,192.55,205.35,
00049 213.85,226.65,235.15,247.95,256.45,
00050 -162.75,-171.25,-184.05,-192.55,-205.35,
00051 -213.85,-226.65,-235.15,-247.95,-256.45};
00052
00053 ClassImp(StEventQAMaker)
00054
00055 Bool_t isTriggerInSubRange(const StTriggerId* tr, UInt_t lo, UInt_t hi) {
00056
00057
00058
00059 vector<unsigned int> idVec = tr->triggerIds();
00060 for (UInt_t i=lo; i<=hi; i++) {
00061 UInt_t j = i - ((i/1000)*1000);
00062 for (UInt_t k=0; k<idVec.size(); k++)
00063 if (idVec[k] >= 10000 &&
00064 j == (idVec[k] - ((idVec[k]/1000)*1000))) return kTRUE;
00065 }
00066 return kFALSE;
00067 }
00068 Bool_t isTriggerInRange(const StTriggerId* tr, UInt_t lo, UInt_t hi) {
00069 for (UInt_t i=lo; i<=hi; i++)
00070 if (tr->isTrigger(i)) return kTRUE;
00071 return kFALSE;
00072 }
00073 Bool_t isTriggerAmong(const StTriggerId* tr, UInt_t n, ... ) {
00074 va_list ap;
00075 va_start(ap,n);
00076 Bool_t is=kFALSE;
00077 for (UInt_t i=0; (!is) && (i<n); i++)
00078 if (tr->isTrigger(va_arg(ap, unsigned int))) is=kTRUE;
00079 va_end(ap);
00080 return is;
00081 }
00082
00083
00084 StEventQAMaker::StEventQAMaker(const char *name, const char *title) :
00085 StQAMakerBase(name,title,"StE"), event(0), mHitHist(0), mPmdGeom(0), maputil(0) {
00086 mRunNumber = -1;
00087 silHists = kFALSE;
00088 ftpHists = kFALSE;
00089 hitsAvail = kTRUE;
00090 vertExists = -1.;
00091 }
00092
00093
00094 StEventQAMaker::~StEventQAMaker() {
00095 if (mHitHist) delete mHitHist;
00096 if (mPmdGeom) delete mPmdGeom;
00097 if (maputil) delete maputil;
00098 for (Int_t i=0; i<4; i++) {if (emcGeom[i]) delete emcGeom[i];}
00099 }
00100
00101
00102
00103 Int_t StEventQAMaker::Finish() {
00104
00105 return StMaker::Finish();
00106 }
00107
00108
00109
00110 Int_t StEventQAMaker::Init() {
00111
00112 return StQAMakerBase::Init();
00113 }
00114
00115
00116
00118 Int_t StEventQAMaker::InitRun(int runnumber) {
00119
00120 if(! mHitHist){
00121 TString hname = QAMakerType;
00122 hname += "QaDedxAllSectors";
00123 mHitHist = new HitHistograms(hname.Data(),"dE/dx for all TPC sectors",
00124 100,0.,1.e-5,2,this);
00125 }
00126
00127 if ((gROOT->GetClass("StEmcMath")) && (gROOT->GetClass("StEmcGeom"))) {
00128 for(Int_t i=0; i<4; i++) {emcGeom[i] = StEmcGeom::getEmcGeom(i+1);}
00129 }
00130
00131
00132 TDataSet *mDbDataSet = GetDataBase("Calibrations/tof");
00133 St_tofTotCorr* tofTotCorr = static_cast<St_tofTotCorr*>(mDbDataSet->Find("tofTotCorr"));
00134 if(!tofTotCorr) {
00135 gMessMgr->Error("unable to get tof TotCorr table parameters","OS");
00136 return kStWarn;
00137 }
00138 tofTotCorr_st* totCorr = static_cast<tofTotCorr_st*>(tofTotCorr->GetArray());
00139
00140 for(Int_t i=0;i<mNVPD;i++) {
00141 short trayId = totCorr[i].trayId;
00142 short cellId = totCorr[i].cellId;
00143
00144 if(trayId==mEastVpdTrayId) mEastVpdCorr[cellId-1] = totCorr[i].corr[0];
00145 if(trayId==mWestVpdTrayId) mWestVpdCorr[cellId-1] = totCorr[i].corr[0];
00146 }
00147
00148 return kStOK;
00149 }
00150
00151
00153 Int_t StEventQAMaker::Make() {
00154
00155 hitsAvail = kTRUE;
00156 n_prim_good = 0;
00157 n_glob_good = 0;
00158
00159 event = (StEvent*) GetInputDS("StEvent");
00160 if (!event) {
00161 gMessMgr->Error("StEventQAMaker::Make(): no event found!");
00162 return kStErr;
00163 }
00164 Bool_t realData = event->info() && (event->info()->type() == "NONE" ||
00165 event->info()->type() == "Collision");
00166 if (eventCount==0) {
00167 if (histsSet == StQA_Undef) {
00168 if (realData) {
00169 histsSet = StQA_AuAuOld;
00170 } else {
00171
00172 histsSet = StQA_MC;
00173 }
00174 }
00175 BookHistTrigger();
00176 }
00177 UInt_t tword = 0;
00178 Bool_t doEvent = kTRUE;
00179 Int_t evClasses[32];
00180 memset(evClasses,0,32*sizeof(Int_t));
00181 Int_t nEvClasses = 1;
00182 Int_t run_num = event->runId();
00183
00184
00185 Int_t run_year = (run_num+727000)/1000000;
00186 if (allTrigs) {
00187
00188 histsSet = StQA_pp;
00189
00190 } else if (run_year <= 3) {
00191
00192
00193 StTrigger* l0Trig = event->l0Trigger();
00194 if ((l0Trig) && (run_year != 1)) {
00195 if (realData) doEvent = kFALSE;
00196 tword = l0Trig->triggerWord();
00197 if (tword) {
00198 if ((tword >= 0x1000) && (tword < 0x1100)) {
00199 mTrigWord->Fill(1.);
00200 doEvent = kTRUE;
00201 } else if ((tword >= 0x1100) && (tword < 0x1200)) {
00202 mTrigWord->Fill(2.);
00203 doEvent = kTRUE;
00204 } else if ((tword >= 0x1200) && (tword < 0x2000)) {
00205 mTrigWord->Fill(3.);
00206 doEvent = kTRUE;
00207 } else if ((tword >= 0x2000) && (tword < 0x3000)) {
00208 mTrigWord->Fill(4.);
00209 doEvent = kTRUE;
00210 if ((eventCount==0) && (histsSet==StQA_AuAuOld)) histsSet = StQA_pp;
00211 } else if (tword == 0xF200) {
00212 mTrigWord->Fill(7.);
00213 } else {
00214 mTrigWord->Fill(8.);
00215 }
00216 } else {
00217 if (realData)
00218 gMessMgr->Warning("StEventQAMaker::Make(): trigger word=0 !!!!!");
00219 }
00220 } else {
00221 gMessMgr->Warning("StEventQAMaker::Make(): No trigger info...processing anyhow");
00222 }
00223
00224 } else {
00225
00226
00227 StTriggerIdCollection* trigIdColl = event->triggerIdCollection();
00228 const StTriggerId* trigId = ((trigIdColl) ? trigIdColl->nominal() : 0);
00229 if (trigId) {
00230 histsSet = StQA_Undef;
00231 if (run_num < 4363000) histsSet = StQA_dAu;
00232 else if (run_num < 5120000) histsSet = StQA_AuAu;
00233 else if (run_num < 5999999) histsSet = StQA_pp;
00234 if (realData) doEvent = kFALSE;
00235 nEvClasses=0;
00236 tword = trigId->mask();
00237
00238
00239
00240
00241
00242
00243
00244
00245 Bool_t CONVENTION2012 = (run_num > 13077000);
00246
00247
00248
00249 if (isTriggerAmong(trigId,4,2001,2002,2003,2004)) {
00250 mTrigWord->Fill(1.);
00251 doEvent = kTRUE;
00252 evClasses[nEvClasses] = 1;
00253 nEvClasses++;
00254 histsSet = StQA_dAu;
00255 }
00256 if (isTriggerAmong(trigId,2,2201,2202)) {
00257 mTrigWord->Fill(3.);
00258 doEvent = kTRUE;
00259 evClasses[nEvClasses] = 2;
00260 nEvClasses++;
00261 histsSet = StQA_dAu;
00262 }
00263 if ((nEvClasses==0) && (isTriggerInRange(trigId,2000,2999))) {
00264 mTrigWord->Fill(8.);
00265 evClasses[nEvClasses] = 3;
00266 nEvClasses++;
00267 histsSet = StQA_dAu;
00268 }
00269
00270
00271
00272 if ((nEvClasses==0) && (isTriggerInRange(trigId,1000,1999))) {
00273 mTrigWord->Fill(1.);
00274 doEvent = kTRUE;
00275 evClasses[nEvClasses] = 1;
00276 nEvClasses++;
00277 histsSet = StQA_pp;
00278 }
00279
00280
00281
00282 if (isTriggerInSubRange(trigId,0,99) ||
00283 ((!CONVENTION2012) && run_year >= 12 && isTriggerInSubRange(trigId,100,199))) {
00284 mTrigWord->Fill(1.);
00285 doEvent = kTRUE;
00286 evClasses[nEvClasses] = 1;
00287 nEvClasses++;
00288 histsSet = StQA_AuAu;
00289 }
00290 if (isTriggerInSubRange(trigId,100,199) && (CONVENTION2012 || run_year < 12)) {
00291 mTrigWord->Fill(2.);
00292 doEvent = kTRUE;
00293 evClasses[nEvClasses] = 2;
00294 nEvClasses++;
00295 histsSet = StQA_AuAu;
00296 }
00297 if (isTriggerInSubRange(trigId,200,299) ||
00298 ((!CONVENTION2012) && run_year >= 9 && isTriggerInSubRange(trigId,500,599)) ||
00299 (CONVENTION2012 && isTriggerInSubRange(trigId,300,399))) {
00300 mTrigWord->Fill(5.);
00301 doEvent = kTRUE;
00302 evClasses[nEvClasses] = 3;
00303 nEvClasses++;
00304 histsSet = StQA_AuAu;
00305 }
00306 if (isTriggerInSubRange(trigId,600,999)) {
00307 mTrigWord->Fill(6.);
00308 if (run_year >= 9) doEvent = kTRUE;
00309 evClasses[nEvClasses] = 4;
00310 nEvClasses++;
00311 histsSet = StQA_AuAu;
00312 }
00313 if ((run_year >= 10 && isTriggerInSubRange(trigId,400,499)) ||
00314 (CONVENTION2012 && isTriggerInSubRange(trigId,500,599))) {
00315 mTrigWord->Fill(4.);
00316 doEvent = kTRUE;
00317 evClasses[nEvClasses] = 5;
00318 nEvClasses++;
00319 histsSet = StQA_AuAu;
00320 }
00321
00322 } else {
00323 gMessMgr->Warning("StEventQAMaker::Make(): No trigger info");
00324 }
00325 }
00326 if (run_year >=13) {
00327 if (realData) histsSet = StQA_run12;
00328 } else if (run_year >=9) {
00329 if (realData) histsSet = StQA_run8;
00330 } else silHists = kTRUE;
00331 if (run_year < 13) ftpHists = kTRUE;
00332
00333
00334 for (int bitn=0; bitn<32; bitn++) {
00335 if (tword>>(bitn) & 1U)
00336 mTrigBits->Fill((Float_t) bitn);
00337 }
00338
00339 if (!doEvent) {
00340 gMessMgr->Message() << "StEventQAMaker::Make(): "
00341 << "skipping because trigger word=" << tword << endm;
00342 return kStOk;
00343 }
00344
00345 if (!mNullPrimVtx) BookHist();
00346
00347 multiplicity = event->trackNodes().size();
00348 if (allTrigs) {
00349 evClasses[0] = 1;
00350 } else {
00351 switch (histsSet) {
00352 case (StQA_AuAuOld): {
00353 if (multiplicity < 50) evClasses[0] = 0;
00354 else if (multiplicity < 500) evClasses[0] = 1;
00355 else if (multiplicity < 2500) evClasses[0] = 2;
00356 else evClasses[0] = 3;
00357 break;
00358 }
00359 case (StQA_run8) :
00360 case (StQA_run12):
00361 case (StQA_AuAu) :
00362 case (StQA_dAu) : break;
00363 default: evClasses[0] = 1;
00364 }
00365 }
00366
00367 int makeStat = kStOk;
00368
00369
00370
00371 primVtx = event->primaryVertex();
00372 if (primVtx) {
00373 Float_t min_rank = -1e6;
00374 switch (primVtx->vertexFinderId()) {
00375 case minuitVertexFinder : min_rank = -5; break;
00376 case ppvVertexFinder :
00377 case ppvNoCtbVertexFinder : min_rank = 0; break;
00378 default : break;
00379 }
00380 if (primVtx->ranking() >= min_rank &&
00381 ((float) (primVtx->numMatchesWithBEMC() +
00382 primVtx->numMatchesWithEEMC() +
00383 primVtx->numMatchesWithBTOF() +
00384 primVtx->numTracksCrossingCentralMembrane())) >
00385 ((float) (primVtx->numberOfDaughters())) * 0.199) {
00386
00387 vertExists = 1.;
00388 } else {
00389 LOG_WARN << "questionable primary vertex found" << endm;
00390 vertExists = 0.;
00391 }
00392 fillHists = kTRUE;
00393 } else {
00394 vertExists = -1.;
00395 fillHists = kFALSE;
00396 LOG_WARN << "no primary vertex found!" << endm;
00397 }
00398 mNullPrimVtx->Fill(vertExists);
00399
00400 for (int i=0; i<nEvClasses; i++) {
00401 eventClass = evClasses[i];
00402 makeStat = StQAMakerBase::Make();
00403 if ((evClasses[i]) && (histsSet != StQA_MC) && (hists))
00404 hists->mNullPrimVtxClass->Fill(vertExists);
00405 if (makeStat != kStOk) break;
00406 }
00407 return makeStat;
00408 }
00409
00410
00411
00412 void StEventQAMaker::MakeHistGlob() {
00413
00414 if (Debug())
00415 gMessMgr->Info(" *** in StEventQAMaker - filling global track histograms ");
00416
00417 if (!allTrigs && vertExists <= 0) return;
00418
00419 StSPtrVecTrackNode &theNodes = event->trackNodes();
00420 StThreeVectorF pvert;
00421 if (primVtx) pvert = primVtx->position();
00422
00423 Int_t cnttrk=0;
00424 Int_t cnttrkT=0;
00425 Int_t cnttrkTS=0;
00426 Int_t cnttrkg=0;
00427 Int_t cnttrkgT=0;
00428 Int_t cnttrkgTS=0;
00429 Int_t cnttrkgTTS=0;
00430 Int_t cnttrkgFE=0;
00431 Int_t cnttrkgFW=0;
00432
00433 for (UInt_t i=0; i<theNodes.size(); i++) {
00434 StTrackType estOrGlobal = estGlobal;
00435 StTrack *globtrk = theNodes[i]->track(estOrGlobal);
00436 if (!globtrk) {
00437 estOrGlobal = global;
00438 globtrk = theNodes[i]->track(estOrGlobal);
00439 if (!globtrk) continue;
00440 }
00441 cnttrk += theNodes[i]->entries(estOrGlobal);
00442 hists->m_globtrk_iflag->Fill(globtrk->flag());
00443 const StTrackTopologyMap& map=globtrk->topologyMap();
00444 if (map.trackTpcOnly()) cnttrkT++;
00445 if (map.trackTpcSvt()) cnttrkTS++;
00446 if (globtrk->flag()>0) {
00447 StTrackDetectorInfo* detInfo = globtrk->detectorInfo();
00448 if (map.hasHitInDetector(kTpcId) && PCThits(detInfo)) continue;
00449
00450 StTrackGeometry* geom = globtrk->geometry();
00451 StDcaGeometry* dcageom = ((StGlobalTrack*) globtrk)->dcaGeometry();
00452 StTrackFitTraits& fTraits = globtrk->fitTraits();
00453
00454 n_glob_good++;
00455 cnttrkg++;
00456 Float_t pT = -999.;
00457 pT = geom->momentum().perp();
00458 if (pT <= 1.e-10) continue;
00459 Float_t lmevpt = TMath::Log10(1e-30+pT*1000.0);
00460 Float_t theta = TMath::ASin(1.) - geom->dipAngle();
00461 Float_t thetad = theta/degree;
00462 Float_t eta = geom->momentum().pseudoRapidity();
00463 Float_t gmom = abs(geom->momentum());
00464 Float_t lmevmom = TMath::Log10(1e-30+gmom*1000.0);
00465 Float_t chisq0 = fTraits.chi2(0);
00466 Float_t chisq1 = fTraits.chi2(1);
00467 Float_t nfitnmax = (Float_t(fTraits.numberOfFitPoints())) /
00468 (Float_t(globtrk->numberOfPossiblePoints())+1.e-10);
00469 const StThreeVectorF& firstPoint = detInfo->firstPoint();
00470 const StThreeVectorF& lastPoint = detInfo->lastPoint();
00471 const StThreeVectorF& origin = geom->origin();
00472 Float_t psi = geom->psi()/degree;
00473 if (psi<0) psi+=360;
00474 Float_t orphi = origin.phi()/degree;
00475 if (orphi<0) orphi+=360;
00476 Float_t fphi = firstPoint.phi()/degree;
00477 if (fphi<0) fphi+=360;
00478 StPhysicalHelixD hx = geom->helix();
00479 StPhysicalHelixD dcahx = (dcageom ? dcageom->helix() : hx);
00480
00481 double sFirst = hx.pathLength(firstPoint);
00482
00483 double sLast = hx.pathLength(lastPoint);
00484
00485 StThreeVectorF dif = firstPoint - hx.at(sFirst);
00486 StThreeVectorF difl = lastPoint - hx.at(sLast);
00487 Float_t xcenter = hx.xcenter();
00488 Float_t ycenter = hx.ycenter();
00489 Float_t rcircle = 1./hx.curvature();
00490 Float_t centerOfCircleToFP = ::sqrt(::pow(xcenter-firstPoint.x(),2) +
00491 ::pow(ycenter-firstPoint.y(),2));
00492 Float_t centerOfCircleToLP = ::sqrt(::pow(xcenter-lastPoint.x(),2) +
00493 ::pow(ycenter-lastPoint.y(),2));
00494 Float_t azimdif = dif.perp();
00495 if (rcircle<centerOfCircleToFP) azimdif *= -1.;
00496 Float_t azimdifl = difl.perp();
00497 if (rcircle<centerOfCircleToLP) azimdifl *= -1.;
00498 Float_t radf = firstPoint.perp();
00499
00500 Float_t logImpact = TMath::Log10(1e-30+globtrk->impactParameter());
00501
00502 Float_t sImpact = (primVtx ? dcahx.geometricSignedDistance(pvert.x(),pvert.y()) : -999);
00503 Float_t logCurvature = TMath::Log10(1e-30+geom->curvature());
00504
00505
00506
00507 double S = dcahx.pathLength(0,0);
00508 StThreeVectorD dcaToBeam = dcahx.at(S);
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519 if (map.hasHitInDetector(kUnknownId)) hists->m_det_id->Fill(kUnknownId);
00520 if (map.hasHitInDetector(kTpcId)) hists->m_det_id->Fill(kTpcId);
00521 if (map.hasHitInDetector(kSvtId)) hists->m_det_id->Fill(kSvtId);
00522 if (map.hasHitInDetector(kRichId)) hists->m_det_id->Fill(kRichId);
00523 if (map.hasHitInDetector(kFtpcWestId)) hists->m_det_id->Fill(kFtpcWestId);
00524 if (map.hasHitInDetector(kFtpcEastId)) hists->m_det_id->Fill(kFtpcEastId);
00525 if (map.hasHitInDetector(kTofId)) hists->m_det_id->Fill(kTofId);
00526 if (map.hasHitInDetector(kCtbId)) hists->m_det_id->Fill(kCtbId);
00527 if (map.hasHitInDetector(kSsdId)) hists->m_det_id->Fill(kSsdId);
00528 if (map.hasHitInDetector(kBarrelEmcTowerId)) hists->m_det_id->Fill(kBarrelEmcTowerId);
00529 if (map.hasHitInDetector(kBarrelEmcPreShowerId)) hists->m_det_id->Fill(kBarrelEmcPreShowerId);
00530 if (map.hasHitInDetector(kBarrelSmdEtaStripId)) hists->m_det_id->Fill(kBarrelSmdEtaStripId);
00531 if (map.hasHitInDetector(kBarrelSmdPhiStripId)) hists->m_det_id->Fill(kBarrelSmdPhiStripId);
00532 if (map.hasHitInDetector(kEndcapEmcTowerId)) hists->m_det_id->Fill(kEndcapEmcTowerId);
00533 if (map.hasHitInDetector(kEndcapEmcPreShowerId)) hists->m_det_id->Fill(kEndcapEmcPreShowerId);
00534 if (map.hasHitInDetector(kEndcapSmdUStripId)) hists->m_det_id->Fill(kEndcapSmdUStripId);
00535 if (map.hasHitInDetector(kEndcapSmdVStripId)) hists->m_det_id->Fill(kEndcapSmdVStripId);
00536 if (map.hasHitInDetector(kZdcWestId)) hists->m_det_id->Fill(kZdcWestId);
00537 if (map.hasHitInDetector(kZdcEastId)) hists->m_det_id->Fill(kZdcEastId);
00538 if (map.hasHitInDetector(kMwpcWestId)) hists->m_det_id->Fill(kMwpcWestId);
00539 if (map.hasHitInDetector(kMwpcEastId)) hists->m_det_id->Fill(kMwpcEastId);
00540 if (map.hasHitInDetector(kTpcSsdId)) hists->m_det_id->Fill(kTpcSsdId);
00541 if (map.hasHitInDetector(kTpcSvtId)) hists->m_det_id->Fill(kTpcSvtId);
00542 if (map.hasHitInDetector(kTpcSsdSvtId)) hists->m_det_id->Fill(kTpcSsdSvtId);
00543 if (map.hasHitInDetector(kSsdSvtId)) hists->m_det_id->Fill(kSsdSvtId);
00544
00545
00546 hists->m_dcaToBeamXY->Fill(dcaToBeam.x(),dcaToBeam.y());
00547 hists->m_dcaToBeamZ1->Fill(dcaToBeam.z());
00548 hists->m_dcaToBeamZ2->Fill(dcaToBeam.z());
00549 hists->m_dcaToBeamZ3->Fill(dcaToBeam.z());
00550 if (map.trackTpcOnly()) {
00551 hists->m_zDcaTanl->Fill(dcaToBeam.z(),TMath::Tan(geom->dipAngle()));
00552 hists->m_zDcaZf->Fill(dcaToBeam.z(),firstPoint.z());
00553 }
00554 if (map.trackTpcSvt())
00555 hists->m_zDcaTanl->Fill(dcaToBeam.z(),TMath::Tan(geom->dipAngle()));
00556 if (map.trackTpcSvt() && radf>40)
00557 hists->m_zDcaZf->Fill(dcaToBeam.z(),firstPoint.z());
00558 hists->m_zDcaPsi->Fill(dcaToBeam.z(),psi);
00559 hists->m_zDcaPhi0->Fill(dcaToBeam.z(),orphi);
00560
00561
00562
00563 Double_t ndf = 2*fTraits.numberOfFitPoints()-5;
00564 Double_t probability = TMath::Prob(chisq0*ndf,(int) ndf);
00565 hists->m_globtrk_fit_prob->Fill(probability);
00566
00567
00568 if (map.trackTpcOnly()) {
00569
00570 cnttrkgT++;
00571 cnttrkgTTS++;
00572
00573
00574 hists->m_glb_f0->Fill(dif.x(),0.);
00575 hists->m_glb_f0->Fill(dif.y(),1.);
00576 hists->m_glb_f0->Fill(dif.z(),2.);
00577
00578 hists->m_glb_xf0->Fill(dif.x());
00579 hists->m_glb_yf0->Fill(dif.y());
00580 hists->m_glb_zf0->Fill(dif.z());
00581 hists->m_glb_rzf0->Fill(azimdif,0.);
00582 hists->m_glb_rzf0->Fill(dif.z(),1.);
00583 hists->m_glb_rzl0->Fill(azimdifl,0.);
00584 hists->m_glb_rzl0->Fill(difl.z(),1.);
00585
00586 if (TMath::Abs(dcaToBeam.z()-pvert.z())<6) {
00587
00588
00589
00590 hists->m_glb_impactT->Fill(logImpact,2.);
00591 hists->m_glb_simpactT->Fill(sImpact,2.);
00592 if ((firstPoint.z() < 0) && (lastPoint.z() < 0)) {
00593 hists->m_glb_impactT->Fill(logImpact,0.);
00594 hists->m_glb_simpactT->Fill(sImpact,0.);
00595 }
00596 if ((firstPoint.z() > 0) && (lastPoint.z() > 0)) {
00597 hists->m_glb_impactT->Fill(logImpact,1.);
00598 hists->m_glb_simpactT->Fill(sImpact,1.);
00599 }
00600 hists->m_glb_impactrT->Fill(globtrk->impactParameter());
00601 if (silHists) {
00602 hists->m_glb_impactTTS->Fill(logImpact,1.);
00603 hists->m_glb_impactrTTS->Fill(globtrk->impactParameter(),1.);
00604 }
00605
00606 }
00607
00608
00609 Int_t minpadrow = 0;
00610 while (minpadrow < 45) if (map.hasHitInRow(kTpcId,++minpadrow)) break;
00611 hists->m_glb_padfT->Fill(minpadrow);
00612
00613 hists->m_pointT->Fill(detInfo->numberOfPoints());
00614 hists->m_max_pointT->Fill(globtrk->numberOfPossiblePoints());
00615 hists->m_fit_pointT->Fill(fTraits.numberOfFitPoints());
00616 if (silHists)
00617 hists->m_fit_pointTTS->Fill(fTraits.numberOfFitPoints(),1.);
00618 hists->m_glb_chargeT->Fill(geom->charge());
00619
00620 hists->m_glb_r0T->Fill(origin.perp());
00621 hists->m_glb_phi0T->Fill(orphi);
00622
00623 if (firstPoint.z() < 0) {
00624 hists->m_glb_padfTEW->Fill(minpadrow,0.);
00625 hists->m_glb_phifT->Fill(fphi,0.);
00626 }
00627 else if (firstPoint.z() > 0) {
00628 hists->m_glb_padfTEW->Fill(minpadrow,1.);
00629 hists->m_glb_phifT->Fill(fphi,1.);
00630 }
00631
00632 hists->m_glb_z0T->Fill(origin.z());
00633 hists->m_glb_curvT->Fill(logCurvature);
00634
00635 hists->m_glb_xfT->Fill(firstPoint.x());
00636 hists->m_glb_yfT->Fill(firstPoint.y());
00637 hists->m_glb_zfT->Fill(firstPoint.z());
00638 hists->m_glb_radfT->Fill(radf);
00639 hists->m_glb_ratiomT->Fill(nfitnmax);
00640 if (silHists)
00641 hists->m_glb_ratiomTTS->Fill(nfitnmax,1.);
00642 hists->m_psiT->Fill(psi);
00643 if (silHists)
00644 hists->m_psiTTS->Fill(psi,1.);
00645 hists->m_tanlT->Fill(TMath::Tan(geom->dipAngle()));
00646 hists->m_glb_thetaT->Fill(thetad);
00647 hists->m_etaT->Fill(eta);
00648 if (silHists)
00649 hists->m_etaTTS->Fill(eta,1.);
00650 hists->m_pTT->Fill(pT);
00651 if (silHists)
00652 hists->m_pTTTS->Fill(lmevpt,1.);
00653 hists->m_momT->Fill(gmom);
00654 hists->m_lengthT->Fill(globtrk->length());
00655 hists->m_chisq0T->Fill(chisq0);
00656 if (silHists)
00657 hists->m_chisq0TTS->Fill(chisq0,1.);
00658
00659 if (firstPoint.z()<0)
00660 hists->m_globtrk_xf_yfTE->Fill(firstPoint.x(),
00661 firstPoint.y());
00662 else
00663 hists->m_globtrk_xf_yfTW->Fill(firstPoint.x(),
00664 firstPoint.y());
00665 hists->m_eta_trklengthT->Fill(eta,globtrk->length());
00666 hists->m_npoint_lengthT->Fill(globtrk->length(),
00667 Float_t(detInfo->numberOfPoints()));
00668 hists->m_fpoint_lengthT->Fill(globtrk->length(),
00669 Float_t(fTraits.numberOfFitPoints()));
00670 if (silHists)
00671 hists->m_fpoint_lengthTTS->Fill(globtrk->length(),
00672 Float_t(fTraits.numberOfFitPoints()));
00673
00674 hists->m_pT_eta_recT->Fill(eta,lmevpt);
00675 if (primVtx && fabs(rcircle)>0.) {
00676 double qwe = ::pow(firstPoint.x()-pvert.x(),2)
00677 + ::pow(firstPoint.y()-pvert.y(),2);
00678 qwe = ::sqrt(qwe)/(2*rcircle);
00679 if (qwe>0.9999) qwe = 0.999;
00680 Float_t denom = 2*rcircle*(::asin(qwe));
00681 if (denom>0)hists->m_tanl_zfT->Fill((firstPoint.z()-pvert.z())/denom,
00682 Float_t(TMath::Tan(geom->dipAngle())));
00683 }
00684 hists->m_mom_trklengthT->Fill(globtrk->length(),lmevmom);
00685 hists->m_chisq0_momT->Fill(lmevmom,chisq0);
00686 hists->m_chisq0_etaT->Fill(eta,chisq0);
00687 hists->m_chisq0_dipT->Fill(TMath::Tan(geom->dipAngle()),chisq0);
00688 hists->m_chisq0_zfT->Fill(firstPoint.z(),chisq0);
00689 hists->m_chisq0_phiT->Fill(orphi,chisq0);
00690 hists->m_psi_phiT->Fill(orphi,psi);
00691 }
00692
00693
00694
00695 else if (silHists && (map.hasHitInDetector(kSvtId) || map.hasHitInDetector(kSsdId))) {
00696
00697 if (map.hasHitInDetector(kSsdId)) {
00698 if (primVtx && TMath::Abs(pvert.z())<10 && TMath::Abs(eta)<1 &&
00699 map.numberOfHits(kTpcId)>15) {
00700 StPtrVecHit ssd_hits = detInfo->hits(kSsdId);
00701 Float_t sphi = ssd_hits[0]->position().phi()/degree;
00702 if (sphi<0) sphi+=360.;
00703 hists->m_glb_ssd_phi->Fill(sphi);
00704 }
00705 }
00706
00707 if (map.trackTpcSvt()) {
00708
00709
00710 cnttrkgTS++;
00711 cnttrkgTTS++;
00712
00713 hists->m_glb_sptsTS->Fill(map.numberOfHits(kSvtId));
00714
00715 hists->m_glb_f0TS->Fill(dif.x(),0.);
00716 hists->m_glb_f0TS->Fill(dif.y(),1.);
00717 hists->m_glb_f0TS->Fill(dif.z(),2.);
00718
00719 hists->m_glb_xf0TS->Fill(dif.x());
00720 hists->m_glb_yf0TS->Fill(dif.y());
00721 hists->m_glb_zf0TS->Fill(dif.z());
00722 hists->m_glb_rzf0TS->Fill(azimdif,0.);
00723 hists->m_glb_rzf0TS->Fill(dif.z(),1.);
00724 hists->m_glb_rzl0TS->Fill(azimdifl,0.);
00725 hists->m_glb_rzl0TS->Fill(difl.z(),1.);
00726 hists->m_glb_impactTS->Fill(logImpact,2.);
00727 hists->m_glb_simpactTS->Fill(sImpact,2.);
00728 if ((firstPoint.z() < 0) && (lastPoint.z() < 0)) {
00729 hists->m_glb_impactTS->Fill(logImpact,0.);
00730 hists->m_glb_simpactTS->Fill(sImpact,0.);
00731 }
00732 if ((firstPoint.z() > 0) && (lastPoint.z() > 0)) {
00733 hists->m_glb_impactTS->Fill(logImpact,1.);
00734 hists->m_glb_simpactTS->Fill(sImpact,1.);
00735 }
00736 hists->m_glb_impactrTS->Fill(globtrk->impactParameter());
00737 hists->m_glb_impactTTS->Fill(logImpact,0.);
00738 hists->m_glb_impactrTTS->Fill(globtrk->impactParameter(),0.);
00739
00740 hists->m_pointTS->Fill(detInfo->numberOfPoints());
00741 hists->m_max_pointTS->Fill(globtrk->numberOfPossiblePoints());
00742 hists->m_fit_pointTS->Fill(fTraits.numberOfFitPoints());
00743 hists->m_fit_pointTTS->Fill(fTraits.numberOfFitPoints(),0.);
00744 hists->m_glb_chargeTS->Fill(geom->charge());
00745
00746 hists->m_glb_r0TS->Fill(origin.perp());
00747 hists->m_glb_phi0TS->Fill(orphi);
00748 hists->m_glb_z0TS->Fill(origin.z());
00749 hists->m_glb_curvTS->Fill(logCurvature);
00750
00751 hists->m_glb_xfTS->Fill(firstPoint.x());
00752 hists->m_glb_yfTS->Fill(firstPoint.y());
00753 if (radf<40) {
00754 hists->m_glb_zfTS->Fill(firstPoint.z());
00755 hists->m_glb_phifTS->Fill(fphi);
00756 }
00757
00758 hists->m_glb_radfTS->Fill(radf);
00759 hists->m_glb_ratiomTS->Fill(nfitnmax);
00760 hists->m_glb_ratiomTTS->Fill(nfitnmax,0.);
00761 hists->m_psiTS->Fill(psi);
00762 hists->m_psiTTS->Fill(psi,0.);
00763 hists->m_tanlTS->Fill(TMath::Tan(geom->dipAngle()));
00764 hists->m_glb_thetaTS->Fill(thetad);
00765 hists->m_etaTS->Fill(eta);
00766 hists->m_etaTTS->Fill(eta,0.);
00767 hists->m_pTTS->Fill(pT);
00768 hists->m_pTTTS->Fill(lmevpt,0.);
00769 hists->m_momTS->Fill(gmom);
00770 hists->m_lengthTS->Fill(globtrk->length());
00771 hists->m_chisq0TS->Fill(chisq0);
00772 hists->m_chisq0TTS->Fill(chisq0,0.);
00773 hists->m_globtrk_xf_yfTS->Fill(firstPoint.x(),
00774 firstPoint.y());
00775 hists->m_eta_trklengthTS->Fill(eta,globtrk->length());
00776 hists->m_npoint_lengthTS->Fill(globtrk->length(),
00777 Float_t(detInfo->numberOfPoints()));
00778 hists->m_fpoint_lengthTS->Fill(globtrk->length(),
00779 Float_t(fTraits.numberOfFitPoints()));
00780 hists->m_fpoint_lengthTTS->Fill(globtrk->length(),
00781 Float_t(fTraits.numberOfFitPoints()));
00782
00783 hists->m_pT_eta_recTS->Fill(eta,lmevpt);
00784 if (primVtx) {
00785 double qwe = ::pow(firstPoint.x()-pvert.x(),2)
00786 + ::pow(firstPoint.y()-pvert.y(),2);
00787 qwe = ::sqrt(qwe)/(2*rcircle);
00788 if (qwe>0.9999) qwe = 0.999;
00789 Float_t denom = 2*rcircle*(::asin(qwe));
00790 if (radf>40 && denom>0) {
00791 hists->m_tanl_zfT->Fill((firstPoint.z()-pvert.z())/denom,
00792 Float_t(TMath::Tan(geom->dipAngle())));
00793 }
00794 if (radf<40 && denom>0) {
00795 hists->m_tanl_zfTS->Fill((firstPoint.z()-pvert.z())/denom,
00796 Float_t(TMath::Tan(geom->dipAngle())));
00797 }
00798 }
00799 hists->m_mom_trklengthTS->Fill(globtrk->length(),lmevmom);
00800 hists->m_chisq0_momTS->Fill(lmevmom,chisq0);
00801 hists->m_chisq0_etaTS->Fill(eta,chisq0);
00802 hists->m_chisq0_dipTS->Fill(TMath::Tan(geom->dipAngle()),chisq0);
00803 hists->m_chisq0_zfTS->Fill(firstPoint.z(),chisq0);
00804 hists->m_chisq0_phiTS->Fill(orphi,chisq0);
00805
00806 hists->m_psi_phiTS->Fill(orphi,psi);
00807 }
00808 }
00809
00810
00811 else if (ftpHists && map.trackFtpcEast()) {
00812
00813 cnttrkgFE++;
00814
00815
00816 hists->m_pointF->Fill(detInfo->numberOfPoints(),0.);
00817 hists->m_max_pointF->Fill(globtrk->numberOfPossiblePoints(),0.);
00818 hists->m_glb_chargeF->Fill(geom->charge(),0.);
00819 hists->m_glb_xfF->Fill(firstPoint.x(),0.);
00820 hists->m_glb_yfF->Fill(firstPoint.y(),0.);
00821 hists->m_glb_zfF->Fill(firstPoint.z(),0.);
00822 hists->m_glb_radfF->Fill(radf,0.);
00823 hists->m_glb_ratiomF->Fill(nfitnmax,0.);
00824 hists->m_psiF->Fill(psi,0.);
00825 hists->m_etaF->Fill(fabs(eta),0.);
00826 hists->m_pTF->Fill(pT,0.);
00827 hists->m_momF->Fill(gmom,0.);
00828 hists->m_lengthF->Fill(globtrk->length(),0.);
00829 hists->m_chisq0F->Fill(chisq0,0.);
00830 hists->m_chisq1F->Fill(chisq1,0.);
00831 hists->m_glb_impactF->Fill(logImpact,0.);
00832 hists->m_glb_impactrF->Fill(globtrk->impactParameter(),0.);
00833
00834 if (fabs(firstPoint.z()-ftpcPadrowZPos[10])<=1)
00835 hists->m_glb_planefF->Fill(11,0.);
00836 if (fabs(firstPoint.z()-ftpcPadrowZPos[11])<=1)
00837 hists->m_glb_planefF->Fill(12,0.);
00838 if (fabs(firstPoint.z()-ftpcPadrowZPos[12])<=1)
00839 hists->m_glb_planefF->Fill(13,0.);
00840 if (fabs(firstPoint.z()-ftpcPadrowZPos[13])<=1)
00841 hists->m_glb_planefF->Fill(14,0.);
00842 if (fabs(firstPoint.z()-ftpcPadrowZPos[14])<=1)
00843 hists->m_glb_planefF->Fill(15,0.);
00844 if (fabs(firstPoint.z()-ftpcPadrowZPos[15])<=1)
00845 hists->m_glb_planefF->Fill(16,0.);
00846 if (fabs(firstPoint.z()-ftpcPadrowZPos[16])<=1)
00847 hists->m_glb_planefF->Fill(17,0.);
00848 if (fabs(firstPoint.z()-ftpcPadrowZPos[17])<=1)
00849 hists->m_glb_planefF->Fill(18,0.);
00850 if (fabs(firstPoint.z()-ftpcPadrowZPos[18])<=1)
00851 hists->m_glb_planefF->Fill(19,0.);
00852 if (fabs(firstPoint.z()-ftpcPadrowZPos[19])<=1)
00853 hists->m_glb_planefF->Fill(20,0.);
00854
00855
00856 hists->m_pointFE->Fill(detInfo->numberOfPoints());
00857 hists->m_max_pointFE->Fill(globtrk->numberOfPossiblePoints());
00858 hists->m_glb_chargeFE->Fill(geom->charge());
00859 hists->m_glb_xfFE->Fill(firstPoint.x());
00860 hists->m_glb_yfFE->Fill(firstPoint.y());
00861 hists->m_glb_zfFE->Fill(firstPoint.z());
00862 hists->m_glb_radfFE->Fill(radf);
00863 hists->m_glb_ratiomFE->Fill(nfitnmax);
00864 hists->m_psiFE->Fill(psi);
00865 hists->m_etaFE->Fill(eta);
00866 hists->m_pTFE->Fill(pT);
00867 hists->m_momFE->Fill(gmom);
00868 hists->m_lengthFE->Fill(globtrk->length());
00869 hists->m_chisq0FE->Fill(chisq0);
00870 hists->m_chisq1FE->Fill(chisq1);
00871
00872 hists->m_pT_eta_recFE->Fill(eta,lmevpt);
00873 hists->m_globtrk_xf_yfFE->Fill(firstPoint.x(),
00874 firstPoint.y());
00875 hists->m_eta_trklengthFE->Fill(eta,globtrk->length());
00876 hists->m_npoint_lengthFE->Fill(globtrk->length(),
00877 Float_t(detInfo->numberOfPoints()));
00878 }
00879
00880 else if (ftpHists && map.trackFtpcWest()) {
00881
00882 cnttrkgFW++;
00883
00884
00885 hists->m_pointF->Fill(detInfo->numberOfPoints(),1.);
00886 hists->m_max_pointF->Fill(globtrk->numberOfPossiblePoints(),1.);
00887 hists->m_glb_chargeF->Fill(geom->charge(),1.);
00888 hists->m_glb_xfF->Fill(firstPoint.x(),1.);
00889 hists->m_glb_yfF->Fill(firstPoint.y(),1.);
00890 hists->m_glb_zfF->Fill(firstPoint.z(),1.);
00891 hists->m_glb_radfF->Fill(radf,1.);
00892 hists->m_glb_ratiomF->Fill(nfitnmax,1.);
00893 hists->m_psiF->Fill(psi,1.);
00894 hists->m_etaF->Fill(fabs(eta),1.);
00895 hists->m_pTF->Fill(pT,1.);
00896 hists->m_momF->Fill(gmom,1.);
00897 hists->m_lengthF->Fill(globtrk->length(),1.);
00898 hists->m_chisq0F->Fill(chisq0,1.);
00899 hists->m_chisq1F->Fill(chisq1,1.);
00900 hists->m_glb_impactF->Fill(logImpact,1.);
00901 hists->m_glb_impactrF->Fill(globtrk->impactParameter(),1.);
00902
00903 if (fabs(firstPoint.z()-ftpcPadrowZPos[0])<=1)
00904 hists->m_glb_planefF->Fill(1,1.);
00905 if (fabs(firstPoint.z()-ftpcPadrowZPos[1])<=1)
00906 hists->m_glb_planefF->Fill(2,1.);
00907 if (fabs(firstPoint.z()-ftpcPadrowZPos[2])<=1)
00908 hists->m_glb_planefF->Fill(3,1.);
00909 if (fabs(firstPoint.z()-ftpcPadrowZPos[3])<=1)
00910 hists->m_glb_planefF->Fill(4,1.);
00911 if (fabs(firstPoint.z()-ftpcPadrowZPos[4])<=1)
00912 hists->m_glb_planefF->Fill(5,1.);
00913 if (fabs(firstPoint.z()-ftpcPadrowZPos[5])<=1)
00914 hists->m_glb_planefF->Fill(6,1.);
00915 if (fabs(firstPoint.z()-ftpcPadrowZPos[6])<=1)
00916 hists->m_glb_planefF->Fill(7,1.);
00917 if (fabs(firstPoint.z()-ftpcPadrowZPos[7])<=1)
00918 hists->m_glb_planefF->Fill(8,1.);
00919 if (fabs(firstPoint.z()-ftpcPadrowZPos[8])<=1)
00920 hists->m_glb_planefF->Fill(9,1.);
00921 if (fabs(firstPoint.z()-ftpcPadrowZPos[9])<=1)
00922 hists->m_glb_planefF->Fill(10,1.);
00923
00924
00925 hists->m_pointFW->Fill(detInfo->numberOfPoints());
00926 hists->m_max_pointFW->Fill(globtrk->numberOfPossiblePoints());
00927 hists->m_glb_chargeFW->Fill(geom->charge());
00928 hists->m_glb_xfFW->Fill(firstPoint.x());
00929 hists->m_glb_yfFW->Fill(firstPoint.y());
00930 hists->m_glb_zfFW->Fill(firstPoint.z());
00931 hists->m_glb_radfFW->Fill(radf);
00932 hists->m_glb_ratiomFW->Fill(nfitnmax);
00933 hists->m_psiFW->Fill(psi);
00934 hists->m_etaFW->Fill(eta);
00935 hists->m_pTFW->Fill(pT);
00936 hists->m_momFW->Fill(gmom);
00937 hists->m_lengthFW->Fill(globtrk->length());
00938 hists->m_chisq0FW->Fill(chisq0);
00939 hists->m_chisq1FW->Fill(chisq1);
00940
00941 hists->m_pT_eta_recFW->Fill(eta,lmevpt);
00942 hists->m_globtrk_xf_yfFW->Fill(firstPoint.x(),
00943 firstPoint.y());
00944 hists->m_eta_trklengthFW->Fill(eta,globtrk->length());
00945 hists->m_npoint_lengthFW->Fill(globtrk->length(),
00946 Float_t(detInfo->numberOfPoints()));
00947 }
00948 }
00949 }
00950 hists->m_globtrk_tot->Fill(cnttrk);
00951 hists->m_globtrk_good->Fill(cnttrkg);
00952 hists->m_globtrk_good_sm->Fill(cnttrkg);
00953 if (silHists)
00954 hists->m_globtrk_goodTTS->Fill(cnttrkgTTS);
00955 hists->m_globtrk_goodF->Fill(cnttrkgFE,cnttrkgFW);
00956 }
00957
00958
00960 void StEventQAMaker::MakeHistDE() {
00961
00962 }
00963
00964
00965 void StEventQAMaker::MakeHistPrim() {
00966
00967 if (Debug())
00968 gMessMgr->Info(" *** in StEventQAMaker - filling primary track histograms ");
00969
00970 if (!allTrigs && vertExists <= 0) return;
00971
00972 Int_t cnttrk=0;
00973 Int_t cnttrkg=0;
00974 Int_t cnttrkgT=0;
00975 Int_t cnttrkgTS=0;
00976 Int_t cnttrkgFE=0;
00977 Int_t cnttrkgFW=0;
00978 Int_t pTcnttrkgFE=0;
00979 Int_t pTcnttrkgFW=0;
00980 Float_t mean_ptT=0;
00981 Float_t mean_ptTS=0;
00982 Float_t mean_ptFE=0;
00983 Float_t mean_ptFW=0;
00984 Float_t mean_etaT=0;
00985 Float_t mean_etaTS=0;
00986 Float_t mean_etaFE=0;
00987 Float_t mean_etaFW=0;
00988
00989 if (primVtx) {
00990 StThreeVectorF pvert = primVtx->position();
00991
00992 cnttrk = primVtx->numberOfDaughters();
00993 hists->m_primtrk_tot->Fill(cnttrk);
00994 hists->m_primtrk_tot_sm->Fill(cnttrk);
00995
00996 for (UInt_t i=0; i<primVtx->numberOfDaughters(); i++) {
00997 StTrack *primtrk = primVtx->daughter(i);
00998 if (!primtrk) continue;
00999
01000
01001
01002
01003
01004
01005 StTrack* estprimtrk = primtrk->node()->track(estPrimary);
01006 if (estprimtrk) primtrk = estprimtrk;
01007 if (primtrk->bad()) continue;
01008 hists->m_primtrk_iflag->Fill(primtrk->flag());
01009
01010 if (primtrk->flag()>0) {
01011 StTrackDetectorInfo* detInfo = primtrk->detectorInfo();
01012 const StTrackTopologyMap& map=primtrk->topologyMap();
01013 if (map.hasHitInDetector(kTpcId) && PCThits(detInfo)) continue;
01014
01015 StTrackGeometry* geom = primtrk->geometry();
01016
01017
01018
01019 StTrackGeometry* outerGeom = primtrk->outerGeometry();
01020 StTrackFitTraits& fTraits = primtrk->fitTraits();
01021 StPhysicalHelixD hx = geom->helix();
01022 StPhysicalHelixD ohx = outerGeom->helix();
01023
01024 StTrack *gtrack = primtrk->node()->track(estGlobal);
01025 if (!gtrack || gtrack->bad()) {
01026 gtrack = primtrk->node()->track(global);
01027 if (!gtrack || gtrack->bad()) continue;
01028 }
01029 StTrackFitTraits& gfTraits = gtrack->fitTraits();
01030 Int_t nhit_prim_fit = fTraits.numberOfFitPoints();
01031 Int_t nhit_glob_fit = gfTraits.numberOfFitPoints();
01032 hists->m_primglob_fit->Fill((Float_t)nhit_prim_fit/((Float_t)nhit_glob_fit+1.e-10));
01033
01034 n_prim_good++;
01035 cnttrkg++;
01036 Float_t pT = -999.;
01037 pT = geom->momentum().perp();
01038 Float_t lmevpt = TMath::Log10(1e-30+pT*1000.0);
01039 Float_t theta = TMath::ASin(1.) - geom->dipAngle();
01040 Float_t thetad = theta/degree;
01041 Float_t eta = geom->momentum().pseudoRapidity();
01042 Float_t gmom = abs(geom->momentum());
01043 Float_t lmevmom = TMath::Log10(1e-30+gmom*1000.0);
01044 Float_t chisq0 = fTraits.chi2(0);
01045 Float_t chisq1 = fTraits.chi2(1);
01046 Float_t nfitnmax = (Float_t(fTraits.numberOfFitPoints())) /
01047 (Float_t(primtrk->numberOfPossiblePoints())+1.e-10);
01048 Float_t logCurvature = TMath::Log10(1e-30+geom->curvature());
01049
01050 const StThreeVectorF& firstPoint = detInfo->firstPoint();
01051 const StThreeVectorF& lastPoint = detInfo->lastPoint();
01052 const StThreeVectorF& origin = geom->origin();
01053 Float_t psi = geom->psi()/degree;
01054 if (psi<0) psi+=360;
01055 Float_t orphi = origin.phi()/degree;
01056 if (orphi<0) orphi+=360;
01057
01058
01059
01060
01061
01062 double sFirst = hx.pathLength(firstPoint);
01063
01064 double sLast = hx.pathLength(lastPoint);
01065
01066 StThreeVectorF dif = firstPoint - hx.at(sFirst);
01067 StThreeVectorF difl = lastPoint - hx.at(sLast);
01068
01069 Float_t xcenter = hx.xcenter();
01070 Float_t ycenter = hx.ycenter();
01071 Float_t rcircle = 1./hx.curvature();
01072 Float_t centerOfCircleToFP = ::sqrt(::pow(xcenter-firstPoint.x(),2) +
01073 ::pow(ycenter-firstPoint.y(),2));
01074 Float_t centerOfCircleToLP = ::sqrt(::pow(xcenter-lastPoint.x(),2) +
01075 ::pow(ycenter-lastPoint.y(),2));
01076 Float_t azimdif = dif.perp();
01077 if (rcircle<centerOfCircleToFP) azimdif *= -1.;
01078 Float_t azimdifl = difl.perp();
01079 if (rcircle<centerOfCircleToLP) azimdifl *= -1.;
01080
01081
01082
01083
01084 double sFirstOuter = ohx.pathLength(firstPoint);
01085 double sLastOuter = ohx.pathLength(lastPoint);
01086 StThreeVectorF outerDif = firstPoint - ohx.at(sFirstOuter);
01087 StThreeVectorF outerDifl = lastPoint - ohx.at(sLastOuter);
01088 Float_t outerXcenter = ohx.xcenter();
01089 Float_t outerYcenter = ohx.ycenter();
01090 Float_t outerRcircle = 1./(ohx.curvature()+1.e-10);
01091 Float_t outerCenterOfCircleToFP = ::sqrt(::pow(outerXcenter-firstPoint.x(),2) +
01092 ::pow(outerYcenter-firstPoint.y(),2));
01093 Float_t outerCenterOfCircleToLP = ::sqrt(::pow(outerXcenter-lastPoint.x(),2) +
01094 ::pow(outerYcenter-lastPoint.y(),2));
01095 Float_t outerAzimdif = outerDif.perp();
01096 if (outerRcircle<outerCenterOfCircleToFP) outerAzimdif *= -1.;
01097 Float_t outerAzimdifl = outerDifl.perp();
01098 if (outerRcircle<outerCenterOfCircleToLP) outerAzimdifl *= -1.;
01099
01100 Float_t radf = firstPoint.perp();
01101
01102
01103 if (map.hasHitInDetector(kUnknownId)) hists->m_pdet_id->Fill(kUnknownId);
01104 if (map.hasHitInDetector(kTpcId)) hists->m_pdet_id->Fill(kTpcId);
01105 if (map.hasHitInDetector(kSvtId)) hists->m_pdet_id->Fill(kSvtId);
01106 if (map.hasHitInDetector(kRichId)) hists->m_pdet_id->Fill(kRichId);
01107 if (map.hasHitInDetector(kFtpcWestId)) hists->m_pdet_id->Fill(kFtpcWestId);
01108 if (map.hasHitInDetector(kFtpcEastId)) hists->m_pdet_id->Fill(kFtpcEastId);
01109 if (map.hasHitInDetector(kTofId)) hists->m_pdet_id->Fill(kTofId);
01110 if (map.hasHitInDetector(kCtbId)) hists->m_pdet_id->Fill(kCtbId);
01111 if (map.hasHitInDetector(kSsdId)) hists->m_pdet_id->Fill(kSsdId);
01112 if (map.hasHitInDetector(kBarrelEmcTowerId)) hists->m_pdet_id->Fill(kBarrelEmcTowerId);
01113 if (map.hasHitInDetector(kBarrelEmcPreShowerId)) hists->m_pdet_id->Fill(kBarrelEmcPreShowerId);
01114 if (map.hasHitInDetector(kBarrelSmdEtaStripId)) hists->m_pdet_id->Fill(kBarrelSmdEtaStripId);
01115 if (map.hasHitInDetector(kBarrelSmdPhiStripId)) hists->m_pdet_id->Fill(kBarrelSmdPhiStripId);
01116 if (map.hasHitInDetector(kEndcapEmcTowerId)) hists->m_pdet_id->Fill(kEndcapEmcTowerId);
01117 if (map.hasHitInDetector(kEndcapEmcPreShowerId)) hists->m_pdet_id->Fill(kEndcapEmcPreShowerId);
01118 if (map.hasHitInDetector(kEndcapSmdUStripId)) hists->m_pdet_id->Fill(kEndcapSmdUStripId);
01119 if (map.hasHitInDetector(kEndcapSmdVStripId)) hists->m_pdet_id->Fill(kEndcapSmdVStripId);
01120 if (map.hasHitInDetector(kZdcWestId)) hists->m_pdet_id->Fill(kZdcWestId);
01121 if (map.hasHitInDetector(kZdcEastId)) hists->m_pdet_id->Fill(kZdcEastId);
01122 if (map.hasHitInDetector(kMwpcWestId)) hists->m_pdet_id->Fill(kMwpcWestId);
01123 if (map.hasHitInDetector(kMwpcEastId)) hists->m_pdet_id->Fill(kMwpcEastId);
01124 if (map.hasHitInDetector(kTpcSsdId)) hists->m_pdet_id->Fill(kTpcSsdId);
01125 if (map.hasHitInDetector(kTpcSvtId)) hists->m_pdet_id->Fill(kTpcSvtId);
01126 if (map.hasHitInDetector(kTpcSsdSvtId)) hists->m_pdet_id->Fill(kTpcSsdSvtId);
01127 if (map.hasHitInDetector(kSsdSvtId)) hists->m_pdet_id->Fill(kSsdSvtId);
01128
01129
01130 if (map.trackTpcOnly()) {
01131
01132 cnttrkgT++;
01133 mean_ptT += geom->momentum().perp();
01134 mean_etaT += eta;
01135
01136 hists->m_prim_f0->Fill(outerDif.x(),0.);
01137 hists->m_prim_f0->Fill(outerDif.y(),1.);
01138 hists->m_prim_f0->Fill(outerDif.z(),2.);
01139
01140 hists->m_prim_xf0->Fill(outerDif.x());
01141 hists->m_prim_yf0->Fill(outerDif.y());
01142 hists->m_prim_zf0->Fill(outerDif.z());
01143 hists->m_prim_rzf0->Fill(outerAzimdif,0.);
01144 hists->m_prim_rzf0->Fill(outerDif.z(),1.);
01145 hists->m_prim_rzl0->Fill(outerAzimdifl,0.);
01146 hists->m_prim_rzl0->Fill(outerDifl.z(),1.);
01147
01148
01149 if (event->summary()) {
01150 mHitHist->clear();
01151 mHitHist->setTrack(primtrk);
01152 mHitHist->setBField(event->summary()->magneticField());
01153 mHitHist->findHits();
01154 mHitHist->fillHistograms();
01155 }
01156
01157
01158 hists->m_ppointT->Fill(detInfo->numberOfPoints());
01159 hists->m_pmax_pointT->Fill(primtrk->numberOfPossiblePoints());
01160 hists->m_pfit_pointT->Fill(fTraits.numberOfFitPoints());
01161 hists->m_prim_chargeT->Fill(geom->charge());
01162
01163 hists->m_prim_r0T->Fill(origin.perp());
01164 hists->m_prim_phi0T->Fill(orphi);
01165 hists->m_prim_z0T->Fill(origin.z());
01166 hists->m_prim_curvT->Fill(logCurvature);
01167
01168 hists->m_prim_xfT->Fill(firstPoint.x());
01169 hists->m_prim_yfT->Fill(firstPoint.y());
01170 hists->m_prim_zfT->Fill(firstPoint.z());
01171 hists->m_prim_radfT->Fill(radf);
01172 hists->m_prim_ratiomT->Fill(nfitnmax);
01173 hists->m_ppsiT->Fill(psi);
01174 if (silHists)
01175 hists->m_ppsiTTS->Fill(psi,1.);
01176 hists->m_ptanlT->Fill(TMath::Tan(geom->dipAngle()));
01177 hists->m_prim_thetaT->Fill(thetad);
01178 hists->m_petaT->Fill(eta);
01179 if (silHists)
01180 hists->m_petaTTS->Fill(eta,1.);
01181 hists->m_ppTT->Fill(pT);
01182 if (silHists)
01183 hists->m_ppTTTS->Fill(pT,1.);
01184 hists->m_pmomT->Fill(gmom);
01185 hists->m_plengthT->Fill(primtrk->length());
01186 hists->m_pchisq0T->Fill(chisq0);
01187 if (silHists)
01188 hists->m_pchisq0TTS->Fill(chisq0,1.);
01189
01190
01191 if (firstPoint.z()<0)
01192 hists->m_primtrk_xf_yfTE->Fill(firstPoint.x(),
01193 firstPoint.y());
01194 else
01195 hists->m_primtrk_xf_yfTW->Fill(firstPoint.x(),
01196 firstPoint.y());
01197 hists->m_peta_trklengthT->Fill(eta,primtrk->length());
01198 hists->m_pnpoint_lengthT->Fill(primtrk->length(),
01199 Float_t(detInfo->numberOfPoints()));
01200 hists->m_pfpoint_lengthT->Fill(primtrk->length(),
01201 Float_t(fTraits.numberOfFitPoints()));
01202 if (silHists)
01203 hists->m_pfpoint_lengthTTS->Fill(primtrk->length(),
01204 Float_t(fTraits.numberOfFitPoints()));
01205
01206
01207 hists->m_ppT_eta_recT->Fill(eta,lmevpt);
01208 double qwe = ::pow(firstPoint.x()-pvert.x(),2)
01209 + ::pow(firstPoint.y()-pvert.y(),2);
01210 qwe = ::sqrt(qwe)/(2*rcircle);
01211 if (qwe>0.9999) qwe = 0.999;
01212 Float_t denom = 2*rcircle*(::asin(qwe));
01213 if (denom>0)hists->m_ptanl_zfT->Fill((firstPoint.z()-pvert.z())/denom,
01214 Float_t(TMath::Tan(geom->dipAngle())));
01215 hists->m_pmom_trklengthT->Fill(primtrk->length(),lmevmom);
01216 hists->m_pchisq0_momT->Fill(lmevmom,chisq0);
01217 hists->m_pchisq0_etaT->Fill(eta,chisq0);
01218 hists->m_pchisq0_dipT->Fill(TMath::Tan(geom->dipAngle()),chisq0);
01219 hists->m_pchisq0_zfT->Fill(firstPoint.z(),chisq0);
01220 hists->m_ppsi_phiT->Fill(orphi,psi);
01221 }
01222
01223
01224
01225 else if (silHists && (map.hasHitInDetector(kSvtId) || map.hasHitInDetector(kSsdId))) {
01226
01227 if (map.hasHitInDetector(kSsdId)) {
01228 if (TMath::Abs(pvert.z())<10 && TMath::Abs(eta)<1 &&
01229 map.numberOfHits(kTpcId)>15) {
01230 StPtrVecHit ssd_hits = detInfo->hits(kSsdId);
01231 Float_t sphi = ssd_hits[0]->position().phi()/degree;
01232 if (sphi<0) sphi+=360.;
01233 hists->m_prim_ssd_phi->Fill(sphi);
01234 }
01235 }
01236
01237 if (map.trackTpcSvt()) {
01238
01239
01240 cnttrkgTS++;
01241 mean_ptTS += geom->momentum().perp();
01242 mean_etaTS += eta;
01243
01244 hists->m_prim_f0TS->Fill(outerDif.x(),0.);
01245 hists->m_prim_f0TS->Fill(outerDif.y(),1.);
01246 hists->m_prim_f0TS->Fill(outerDif.z(),2.);
01247
01248 hists->m_prim_xf0TS->Fill(outerDif.x());
01249 hists->m_prim_yf0TS->Fill(outerDif.y());
01250 hists->m_prim_zf0TS->Fill(outerDif.z());
01251 hists->m_prim_rzf0TS->Fill(outerAzimdif,0.);
01252 hists->m_prim_rzf0TS->Fill(outerDif.z(),1.);
01253 hists->m_prim_rzl0TS->Fill(outerAzimdifl,0.);
01254 hists->m_prim_rzl0TS->Fill(outerDifl.z(),1.);
01255
01256 hists->m_ppointTS->Fill(detInfo->numberOfPoints());
01257 hists->m_pmax_pointTS->Fill(primtrk->numberOfPossiblePoints());
01258 hists->m_pfit_pointTS->Fill(fTraits.numberOfFitPoints());
01259 hists->m_prim_chargeTS->Fill(geom->charge());
01260
01261 hists->m_prim_r0TS->Fill(origin.perp());
01262 hists->m_prim_phi0TS->Fill(orphi);
01263 hists->m_prim_z0TS->Fill(origin.z());
01264 hists->m_prim_curvTS->Fill(logCurvature);
01265
01266 hists->m_prim_xfTS->Fill(firstPoint.x());
01267 hists->m_prim_yfTS->Fill(firstPoint.y());
01268 hists->m_prim_zfTS->Fill(firstPoint.z());
01269 hists->m_prim_radfTS->Fill(radf);
01270 hists->m_prim_ratiomTS->Fill(nfitnmax);
01271 hists->m_ppsiTS->Fill(psi);
01272 hists->m_ppsiTTS->Fill(psi,0.);
01273 hists->m_ptanlTS->Fill(TMath::Tan(geom->dipAngle()));
01274 hists->m_prim_thetaTS->Fill(thetad);
01275 hists->m_petaTS->Fill(eta);
01276 hists->m_petaTTS->Fill(eta,0.);
01277 hists->m_ppTTS->Fill(pT);
01278 hists->m_ppTTTS->Fill(pT,0.);
01279 hists->m_pmomTS->Fill(gmom);
01280 hists->m_plengthTS->Fill(primtrk->length());
01281 hists->m_pchisq0TS->Fill(chisq0);
01282 hists->m_pchisq0TTS->Fill(chisq0,0.);
01283
01284 hists->m_primtrk_xf_yfTS->Fill(firstPoint.x(),
01285 firstPoint.y());
01286 hists->m_peta_trklengthTS->Fill(eta,primtrk->length());
01287 hists->m_pnpoint_lengthTS->Fill(primtrk->length(),
01288 Float_t(detInfo->numberOfPoints()));
01289 hists->m_pfpoint_lengthTS->Fill(primtrk->length(),
01290 Float_t(fTraits.numberOfFitPoints()));
01291 hists->m_pfpoint_lengthTTS->Fill(primtrk->length(),
01292 Float_t(fTraits.numberOfFitPoints()));
01293
01294 hists->m_ppT_eta_recTS->Fill(eta,lmevpt);
01295 double qwe = ::pow(firstPoint.x()-pvert.x(),2)
01296 + ::pow(firstPoint.y()-pvert.y(),2);
01297 qwe = ::sqrt(qwe)/(2*rcircle);
01298 if (qwe>0.9999) qwe = 0.999;
01299 Float_t denom = 2*rcircle*(::asin(qwe));
01300 if (radf>40 && denom>0) hists->m_ptanl_zfT->
01301 Fill((firstPoint.z() - pvert.z())/denom,
01302 Float_t(TMath::Tan(geom->dipAngle())));
01303 if (radf<40 && denom>0) hists->m_ptanl_zfTS->
01304 Fill((firstPoint.z() - pvert.z())/denom,
01305 Float_t(TMath::Tan(geom->dipAngle())));
01306 hists->m_pmom_trklengthTS->Fill(primtrk->length(),lmevmom);
01307 hists->m_pchisq0_momTS->Fill(lmevmom,chisq0);
01308 hists->m_pchisq0_etaTS->Fill(eta,chisq0);
01309 hists->m_pchisq0_dipTS->Fill(TMath::Tan(geom->dipAngle()),chisq0);
01310 hists->m_pchisq0_zfTS->Fill(firstPoint.z(),chisq0);
01311 hists->m_ppsi_phiTS->Fill(orphi,psi);
01312
01313
01314 if (pT > 0.2) {
01315 StPtrVecHit svt_hits = detInfo->hits(kSvtId);
01316 for (UInt_t k=0; k<svt_hits.size(); k++) {
01317 StSvtHit* svt_hit = (StSvtHit*) (svt_hits[k]);
01318 hists->m_svt_loc->Fill(svt_hit->timebucket(),svt_hit->index());
01319 }
01320 }
01321 }
01322 }
01323
01324
01325 else if (map.trackFtpcEast()) {
01326
01327 if ( pT<2 ) {
01328 mean_ptFE += geom->momentum().perp();
01329 pTcnttrkgFE++;
01330 }
01331 cnttrkgFE++;
01332 mean_etaFE += eta;
01333
01334
01335 hists->m_ppointF->Fill(detInfo->numberOfPoints(),0.);
01336 hists->m_pmax_pointF->Fill(primtrk->numberOfPossiblePoints(),0.);
01337 hists->m_prim_chargeF->Fill(geom->charge(),0.);
01338 hists->m_prim_xfF->Fill(firstPoint.x(),0.);
01339 hists->m_prim_yfF->Fill(firstPoint.y(),0.);
01340 hists->m_prim_zfF->Fill(firstPoint.z(),0.);
01341 hists->m_prim_radfF->Fill(radf,0.);
01342 hists->m_prim_ratiomF->Fill(nfitnmax,0.);
01343 hists->m_ppsiF->Fill(psi,0.);
01344 hists->m_petaF->Fill(fabs(eta),0.);
01345 hists->m_ppTF->Fill(pT,0.);
01346 hists->m_pmomF->Fill(gmom,0.);
01347 hists->m_plengthF->Fill(primtrk->length(),0.);
01348 hists->m_pchisq0F->Fill(chisq0,0.);
01349 hists->m_pchisq1F->Fill(chisq1,0.);
01350
01351 hists->m_ppointFE->Fill(detInfo->numberOfPoints());
01352 hists->m_pmax_pointFE->Fill(primtrk->numberOfPossiblePoints());
01353 hists->m_prim_chargeFE->Fill(geom->charge());
01354 hists->m_prim_xfFE->Fill(firstPoint.x());
01355 hists->m_prim_yfFE->Fill(firstPoint.y());
01356 hists->m_prim_zfFE->Fill(firstPoint.z());
01357 hists->m_prim_radfFE->Fill(radf);
01358 hists->m_prim_ratiomFE->Fill(nfitnmax);
01359 hists->m_ppsiFE->Fill(psi);
01360 hists->m_petaFE->Fill(eta);
01361 hists->m_ppTFE->Fill(pT);
01362 hists->m_pmomFE->Fill(gmom);
01363 hists->m_plengthFE->Fill(primtrk->length());
01364 hists->m_pchisq0FE->Fill(chisq0);
01365 hists->m_pchisq1FE->Fill(chisq1);
01366
01367
01368 hists->m_ppT_eta_recFE->Fill(eta,lmevpt);
01369 hists->m_primtrk_xf_yfFE->Fill(firstPoint.x(),
01370 firstPoint.y());
01371 hists->m_peta_trklengthFE->Fill(eta,primtrk->length());
01372 hists->m_pnpoint_lengthFE->Fill(primtrk->length(),
01373 Float_t(detInfo->numberOfPoints()));
01374 }
01375
01376
01377 else if (map.trackFtpcWest()) {
01378
01379 if ( pT<2 ) {
01380 mean_ptFW += geom->momentum().perp();
01381 pTcnttrkgFW++;
01382 }
01383 cnttrkgFW++;
01384 mean_etaFW += eta;
01385
01386
01387 hists->m_ppointF->Fill(detInfo->numberOfPoints(),1.);
01388 hists->m_pmax_pointF->Fill(primtrk->numberOfPossiblePoints(),1.);
01389 hists->m_prim_chargeF->Fill(geom->charge(),1.);
01390 hists->m_prim_xfF->Fill(firstPoint.x(),1.);
01391 hists->m_prim_yfF->Fill(firstPoint.y(),1.);
01392 hists->m_prim_zfF->Fill(firstPoint.z(),1.);
01393 hists->m_prim_radfF->Fill(radf,1.);
01394 hists->m_prim_ratiomF->Fill(nfitnmax,1.);
01395 hists->m_ppsiF->Fill(psi,1.);
01396 hists->m_petaF->Fill(fabs(eta),1.);
01397 hists->m_ppTF->Fill(pT,1.);
01398 hists->m_pmomF->Fill(gmom,1.);
01399 hists->m_plengthF->Fill(primtrk->length(),1.);
01400 hists->m_pchisq0F->Fill(chisq0,1.);
01401 hists->m_pchisq1F->Fill(chisq1,1.);
01402
01403 hists->m_ppointFW->Fill(detInfo->numberOfPoints());
01404 hists->m_pmax_pointFW->Fill(primtrk->numberOfPossiblePoints());
01405 hists->m_prim_chargeFW->Fill(geom->charge());
01406 hists->m_prim_xfFW->Fill(firstPoint.x());
01407 hists->m_prim_yfFW->Fill(firstPoint.y());
01408 hists->m_prim_zfFW->Fill(firstPoint.z());
01409 hists->m_prim_radfFW->Fill(radf);
01410 hists->m_prim_ratiomFW->Fill(nfitnmax);
01411 hists->m_ppsiFW->Fill(psi);
01412 hists->m_petaFW->Fill(eta);
01413 hists->m_ppTFW->Fill(pT);
01414 hists->m_pmomFW->Fill(gmom);
01415 hists->m_plengthFW->Fill(primtrk->length());
01416 hists->m_pchisq0FW->Fill(chisq0);
01417 hists->m_pchisq1FW->Fill(chisq1);
01418
01419
01420 hists->m_ppT_eta_recFW->Fill(eta,lmevpt);
01421 hists->m_primtrk_xf_yfFW->Fill(firstPoint.x(),
01422 firstPoint.y());
01423 hists->m_peta_trklengthFW->Fill(eta,primtrk->length());
01424 hists->m_pnpoint_lengthFW->Fill(primtrk->length(),
01425 Float_t(detInfo->numberOfPoints()));
01426 }
01427 }
01428 }
01429 hists->m_primtrk_good->Fill(cnttrkg);
01430 hists->m_primtrk_good_sm->Fill(cnttrkg);
01431 if (silHists)
01432 hists->m_primtrk_goodTTS->Fill(cnttrkgT+cnttrkgTS);
01433 hists->m_primtrk_goodF->Fill(cnttrkgFE,cnttrkgFW);
01434 }
01435 mean_ptT /= (cnttrkgT +1.e-10);
01436 mean_ptFE /= (pTcnttrkgFE+1.e-10);
01437 mean_ptFW /= (pTcnttrkgFW+1.e-10);
01438 mean_etaT /= (cnttrkgT +1.e-10);
01439 mean_etaFE /= (cnttrkgFE +1.e-10);
01440 mean_etaFW /= (cnttrkgFW +1.e-10);
01441 if (silHists) {
01442 mean_ptTS /= (cnttrkgTS +1.e-10);
01443 mean_etaTS /= (cnttrkgTS +1.e-10);
01444 hists->m_primtrk_meanptTTS->Fill(mean_ptTS,0.);
01445 hists->m_primtrk_meanptTTS->Fill(mean_ptT,1.);
01446 hists->m_primtrk_meanetaTTS->Fill(mean_etaTS,0.);
01447 hists->m_primtrk_meanetaTTS->Fill(mean_etaT,1.);
01448 }
01449 hists->m_primtrk_meanptF->Fill(mean_ptFE,0.);
01450 hists->m_primtrk_meanptF->Fill(mean_ptFW,1.);
01451 hists->m_primtrk_meanetaF->Fill(fabs(mean_etaFE),0.);
01452 hists->m_primtrk_meanetaF->Fill(fabs(mean_etaFW),1.);
01453
01454
01455 hists->m_primglob_good->Fill((Float_t)n_prim_good/((Float_t)n_glob_good+1.e-10));
01456 }
01457
01458
01459
01460 void StEventQAMaker::MakeHistPID() {
01461
01462 if (Debug())
01463 gMessMgr->Info(" *** in StEventQAMaker - filling dE/dx histograms ");
01464
01465 StSPtrVecTrackNode &theNodes = event->trackNodes();
01466 Int_t cntrows=0;
01467 for (UInt_t i=0; i<theNodes.size(); i++) {
01468 StTrack *theTrack = theNodes[i]->track(global);
01469 if (!theTrack) continue;
01470 cntrows++;
01471 StSPtrVecTrackPidTraits &trkPidTr = theTrack->pidTraits();
01472 StDedxPidTraits *dedxPidTr;
01473
01474 for (unsigned int itrait=0; itrait<trkPidTr.size();itrait++) {
01475 dedxPidTr = 0;
01476 StTrackPidTraits *thisTrait = trkPidTr[itrait];
01477 dedxPidTr = dynamic_cast<StDedxPidTraits*>(thisTrait);
01478
01479 if (dedxPidTr && dedxPidTr->method() == kTruncatedMeanId) {
01480 int ndedx = dedxPidTr->numberOfPoints();
01481 double dedx = dedxPidTr->mean();
01482 double error = dedxPidTr->errorOnMean();
01483 double p = abs(theTrack->geometry()->momentum());
01484 double trackLength = dedxPidTr->length();
01485 if (dedxPidTr->detector() == kTpcId) {
01486
01487 Float_t pionExpectedBB = BetheBloch::Sirrf(theTrack->geometry()->momentum().mag()/
01488 pion_minus_mass_c2,trackLength);
01489 pionExpectedBB *= 1.e-6;
01490 hists->m_dedxTTS->Fill(dedx/(pionExpectedBB+1.e-10));
01491 hists->m_ndedxT->Fill(ndedx);
01492 hists->m_dedx0T->Fill(dedx);
01493 hists->m_dedx1T->Fill(error);
01494 if (ndedx > 15) {
01495 hists->m_p_dedx_rec->Fill((float)(p),(float)(dedx*1.e6));
01496 }
01497 }
01498 if (dedxPidTr->detector() == kTpcSvtId) {
01499
01500 Float_t pionExpectedBB = BetheBloch::Sirrf(theTrack->geometry()->momentum().mag()/
01501 pion_minus_mass_c2,trackLength);
01502 pionExpectedBB *= 1.e-6;
01503 hists->m_dedxTTS->Fill(dedx/(pionExpectedBB+1.e-10));
01504 }
01505 if (dedxPidTr->detector() == kFtpcWestId) {
01506
01507 hists->m_ndedxF->Fill(ndedx,1.);
01508 hists->m_dedx0F->Fill(dedx,1.);
01509
01510 hists->m_ndedxFW->Fill(ndedx);
01511 hists->m_dedx0FW->Fill(dedx);
01512 }
01513 if (dedxPidTr->detector() == kFtpcEastId) {
01514
01515 hists->m_ndedxF->Fill(ndedx,0.);
01516 hists->m_dedx0F->Fill(dedx,0.);
01517
01518 hists->m_ndedxFE->Fill(ndedx);
01519 hists->m_dedx0FE->Fill(dedx);
01520 }
01521 }
01522 }
01523 }
01524 hists->m_ndedxr->Fill(cntrows);
01525 }
01526
01527
01528 void StEventQAMaker::MakeHistVertex() {
01529
01530 if (Debug())
01531 gMessMgr->Info(" *** in StEventQAMaker - filling vertex histograms ");
01532
01533 if (!allTrigs && vertExists <= 0) return;
01534
01535 Float_t m_prmass2 = (proton_mass_c2*proton_mass_c2);
01536 Float_t m_pimass2 = (pion_minus_mass_c2*pion_minus_mass_c2);
01537 Float_t m_lamass2 = (lambda_mass_c2*lambda_mass_c2);
01538
01539 StThreeVectorF pvert;
01540 if (primVtx) {
01541
01542 pvert = primVtx->position();
01543
01544 for (UInt_t j=0; j<event->numberOfPrimaryVertices(); j++) {
01545 StPrimaryVertex *aPrimVtx = event->primaryVertex(j);
01546
01547 if (aPrimVtx == primVtx) {
01548 hists->m_pv_vtxid->Fill(primVtx->type());
01549 if (!isnan(double(pvert.x())))
01550 hists->m_pv_x->Fill(pvert.x());
01551 if (!isnan(double(pvert.y())))
01552 hists->m_pv_y->Fill(pvert.y());
01553 if (!isnan(double(pvert.z())))
01554 hists->m_pv_z->Fill(pvert.z());
01555 hists->m_pv_pchi2->Fill(primVtx->chiSquared());
01556 hists->m_pv_r->Fill(pvert.x()*pvert.x() +
01557 pvert.y()*pvert.y());
01558 hists->m_pv_xy->Fill(pvert.x(),pvert.y());
01559 } else {
01560 StThreeVectorF apvert = aPrimVtx->position();
01561 hists->m_v_vtxid->Fill(aPrimVtx->type());
01562 if (!isnan(double(apvert.x())))
01563 hists->m_v_x->Fill(apvert.x());
01564 if (!isnan(double(apvert.y())))
01565 hists->m_v_y->Fill(apvert.y());
01566 if (!isnan(double(apvert.z())))
01567 hists->m_v_z->Fill(apvert.z());
01568 hists->m_v_pchi2->Fill(aPrimVtx->chiSquared());
01569 hists->m_v_r->Fill(apvert.x()*apvert.x() +
01570 apvert.y()*apvert.y());
01571 }
01572 }
01573 }
01574
01575 for (UInt_t j=0; j<event->numberOfCalibrationVertices(); j++) {
01576 StCalibrationVertex *aCalibVtx = event->calibrationVertex(j);
01577 if (aCalibVtx->type() == 6 ) {
01578 hists->m_vtx_FtpcEastTpc_xy->Fill(aCalibVtx->position().x() - pvert.x(),
01579 aCalibVtx->position().y() - pvert.y());
01580 hists->m_vtx_FtpcEastTpc_z->Fill(aCalibVtx->position().z() - pvert.z());
01581 }
01582 if (aCalibVtx->type() == 7 ) {
01583 hists->m_vtx_FtpcWestTpc_xy->Fill(aCalibVtx->position().x() - pvert.x(),
01584 aCalibVtx->position().y() - pvert.y());
01585 hists->m_vtx_FtpcWestTpc_z->Fill(aCalibVtx->position().z() - pvert.z());
01586 }
01587 }
01588
01589
01590 if (Debug())
01591 gMessMgr->Info(" *** in StEventQAMaker - filling dst_v0_vertex histograms ");
01592
01593 StSPtrVecV0Vertex &v0Vtx = event->v0Vertices();
01594 UInt_t v0Vtxs = v0Vtx.size();
01595 hists->m_v0->Fill( v0Vtxs ? TMath::Log10(v0Vtxs) : -0.5 );
01596
01597 for (UInt_t k=0; k<v0Vtxs; k++) {
01598 StV0Vertex *v0 = v0Vtx[k];
01599 if ((v0) && (v0->dcaParentToPrimaryVertex() >= 0.)) {
01600 Float_t e1a = ::pow(abs(v0->momentumOfDaughter(positive)),2);
01601 Float_t e2 = ::pow(abs(v0->momentumOfDaughter(negative)),2);
01602 Float_t e1 = e1a + m_prmass2;
01603 e2 += m_pimass2;
01604 e1 = TMath::Sqrt(e1);
01605 e2 = TMath::Sqrt(e2);
01606 Float_t p = ::pow(abs(v0->momentum()),2);
01607 Float_t inv_mass_la = TMath::Sqrt((e1+e2)*(e1+e2) - p);
01608 e1 = e1a + m_pimass2;
01609 e1 = TMath::Sqrt(e1);
01610 Float_t inv_mass_k0 = TMath::Sqrt((e1+e2)*(e1+e2) - p);
01611
01612 hists->m_ev0_lama_hist->Fill(inv_mass_la);
01613 hists->m_ev0_k0ma_hist->Fill(inv_mass_k0);
01614
01615 hists->m_v_vtxid->Fill(v0->type());
01616 if (!isnan(double(v0->position().x())))
01617 hists->m_v_x->Fill(v0->position().x());
01618 if (!isnan(double(v0->position().y())))
01619 hists->m_v_y->Fill(v0->position().y());
01620 if (!isnan(double(v0->position().z())))
01621 hists->m_v_z->Fill(v0->position().z());
01622 hists->m_v_pchi2->Fill(v0->chiSquared());
01623 hists->m_v_r->Fill(v0->position().x()*v0->position().x() +
01624 v0->position().y()*v0->position().y());
01625
01626 if (!(isnan(double(v0->position().x())) ||
01627 isnan(double(v0->position().y())))) {
01628 Float_t phi = atan2(v0->position().y() - pvert.y(),
01629 v0->position().x() - pvert.x())
01630 * 180./M_PI;
01631 if (phi<0.) phi += 360.;
01632 hists->m_vtx_phi_dist->Fill(phi);
01633 hists->m_vtx_z_dist->Fill(v0->position().z() - pvert.z());
01634 Float_t r_dist = ::sqrt(::pow(v0->position().x()-pvert.x(),2)+
01635 ::pow(v0->position().y()-pvert.y(),2));
01636 hists->m_vtx_r_dist->Fill(r_dist);
01637 }
01638 }
01639 }
01640
01641
01642 if (Debug())
01643 gMessMgr->Info(" *** in StEventQAMaker - filling dst_xi_vertex histograms ");
01644
01645 StSPtrVecXiVertex &xiVtx = event->xiVertices();
01646 UInt_t xiVtxs = xiVtx.size();
01647 hists->m_xi_tot->Fill( xiVtxs ? TMath::Log10(xiVtxs) : -0.5 );
01648
01649 for (UInt_t l=0; l<xiVtxs; l++) {
01650 StXiVertex *xi = xiVtx[l];
01651 if (xi) {
01652 const StThreeVectorF& pMom = xi->momentumOfBachelor();
01653 StThreeVectorF lMom = xi->momentumOfV0();
01654 StThreeVectorF xMom = lMom + pMom;
01655 Float_t pP2 = pMom.mag2();
01656 Float_t pL2 = lMom.mag2();
01657 Float_t pX2 = xMom.mag2();
01658 Float_t epi = ::sqrt(pP2 + m_pimass2);
01659 Float_t ela = ::sqrt(pL2 + m_lamass2);
01660 Float_t eXi = ela + epi;
01661 Float_t inv_mass_xi = ::sqrt(eXi*eXi - pX2);
01662
01663 hists->m_xi_ma_hist->Fill(inv_mass_xi);
01664
01665 hists->m_v_vtxid->Fill(xi->type());
01666 if (!isnan(double(xi->position().x())))
01667 hists->m_v_x->Fill(xi->position().x());
01668 if (!isnan(double(xi->position().y())))
01669 hists->m_v_y->Fill(xi->position().y());
01670 if (!isnan(double(xi->position().z())))
01671 hists->m_v_z->Fill(xi->position().z());
01672 hists->m_v_pchi2->Fill(xi->chiSquared());
01673 hists->m_v_r->Fill(xi->position().x()*xi->position().x() +
01674 xi->position().y()*xi->position().y());
01675 }
01676 }
01677
01678
01679 if (Debug())
01680 gMessMgr->Info(" *** in StEventQAMaker - filling kink histograms ");
01681
01682 StSPtrVecKinkVertex &kinkVtx = event->kinkVertices();
01683 UInt_t kinkVtxs = kinkVtx.size();
01684 hists->m_kink_tot->Fill( kinkVtxs ? TMath::Log10(kinkVtxs) : -0.5 );
01685
01686 for (UInt_t m=0; m<kinkVtxs; m++) {
01687 StKinkVertex *kink = kinkVtx[m];
01688 if (kink) {
01689
01690 hists->m_v_vtxid->Fill(kink->type());
01691 if (!isnan(double(kink->position().x())))
01692 hists->m_v_x->Fill(kink->position().x());
01693 if (!isnan(double(kink->position().y())))
01694 hists->m_v_y->Fill(kink->position().y());
01695 if (!isnan(double(kink->position().z())))
01696 hists->m_v_z->Fill(kink->position().z());
01697 hists->m_v_pchi2->Fill(kink->chiSquared());
01698 hists->m_v_r->Fill(kink->position().x()*kink->position().x() +
01699 kink->position().y()*kink->position().y());
01700 }
01701 }
01702
01703 UInt_t cntrows = event->numberOfPrimaryVertices() +
01704 v0Vtxs + xiVtxs + kinkVtxs;
01705
01706
01707 hists->m_v_num->Fill(cntrows);
01708 hists->m_v_num_sm->Fill(cntrows);
01709 }
01710
01711
01712 void StEventQAMaker::MakeHistPoint() {
01713
01714 if (Debug())
01715 gMessMgr->Info(" *** in StEventQAMaker - filling point histograms ");
01716
01717 StTpcHitCollection *tpcHits = event->tpcHitCollection();
01718 StSvtHitCollection *svtHits = event->svtHitCollection();
01719 StFtpcHitCollection *ftpcHits = event->ftpcHitCollection();
01720 StSsdHitCollection *ssdHits = event->ssdHitCollection();
01721
01722 ULong_t totalHits = 0;
01723 ULong_t ftpcHitsE = 0;
01724 ULong_t ftpcHitsW = 0;
01725 StThreeVectorF hitPos;
01726 Int_t rotator;
01727
01728 if (tpcHits) {
01729
01730 for (UInt_t i=0; i<tpcHits->numberOfSectors(); i++) {
01731 StTpcSectorHitCollection* tpcHitsSector = tpcHits->sector(i);
01732 for (UInt_t j=0; j<tpcHitsSector->numberOfPadrows(); j++) {
01733 StSPtrVecTpcHit& tpcHitsVec = tpcHitsSector->padrow(j)->hits();
01734 for (UInt_t k=0; k<tpcHitsVec.size(); k++) {
01735 hitPos = tpcHitsVec[k]->position();
01736 Float_t phi = hitPos.phi()/degree;
01737 if (phi<0) phi+=360.;
01738 hists->m_z_hits->Fill(hitPos.z());
01739 Float_t tb = tpcHitsVec[k]->timeBucket();
01740
01741 float density_correction = (j>12 ? 1 : 2.4);
01742
01743 float hit_charge = tpcHitsVec[k]->charge() * density_correction * (j>12 ? 1 : 1.95/1.15);
01744
01745
01746
01747 if (i>11) {
01748 rotator = 11-i;
01749 hists->m_pnt_timeT->Fill(tb,0);
01750 hists->m_pnt_phiT->Fill(phi,0.);
01751 hists->m_pnt_padrowT->Fill(j+1,0.);
01752 hists->m_pnt_rpTE->Fill(hitPos.perp(),phi*degree,density_correction);
01753 m_pnt_rpTQE->Fill(hitPos.perp(),phi*degree,hit_charge);
01754 } else {
01755 rotator = i-11;
01756 hists->m_pnt_timeT->Fill(tb,1);
01757 hists->m_pnt_phiT->Fill(phi,1.);
01758 hists->m_pnt_padrowT->Fill(j+1,1.);
01759 hists->m_pnt_rpTW->Fill(hitPos.perp(),phi*degree,density_correction);
01760 m_pnt_rpTQW->Fill(hitPos.perp(),phi*degree,hit_charge);
01761 }
01762 hitPos.rotateZ(((float) rotator)*TMath::Pi()/6.0);
01763 mTpcSectorPlot[i]->Fill(hitPos.x(),(float) (j+1));
01764 }
01765 }
01766 }
01767 hists->m_pnt_tpc->Fill(tpcHits->numberOfHits());
01768 totalHits += tpcHits->numberOfHits();
01769 }
01770 if (svtHits) {
01771 Int_t SvtLaser1 = 0;
01772 Int_t SvtLaser2 = 0;
01773 Float_t SvtLaser1t[32];
01774 Float_t SvtLaser2t[32];
01775 ULong_t totalSvtHits = 0;
01776 for (UInt_t i=0; i<svtHits->numberOfBarrels(); i++) {
01777 StSvtBarrelHitCollection* svtbarrel = svtHits->barrel(i);
01778 for (UInt_t j=0; j<svtbarrel->numberOfLadders(); j++) {
01779 StSvtLadderHitCollection* svtladder = svtbarrel->ladder(j);
01780 for (UInt_t k=0; k<svtladder->numberOfWafers(); k++) {
01781 StSPtrVecSvtHit& svtwaferhits = svtladder->wafer(k)->hits();
01782 for (UInt_t l=0; l<svtwaferhits.size(); l++) {
01783 StSvtHit* svthit = svtwaferhits[l];
01784 if (svthit->flag() < 4) {
01785 hitPos = svthit->position();
01786 Float_t x = hitPos.x();
01787 Float_t y = hitPos.y();
01788 Float_t z = hitPos.z();
01789 Float_t phi = hitPos.phi()/degree;
01790 if (phi<0) phi+=360.;
01791 hists->m_pnt_zS->Fill(z);
01792 hists->m_pnt_phiS->Fill(phi);
01793 hists->m_pnt_barrelS->Fill(i+1);
01794 hists->m_pnt_xyS->Fill(x,y);
01795 totalSvtHits++;
01796
01797 }
01798
01799
01800 if (i==2 && j==14 && k==6 && svthit->hybrid() == 1 &&
01801 svthit->anode() >= 195 && svthit->anode() <= 204 &&
01802 svthit->timebucket() >= 90) {
01803 hists->m_pnt_svtLaser->Fill(eventCount,svthit->timebucket());
01804 SvtLaser1t[SvtLaser1] = svthit->timebucket();
01805 for (Int_t m=0;m<SvtLaser1;m++)
01806 hists->m_pnt_svtLaserDiff->Fill(eventCount,
01807 TMath::Abs(SvtLaser1t[SvtLaser1]-SvtLaser1t[m]),0);
01808 SvtLaser1++;
01809 }
01810
01811 if (i==2 && j==6 && k==0 && svthit->hybrid() == 2 &&
01812 svthit->anode() >= 195 && svthit->anode() <= 204 &&
01813 svthit->timebucket() >= 90) {
01814 hists->m_pnt_svtLaser->Fill(eventCount,svthit->timebucket()/2.);
01815 SvtLaser2t[SvtLaser2] = svthit->timebucket();
01816 for (Int_t m=0;m<SvtLaser2;m++)
01817 hists->m_pnt_svtLaserDiff->Fill(eventCount,
01818 TMath::Abs(SvtLaser2t[SvtLaser2]-SvtLaser2t[m]),1);
01819 SvtLaser2++;
01820 }
01821 }
01822 }
01823 }
01824 }
01825
01826 hists->m_pnt_svt->Fill(totalSvtHits);
01827 totalHits += totalSvtHits;
01828 }
01829 if (ssdHits) {
01830 for (UInt_t j=0; j<ssdHits->numberOfLadders(); j++) {
01831 StSsdLadderHitCollection* ssdladder = ssdHits->ladder(j);
01832 for (UInt_t k=0; k<ssdladder->numberOfWafers(); k++) {
01833 StSPtrVecSsdHit& ssdwaferhits = ssdladder->wafer(k)->hits();
01834 for (UInt_t l=0; l<ssdwaferhits.size(); l++) {
01835 StSsdHit* ssdhit = ssdwaferhits[l];
01836 hitPos = ssdhit->position();
01837 Float_t x = hitPos.x();
01838 Float_t y = hitPos.y();
01839 Float_t phi = hitPos.phi()/degree;
01840 if (phi<0) phi += 360.;
01841 hists->m_pnt_phiSSD->Fill(phi);
01842 hists->m_pnt_lwSSD->Fill(j+1,k+1);
01843 hists->m_pnt_xyS->Fill(x,y);
01844 hists->m_pnt_sizeSSD->Fill(ssdhit->clusterSizePSide(),0);
01845 hists->m_pnt_sizeSSD->Fill(ssdhit->clusterSizeNSide(),1);
01846 hists->m_pnt_eSSD->Fill(TMath::Log10(fabs(ssdhit->charge())+1e-33));
01847 }
01848 }
01849 }
01850 }
01851 if (ftpcHits) {
01852
01853
01854 for (UInt_t i=0; i<ftpcHits->numberOfPlanes(); i++) {
01855 for (UInt_t j=0; j<ftpcHits->plane(i)->numberOfSectors(); j++)
01856 for (UInt_t k=0; k<ftpcHits->plane(i)->sector(j)->hits().size(); k++) {
01857 Float_t x = ftpcHits->plane(i)->sector(j)->hits()[k]->position().x();
01858 Float_t y = ftpcHits->plane(i)->sector(j)->hits()[k]->position().y();
01859 Int_t npads = ftpcHits->plane(i)->sector(j)->hits()[k]->padsInHit();
01860 Int_t ntimebins = ftpcHits->plane(i)->sector(j)->hits()[k]->timebinsInHit();
01861 UInt_t trackReferenceCount = ftpcHits->plane(i)->sector(j)->hits()[k]->trackReferenceCount();
01862 if (i<10) {
01863 hists->m_pnt_planeF->Fill(i+1,1.);
01864 hists->m_pnt_xyFW->Fill(x,y);
01865 hists->m_pnt_padtimeFW->Fill(ntimebins,npads);
01866 if (trackReferenceCount !=0 )hists->m_globtrk_padtimeFW->Fill(ntimebins,npads);
01867 } else {
01868 hists->m_pnt_planeF->Fill(i+1,0.);
01869 hists->m_pnt_xyFE->Fill(x,y);
01870 hists->m_pnt_padtimeFE->Fill(ntimebins,npads);
01871 if (trackReferenceCount !=0 )hists->m_globtrk_padtimeFE->Fill(ntimebins,npads);
01872 }
01873 }
01874 if (i<10)
01875 ftpcHitsW += ftpcHits->plane(i)->numberOfHits();
01876 else
01877 ftpcHitsE += ftpcHits->plane(i)->numberOfHits();
01878 }
01879
01880 hists->m_pnt_ftpc->Fill(ftpcHitsE,0.);
01881 hists->m_pnt_ftpc->Fill(ftpcHitsW,1.);
01882
01883 hists->m_pnt_ftpcW->Fill(ftpcHitsW);
01884 hists->m_pnt_ftpcE->Fill(ftpcHitsE);
01885 totalHits += ftpcHits->numberOfHits();
01886 }
01887 if (ssdHits) {
01888 hists->m_pnt_ssd->Fill(ssdHits->numberOfHits());
01889 totalHits += ssdHits->numberOfHits();
01890 }
01891 hists->m_pnt_tot->Fill(totalHits);
01892 hists->m_pnt_tot_med->Fill(totalHits);
01893 hists->m_pnt_tot_sm->Fill(totalHits);
01894 }
01895
01896
01897
01898 void StEventQAMaker::MakeHistEMC() {
01899
01900 if (Debug())
01901 gMessMgr->Info(" *** in StEventQAMaker - filling EMC histograms ");
01902
01903 StEmcCollection* emccol = event->emcCollection();
01904
01905 if (!emccol) return;
01906
01907 UInt_t i;
01908
01909
01910
01911
01912 for(i=0; i<4; i++){
01913 Int_t det = i+1;
01914 StDetectorId id = StEmcMath::detectorId(det);
01915 StEmcDetector* detector=emccol->detector(id);
01916 if(detector) {
01917 Float_t energy=0.0;
01918 UInt_t nh=0;
01919 for(UInt_t j=1;j<121;j++){
01920 StEmcModule* module = detector->module(j);
01921 if(module) {
01922 StSPtrVecEmcRawHit& rawHit=module->hits();
01923
01924 Int_t m,e,s,adc;
01925 Float_t eta,phi,E;
01926 nh += rawHit.size();
01927 for(UInt_t k=0;k<rawHit.size();k++){
01928 m = rawHit[k]->module();
01929 e = rawHit[k]->eta();
01930 s = rawHit[k]->sub();
01931 if (s == -1) s = 1;
01932 adc = rawHit[k]->adc();
01933 E = rawHit[k]->energy();
01934 emcGeom[i]->getEta(m, e, eta);
01935 emcGeom[i]->getPhi(m, s, phi);
01936 hists->m_emc_hits[i]->Fill(eta,phi);
01937 hists->m_emc_energy2D[i]->Fill(eta,phi,E);
01938 hists->m_emc_adc[i]->Fill(float(adc));
01939 hists->m_emc_energy[i]->Fill(E);
01940 energy += E;
01941 }
01942 }
01943 }
01944 if(nh>0) hists->m_emc_nhit->Fill(log10(1e-30+Double_t(nh)), Float_t(det));
01945 if(energy>0) hists->m_emc_etot->Fill(log10(1e-30+Double_t(energy)), Float_t(det));
01946 }
01947 }
01948
01949
01950
01951
01952 for(i=0; i<4; i++) {
01953 Int_t det = i+1, nh;
01954 StDetectorId id = StEmcMath::detectorId(det);
01955 StEmcDetector* detector = emccol->detector(id);
01956 if(detector)
01957 {
01958 StEmcClusterCollection* clusters=detector->cluster();
01959 if(clusters)
01960 {
01961 StSPtrVecEmcCluster& cluster = clusters->clusters();
01962
01963 if(cluster.size()>0)
01964 {
01965 hists->m_emc_ncl->Fill(log10(1e-30+Double_t(cluster.size())),(Float_t)det);
01966 Float_t Etot=0.0, eta, phi, sigEta, sigPhi, eCl;
01967 for(UInt_t j=0;j<cluster.size();j++){
01968 nh = cluster[j]->nHits();
01969 eCl = cluster[j]->energy();
01970 eta = cluster[j]->eta();
01971 sigEta = cluster[j]->sigmaEta();
01972 phi = cluster[j]->phi();
01973 sigPhi = cluster[j]->sigmaPhi();
01974 if(sigEta > 0) hists->m_emc_sig_e->Fill(sigEta, Axis_t(det));
01975 if(sigPhi > 0.0) hists->m_emc_sig_p->Fill(sigPhi, Axis_t(det));
01976
01977 hists->m_emc_cl[det-1]->Fill(Axis_t(eta), Axis_t(phi));
01978 hists->m_emc_energyCl[det-1]->Fill(Axis_t(eta), Axis_t(phi), eCl);
01979 hists->m_emc_HitsInCl[det-1]->Fill(Axis_t(nh));
01980 hists->m_emc_EnergyCl[det-1]->Fill(Axis_t(eCl));
01981 hists->m_emc_EtaInCl[det-1]->Fill(Axis_t(eta));
01982 hists->m_emc_PhiInCl[det-1]->Fill(Axis_t(phi));
01983 Etot += eCl;
01984 }
01985 hists->m_emc_etotCl->Fill(log10(1e-30+Etot), Axis_t(det));
01986 }
01987 }
01988 }
01989 }
01990
01991
01992
01993
01994
01995 StSPtrVecEmcPoint& pointvec = emccol->barrelPoints();
01996
01997 Int_t Point_Mult[4];
01998 for(i=0;i<4;i++) {Point_Mult[i]=0;}
01999
02000 for(i=0;i<pointvec.size();i++) {
02001
02002 StEmcPoint *point = (StEmcPoint*) pointvec[i];
02003
02004
02005 const StThreeVectorF & sizeP = point->size();
02006
02007 Float_t eta=0.;
02008 Float_t phi=0.;
02009 if (primVtx) {
02010 eta=StEmcMath::eta(point,(StMeasuredPoint*)primVtx);
02011 phi=StEmcMath::phi(point,(StMeasuredPoint*)primVtx);
02012 }
02013
02014
02015
02016 Float_t EnergyDet[4];
02017 for(UInt_t ie=0;ie<4;ie++) {EnergyDet[ie]=0.0;}
02018
02019 for(Int_t j=0;j<4;j++) {
02020 StDetectorId detid = static_cast<StDetectorId>(j+kBarrelEmcTowerId);
02021 EnergyDet[j] = point->energyInDetector(detid);
02022 }
02023 Int_t ncat=0;
02024
02025 if(EnergyDet[2]==0 && EnergyDet[3] ==0) {
02026 ncat=0;
02027 } else if(EnergyDet[2]>0 && EnergyDet[3] ==0) {
02028 ncat=1;
02029 } else if(EnergyDet[2]==0 && EnergyDet[3]>0) {
02030 ncat=2;
02031 } else{
02032 ncat=3;
02033 }
02034
02035
02036 Float_t energy=point->energy();
02037 Float_t sigmaeta=sizeP.x();
02038 Float_t sigmaphi=sizeP.y();
02039 Float_t trackmom=point->chiSquare();
02040 Float_t deltaeta=point->deltaEta();
02041 Float_t deltaphi=point->deltaPhi();
02042 if (ncat>3) ncat=3;
02043 Point_Mult[ncat]++;
02044 if (energy>0) hists->m_emc_point_energy[ncat]->Fill(energy);
02045 if (primVtx) {
02046 hists->m_emc_point_eta[ncat]->Fill(eta);
02047 hists->m_emc_point_phi[ncat]->Fill(phi);
02048 }
02049 hists->m_emc_point_sigeta[ncat]->Fill(sigmaeta);
02050 hists->m_emc_point_sigphi[ncat]->Fill(sigmaphi);
02051 hists->m_emc_point_flag->Fill(Float_t(ncat+1));
02052 if (trackmom>0) {
02053 hists->m_emc_point_trmom[ncat]->Fill(trackmom);
02054 hists->m_emc_point_deleta[ncat]->Fill(deltaeta);
02055 hists->m_emc_point_delphi[ncat]->Fill(deltaphi);
02056 }
02057 }
02058 for(i=0;i<4;i++) {hists->m_emc_points[i]->Fill(Float_t(Point_Mult[i]));}
02059
02060 if (Debug())
02061 gMessMgr->Info(" *** in StEventQAMaker - Finished filling EMC histograms ");
02062
02063 }
02064
02065 void StEventQAMaker::MakeHistEval() {
02066
02067
02068 if (Debug())
02069 gMessMgr->Info(" *** in StEventQAMaker - filling Eval histograms ");
02070
02071 StMcEvent* mcEvent = (StMcEvent*) GetDataSet("StMcEvent");
02072 if (!mcEvent) return;
02073 StMcVertex* mcprimaryVertex = mcEvent->primaryVertex();
02074 if ((primVtx) && (mcprimaryVertex)) {
02075 Float_t geantX = mcprimaryVertex->position().x();
02076 Float_t geantY = mcprimaryVertex->position().y();
02077 Float_t geantZ = mcprimaryVertex->position().z();
02078 Float_t recoX = primVtx->position().x();
02079 Float_t recoY = primVtx->position().y();
02080 Float_t recoZ = primVtx->position().z();
02081 hists->m_geant_reco_pvtx_x->Fill(geantX-recoX);
02082 hists->m_geant_reco_pvtx_y->Fill(geantY-recoY);
02083 hists->m_geant_reco_pvtx_z->Fill(geantZ-recoZ);
02084 hists->m_geant_reco_vtx_z_z->Fill(geantZ-recoZ,recoZ);
02085 }
02086
02087 }
02088
02089 void StEventQAMaker::MakeHistBBC() {
02090
02091 Int_t i;
02092 StTriggerDetectorCollection* trig = event->triggerDetectorCollection();
02093 if (!trig) return;
02094 StBbcTriggerDetector& bbc = trig->bbc();
02095
02096 for (i=0; i<32; i++) {
02097 hists->m_bbc_adc[i/8]->Fill(bbc.adc(i),i%8);
02098 hists->m_bbc_tdc[i/8]->Fill(bbc.tdc(i),i%8);
02099 }
02100
02101 }
02102
02103 void StEventQAMaker::MakeHistFPD() {
02104
02105 Int_t i;
02106 StFpdCollection* fpd = event->fpdCollection();
02107 if (!fpd) return;
02108 unsigned short* dfpd = fpd->adc();
02109 if (!dfpd) return;
02110
02111 for (i=0; i<16; i++) {
02112 hists->m_fpd_top[i/8]->Fill((float) dfpd[i],i%8);
02113 hists->m_fpd_bottom[i/8]->Fill((float) dfpd[i+16],i%8);
02114 hists->m_fpd_south[i/8]->Fill((float) dfpd[i+32],i%8);
02115 if (i<12) hists->m_fpd_north[i/6]->Fill((float) dfpd[i+48],i%6);
02116 }
02117
02118 hists->m_fpd_sums[0]->Fill((float) fpd->sumAdcTop());
02119 hists->m_fpd_sums[1]->Fill((float) fpd->sumAdcBottom());
02120 hists->m_fpd_sums[2]->Fill((float) fpd->sumAdcSouth());
02121 hists->m_fpd_sums[3]->Fill((float) fpd->sumAdcNorth());
02122 hists->m_fpd_sums[4]->Fill((float) fpd->sumAdcSmdX());
02123 hists->m_fpd_sums[5]->Fill((float) fpd->sumAdcSmdY());
02124 hists->m_fpd_sums[6]->Fill((float) fpd->sumAdcPreShower1());
02125 hists->m_fpd_sums[7]->Fill((float) fpd->sumAdcPreShower2());
02126
02127 }
02128
02129 void StEventQAMaker::MakeHistPMD() {
02130
02131
02132
02133 StPhmdCollection* phmdcl = (StPhmdCollection*) (event->phmdCollection());
02134 if (!phmdcl) return;
02135 Int_t runNumber=event->runId();
02136 Int_t eventID=event->id();
02137 if (runNumber != mRunNumber) {
02138 mRunNumber = runNumber;
02139 if (!mPmdGeom) mPmdGeom = new StPmdGeom();
02140 mPmdGeom->readBoardDetail(mRunNumber);
02141 if (maputil) delete maputil;
02142 maputil = new StPmdMapUtil();
02143 maputil->StoreMapInfo(mRunNumber);
02144 }
02145
02146
02147 for (Int_t d=0;d<2;d++) {
02148
02149 Int_t TOTAL_HIT_DETECTOR=0;
02150 Int_t TOTAL_ADC_DETECTOR=0;
02151
02152
02153 StDetectorId pdet = static_cast<StDetectorId>(kPhmdCpvId+d);
02154 StPhmdDetector* detector = (StPhmdDetector*) (phmdcl->detector(StDetectorId(pdet)));
02155 if (detector) {
02156 for (UInt_t j=0;j<12;j++) {
02157 Float_t TotalAdc=0;
02158 Float_t TotalHit=0;
02159 StPhmdModule* module = detector->module(j);
02160 if (module) {
02161 StSPtrVecPhmdHit& rawHit=module->hits();
02162 if (rawHit.size()>0) {
02163 for (Int_t k=0;k<(Int_t)rawHit.size();k++) {
02164 Int_t sm=rawHit[k]->superModule();
02165 Int_t row=rawHit[k]->row();
02166 Int_t col=rawHit[k]->column();
02167 Int_t adc=rawHit[k]->adc();
02168 TotalAdc+=adc;
02169 TotalHit++;
02170 Int_t chainR, channelOR, channelCR;
02171 if (d==0) {
02172 maputil->ReverseChannelOriginal(sm+13,row+1,col+1,channelOR);
02173 maputil->ReverseChannelConverted(sm+13,row+1,col+1,channelCR);
02174 maputil->ChainNumber(sm+13,row+1,col+1,chainR);
02175 } else {
02176 maputil->ReverseChannelOriginal(sm+1,row+1,col+1,channelOR);
02177 maputil->ReverseChannelConverted(sm+1,row+1,col+1,channelCR);
02178 maputil->ChainNumber(sm+1,row+1,col+1,chainR);
02179 }
02180 if (chainR>0 && channelCR>=0 && chainR<=49) {
02181 hists->m_pmd_chain_adc[chainR/2]->Fill(channelCR,chainR%2,adc);
02182 hists->m_pmd_chain_hit[chainR/2]->Fill(channelCR,chainR%2);
02183 }
02184 TOTAL_HIT_DETECTOR++;;
02185 TOTAL_ADC_DETECTOR+=adc;
02186 }
02187 }
02188 }
02189 Int_t smid=d*12+j;
02190 hists->m_pmd_sm_hit[smid/2]->Fill(TotalHit,smid%2);
02191 if (TotalHit<=0) continue;
02192 hists->m_pmd_sm_adc[smid/2]->Fill(TotalAdc/TotalHit,smid%2);
02193 }
02194 }
02195 if (d==0) {
02196 hists->m_pmd_total_hit->Fill(eventID,TMath::Log10(1e-30+TOTAL_HIT_DETECTOR));
02197 hists->m_pmd_total_adc->Fill(eventID,TMath::Log10(1e-30+TOTAL_ADC_DETECTOR));
02198 } else {
02199 hists->m_cpv_total_hit->Fill(eventID,TMath::Log10(1e-30+TOTAL_HIT_DETECTOR));
02200 hists->m_cpv_total_adc->Fill(eventID,TMath::Log10(1e-30+TOTAL_ADC_DETECTOR));
02201 }
02202 }
02203 }
02204
02205 void StEventQAMaker::MakeHistTOF() {
02206
02207 int runId = event->runId();
02208 if(runId>10000000) {
02209
02210 StBTofCollection *btofcol = (StBTofCollection *)(event->btofCollection());
02211 if (!btofcol) return;
02212
02213 int i;
02214 double vz_tpc = -999.;
02215 if(primVtx) vz_tpc = primVtx->position().z();
02216
02217
02218 StSPtrVecBTofHit &tofHits = btofcol->tofHits();
02219 Int_t nTofHits = tofHits.size();
02220 Int_t nHitsvsTray[120] = {0};
02221 Int_t nHitsvsModule[2][32] = {{0},{0}};
02222 Int_t nHitsTof = 0;
02223 Int_t nHitsVpd[2] = {0};
02224
02225 Int_t nCellvsTray[120] = {0};
02226 Int_t nCellvsModule[2][32] = {{0},{0}};
02227 Int_t nCellTof = 0;
02228 for(i=0;i<nTofHits;i++) {
02229 StBTofHit *aHit = dynamic_cast<StBTofHit*>(tofHits[i]);
02230 if(!aHit) continue;
02231 int trayId = aHit->tray();
02232 int moduleId = aHit->module();
02233 if(trayId>0 && trayId<=120) {
02234 nHitsvsTray[trayId-1]++;
02235 nHitsvsModule[(trayId-1)/60][moduleId]++;
02236 nHitsTof++;
02237
02238 if(StTrack *trk = (StTrack*)aHit->associatedTrack()) {
02239 nCellvsTray[trayId-1]++;
02240 nCellvsModule[(trayId-1)/60][moduleId]++;
02241 nCellTof++;
02242 StPrimaryTrack *pTrk = dynamic_cast<StPrimaryTrack *>(trk->node()->track(primary));
02243 if(pTrk) {
02244 const StPtrVecTrackPidTraits& theTofPidTraits = pTrk->pidTraits(kTofId);
02245 if(!theTofPidTraits.size()) continue;
02246
02247 StTrackPidTraits *theSelectedTrait = theTofPidTraits[theTofPidTraits.size()-1];
02248 if(!theSelectedTrait) continue;
02249
02250 StBTofPidTraits *pidTof = dynamic_cast<StBTofPidTraits *>(theSelectedTrait);
02251 if(!pidTof) continue;
02252
02253 double ptot = pTrk->geometry()->momentum().mag();
02254 double beta = pidTof->beta();
02255
02256 hists->m_tof_PID->Fill(ptot, 1./beta);
02257 }
02258 }
02259 } else {
02260 nHitsVpd[trayId-121]++;
02261 }
02262 }
02263 for(i=0;i<120;i++) {
02265 hists->m_tof_hit_tray->Fill(i+1, nHitsvsTray[i]);
02267 hists->m_tof_match_tray->Fill(i+1, nCellvsTray[i]);
02268 }
02269 for(i=0;i<32;i++) {
02271 hists->m_tof_hit_module->Fill(i+1, nHitsvsModule[0][i]);
02272 hists->m_tof_hit_module->Fill(-(i+1), nHitsvsModule[1][i]);
02274 hists->m_tof_match_module->Fill(i+1, nCellvsModule[0][i]);
02275 hists->m_tof_match_module->Fill(-(i+1), nCellvsModule[1][i]);
02276 }
02277 hists->m_tof_vpd_hit->Fill(nHitsVpd[0]+nHitsVpd[1], nHitsTof);
02278
02279
02280 double TSumEast = 0.;
02281 double TSumWest = 0.;
02282 int nEast = 0;
02283 int nWest = 0;
02284 for(i=0;i<nTofHits;i++) {
02285 StBTofHit *aHit = dynamic_cast<StBTofHit*>(tofHits[i]);
02286 if(!aHit) continue;
02287 int trayId = aHit->tray();
02288 int tubeId = aHit->cell();
02289 if(trayId==mEastVpdTrayId) {
02290 TSumEast += aHit->leadingEdgeTime() - mEastVpdCorr[tubeId-1];
02291 nEast++;
02292 } else if (trayId==mWestVpdTrayId) {
02293 TSumWest += aHit->leadingEdgeTime() - mWestVpdCorr[tubeId-1];
02294 nWest++;
02295 }
02296 }
02297 double vz_vpd = -999.;
02298 if(nEast&&nWest) vz_vpd = (TSumEast/nEast - TSumWest/nWest)/2./29.979;
02299
02300 hists->m_tof_vtx_z->Fill(vz_tpc, vz_vpd);
02301 return;
02302 }
02303
02305
02306 StTofCollection *tofcol = (StTofCollection *)(event->tofCollection());
02307 if (!tofcol) return;
02308
02309 int i;
02310 double vz_tpc = -999.;
02311 if(primVtx) vz_tpc = primVtx->position().z();
02312
02313
02314 StSPtrVecTofData &tofData = tofcol->tofData();
02315 Int_t nTofData = tofData.size();
02316 Int_t nHitsvsTray[120] = {0};
02317 Int_t nHitsvsModule[2][32] = {{0},{0}};
02318 Int_t nHitsTof = 0;
02319 Int_t nHitsVpd[2] = {0};
02320 for(i=0;i<nTofData;i++) {
02321 StTofData *aHit = dynamic_cast<StTofData*>(tofData[i]);
02322 if(!aHit) continue;
02323 int index = aHit->dataIndex();
02324 int trayId = index/192 + 1;
02325 int moduleId = ( index%192 )/6 + 1;
02326 if(trayId>0 && trayId<=120) {
02327 nHitsvsTray[trayId-1]++;
02328 nHitsvsModule[(trayId-1)/60][moduleId]++;
02329 nHitsTof++;
02330 } else {
02331 nHitsVpd[trayId-121]++;
02332 }
02333 }
02334 for(i=0;i<120;i++) {
02335 hists->m_tof_hit_tray->Fill(i+1, nHitsvsTray[i]);
02336 }
02337 for(i=0;i<32;i++) {
02338 hists->m_tof_hit_module->Fill(i+1, nHitsvsModule[0][i]);
02339 hists->m_tof_hit_module->Fill(-(i+1), nHitsvsModule[1][i]);
02340 }
02341 hists->m_tof_vpd_hit->Fill(nHitsVpd[0]+nHitsVpd[1], nHitsTof);
02342
02343
02344 StSPtrVecTofCell &tofCell = tofcol->tofCells();
02345 Int_t nTofCell = tofCell.size();
02346 Int_t nCellvsTray[120] = {0};
02347 Int_t nCellvsModule[2][32] = {{0},{0}};
02348 Int_t nCellTof = 0;
02349 for(i=0;i<nTofCell;i++) {
02350 StTofCell *aCell = dynamic_cast<StTofCell*>(tofCell[i]);
02351 if(!aCell) continue;
02352 int trayId = aCell->trayIndex();
02353 int moduleId = aCell->moduleIndex();
02354 if(trayId>0 && trayId<=120) {
02355 nCellvsTray[trayId-1]++;
02356 nCellvsModule[(trayId-1)/60][moduleId]++;
02357 nCellTof++;
02358
02359 double tof = aCell->leadingEdgeTime();
02360
02361 StTrack *trk = (StTrack *)aCell->associatedTrack();
02362 if(!trk) continue;
02363 StPrimaryTrack *pTrk = dynamic_cast<StPrimaryTrack *>(trk->node()->track(primary));
02364 if(!pTrk) continue;
02365 double ptot = pTrk->geometry()->momentum().mag();
02366
02367 StTrackGeometry *theTrackGeometry = pTrk->outerGeometry();
02368 if(primVtx) {
02369 double L = tofPathLength(&primVtx->position(), &aCell->position(), theTrackGeometry->helix().curvature());
02370 double beta = L/(tof*29.979);
02371 hists->m_tof_PID->Fill(ptot, 1./beta);
02372 }
02373 }
02374 }
02375 for(i=0;i<120;i++) {
02376 hists->m_tof_match_tray->Fill(i+1, nCellvsTray[i]);
02377 }
02378 for(i=0;i<32;i++) {
02379 hists->m_tof_match_module->Fill(i+1, nCellvsModule[0][i]);
02380 hists->m_tof_match_module->Fill(-(i+1), nCellvsModule[1][i]);
02381 }
02382
02383
02384 double TSumEast = 0.;
02385 double TSumWest = 0.;
02386 int nEast = 0;
02387 int nWest = 0;
02388 for(i=0;i<nTofCell;i++) {
02389 StTofCell *aCell = dynamic_cast<StTofCell*>(tofCell[i]);
02390 if(!aCell) continue;
02391 int trayId = aCell->trayIndex();
02392 int tubeId = aCell->cellIndex();
02393 if(trayId==mEastVpdTrayId) {
02394 TSumEast += aCell->leadingEdgeTime() - mEastVpdCorr[tubeId-1];
02395 nEast++;
02396 } else if(trayId==mWestVpdTrayId) {
02397 TSumWest += aCell->leadingEdgeTime() - mWestVpdCorr[tubeId-1];
02398 nWest++;
02399 }
02400 }
02401 double vz_vpd = -999.;
02402 if(nEast&&nWest) vz_vpd = (TSumEast/nEast - TSumWest/nWest)/2./29.979;
02403
02404 hists->m_tof_vtx_z->Fill(vz_tpc, vz_vpd);
02405 }
02406
02407 Int_t StEventQAMaker::PCThits(StTrackDetectorInfo* detInfo) {
02408 Int_t PCT = 0;
02409 if (hitsAvail) {
02410 StPtrVecHit tpc_hits = detInfo->hits(kTpcId);
02411 if (tpc_hits.size()) {
02412 for (UInt_t k=0;k<tpc_hits.size();k++) {
02413 StTpcHit* hit = (StTpcHit*) (tpc_hits[k]);
02414 if ((hit->position().z() > 1 && hit->sector() > 12) ||
02415 (hit->position().z() <-1 && hit->sector() < 13)) PCT++;
02416 }
02417 } else {
02418 LOG_WARN << "Tpc hits are not available - cannot check for PCTs" << endm;
02419 hitsAvail = kFALSE;
02420 }
02421 }
02422 return PCT;
02423 }
02424
02425
02426
02427
02428
02429
02430
02431
02432
02433
02434
02435
02436
02437
02438
02439
02440
02441
02442
02443
02444
02445
02446
02447
02448
02449
02450
02451
02452
02453
02454
02455
02456
02457
02458
02459
02460
02461
02462
02463
02464
02465
02466
02467
02468
02469
02470
02471
02472
02473
02474
02475
02476
02477
02478
02479
02480
02481
02482
02483
02484
02485
02486
02487
02488
02489
02490
02491
02492
02493
02494
02495
02496
02497
02498
02499
02500
02501
02502
02503
02504
02505
02506
02507
02508
02509
02510
02511
02512
02513
02514
02515
02516
02517
02518
02519
02520
02521
02522
02523
02524
02525
02526
02527
02528
02529
02530
02531
02532
02533
02534
02535
02536
02537
02538
02539
02540
02541
02542
02543
02544
02545
02546
02547
02548
02549
02550
02551
02552
02553
02554
02555
02556
02557
02558
02559
02560
02561
02562
02563
02564
02565
02566
02567
02568
02569
02570
02571
02572
02573
02574
02575
02576
02577
02578
02579
02580
02581
02582
02583
02584
02585
02586
02587
02588
02589
02590
02591
02592
02593
02594
02595
02596
02597
02598
02599
02600
02601
02602
02603
02604
02605
02606
02607
02608
02609
02610
02611
02612
02613
02614
02615
02616
02617
02618
02619
02620
02621
02622
02623
02624
02625
02626
02627
02628
02629
02630
02631
02632
02633
02634
02635
02636
02637
02638
02639
02640
02641
02642
02643
02644
02645
02646
02647
02648
02649
02650
02651
02652
02653
02654
02655
02656
02657
02658
02659
02660
02661
02662
02663
02664
02665
02666
02667
02668
02669
02670
02671
02672
02673
02674
02675
02676
02677
02678
02679
02680
02681
02682
02683
02684
02685
02686
02687
02688
02689
02690
02691
02692
02693
02694
02695
02696
02697
02698
02699
02700
02701
02702
02703
02704
02705
02706
02707
02708
02709
02710
02711
02712
02713
02714
02715
02716
02717
02718
02719
02720
02721
02722
02723
02724
02725
02726
02727
02728
02729
02730
02731
02732
02733
02734
02735
02736
02737
02738
02739
02740
02741
02742
02743
02744
02745
02746
02747
02748
02749
02750
02751
02752
02753
02754
02755
02756
02757
02758
02759
02760
02761
02762
02763